распознавание: большие раздачи размечаются целиком, файлы вне плана видны

- модель адресует файл номером строки нашего списка вместо копии пути: ответ
  на 180 файлов вместо ~15k токенов стоит ~2.5k, усечение сотней снято,
  max_files и max_tokens ушли в [recognition], correction-ретрай больше не
  переприсылает список
- негодный элемент ответа отбрасывается поимённой причиной, обрыв генерации и
  отказ по размеру запроса названы своими причинами, покрытие плана блокирует
  авто только при непокрытом видеофайле
- раскладка показывает все файлы раздачи со строками «не в плане» и полным
  порядком сортировки; снимок списка файлов лёг рядом с планом (миграция 0012)
This commit is contained in:
av
2026-09-02 08:54:58 +03:00
parent 01ac0430a9
commit fc9a3b4066
26 changed files with 1978 additions and 201 deletions
@@ -0,0 +1,12 @@
-- +goose Up
-- Снимок списка файлов раздачи на момент распознавания (JSON-массив
-- {path,size} в том же порядке, в каком список показан модели и в каком
-- резолвятся номера files[].i). Нужен раскладке: без него виден только план,
-- и файл, который модель молча пропустила, не показывается нигде. Ходить за
-- списком в qBittorrent на каждый рендер — лишний поход в чужой сервис.
-- NULL — запись создана до этой миграции: снимка нет, и UI обязан сказать об
-- этом прямо, а не выдавать план за полный перечень.
ALTER TABLE recognition ADD COLUMN source_files TEXT;
-- +goose Down
ALTER TABLE recognition DROP COLUMN source_files;
+9 -4
View File
@@ -27,7 +27,11 @@ type Recognition struct {
Reasons string `db:"reasons"` // JSON-массив строк
RawLLM sql.NullString `db:"raw_llm"`
Plan sql.NullString `db:"plan"` // JSON recognize.Plan
CreatedAt string `db:"created_at"`
// SourceFiles — снимок списка файлов раздачи на момент распознавания
// (JSON-массив {path,size} в порядке нумерации промпта). NULL — запись
// старше миграции 0012: снимка нет, полнота раскладки не гарантирована.
SourceFiles sql.NullString `db:"source_files"`
CreatedAt string `db:"created_at"`
}
// ReasonList разбирает JSON-поле reasons в срез строк.
@@ -71,12 +75,13 @@ func (s *Store) CreateRecognition(ctx context.Context, r *Recognition, reasons [
const q = `
INSERT INTO recognition
(id, download_id, attempt_no, is_current, media_type, title, original_title,
year, provider, provider_id, confidence, reasons, raw_llm, plan, created_at)
VALUES (?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
year, provider, provider_id, confidence, reasons, raw_llm, plan, source_files,
created_at)
VALUES (?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
if _, err := tx.ExecContext(ctx, q,
r.ID, r.DownloadID, nextAttempt, r.MediaType, r.Title, r.OriginalTitle,
r.Year, r.Provider, r.ProviderID, r.Confidence, string(reasonsJSON), r.RawLLM, r.Plan,
FormatTime(Now())); err != nil {
r.SourceFiles, FormatTime(Now())); err != nil {
return "", fmt.Errorf("insert recognition: %w", err)
}
if err := tx.Commit(); err != nil {