Added reference resolver WIP (codex)

This commit is contained in:
2026-09-23 01:42:50 +03:00
parent 0da97ca225
commit 1e462b22a9
6 changed files with 564 additions and 11 deletions

View File

@@ -318,7 +318,22 @@ Telegram ботом, которому отправили видео).
6. **Разрешить ссылки на видео**
- После этого шага должен быть получен файл `events.json`, используя который
будет построена структура итогового документа.
- TODO, пока что это не реализовано
- Для каждого объекта из `unresolved.json` программа получает кадры через
`ffmpeg`. По умолчанию кадры берутся с интервалом в одну секунду, но не
более 9 кадров на одну ссылку.
- Кадры проверяются мультимодальной моделью от общего к частному: сначала
начало, середина и конец интервала, затем середины оставшихся промежутков.
После первого подходящего кадра поиск прекращается.
- Для `vis` выбранный кадр сохраняется в директории `images/`. Для `ocr` в
событии сохраняется распознанный текст.
- Если подходящий кадр не найден, ссылка сохраняется в корневом списке
`unresolved` файла `events.json` с причиной `not_found` или `no_frames`.
Её `ids` ссылаются на голосовые события из итогового списка `events`.
- Настройки модели задаются через `--resolver-ai-model`,
`--resolver-ai-base-url` и `--resolver-ai-api-key`. Период и максимальное
число кадров задаются через `--resolver-frame-interval` и
`--resolver-max-frames`. По умолчанию используется
`google/gemini-3.5-flash`.
- Итоговый файл `events.json`, должен иметь следующую структуру. ID никак
не связаны с предудущими шагами.
```json
@@ -356,6 +371,14 @@ Telegram ботом, которому отправили видео).
"text": "Для типа `voice` ключ `payload` всегда `null`",
"payload": null
}
],
"unresolved": [
{
"ids": [0, 3],
"type": "ocr",
"text": "Распознать формулу со слайда",
"reason": "not_found"
}
]
}
```