fix: передача user_id во все вызовы AI сервиса
Исправлено: при выполнении задач использовалась глобальная модель вместо привязанной к пользователю. Обновлены все handlers и services для передачи user_id в AI методы. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -88,6 +88,7 @@ async def process_text(message: Message, state: FSMContext):
|
|||||||
max_words=15,
|
max_words=15,
|
||||||
learning_lang=user.learning_language,
|
learning_lang=user.learning_language,
|
||||||
translation_lang=get_user_translation_lang(user),
|
translation_lang=get_user_translation_lang(user),
|
||||||
|
user_id=user.id
|
||||||
)
|
)
|
||||||
|
|
||||||
await processing_msg.delete()
|
await processing_msg.delete()
|
||||||
@@ -381,7 +382,8 @@ async def handle_file_import(message: Message, state: FSMContext, bot: Bot):
|
|||||||
translations = await ai_service.translate_words_batch(
|
translations = await ai_service.translate_words_batch(
|
||||||
words=words_to_translate,
|
words=words_to_translate,
|
||||||
source_lang=user.learning_language,
|
source_lang=user.learning_language,
|
||||||
translation_lang=get_user_translation_lang(user)
|
translation_lang=get_user_translation_lang(user),
|
||||||
|
user_id=user.id
|
||||||
)
|
)
|
||||||
|
|
||||||
await processing_msg.delete()
|
await processing_msg.delete()
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ async def begin_test(callback: CallbackQuery, state: FSMContext):
|
|||||||
loading_msg = await callback.message.answer(t(lang, 'level_test_extra.generating'))
|
loading_msg = await callback.message.answer(t(lang, 'level_test_extra.generating'))
|
||||||
|
|
||||||
# Генерируем тест через AI с учётом языка изучения
|
# Генерируем тест через AI с учётом языка изучения
|
||||||
questions = await ai_service.generate_level_test(learning_lang)
|
questions = await ai_service.generate_level_test(learning_lang, user_id=user.id)
|
||||||
|
|
||||||
await loading_msg.delete()
|
await loading_msg.delete()
|
||||||
|
|
||||||
|
|||||||
@@ -141,7 +141,8 @@ async def handle_custom_scenario(message: Message, state: FSMContext):
|
|||||||
custom_scenario, # Передаём описание сценария напрямую
|
custom_scenario, # Передаём описание сценария напрямую
|
||||||
level,
|
level,
|
||||||
learning_lang=learn_lang,
|
learning_lang=learn_lang,
|
||||||
translation_lang=ui_lang
|
translation_lang=ui_lang,
|
||||||
|
user_id=user.id if user else None
|
||||||
)
|
)
|
||||||
|
|
||||||
await thinking_msg.delete()
|
await thinking_msg.delete()
|
||||||
@@ -227,7 +228,8 @@ async def start_scenario(callback: CallbackQuery, state: FSMContext):
|
|||||||
scenario,
|
scenario,
|
||||||
level,
|
level,
|
||||||
learning_lang=learn_lang,
|
learning_lang=learn_lang,
|
||||||
translation_lang=ui_lang
|
translation_lang=ui_lang,
|
||||||
|
user_id=user.id if user else None
|
||||||
)
|
)
|
||||||
|
|
||||||
await thinking_msg.delete()
|
await thinking_msg.delete()
|
||||||
@@ -441,7 +443,8 @@ async def handle_conversation(message: Message, state: FSMContext):
|
|||||||
scenario=scenario,
|
scenario=scenario,
|
||||||
level=level,
|
level=level,
|
||||||
learning_lang=learn_lang2,
|
learning_lang=learn_lang2,
|
||||||
translation_lang=ui_lang2
|
translation_lang=ui_lang2,
|
||||||
|
user_id=user2.id if user2 else None
|
||||||
)
|
)
|
||||||
|
|
||||||
await thinking_msg.delete()
|
await thinking_msg.delete()
|
||||||
|
|||||||
@@ -441,6 +441,7 @@ async def pick_theme_from_menu(callback: CallbackQuery, state: FSMContext):
|
|||||||
count=10,
|
count=10,
|
||||||
learning_lang=user.learning_language,
|
learning_lang=user.learning_language,
|
||||||
translation_lang=get_user_translation_lang(user),
|
translation_lang=get_user_translation_lang(user),
|
||||||
|
user_id=user.id
|
||||||
)
|
)
|
||||||
await generating.delete()
|
await generating.delete()
|
||||||
|
|
||||||
|
|||||||
@@ -172,6 +172,7 @@ async def generate_new_words_tasks(callback: CallbackQuery, state: FSMContext, u
|
|||||||
learning_lang=user.learning_language,
|
learning_lang=user.learning_language,
|
||||||
translation_lang=translation_lang,
|
translation_lang=translation_lang,
|
||||||
exclude_words=exclude_words if exclude_words else None,
|
exclude_words=exclude_words if exclude_words else None,
|
||||||
|
user_id=user.id
|
||||||
)
|
)
|
||||||
|
|
||||||
if not words:
|
if not words:
|
||||||
@@ -182,7 +183,7 @@ async def generate_new_words_tasks(callback: CallbackQuery, state: FSMContext, u
|
|||||||
# Преобразуем слова в задания нужного типа
|
# Преобразуем слова в задания нужного типа
|
||||||
tasks = await create_tasks_from_words(
|
tasks = await create_tasks_from_words(
|
||||||
words, task_type, lang, user.learning_language, translation_lang,
|
words, task_type, lang, user.learning_language, translation_lang,
|
||||||
level=level
|
level=level, user_id=user.id
|
||||||
)
|
)
|
||||||
|
|
||||||
await state.update_data(
|
await state.update_data(
|
||||||
@@ -205,7 +206,8 @@ async def create_tasks_from_words(
|
|||||||
lang: str,
|
lang: str,
|
||||||
learning_lang: str,
|
learning_lang: str,
|
||||||
translation_lang: str,
|
translation_lang: str,
|
||||||
level: str = None
|
level: str = None,
|
||||||
|
user_id: int = None
|
||||||
) -> list:
|
) -> list:
|
||||||
"""Создать задания из списка слов в зависимости от типа (оптимизировано - 1 запрос к AI)"""
|
"""Создать задания из списка слов в зависимости от типа (оптимизировано - 1 запрос к AI)"""
|
||||||
import random
|
import random
|
||||||
@@ -240,7 +242,8 @@ async def create_tasks_from_words(
|
|||||||
ai_results = await ai_service.generate_task_sentences_batch(
|
ai_results = await ai_service.generate_task_sentences_batch(
|
||||||
ai_tasks,
|
ai_tasks,
|
||||||
learning_lang=learning_lang,
|
learning_lang=learning_lang,
|
||||||
translation_lang=translation_lang
|
translation_lang=translation_lang,
|
||||||
|
user_id=user_id
|
||||||
)
|
)
|
||||||
|
|
||||||
# Создаём маппинг: индекс в word_tasks -> результат AI
|
# Создаём маппинг: индекс в word_tasks -> результат AI
|
||||||
@@ -401,7 +404,8 @@ async def process_answer(message: Message, state: FSMContext):
|
|||||||
check_result = await ai_service.check_answer(
|
check_result = await ai_service.check_answer(
|
||||||
question=task['question'],
|
question=task['question'],
|
||||||
correct_answer=task['correct_answer'],
|
correct_answer=task['correct_answer'],
|
||||||
user_answer=user_answer
|
user_answer=user_answer,
|
||||||
|
user_id=user.id if user else None
|
||||||
)
|
)
|
||||||
|
|
||||||
await checking_msg.delete()
|
await checking_msg.delete()
|
||||||
|
|||||||
@@ -75,7 +75,8 @@ async def process_word_addition(message: Message, state: FSMContext, word: str):
|
|||||||
source_lang = user.learning_language if user else 'en'
|
source_lang = user.learning_language if user else 'en'
|
||||||
translation_lang = get_user_translation_lang(user)
|
translation_lang = get_user_translation_lang(user)
|
||||||
word_data = await ai_service.translate_word_with_contexts(
|
word_data = await ai_service.translate_word_with_contexts(
|
||||||
word, source_lang=source_lang, translation_lang=translation_lang, max_translations=3
|
word, source_lang=source_lang, translation_lang=translation_lang, max_translations=3,
|
||||||
|
user_id=user.id if user else None
|
||||||
)
|
)
|
||||||
|
|
||||||
# Удаляем сообщение о загрузке
|
# Удаляем сообщение о загрузке
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ async def generate_words_for_theme(message: Message, state: FSMContext, theme: s
|
|||||||
count=10,
|
count=10,
|
||||||
learning_lang=user.learning_language,
|
learning_lang=user.learning_language,
|
||||||
translation_lang=get_user_translation_lang(user),
|
translation_lang=get_user_translation_lang(user),
|
||||||
|
user_id=user.id
|
||||||
)
|
)
|
||||||
|
|
||||||
await generating_msg.delete()
|
await generating_msg.delete()
|
||||||
|
|||||||
@@ -205,7 +205,8 @@ class TaskService:
|
|||||||
sentence_data = await ai_service.generate_fill_in_sentence(
|
sentence_data = await ai_service.generate_fill_in_sentence(
|
||||||
word.word_original,
|
word.word_original,
|
||||||
learning_lang=learning_lang,
|
learning_lang=learning_lang,
|
||||||
translation_lang=translation_lang
|
translation_lang=translation_lang,
|
||||||
|
user_id=user_id
|
||||||
)
|
)
|
||||||
|
|
||||||
# Локализация заголовка
|
# Локализация заголовка
|
||||||
@@ -321,7 +322,8 @@ class TaskService:
|
|||||||
ai_results = await ai_service.generate_task_sentences_batch(
|
ai_results = await ai_service.generate_task_sentences_batch(
|
||||||
ai_tasks,
|
ai_tasks,
|
||||||
learning_lang=learning_lang,
|
learning_lang=learning_lang,
|
||||||
translation_lang=translation_lang
|
translation_lang=translation_lang,
|
||||||
|
user_id=user_id
|
||||||
)
|
)
|
||||||
|
|
||||||
# Маппинг результатов
|
# Маппинг результатов
|
||||||
|
|||||||
3
ИДЕИ.txt
Normal file
3
ИДЕИ.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Сделать задачки с помощью голосовых, человек должен написать что услышал, человек должен записать голосовой слова
|
||||||
|
Сделать задачки с картинками, человек должен написать что изоображено на картинке
|
||||||
|
Сделать задания по темам тип времён или неправильных глаголов на английском
|
||||||
Reference in New Issue
Block a user