Files
filwordspl-backend/fix_review.py
T
2026-09-20 11:45:58 +00:00

114 lines
5.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import re
with open('routers/review.py', 'r') as f:
content = f.read()
# Полный SKILL_TAG_DESCRIPTION (как в learning.py)
full_skill_tags = '''# Понятные названия навыков
SKILL_TAG_DESCRIPTION = """
Понятные названия навыков (используй ИХ в ответе, а не технические ID):
- family_vocabulary → "слова по теме «Семья»"
- family_possessive → "мой/моя (mój/moja)"
- family_accusative → "винительный падеж (mam brata, mam siostrę)"
- family_questions → "вопросы о семье (Masz brata?)"
- family_description → "рассказ о семье"
- family_babcia_dziadek → "бабушка и дедушка"
- family_brat_siostra → "брат и сестра"
- family_masz_mam → "у меня есть / у тебя есть"
- family_duza_mala → "большая/маленькая семья"
- family_mama_tata → "мама и папа"
- family_maz_zona → "муж и жена"
- family_dzieci → "дети"
- family_wujek_ciocia → "дядя и тётя"
- family_kto_to_jest → "вопрос «Кто это?»"
- asking_name → "вопрос «Как тебя зовут?»"
- answering_name → "ответ на вопрос об имени"
- formal_address_pan_pani → "вежливое обращение Pan/Pani"
- greeting_formal → "формальные приветствия"
- greeting_informal → "неформальные приветствия"
- asking_origin → "вопрос «Откуда ты?»"
- answering_origin → "ответ о происхождении"
- asking_residence → "вопрос «Где ты живёшь?»"
- answering_residence → "ответ о месте жительства"
- self_description → "рассказ о себе"
- self_intro → "представление себя"
- how_are_you → "вопрос «Как дела?»"
- responding_how_are_you → "ответ на «Как дела?»"
- farewell_formal → "формальные прощания"
- farewell_informal → "неформальные прощания"
- mieszkac_conjugation → "спряжение глагола mieszkać"
- skad_vs_gdzie → "разница между Skąd и Gdzie"
- country_vocabulary → "названия стран"
- nationality_forms → "национальности"
- city_vocabulary → "названия городов"
- food_vocabulary → "слова по теме «Еда»"
- food_fruits_vegetables → "фрукты и овощи"
- food_drinks → "напитки"
- food_meals → "приёмы пищи"
- food_lubie → "глагол lubić (любить)"
- home_vocabulary → "слова по теме «Дом»"
- home_furniture → "мебель"
- home_location → "предлоги места (w, na)"
- home_ownership → "mam dom, mam mieszkanie"
- home_description → "описание дома/квартиры"
НИКОГДА не пиши технические ID навыков в ответе. Всегда заменяй их на понятные названия из списка выше.
"""'''
# Заменяем короткий SKILL_TAG_DESCRIPTION на полный
content = re.sub(
r'# Понятные названия навыков\nSKILL_TAG_DESCRIPTION = """.*?"""',
full_skill_tags,
content,
flags=re.DOTALL
)
# Добавляем attempts_count >= 2 в SQL
content = content.replace(
''' WHERE user_id = $1
AND (
mastery_score < 75
OR retention_status IN ('needs_review', 'overdue')
OR repeated_error_count > 0
)''',
''' WHERE user_id = $1
AND attempts_count >= 2
AND (
mastery_score < 75
OR retention_status IN ('needs_review', 'overdue')
OR repeated_error_count > 0
)'''
)
# Добавляем regex для удаления технических ID
content = content.replace(
''' data = response.json()
review_text = data["choices"][0]["message"]["content"].strip()
review_text = review_text.replace("**", "").replace("*", "").replace("#", "")''',
''' data = response.json()
review_text = data["choices"][0]["message"]["content"].strip()
review_text = review_text.replace("**", "").replace("*", "").replace("#", "")
# Убираем технические ID в скобках
import re
review_text = re.sub(r'\\s*\\([a-z_]+_[a-z_]+\\), '', review_text)'''
)
# Добавляем правила в промпт
content = content.replace(
'''5. Каждый мини-урок: правило + 2 примера + 1 задание
6. Не пиши технические ID навыков — используй понятные названия
7. Будь дружелюбным и мотивирующим"""''',
'''5. Каждый мини-урок: правило + 2 примера + 1 задание
6. Не пиши технические ID навыков — используй понятные названия
7. Будь дружелюбным и мотивирующим
8. ВАЖНО: Никогда не давай готовый ответ на задание в том же сообщении. Задание должно оставаться открытым.
9. ВАЖНО: В списках слов-подсказок используй только польские слова, без смешения языков.
10. ВАЖНО: Если mastery >= 75 и навык включён из-за retention_status (needs_review/overdue) — формулируй как "быстрое освежение", а не "давай разберём с нуля"."""'''
)
with open('routers/review.py', 'w') as f:
f.write(content)
print("review.py fixed!")