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