Rewrite A-D to [{rank, url, title, snippet}] only. Fail closed if
searxng/brave/tavily/hermes appear outside url or snippet. Self-test
and a 28-query fake-dump dry run pass.
46 lines
1.8 KiB
Markdown
46 lines
1.8 KiB
Markdown
# P3 §10 bake-off protocol
|
||
|
||
Query list: `search_queries.txt` (28, Kyle-approved 2026-09-23).
|
||
Targets: `search_targets.txt` (same order; `open` = no required domain).
|
||
|
||
Do not enable sources or start runs until this commit is on `kyle/sift` master.
|
||
SearXNG journal redaction (`searx.service`) is a prerequisite for `search.searxng.enabled`.
|
||
|
||
## Configurations (never shown to the judge)
|
||
|
||
1. SearXNG alone
|
||
2. SearXNG + Brave LLM Context
|
||
3. SearXNG + Brave LLM Context + Tavily
|
||
4. Current Hermes Tavily `web_search` (live tool, not sift)
|
||
|
||
Sift does not take source names from the request. Configs 1–3 are three orion
|
||
`[search]` settings (or three sequential enables), not query parameters.
|
||
Config 4 is a fleet-host Hermes call, same 28 queries, `limit` matching sift `k`.
|
||
|
||
Record per query: top-k URLs, titles, snippets, latency, Tavily credits, Brave calls.
|
||
|
||
## Blind judging
|
||
|
||
The runner writes **only** labelled packs `A` `B` `C` `D`. Each pack is a
|
||
JSON list of 28 hit-lists (query order from `search_queries.txt`). A hit is
|
||
exactly `{rank, url, title, snippet}` — no scores, sources, warnings, latency,
|
||
credits, or Hermes `description`/`position`. Vendor tokens (`searxng`, `brave`,
|
||
`tavily`, `hermes`) outside `url`/`snippet` fail the shuffle. Raw dumps keep
|
||
the extra fields for unblinding.
|
||
|
||
The mapping `A–D → 1–4` goes in a **separate key file** that the judge does
|
||
not read until scoring is done. Default path (gitignored):
|
||
|
||
```
|
||
tests/testdata/bakeoff-out/key.json
|
||
tests/testdata/bakeoff-out/{A,B,C,D}.json
|
||
```
|
||
|
||
Shuffle with `tests/bakeoff/blind.py` after the four raw dumps exist.
|
||
|
||
Judges: **talos or Claude**. Score each query: would you `sift fetch` the
|
||
correct URL from this list? Against `search_targets.txt` when it is not `open`.
|
||
|
||
After scores land, open `key.json` and report: winner (becomes default-on),
|
||
cost/query, p90 latency.
|