recognition: глобальный переключатель языка вывода [general].language
- новое поле [general].language (ru|en, дефолт en) — единый источник языка локализованного title детектора и локали запросов к метабазам; original_title всегда на языке оригинала - локаль TMDB (поиск + credits) выводится из него, [metadata.tmdb].language убран - промпт LLM явно задаёт язык title с fallback на оригинал
This commit is contained in:
+36
@@ -0,0 +1,36 @@
|
||||
## MODIFIED Requirements
|
||||
|
||||
### Requirement: Локаль запроса к TMDB
|
||||
|
||||
Локаль запросов к TMDB SHALL выводиться из глобальной настройки `language`
|
||||
(`ru`|`en`, дефолт `en`): `ru` → `ru-RU`, `en` → `en-US`. Отдельной настройки
|
||||
локали у TMDB быть SHALL NOT — глобальный `language` единственный источник.
|
||||
|
||||
Эту локаль система SHALL передавать параметром `language` как в запрос поиска,
|
||||
так и в запрос credits (режиссёр). На стороне поиска локаль влияет ТОЛЬКО на
|
||||
локализованное поле `Title`/`Name`; поле `original_title`/`original_name`
|
||||
остаётся на языке оригинала, поэтому оригинальная сторона сравнения не
|
||||
затрагивается. На стороне credits передача локали — best-effort: имена людей
|
||||
провайдер локализует не всегда, при отсутствии перевода имя остаётся на языке
|
||||
оригинала, и это не проваливает выборку режиссёра.
|
||||
|
||||
#### Scenario: Локаль по умолчанию — английская
|
||||
|
||||
- **GIVEN** TMDB включён, глобальный `language` не задан в конфиге
|
||||
- **WHEN** выполняется поиск фильма
|
||||
- **THEN** запрос содержит `language=en-US`
|
||||
- **AND** в кандидате `Title` приходит на английском, а `OriginalTitle` — на языке оригинала
|
||||
|
||||
#### Scenario: language=ru даёт русскую локаль
|
||||
|
||||
- **GIVEN** TMDB включён, глобальный `language` = `ru`
|
||||
- **WHEN** выполняется поиск фильма с русской локализацией
|
||||
- **THEN** запрос содержит `language=ru-RU`
|
||||
- **AND** в кандидате `Title` приходит на русском, а `OriginalTitle` — на языке оригинала
|
||||
|
||||
#### Scenario: Локаль передаётся и в запрос режиссёра
|
||||
|
||||
- **GIVEN** подтверждённый матч TMDB и глобальный `language` = `ru`
|
||||
- **WHEN** выполняется запрос credits за режиссёром
|
||||
- **THEN** запрос содержит `language=ru-RU`
|
||||
- **AND** при отсутствии локализованного имени режиссёр остаётся на языке оригинала, выборка не проваливается
|
||||
@@ -0,0 +1,54 @@
|
||||
## MODIFIED Requirements
|
||||
|
||||
### Requirement: Контракт LLM на оригинальное и локализованное названия
|
||||
|
||||
Промпт распознавания SHALL требовать от модели всегда заполнять и `title`, и
|
||||
`original_title`. Если отдельного оригинального названия нет или контент
|
||||
российского происхождения, модель SHALL дублировать `title` в
|
||||
`original_title`. При неуверенности в оригинальном названии модель SHALL
|
||||
дублировать `title`, а не выдумывать название (защита от ложного авто-матча).
|
||||
|
||||
Промпт SHALL явно задавать язык локализованного `title` из глобальной
|
||||
настройки `language` (`ru`|`en`, дефолт `en`): модель SHALL возвращать `title`
|
||||
на выбранном языке, а при отсутствии перевода — на языке оригинала (fallback).
|
||||
Языковая директива SHALL касаться ТОЛЬКО `title`; `original_title` остаётся на
|
||||
языке оригинала независимо от `language` (правила дублирования выше не
|
||||
меняются). `provider_hint` и структурные поля (`files[].src`, роли, нумерация)
|
||||
языковой директивой не затрагиваются.
|
||||
|
||||
Разбор ответа SHALL оставаться устойчивым к пустому `original_title`: пустое
|
||||
значение не отбраковывается и не вызывает correction-ретрай; сверка
|
||||
gracefully использует доступные названия.
|
||||
|
||||
#### Scenario: Российский фильм — дублирование
|
||||
|
||||
- **GIVEN** раздача российского фильма без отдельного оригинального названия
|
||||
- **WHEN** модель возвращает план
|
||||
- **THEN** `title` и `original_title` заполнены одинаковым каноническим названием
|
||||
|
||||
#### Scenario: Пустой original_title не ломает разбор
|
||||
|
||||
- **GIVEN** ответ модели с пустым `original_title`
|
||||
- **WHEN** план разбирается
|
||||
- **THEN** разбор успешен без correction-ретрая
|
||||
- **AND** сверка использует `title` (и `provider_hint`)
|
||||
|
||||
#### Scenario: title приходит на языке из настройки
|
||||
|
||||
- **GIVEN** `language` = `en` и иностранный фильм с известным английским названием
|
||||
- **WHEN** модель возвращает план
|
||||
- **THEN** промпт требовал `title` на английском
|
||||
- **AND** `original_title` остаётся на языке оригинала (директива его не касается)
|
||||
|
||||
#### Scenario: Промпт задаёт fallback на оригинал при отсутствии перевода
|
||||
|
||||
- **GIVEN** `language` = `en`
|
||||
- **WHEN** собирается промпт распознавания
|
||||
- **THEN** промпт требует при отсутствии перевода вернуть `title` на языке
|
||||
оригинала, а не выдумывать название
|
||||
|
||||
#### Scenario: Дефолтный язык — английский
|
||||
|
||||
- **GIVEN** `language` не задан в конфиге
|
||||
- **WHEN** собирается промпт распознавания
|
||||
- **THEN** промпт требует `title` на английском (дефолт `en`)
|
||||
Reference in New Issue
Block a user