Функция: реализованы консольный логгер и презентер для обработки аудиокниг

- Добавлен ConsoleLogger для подробного логирования этапов обработки аудиокниг в консоли.

- Введен ConsolePresenter для форматированного вывода результатов сканирования в консоль.

- Создан ProcessAudioBooksUseCase для обработки полного конвейера обработки аудиокниг, включая сканирование папок, извлечение метаданных, поиск торрентов и запись результатов.

- Реализована проверка LLM для улучшения метаданных.

- Добавлена ​​обработка ошибок и логирование на всех этапах обработки.
This commit is contained in:
Dmitriy Fofanov
2026-02-20 00:35:43 +03:00
parent 7d119927a1
commit 402ce7f4f1
26 changed files with 4323 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
dir:
in: "./audiobook"
out: "./result"
torrapi:
url: "http://localhost:9200"
openrouter:
api_key: "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" # API ключ для OpenRouter (получить на https://openrouter.ai/keys)
base_url: "https://openrouter.ai/api/v1" # базовый URL API
timeout: 120s # таймаут запросов к API
model: "openai/gpt-4o-mini" # модель по умолчанию (быстрая non-reasoning)
max_retries: 3 # количество повторов при timeout/429
retry_backoff: 1s # стартовая задержка между повторами
retry_backoff_max: 8s # максимальная задержка backoff
prompt: |
Ты — эксперт по метаданным русскоязычных аудиокниг. Твоя задача — проверить и исправить метаданные.
ПРАВИЛА ДЛЯ АВТОРА:
1. Автор ВСЕГДА должен быть в формате: "Фамилия Имя" (без отчества)
2. Если указано "Имя Фамилия" — переставь в правильный порядок
3. Если есть отчество (три слова) — убери его, оставь только "Фамилия Имя"
4. Если несколько авторов — обработай каждого по тем же правилам, раздели запятыми
ПРАВИЛА ДЛЯ НАЗВАНИЯ КНИГИ (title):
1. Убери номера серий, книг типа: "Книга 1", "01", "#1", "Том 2"
2. Убери название серии, если оно дублируется
3. Убери служебные слова: "Аудиокнига", "MP3", "читает"
4. Убери имя автора, если оно попало в название
5. Убери год издания из названия
6. Оставь только чистое название произведения
ФОРМАТ ОТВЕТА (строго JSON):
{
"author": "Исправленная Фамилия Имя",
"title": "Исправленное название без лишнего",
"author_fixed": true/false,
"title_fixed": true/false,
"changes": "краткое описание сделанных изменений"
}
Если исправления не требуются, верни исходные значения с флагами false.