4.0 KiB
4.0 KiB
1. qBittorrent: проброс имени
- 1.1 Добавить поле
Rename stringвqbt.AddRequest - 1.2 В
Client.Addписать form-fieldrenameпри непустомRename - 1.3 Тест: при заданном
Renameform-data содержитrename, при пустом — поля нет
2. Вывод имени: структура и рендер
- 2.1 Описать структуру извлечённого имени (type, title, original_title, year, director, season, is_russian)
- 2.2 Реализовать чистую функцию рендера структуры в короткий ярлык:
Title (Director, Year)с опциональными режиссёром и годом (скобка опускается, если обоих нет), для сериала — суффикс. Сезон N; очистка управляющих символов/переводов строк и обрезка по длине - 2.3 Тесты рендера: фильм с режиссёром+годом / только год / только режиссёр / без обоих, сериал с сезоном/без, обрезка длины, очистка
3. Вывод имени: LLM
- 3.1 Узкий промпт извлечения имени (RU-название для российского контента, иначе EN/оригинал) + описание JSON-схемы ответа
- 3.2 Парсинг и валидация ответа (валидный JSON, непустой
title); бюджет попыток —[llm].max_retries(переиспользуем существующий) - 3.3 Тесты на фикстурах (без сети): успешный разбор, выбор языка названия, исчерпание попыток
4. Вывод имени: алгоритмический фолбек
- 4.1 Реализовать фолбек без сети: первая содержательная строка контекста (без ссылок/команд/UI-мусора), отсечение тех. характеристик, очистка и обрезка
- 4.2 Вынести/переиспользовать логику чистки строк (сейчас в
tgbot.cleanContext), чтобы не дублировать - 4.3 Тесты фолбека: заголовок релиза, пустой/бесполезный контекст → ""
5. Интеграция в ingest
- 5.1 Ввести узкий интерфейс/функцию вывода имени (
DeriveName), реализованную поверх LLM + фолбек; зависимость опциональна (нет LLM → только фолбек) - 5.2 В
Ingest()синхронно выводить имя изreq.Context(подсказка —magnet.DisplayName) передqbt.Add, класть вAddRequest.Rename - 5.3 Graceful-деградация: ошибка/таймаут вывода имени логируется и не
прерывает приём (пустое имя → без
rename). Бюджет попыток и таймаут — общие[llm].max_retries/[llm].timeout, новых параметров не вводим - 5.4 Прокинуть зависимость (LLM-провайдер) в сборке сервиса
(
cmd/jellybit)
6. Проверка
- 6.1
task testиtask lintзелёные - 6.2 Ручная проверка на реальном qBittorrent: имя видно в списке;
подтвердить поведение
renameдля многофайловой раздачи - 6.3 Обновить
docs/specs(architecture/ingest) и отметить todo «Название из контекста» как реализованную при архивации change