docs(sessions): log sesji 2026-08-05 — batching embed (start fazy mailowej)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
75116ad0a5
commit
04251b5bfb
87
docs/sessions/2026-08-05-kb-mail-batching.md
Normal file
87
docs/sessions/2026-08-05-kb-mail-batching.md
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
---
|
||||
okf: "0.1"
|
||||
type: session-log
|
||||
visibility: private
|
||||
status: active
|
||||
updated: 2026-08-05
|
||||
links: []
|
||||
---
|
||||
|
||||
# Sesja 2026-08-05 — batching embed (start fazy mailowej)
|
||||
|
||||
## Weryfikacja zaległości
|
||||
|
||||
- **Uninstall natywnego `ollama.service` na PIHA — POTWIERDZONY.** Unit i binarka nie
|
||||
istnieją.
|
||||
- **Session log fazy 4 istniał już na masterze** (`e619c00`). Zgłoszony brak był fałszywym
|
||||
alarmem z niedociągniętego working tree na SOLARII.
|
||||
- **`task/prune-fix` (R1–R3 + M1 VPS) gotowy do review** w subsystemie A — `0526af1`,
|
||||
285 insertions, z testami.
|
||||
|
||||
## Task `kb-mail-batching`
|
||||
|
||||
Zmergowany do mastera: `02a0079` + `75116ad`.
|
||||
|
||||
### Bug blokujący Etap B (znaleziony i naprawiony)
|
||||
|
||||
Goły `builtins.TimeoutError` z wyczerpanego `aiohttp` `ClientTimeout` **nie był łapany**
|
||||
przez `flush_embed_buffer` — obsługa łapała wyłącznie `ClientError`. Skutek: zawieszona
|
||||
Ollama (failure mode „przyjmuje połączenie i milczy") wywalała cały run, bez breakera
|
||||
i bez flushu. Klasy przejściowe wyliczone są teraz jawnie w `TRANSIENT_EMBED_ERRORS`.
|
||||
|
||||
### `embed_batch_resilient()`
|
||||
|
||||
- Retry z backoffem wykładniczym.
|
||||
- Po wyczerpaniu retry — probe `/api/tags`:
|
||||
- backend **żywy** → bisekcja izolująca trujący chunk,
|
||||
- backend **martwy** → `gave_up`, bez bisekcji.
|
||||
|
||||
### Semantyka breakera (zmiana)
|
||||
|
||||
Breaker liczy **give-upy** (backend down wg probe), nie nieudane batche. Porażka częściowa
|
||||
nie przesuwa licznika. Zmiana znaczenia `--max-embed-failures` opisana w
|
||||
`kb/phases/kb-m5-faza-mailowa.md` §9.
|
||||
|
||||
### Parametryzacja i metryki
|
||||
|
||||
- Flagi: `--batch-size`, `--embed-retries`, `--embed-backoff`, `--embed-timeout`
|
||||
(env `MAIL_INGEST_*`).
|
||||
- Metryka `embed_ms_per_chunk`.
|
||||
- Wiersze zembedowane w umierającym batchu są commitowane przed abortem.
|
||||
|
||||
### Decyzja: brak fallbacku SOLARIA→PIHA dla backfillu
|
||||
|
||||
Świadomie **nie powstaje** — 790 ms/embed na CPU × 271k ≈ 60 h na współdzielonym nodzie.
|
||||
Tor online (`embed_router`) zachowuje fallback. Rozdział torów udokumentowany w docstringu
|
||||
`embed.py` / `embed_batch` oraz w `kb/services/job-mail-body-ingest.md`.
|
||||
|
||||
### Benchmark `mail-body-ingest-bench`
|
||||
|
||||
Read-only (SELECT + inferencja). Wyniki na SOLARII (bge-m3, GPU), próbka 640 chunków
|
||||
(avg 1559 znaków):
|
||||
|
||||
| batch | ms/chunk |
|
||||
|------:|---------:|
|
||||
| 32 | 22.70 |
|
||||
| 64 | 16.57 |
|
||||
| 128 | 15.82 |
|
||||
|
||||
**Default batch 64 POTWIERDZONY** — zysk z 128 to ~4.5%, a przy 64 koszt bisekcji jest
|
||||
mniejszy. Ekstrapolacja na 271k chunków: **~1.25 h GPU** vs ~11 h przy per-request.
|
||||
|
||||
### Testy
|
||||
|
||||
117 testów zielonych.
|
||||
|
||||
## Wyjątki procesowe
|
||||
|
||||
Żadnych. Commit z PIHA nie zaistniał — CC nie dopisał wskaźnika, uznano za zbędne.
|
||||
|
||||
## TODO wynikające
|
||||
|
||||
- **Rotacja hasła `kb-postgres`** — poszło do historii shella i na screeny sesji.
|
||||
- **`POSTGRES_PASSWORD` plaintext w `services/*/service.yaml`** — kandydat na backlog
|
||||
sekretów.
|
||||
- **`kb-site` `robots.txt` blokuje fetch Claude** (`ROBOTS_DISALLOWED`) — fix: `X-Robots-Tag
|
||||
noindex` zamiast `Disallow` (wariant B), przy okazji taska `kb-site`.
|
||||
- **Backfill 271k** — dopiero po merge + deploy `task/prune-fix` (subsystem A).
|
||||
Loading…
Reference in a new issue