diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 31b5c92..cfb6ff7 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -117,11 +117,12 @@ report/apply/digest --source → source.parse_playlist_url() → (user_id, 3. An alphabet heuristic on the title/artist (Cyrillic vs Latin, `unicodedata`). 4. Otherwise — `UNKNOWN` → a separate "Undetermined" playlist. -- **Lyric analysis (`lyrics.py`, `analyze.py`)**: only Russian-language tracks are analyzed. The - reason is signal validity, not cost — on a foreign-language track the meaning arrives through - the music and the vocal delivery, not through parsed words, so an LLM reading the literal text - would add a signal the listener never perceives. Text fetching and analysis are **two separate - commands** on purpose: the fetch is network-bound against the deprecated `track_supplement`, +- **Lyric analysis (`lyrics.py`, `analyze.py`)**: by default only Russian-language tracks are + analyzed — the prompt and the narrative fields (`summary`/`resonance`/`key_line`) are written + in Russian and were validated against a Russian-lyrics pilot run; quality on other languages is + unverified. `sort_ym lyrics --all-languages` lifts the filter and fetches/analyzes every track + with available lyrics regardless of detected language (`lyrics.ru_lyric_track_ids(..., + all_languages=True)`). Text fetching and analysis are **two separate commands** on purpose: the fetch is network-bound against the deprecated `track_supplement`, the analysis is a multi-hour local GPU job, and a prompt or model change must be re-runnable without touching Yandex again. `analyze` and `digest` construct no `Client` at all. diff --git a/ARCHITECTURE.ru.md b/ARCHITECTURE.ru.md index 69d910e..788f647 100644 --- a/ARCHITECTURE.ru.md +++ b/ARCHITECTURE.ru.md @@ -118,11 +118,12 @@ report/apply/digest --source → source.parse_playlist_url() → (user_id, 3. Эвристика по алфавиту названия/исполнителя (кириллица vs латиница, `unicodedata`). 4. Иначе — `UNKNOWN` → отдельный плейлист «Не определено». -- **Разбор текстов (`lyrics.py`, `analyze.py`)**: разбираются только русскоязычные треки. - Причина — валидность сигнала, не стоимость: на иноязычном треке смысл передаётся музыкой и - подачей вокала, а не разобранными словами, поэтому LLM, читающая буквальный текст, добавит - сигнал, который слушатель при прослушивании не считывает. Загрузка текста и анализ — это - **две отдельные команды** намеренно: загрузка привязана к сети и устаревшему `track_supplement`, +- **Разбор текстов (`lyrics.py`, `analyze.py`)**: по умолчанию разбираются только русскоязычные + треки — промпт и нарративные поля (`summary`/`resonance`/`key_line`) написаны на русском и + проверены на пилотном прогоне по русской лирике; качество на других языках не проверялось. + `sort_ym lyrics --all-languages` снимает фильтр и загружает/разбирает все треки с доступным + текстом независимо от определённого языка (`lyrics.ru_lyric_track_ids(..., + all_languages=True)`). Загрузка текста и анализ — это **две отдельные команды** намеренно: загрузка привязана к сети и устаревшему `track_supplement`, анализ — это многочасовая работа локального GPU, а смена prompt или модели должна быть переиспользуема без нового обращения к Яндексу. `analyze` и `digest` вообще не создают `Client`. diff --git a/README.md b/README.md index f95c7c4..e27da81 100644 --- a/README.md +++ b/README.md @@ -175,9 +175,10 @@ song is about and why it might resonate. .venv\Scripts\python -m sort_ym digest # out/lyrics_digest.md + an aggregate block in out/digest.md ``` -Only Russian-language tracks are analyzed. On a foreign-language track the meaning is carried by -the music and the vocal delivery rather than by parsed words, so a literal reading of the text -would add a signal the listener never actually perceives. +By default only Russian-language tracks are analyzed — the prompt and the narrative fields +(`summary`/`resonance`/`key_line`) are written in Russian and were validated on a Russian-lyrics +pilot run; quality on other languages is unverified. Pass `--all-languages` to `lyrics` to fetch +and analyze every track with available lyrics regardless of detected language. Requirements: Ollama running locally with the model named in `config.toml` under `[ollama]` (`ollama list` to check). No internet is used — `analyze` never talks to Yandex. diff --git a/README.ru.md b/README.ru.md index 1a77ffb..5445f93 100644 --- a/README.ru.md +++ b/README.ru.md @@ -176,9 +176,10 @@ $ python -m sort_ym digest .venv\Scripts\python -m sort_ym digest # out/lyrics_digest.md + агрегат в out/digest.md ``` -Разбираются только русскоязычные треки. На иноязычном треке смысл передаётся музыкой и подачей -вокала, а не разобранными словами, поэтому буквальное чтение текста добавило бы сигнал, которого -слушатель при прослушивании не считывает. +По умолчанию разбираются только русскоязычные треки — промпт и нарративные поля +(`summary`/`resonance`/`key_line`) написаны на русском и проверены на пилотном прогоне по +русской лирике; качество на других языках не проверялось. Флаг `--all-languages` у `lyrics` +снимает фильтр и загружает/разбирает все треки с доступным текстом независимо от языка. Что нужно: запущенная локально Ollama с моделью из `config.toml`, блок `[ollama]` (проверить — `ollama list`). Интернет не используется: `analyze` не обращается к Яндексу вообще.