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!")