Files
drhider/History/llm/2026-08-19-llm-metrics.md
T

2.2 KiB
Raw Blame History

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; в кластере с ключом — ненулевые).