AlserFurma commited on
Commit
194447e
·
verified ·
1 Parent(s): 444e569

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -16
app.py CHANGED
@@ -49,30 +49,44 @@ except Exception as e:
49
  # Вспомогательные функции
50
  # =========================
51
  def generate_quiz(text: str):
52
- """Генерирует один вопрос и два варианта (correct, wrong) на русском языке."""
 
 
 
53
  prompt = (
54
- "Сгенерируй один учебный вопрос по этому тексту и дай 1 правильный и 1 неправильный вариант ответа. "
55
- "Формат вывода JSON: {\"question\": \"...\", \"correct\": \"...\", \"wrong\": \"...\"}. Текст: " + text
56
  )
57
  try:
58
  out = qa_model(prompt, max_length=256)[0]["generated_text"]
59
- # Пытаемся найти JSON в выводе модели
60
- json_start = out.find("{")
61
- json_end = out.rfind("}")
62
- if json_start == -1 or json_end == -1:
63
- raise ValueError(f"Модель вывела неподходящий формат:\n{out}")
64
- import json
65
- data = json.loads(out[json_start: json_end+1])
66
- question = data.get("question", "").strip()
67
- correct = data.get("correct", "").strip()
68
- wrong = data.get("wrong", "").strip()
69
- if not (question and correct and wrong):
70
- raise ValueError(f"Неполные данные:\n{out}")
 
 
 
 
 
 
 
 
 
 
71
  options = [correct, wrong]
72
  random.shuffle(options)
73
  return question, options, correct
74
  except Exception as e:
75
- raise ValueError(f"Ошибка генерации вопроса:\n{str(e)}")
 
76
 
77
 
78
  def synthesize_audio(text_ru: str):
 
49
  # Вспомогательные функции
50
  # =========================
51
  def generate_quiz(text: str):
52
+ """
53
+ Генерирует один вопрос и два варианта ответа (correct, wrong) на русском языке.
54
+ Парсит текст вместо строгого JSON.
55
+ """
56
  prompt = (
57
+ "Сгенерируй один учебный вопрос по этому тексту и два варианта ответа (правильный и неправильный). "
58
+ "Верни в формате: Вопрос: ... Ответ1: ... Ответ2: ... Текст: " + text
59
  )
60
  try:
61
  out = qa_model(prompt, max_length=256)[0]["generated_text"]
62
+ # Пробуем извлечь вопрос и два ответа через простые маркеры
63
+ import re
64
+ match = re.search(
65
+ r"Вопрос\s*[:\-]\s*(.*?)\s*Ответ1\s*[:\-]\s*(.*?)\s*Ответ2\s*[:\-]\s*(.*)", out, re.DOTALL | re.IGNORECASE
66
+ )
67
+ if not match:
68
+ # fallback: разделяем по строкам
69
+ lines = [l.strip() for l in out.splitlines() if l.strip()]
70
+ if len(lines) >= 3:
71
+ question, correct, wrong = lines[:3]
72
+ else:
73
+ # Если всё равно не получилось — берём первые 3 фразы
74
+ parts = out.split(".")
75
+ question = parts[0] if len(parts) > 0 else "Вопрос"
76
+ correct = parts[1] if len(parts) > 1 else "Вариант 1"
77
+ wrong = parts[2] if len(parts) > 2 else "Вариант 2"
78
+ else:
79
+ question, correct, wrong = match.groups()
80
+
81
+ question = question.strip()
82
+ correct = correct.strip()
83
+ wrong = wrong.strip()
84
  options = [correct, wrong]
85
  random.shuffle(options)
86
  return question, options, correct
87
  except Exception as e:
88
+ raise ValueError(f"Ошибка генерации вопроса:\n{str(e)}\nМодель вернула: {out}")
89
+
90
 
91
 
92
  def synthesize_audio(text_ru: str):