feat(agent): expose the HNSW parameters in MemoryConfig
Graph degree and the build- and query-time candidate list sizes were constants, so a deployment had no way to trade recall against memory or query speed. They are now `MemoryConfig::hnsw_m`, `hnsw_ef_construction` and `hnsw_ef_search`, persisted with the store and defaulting to exactly the previous behaviour (16, 64, and a query list that scales with `k`). Two things the straightforward version would have got wrong: `clawhdf5-ann` asserts a graph degree of at least 2, so a configured 0 — from a file, or from a caller reading 0 as "use the default" — aborted the process inside the index builder. The store clamps instead, and a test covers it: removing the clamp makes that test panic rather than fail. `ef_search` and the candidate pool handed to score fusion were the same number. Tying the pool to the new setting would mean lowering `ef` for speed also narrows what fusion sees, quietly degrading hybrid results through a knob that looks like it only costs time. They are now independent. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
@@ -2,6 +2,19 @@
|
||||
|
||||
## Unreleased
|
||||
|
||||
### Tuning
|
||||
- `clawhdf5-agent`: **the HNSW parameters are configurable** —
|
||||
`MemoryConfig::hnsw_m`, `hnsw_ef_construction` and `hnsw_ef_search`
|
||||
(defaults 16, 64, and 0 meaning "scale with `k`", i.e. today's behaviour).
|
||||
They were constants, so a deployment could not trade recall against memory
|
||||
or query speed at all. All three are persisted with the store. Values are
|
||||
clamped where the index requires it: `clawhdf5-ann` asserts a graph degree
|
||||
of at least 2, so a configured 0 — from a file, or from a caller who took 0
|
||||
to mean "default" — used to abort the process inside the builder. Lowering
|
||||
`ef_search` also no longer narrows the candidate pool that fusion sees.
|
||||
**Breaking:** `MemoryConfig` gained fields, so literal constructions need
|
||||
updating; `..Default::default()` does not.
|
||||
|
||||
### Performance
|
||||
- `clawhdf5-agent`: **opening a store is ~28% faster** (455 ms -> 327 ms at
|
||||
100k x 384). `read_from_disk` memory-mapped the file and then copied the
|
||||
|
||||
Reference in New Issue
Block a user