88 lines
3 KiB
Markdown
88 lines
3 KiB
Markdown
---
|
||
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).
|