2.2 KiB
2.2 KiB
v0.0.34 — вывод токенов и времени LLM — 2026-08-19
Дата: 2026-08-19 Версия: 0.0.33 → 0.0.34
Суть
Пользователь замечает, что обфускация долгая. Добавлен вывод в UI:
- суммарных токенов LLM за прогон;
- суммарного времени работы LLM за прогон.
Строка статуса после завершения: «✅ Обработано N файлов за Xс · LLM: Yс · Z токенов».
Изменения
drhider/llm_client.py
- В
LLMClient.__init__добавлены кумулятивные счётчики:tokens_prompt,tokens_completion,llm_sec(float);- свойство
tokens_total = prompt + completion.
- В
complete()после ответа:self.llm_sec += r.elapsed.total_seconds()— реальное время HTTP-вызова;usage(изr.json()) →self.tokens_prompt/self.tokens_completion(через.get(..., 0)— устойчиво к отсутствиюusage).
- Возврат
complete()не изменён (по-прежнемуcontent) —scan_llm_nerне трогали.
site/routes/api_bp.py
- В
worker()послеobfuscate_filesв очередьresultдобавляетсяstats = {tokens: llm.tokens_total, llm_sec: round(llm.llm_sec, 1)}. - В
event: completeданные:{total, tokens, llm_sec}.
site/templates/index.html
- В обработчике
complete: еслиd.llm_sec > 0— добавляет «· LLM: {llm_sec}с» и, еслиd.tokens > 0— «· {tokens} токенов».
site/app.py
VERSION = "0.0.34".
Проверка
py_compile+node --check— OK.- Накопление: 2 вызова → 240 prompt + 90 completion = 330 total, llm_sec = 6.0.
- Устойчивость: ответ без
usage→ токены 0, время 1.0 — без падения. - SSE end-to-end:
completeприходит с{"total":1,"tokens":0,"llm_sec":0.0}(локально без ключа LLM — 0; в кластере с ключом — ненулевые).