Spaces:
Sleeping
Sleeping
Nikolay Ponomarev
commited on
Commit
·
9a0dcc6
1
Parent(s):
bdae50a
Item Search
Browse files
app.py
CHANGED
|
@@ -11,7 +11,7 @@ from transformers import pipeline
|
|
| 11 |
DEFAULT_INTENT_MODEL = os.getenv("INTENT_MODEL", "joeddav/xlm-roberta-large-xnli")
|
| 12 |
|
| 13 |
# 2) Checklist generator
|
| 14 |
-
DEFAULT_GEN_MODEL = os.getenv("GEN_MODEL", "
|
| 15 |
|
| 16 |
# 3) QA over checklist
|
| 17 |
DEFAULT_QA_MODEL = os.getenv("QA_MODEL", "deepset/xlm-roberta-base-squad2")
|
|
@@ -47,7 +47,7 @@ intent_pipe, intent_model_used = safe_make_pipeline(
|
|
| 47 |
DEFAULT_INTENT_MODEL,
|
| 48 |
)
|
| 49 |
gen_pipe, gen_model_used = safe_make_pipeline(
|
| 50 |
-
"
|
| 51 |
DEFAULT_GEN_MODEL,
|
| 52 |
)
|
| 53 |
qa_pipe, qa_model_used = safe_make_pipeline(
|
|
@@ -99,27 +99,25 @@ def infer_intent(user_goal: str, labels: list[str]):
|
|
| 99 |
|
| 100 |
|
| 101 |
def build_checklist_prompt(user_goal: str, theme: str | None, style: str, constraints: str):
|
| 102 |
-
"""
|
| 103 |
-
|
| 104 |
-
"""
|
| 105 |
-
theme_part = f"Тема (если помогает): {theme}\n" if theme else ""
|
| 106 |
-
constraints_part = f"Ограничения/контекст: {constraints}\n" if constraints else ""
|
| 107 |
|
| 108 |
-
# Works for mt5/flan-t5 style models; they respond better to clear structure.
|
| 109 |
return (
|
| 110 |
"Ты — помощник, который делает практичные чек-листы.\n"
|
| 111 |
-
"
|
|
|
|
|
|
|
|
|
|
| 112 |
"Требования:\n"
|
| 113 |
-
"-
|
| 114 |
-
"-
|
| 115 |
-
"-
|
| 116 |
-
"
|
| 117 |
-
"
|
| 118 |
-
"
|
| 119 |
-
f"Стиль: {style}\n"
|
| 120 |
f"{theme_part}"
|
| 121 |
f"{constraints_part}"
|
| 122 |
-
f"
|
| 123 |
"Чек-лист:\n"
|
| 124 |
)
|
| 125 |
|
|
@@ -160,11 +158,22 @@ def generate_checklist(user_goal: str, category: str, style: str, constraints: s
|
|
| 160 |
out = gen_pipe(
|
| 161 |
prompt,
|
| 162 |
max_new_tokens=450,
|
| 163 |
-
do_sample=
|
| 164 |
-
|
|
|
|
|
|
|
|
|
|
| 165 |
)
|
| 166 |
text = (out[0].get("generated_text") or "").strip()
|
| 167 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 168 |
# Если модель вернула пусто/слишком коротко — повторим с более "толкающими" параметрами
|
| 169 |
if len(text) < 80:
|
| 170 |
short_prompt = (
|
|
|
|
| 11 |
DEFAULT_INTENT_MODEL = os.getenv("INTENT_MODEL", "joeddav/xlm-roberta-large-xnli")
|
| 12 |
|
| 13 |
# 2) Checklist generator
|
| 14 |
+
DEFAULT_GEN_MODEL = os.getenv("GEN_MODEL", "Qwen/Qwen2.5-0.5B-Instruct")
|
| 15 |
|
| 16 |
# 3) QA over checklist
|
| 17 |
DEFAULT_QA_MODEL = os.getenv("QA_MODEL", "deepset/xlm-roberta-base-squad2")
|
|
|
|
| 47 |
DEFAULT_INTENT_MODEL,
|
| 48 |
)
|
| 49 |
gen_pipe, gen_model_used = safe_make_pipeline(
|
| 50 |
+
"text-generation",
|
| 51 |
DEFAULT_GEN_MODEL,
|
| 52 |
)
|
| 53 |
qa_pipe, qa_model_used = safe_make_pipeline(
|
|
|
|
| 99 |
|
| 100 |
|
| 101 |
def build_checklist_prompt(user_goal: str, theme: str | None, style: str, constraints: str):
|
| 102 |
+
theme_part = f"Тема: {theme}\n" if theme else ""
|
| 103 |
+
constraints_part = f"Контекст: {constraints}\n" if constraints else ""
|
|
|
|
|
|
|
|
|
|
| 104 |
|
|
|
|
| 105 |
return (
|
| 106 |
"Ты — помощник, который делает практичные чек-листы.\n"
|
| 107 |
+
"Верни ТОЛЬКО чек-лист без вступлений.\n"
|
| 108 |
+
"Формат:\n"
|
| 109 |
+
"- [ ] пункт\n"
|
| 110 |
+
" - подпункт (если нужно)\n"
|
| 111 |
"Требования:\n"
|
| 112 |
+
"- 10–15 пунктов\n"
|
| 113 |
+
"- конкретно и измеримо\n"
|
| 114 |
+
"- в конце добавь разделы:\n"
|
| 115 |
+
"Проверка готовности: (3–5 вопросов)\n"
|
| 116 |
+
"Риски и как снизить: (3–6 пунктов)\n"
|
| 117 |
+
"Пиши по-русски.\n\n"
|
|
|
|
| 118 |
f"{theme_part}"
|
| 119 |
f"{constraints_part}"
|
| 120 |
+
f"Цель: {user_goal}\n\n"
|
| 121 |
"Чек-лист:\n"
|
| 122 |
)
|
| 123 |
|
|
|
|
| 158 |
out = gen_pipe(
|
| 159 |
prompt,
|
| 160 |
max_new_tokens=450,
|
| 161 |
+
do_sample=True,
|
| 162 |
+
temperature=0.7,
|
| 163 |
+
top_p=0.9,
|
| 164 |
+
repetition_penalty=1.05,
|
| 165 |
+
return_full_text=False, # критично, чтобы не возвращался промпт целиком
|
| 166 |
)
|
| 167 |
text = (out[0].get("generated_text") or "").strip()
|
| 168 |
|
| 169 |
+
text = re.sub(r"<extra_id_\d+>", "", text).strip()
|
| 170 |
+
|
| 171 |
+
# Если модель вдруг не вывела чекбоксы — принудительно форматируем строки
|
| 172 |
+
if "- [ ]" not in text:
|
| 173 |
+
lines = [ln.strip("-• ").strip() for ln in text.splitlines() if ln.strip()]
|
| 174 |
+
lines = [f"- [ ] {ln}" for ln in lines[:15]]
|
| 175 |
+
text = "\n".join(lines)
|
| 176 |
+
|
| 177 |
# Если модель вернула пусто/слишком коротко — повторим с более "толкающими" параметрами
|
| 178 |
if len(text) < 80:
|
| 179 |
short_prompt = (
|