Add reranking, RRF fusion, bench harness, tag contexts, and data ingestion
Implements five of the six enhancements from docs/kb-enhancements-proposal.htm, closing the retrieval-quality gap identified in the qmd review. - Cross-encoder reranking: new kb/reranker.py loads an optional reranking model at startup (KB_RERANK_ENABLED, KB_RERANKER_MODEL, KB_RERANK_CANDIDATES). Search degrades gracefully to plain hybrid retrieval when the model is absent. Exposed via a "rerank" block in /status, a rerank flag on search, and --no-rerank in the CLI. - RRF rank fusion: FTS and vector lists now merge by reciprocal rank fusion with a top-rank bonus, replacing the old score blend. Scores are comparable across queries. - Bench harness and explain traces: kb bench runs a query fixture against each backend and reports precision@k, recall and MRR. --explain returns a per-result score breakdown. - Tag context descriptions: tags carry an optional one-line description (kb tag-describe), returned as tag_contexts with search results. Adds a tags.description column migration. - Structured data ingestion: .json/.yaml/.toml files ingest as text via the new "data" doc type, pretty-printing minified JSON before chunking. Query expansion (proposal item 5) is deliberately left out pending bench results. Requires engine v3.3.0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+32
-2
@@ -21,6 +21,35 @@ make build # produces ./kb binary
|
||||
make all # or cross-compile: dist/kb-{os}-{arch}
|
||||
```
|
||||
|
||||
## Running tests
|
||||
|
||||
### Engine
|
||||
|
||||
Engine tests run against SQLite (with sqlite-vec) and stub out the embedding
|
||||
model, so they only need lightweight dependencies — no torch/docling install:
|
||||
|
||||
```bash
|
||||
uv venv /tmp/kb-test-venv
|
||||
uv pip install --python /tmp/kb-test-venv/bin/python pytest pytest-asyncio fastapi httpx sqlite-vec
|
||||
cd engine && /tmp/kb-test-venv/bin/python -m pytest
|
||||
```
|
||||
|
||||
### Client
|
||||
|
||||
```bash
|
||||
cd client && go test ./...
|
||||
```
|
||||
|
||||
## Search-quality benchmarking
|
||||
|
||||
`kb bench fixture.json` runs a fixture of queries with known-relevant documents
|
||||
against each backend (fts, vec, hybrid, hybrid+rerank) and reports precision@k,
|
||||
recall, and MRR. See `docs/bench-example.json` for the fixture format.
|
||||
|
||||
Run a bench before and after any ranking change (RRF weights, reranker, model
|
||||
swap) and compare — keep a 20-30 query fixture against your real corpus outside
|
||||
the repo.
|
||||
|
||||
## Building and releasing
|
||||
|
||||
Client and engine are versioned independently via `client/VERSION` and `engine/VERSION`. Each has its own release script and git tag prefix.
|
||||
@@ -88,8 +117,9 @@ All endpoints are under `/api/v1/`. Requires `Authorization: Bearer <key>` heade
|
||||
| `GET` | `/documents/{id}/file` | Download original file |
|
||||
| `DELETE` | `/documents/{id}` | Remove a document (and stored file) |
|
||||
| `PUT` | `/documents/{id}/tags` | Add/remove tags |
|
||||
| `GET` | `/tags` | List all tags |
|
||||
| `GET` | `/status` | Engine status, GPU info, DB stats |
|
||||
| `GET` | `/tags` | List all tags (with descriptions) |
|
||||
| `PUT` | `/tags/{name}/description` | Set/clear a tag context description |
|
||||
| `GET` | `/status` | Engine status, GPU info, DB stats, rerank state |
|
||||
| `POST` | `/reindex` | Re-embed all chunks |
|
||||
| `POST` | `/bulk/delete` | Bulk delete documents by filter |
|
||||
| `POST` | `/bulk/tags` | Bulk add/remove tags by filter |
|
||||
|
||||
Reference in New Issue
Block a user