docs: сортировка History по темам (sonnet, opus, llm, sse, ux-frontend, upload, infra, plans, tests, base, code-fixes)

This commit is contained in:
“Naeel”
2026-08-24 15:23:31 +03:00
parent 25e4b46e76
commit db7cdbdd84
69 changed files with 0 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
# 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; в кластере с ключом — ненулевые).
+41
View File
@@ -0,0 +1,41 @@
# v0.0.37 — крупный блок статистики LLM в UI — 2026-08-19
**Дата:** 2026-08-19
**Версия:** 0.0.36 → 0.0.37
**Файл:** `site/templates/index.html`, `site/app.py` (версия)
---
## Суть
Раньше статистика LLM («... LLM: 5.3с · 1894 токенов») была МЕЛКИМ текстом
в статус-строке под кнопкой — юзер её не замечал. Теперь после обработки
показывается **крупный заметный блок** «📊 Итоги обработки»:
| Показатель | Значение |
|---|---|
| Общее время | крупное число, с |
| Время ИИ | крупное число, с |
| Токены ИИ | крупное число |
Оформление: зелёная плашка (фон-градиент, рамка 2px), три белые карточки,
значения шрифтом 24px жирным. Блок скрыт до завершения и при сбросе.
## Изменения (`index.html`)
- CSS: `.stats-block`, `.stats-title`, `.stats-row`, `.stat-item`,
`.stat-label`, `.stat-value`.
- HTML: блок `#statsBlock` с `#stTotalTime`, `#stLlmTime`, `#stLlmTokens`
(после кнопок скачивания).
- JS:
- `complete`-обработчик — заполняет и показывает блок (общее время всегда;
время ИИ и токены — если `llm_sec > 0`, иначе «—»);
- `resetAll` — скрывает блок.
## Проверка
- `node --check` — OK.
- Визуально через браузер: блок появился полноширинным, три карточки,
значения крупно — заметно.
- Версия `app.VERSION = 0.0.37`.
## Бэкенд
- Не менялся (метрики `tokens`/`llm_sec` в `event: complete` уже есть с v0.0.34).
@@ -0,0 +1,41 @@
# 2026-08-20 — LLM обрабатывает ВСЕ данные (чанкинг) — v0.0.57
## Задача
Пользователь: LLM должен обрабатывать ВСЕ данные, а не урезку 8000 символов.
Ветка сохранения пре-LLM конфигурации: `save-pre-llm-v0.0.56` (указывает на прежний master).
## Изменения (drhider/scanner.py)
`scan_llm_ner` переписан:
- Убраны глобальные урезки `t[:3000]` и `combined[:8000]`.
- Каждый файл обрабатывается ПОЛНОСТЬЮ: split_into_chunks(6000, overlap 500).
- Чанки файла — параллельно (ThreadPoolExecutor, concurrency 4), крупные файлы вперёд.
- Для каждого чанка — полный промпт + «Already captured by regex» (mapping).
- Дедуп найденного через normalize_entity (пробелы/регистр/кавычки/тире/ё).
- Верификация _verify_entity против ПОЛНОГО текста файла — отсекает галлюцинации LLM.
- regex-найденное не дублируется.
Новые хелперы (scanner.py):
- split_into_chunks(text, size=6000, overlap=500) — границы \n\n,\n,. ,? ,! ,; ,, ," "
- normalize_entity(s) — канонизация для дедупа
- _verify_entity(value, full_text) — точное/нормализованное вхождение
- _build_llm_prompt(text, already_found)
- _call_llm(text, llm_client) — вызов + разбор JSON (пусто при ошибке)
Параметры верхнего уровня (легко тюнить):
- _CHUNK_SIZE = 6000, _CHUNK_OVERLAP = 500, _LLM_CONCURRENCY = 4
## Ожидаемый эффект
- LLM покрывает все файлы целиком (в т.ч. хвосты и таблицы после 3000 символа).
- Время на ~300 файлов ≈ 3.5 мин при 4 потоках (~390 вызовов).
- Меньше галлюцинаций (верификация).
## Проверка
- py_compile OK.
- test_scanner 20/20.
- Юнит хелперов: split (12К→4 чанка ≤6100), verify (галлюцинация→False), normalize OK.
- Все 106 тестов OK.
- VERSION 0.0.57.
## Примечание
Реальная проверка LLM-покрытия и времени — на наборе T/ при прогоне на проде/локально
с ключом LLM (локально ключ отсутствует → LLM не выполняется, только regex).