3.2 KiB
3.2 KiB
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}. Heartbeatllmгенерируется в веткеexcept queue.Emptyпри долгой обработке (локально без LLM обработка мгновенная, поэтому heartbeat не успевает — в проде при долгой LLM-обработке будет слаться раз в сек).
Примечание
Бэкенд метрики не менял (только флаг/метод для live-таймера + heartbeat).