diff --git a/TODO.md b/TODO.md index f3acbe5..94394ae 100644 --- a/TODO.md +++ b/TODO.md @@ -510,18 +510,30 @@ 2. В интерфейсе [`app/static/js/modules/dictionary.js`](file:///home/ai-projects/services/study.qpid.pro/app/static/js/modules/dictionary.js) результат выводится в поле карточки без учёта обратного направления перевода (когда найденный английский эквивалент должен стать `term`, а введенное русское слово — `translation`). - **Варианты решения**: автоматически определять язык ввода по наличию кириллицы `[\u0400-\u04FF]`. При кириллице: переключать `langpair` MyMemory на `"ru|en"`, выполнять обратный поиск в `offline_dictionary` по `translation`, и корректно заполнять форму добавления карточки (найденное английское слово в `term`, русский запрос в `translation`). - **Статус**: зафиксировано, ожидает команды на исправление. +- [ ] **BUG-07: Ошибка загрузки этапа аудирования: `undefined is not an object (evaluating 'scenario.topic')`**: + - **Симптом**: при переходе к шагу аудирования в комплексном уроке возникает ошибка: `Ошибка загрузки этапа: undefined is not an object (evaluating 'scenario.topic')`, шаг невозможно пройти. + - **Диагностика**: в `app/static/js/modules/lesson.js` (строка 1658) после вызова `api.listening.getExercise()` клиент ожидает поле `data.scenario` (`const scenario = data.scenario;`), в то время как эндпоинт `app/routers/listening.py` (строка 47) возвращает объект упражнения напрямую (`safe_ex`). Из-за этого `scenario` равен `undefined`, и чтение `scenario.topic` выбрасывает исключение `TypeError`. + - **Варианты решения**: использовать `const scenario = data.scenario || data;` с опциональной цепочкой (`scenario?.topic`). + - **Статус**: зафиксировано, ожидает команды на исправление. +- [ ] **BUG-08: Бесконечный спиннер («Анализ ИИ длится бесконечно») на этапе дебрифинга урока**: + - **Симптом**: после прохождения всех этапов урока экран «🤖 Локальный ИИ Qwen 2.5 формирует ваш персональный разбор...» висит бесконечно долго без отображения результата. + - **Диагностика**: + 1. Холодный запуск Ollama для модели Qwen 2.5 3B (после разгрузки памяти) занимает ~18.5 секунд только на загрузку весов в RAM. Генерация 450 токенов JSON на CPU суммарно требует 45-60 секунд. + 2. В `app/ai.py` (строка 579) таймаут httpx к Ollama выставлен в 25 секунд (`timeout=25.0`), из-за чего запрос рвется, а во фронтенде в `api.lessons.submitDebrief` нет клиентского таймаута с аварийным выходом. + - **Варианты решения**: добавить жесткий клиентский таймаут (8-10 сек) на фронтенде с мгновенным отображением сверхбыстрого детерминированного отчета (`generate_deterministic_debrief`, работающего за 1 мс), либо переключить фоновый дебрифинг на модель `qwen2.5:1.5b`. + - **Статус**: зафиксировано, ожидает команды на исправление. --- -## ⏳ Coming Soon +## ⏳ Очередь новых функций (Feature Backlog) -- [ ] **🧘 Фокус-режим в читалке (Focus Mode / Zen Reader — 100% vh & 100% vw)**: +- [ ] **FEAT-01: 🧘 Фокус-режим в читалке (Focus Mode / Zen Reader — 100% vh & 100% vw)**: - **Концепция**: чистый дзен-режим чтения на весь экран без отвлекающих панелей с сохранением 100% интерактивного перевода. - **Интерфейс и верстка**: - Скрытие шапки сайта (`navbar`), тулбара читалки, мобильной панели вкладок (`bottom tab bar`) и рамок. - Текстовый контейнер расширяется на `100vw` и `100vh` (с учётом `env(safe-area-inset-*)`). - Сохраняются все пользовательские настройки типографики (`Aa`): размер шрифта, гарнитура (Sans/Serif/Mono), ширина колонки и темы оформления (Dark, Sepia, Light, OLED). - - **Интерактивный перевод (Zero Loss)**: + - **Интерфейс перевода (Zero Loss)**: - Клик / тап по любому слову по-прежнему открывает всплывающее окно перевода (десктопный попап или мобильный Bottom Sheet). - Доступны контекстный ИИ-перевод предложений, словарные статьи и быстрое добавление `+ В словарь`. - **Управление и HUD**: @@ -529,6 +541,18 @@ - Ненавязчивый полупрозрачный плавающий оверлей в углу с индикатором прогресса чтения и кнопкой выхода `✕`. - Выход по нажатию клавиши `Escape`, клику на `✕` или свайпу/тапу по верхнему краю экрана. - Поддержка нативного Fullscreen API (`document.documentElement.requestFullscreen()`) для браузеров на десктопе и Android. +- [ ] **FEAT-02: 📝 Подробные конспекты для тетради и шпаргалки с таблицами (Murphy Detailed Notes & Markdown Tables)**: + - **Полноценные Markdown-таблицы**: отображение наглядных сравнительных таблиц в теории грамматики и подсказках (спряжения глаголов, формы неправильных глаголов, маркеры времени, предлоги места/времени). + - **Глубокая структурированная теория без воды**: развернутые объяснения правил по методике Raymond Murphy с живыми примерами и контрастными парами (вместо сжатых 1-2 предложений), готовые для записи в рабочую тетрадь. +- [ ] **FEAT-03: 🤖 Интеграция с Google NotebookLM для генерации инфографики и карточек (Низкий приоритет)**: + - Использование возможностей Google NotebookLM или мультимодальных моделей для автоматической генерации наглядной инфографики и подробных обучающих карточек, «разжевывающих» грамматические нюансы и идиомы. +- [ ] **FEAT-04: 🎯 Адаптивный объем тренировки (доведение до автоматизма) и умные рекомендации**: + - Настраиваемый объем заданий в блоках урока: выбор между 5, 10, 15, 20 заданиями или режим «тренировка до 90% точности / безошибочной серии». + - Персональные рекомендации при низком балле (< 75-80%): алгоритм анализирует ошибки и автоматически предлагает, какие конкретно статьи в читалке изучить и какие юниты грамматики Мерфи повторить. +- [ ] **FEAT-05: ✍️ Режим активного составления предложений (Sentence Builder / Production Mode)**: + - Тренировка активного словарного запаса: студенту предлагается слово из личного словаря (например, *«установленный» / «installed»*), на которое нужно составить и записать предложение на английском. + - Грамматические модификаторы сложности: задание условий по времени и конструкции (например: *«составь предложение в Past Simple»*, *«используй Future Continuous»*, *«составь вопрос с предлогом»*). + - Проверка через локальную языковую модель с мгновенным разбором правильности, стиля и грамматических ошибок. - [ ] **🌐 Быстрый захват из браузера (Bookmarklet)**: - Создать JavaScript-букмарклет для добавления слова/фразы из любого окна браузера в личный словарь [`study.qpid.pro`](https://study.qpid.pro) (низший приоритет). - [ ] **Нативная автономная озвучка (HTML5 Web Speech API / `speechSynthesis`)**: