AlserFurma commited on
Commit
3456931
·
verified ·
1 Parent(s): 6270461

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +33 -26
app.py CHANGED
@@ -52,46 +52,53 @@ except Exception as e:
52
  # =========================
53
 
54
  def generate_quiz(text: str):
55
- """Генерирует один вопрос и два варианта (correct, wrong) на русском языке."""
56
  prompt = (
57
- "Сгенерируй один учебный вопрос по этому тексту и дай 1 правильный и 1 неправильный вариант ответа. "
58
- "Формат вывода (разделять переносами строки): "
59
- "QUESTION: ...\nCORRECT: ...\nWRONG: ...\nTEXT: " + text
 
 
 
60
  )
 
61
  try:
62
  out = qa_model(prompt, max_length=200)[0]["generated_text"]
63
  except Exception as e:
64
  raise RuntimeError(f"Ошибка генерации вопроса: {e}")
65
 
66
- question = ""
67
- correct = ""
68
- wrong = ""
 
 
 
 
69
 
70
- # ИСПРАВЛЕНО: корректное split('\n')
71
- for line in out.split('\n'):
72
- if line.upper().startswith("QUESTION:"):
73
- question = line.split(':', 1)[1].strip()
74
- elif line.upper().startswith("CORRECT:"):
75
- correct = line.split(':', 1)[1].strip()
76
- elif line.upper().startswith("WRONG:"):
77
- wrong = line.split(':', 1)[1].strip()
78
 
 
79
  if not (question and correct and wrong):
80
- parts = out.split('CORRECT:')
81
- if len(parts) > 1:
82
- qpart = parts[0]
83
- question = qpart.replace('QUESTION:', '').strip()
84
- rest = parts[1]
85
- if 'WRONG:' in rest:
86
- correct, wrong = rest.split('WRONG:', 1)
87
- correct = correct.strip()
88
- wrong = wrong.strip()
89
-
90
  if not (question and correct and wrong):
91
- raise ValueError("Модель не смогла корректно сгенерировать вопрос/варианты")
 
 
92
 
 
93
  options = [correct, wrong]
94
  random.shuffle(options)
 
95
  return question, options, correct
96
 
97
 
 
52
  # =========================
53
 
54
  def generate_quiz(text: str):
 
55
  prompt = (
56
+ "Сгенерируй один учебный вопрос по этому тексту и дай 1 правильный и 1 неправильный вариант.\n"
57
+ "Строго используй такой формат (каждая часть с новой строки):\n"
58
+ "QUESTION: ...\n"
59
+ "CORRECT: ...\n"
60
+ "WRONG: ...\n"
61
+ f"TEXT: {text}"
62
  )
63
+
64
  try:
65
  out = qa_model(prompt, max_length=200)[0]["generated_text"]
66
  except Exception as e:
67
  raise RuntimeError(f"Ошибка генерации вопроса: {e}")
68
 
69
+ # Унифицируем текст
70
+ data = out.replace("\r", "")
71
+
72
+ # --- Пытаемся достать через регулярные выражения ---
73
+ q = re.search(r"QUESTION:\s*(.+)", data, re.IGNORECASE)
74
+ c = re.search(r"CORRECT:\s*(.+)", data, re.IGNORECASE)
75
+ w = re.search(r"WRONG:\s*(.+)", data, re.IGNORECASE)
76
 
77
+ question = q.group(1).strip() if q else ""
78
+ correct = c.group(1).strip() if c else ""
79
+ wrong = w.group(1).strip() if w else ""
 
 
 
 
 
80
 
81
+ # --- Если пусто — fallback парсер ---
82
  if not (question and correct and wrong):
83
+ lines = [ln.strip() for ln in data.split('\n') if ln.strip()]
84
+ for ln in lines:
85
+ if ln.lower().startswith("question"):
86
+ question = ln.split(":", 1)[1].strip()
87
+ elif ln.lower().startswith("correct"):
88
+ correct = ln.split(":", 1)[1].strip()
89
+ elif ln.lower().startswith("wrong"):
90
+ wrong = ln.split(":", 1)[1].strip()
91
+
92
+ # --- Если всё ещё пусто — ошибка ---
93
  if not (question and correct and wrong):
94
+ raise ValueError(
95
+ f"Модель вывела неподходящий формат:\n---\n{out}\n---"
96
+ )
97
 
98
+ # Случайно перемешать варианты
99
  options = [correct, wrong]
100
  random.shuffle(options)
101
+
102
  return question, options, correct
103
 
104