Files
drhider/History/ux-frontend/2026-08-19-live-timer-llm.md
T

56 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# v0.0.38 — живой таймер обработки + индикация ИИ — 2026-08-19
**Дата:** 2026-08-19
**Версия:** 0.0.37 → 0.0.38
---
## Суть
Юзер должен видеть, что обработка идёт (не зависла), особенно пока LLM
«переваривает» большой файл. Добавлены:
- крупный live-блок «⏱ Обработка…» с тикающим таймером общего времени;
- строка текущего файла с размером («Файл 3/5: имя (5.0 МБ)»);
- индикация ИИ: «🤖 ИИ обрабатывает… Nс» (от реальных данных с бэка).
Итоговая формулировка времени стала ясной: «…общее Xс, из них ИИ Yс».
## Изменения
### `drhider/llm_client.py`
- В `__init__` добавлены `llm_active` (bool) и `llm_started` (float).
- Метод `llm_elapsed_now()` — секунд с начала текущего LLM-вызова (0 если не активен).
- `complete()`: ставит `llm_active=True`/`llm_started=time.time()` перед HTTP,
сбрасывает `llm_active=False` в `finally`. `import time` добавлен.
### `site/routes/api_bp.py`
- В ветке `except queue.Empty` (пока воркер занят) — heartbeat-событие SSE:
`event: llm``{active, elapsed, tokens}` (раз в ~1с, timeout=1).
### `site/templates/index.html`
- CSS для `.live-block`, `.live-title`, `.live-file`, `.live-timer` (40px), `.live-llm`.
- HTML: блок `#liveBlock` с `#liveFile`, `#liveTimer`, `#liveLlm`/`#liveLlmTime`;
в итоговом блоке подпись «Время ИИ» → «Из них ИИ».
- JS (фаза 2):
- показ `#liveBlock`, интервал `liveRefresh` (200мс) — тикает `#liveTimer`;
- обработчик `start` — в `#liveFile` имя текущего файла + размер из `sf[idx]`;
- обработчик `llm` — показывает/скрывает `#liveLlm` и обновляет `#liveLlmTime`;
- `complete`/`onerror`/`catch` — скрыть `#liveBlock`, очистить интервалы;
- итоговый текст: «общее Xс, из них ИИ Yс».
- `resetAll` — скрывает `#liveBlock`.
### `site/app.py`
- `VERSION = "0.0.38"`.
## Проверка
- `node --check`, `py_compile` — OK.
- `LLMClient`: во время вызова `llm_active=True`, `llm_elapsed_now()≈0.3с`; после —
`False`; накопление токенов и времени — ок.
- SSE end-to-end: `complete` содержит `{total, tokens, llm_sec}`. Heartbeat `llm`
генерируется в ветке `except queue.Empty` при долгой обработке (локально без
LLM обработка мгновенная, поэтому heartbeat не успевает — в проде при долгой
LLM-обработке будет слаться раз в сек).
## Примечание
Бэкенд метрики не менял (только флаг/метод для live-таймера + heartbeat).