114 lines
5.9 KiB
Python
114 lines
5.9 KiB
Python
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!")
|