Ingest: контекст распознавания из полей magnet-ссылки
Синтезируем контекст из полей самой magnet-ссылки (dn, xl, tr/xs, kt) без сети и дополняем им текст от транспорта: пользовательский текст первым, при пустом — синтез единственный. Обогащённый контекст идёт только в download.Context (его читают recognition и веб-UI); вход namer и отображаемое имя не меняются — строки-факты (Размер:/Трекер:) в display_name не текут. - magnet.Info: поля ExactLength/Sources/Keywords + Info.Context() (синтез, отсев dn-заглушек *-topic-<id>, домен трекера, человекочитаемый размер) - Parse устойчив к ссылке в процент-кодировке (разовый QueryUnescape) - ingest: mergeContext → download.Context, namer на сыром req.Context - Влита дельта capability ingest в openspec/specs, change заархивирован Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
## Why
|
||||
|
||||
Приём по «голому» magnet (без сопроводительного текста бота) уже проходит, но
|
||||
контекст распознавания при этом пуст: `download.Context` уходит в recognition
|
||||
почти пустым, и LLM-матч работает почти вслепую до докачки метаданных
|
||||
qBittorrent. При этом сама magnet-ссылка несёт полезные поля (имя релиза `dn`,
|
||||
размер `xl`, трекеры `tr`/источники `xs`), которые сейчас в контекст не
|
||||
попадают: парсим лишь `xt`, `dn`, `tr`, причём `dn` идёт только подсказкой в
|
||||
namer и в `download.Context` (а значит и в recognition) не сохраняется. Выжав
|
||||
эти поля в контекст распознавания, мы даём recognition реальный сигнал даже
|
||||
когда пользователь прислал один magnet.
|
||||
|
||||
## What Changes
|
||||
|
||||
- Парсер `internal/magnet` извлекает дополнительные поля ссылки: `xl` (размер
|
||||
в байтах), `xs` (exact source), `kt` (keywords). `dn` и `tr` уже парсятся.
|
||||
- Ingest **синтезирует текст контекста из полей magnet** и **дополняет** им
|
||||
контекст, пришедший из транспорта: факты из полей добавляются к
|
||||
пользовательскому тексту (пользовательский — первым), а при пустом тексте
|
||||
становятся единственным контекстом. Синтез — из самой ссылки, без сетевых
|
||||
запросов.
|
||||
- В синтез входят: имя релиза (`dn`, если это содержательное имя, а не
|
||||
заглушка-идентификатор вида `*-topic-<id>`), размер (человекочитаемо из
|
||||
`xl`), происхождение по домену трекера/источника (`tr`/`xs`) как слабый
|
||||
сигнал языка/типа, ключевые слова (`kt`).
|
||||
- Обогащённый контекст сохраняется в `download.Context` — его читают
|
||||
**recognition** (LLM-промпт) и **веб-UI** (страница загрузки). **Вывод
|
||||
отображаемого имени (namer) не меняется**: он по-прежнему получает
|
||||
пользовательский текст и `dn`-подсказку, а помеченные строки-факты
|
||||
(`Размер:`, `Трекер:`) в имя не попадают.
|
||||
- Явно фиксируем поддержку приёма **только по magnet** (пустой текст) как
|
||||
штатный сценарий во всех транспортах.
|
||||
|
||||
Вне объёма (сознательно): дообогащение со страницы трекера
|
||||
(`*-topic-<id>` → HTTP-запрос) — отдельная будущая задача; контекст берём
|
||||
только из полей ссылки. Поведение namer/отображаемого имени не меняем.
|
||||
|
||||
## Capabilities
|
||||
|
||||
### New Capabilities
|
||||
|
||||
_Нет._ Изменение укладывается в существующую capability `ingest`.
|
||||
|
||||
### Modified Capabilities
|
||||
|
||||
- `ingest`: добавляется требование «синтез контекста распознавания из полей
|
||||
magnet и дополнение им контекста транспорта» (обогащённый контекст → только
|
||||
`download.Context`; отображаемое имя не затрагивается) и явно фиксируется
|
||||
приём при пустом тексте. Существующие требования по выводу отображаемого
|
||||
имени остаются **без изменений** (namer получает тот же вход).
|
||||
|
||||
## Impact
|
||||
|
||||
- Код: `internal/magnet` (новые поля `Info` + синтез контекста),
|
||||
`internal/ingest` (слияние `req.Context` + синтез в `download.Context` до
|
||||
`CreateDownload`). `internal/naming` **не затрагивается** — вход namer тот
|
||||
же (`req.Context`, `dn`-hint).
|
||||
- Данные: `download.Context` начинает содержать синтезированный текст —
|
||||
влияет на вход recognition и на отображение контекста в веб-UI; схема БД не
|
||||
меняется.
|
||||
- Транспорты (`httpapi`, `tgbot`): поведение при пустом контексте становится
|
||||
штатным; изменений API не требуется.
|
||||
- Внешние системы: без новых зависимостей и сетевых вызовов.
|
||||
Reference in New Issue
Block a user