initial commit (backend)
This commit is contained in:
+113
@@ -0,0 +1,113 @@
|
||||
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!")
|
||||
Reference in New Issue
Block a user