the query source that claimed a turn is readable on /chat (V-539)
V-539 said SearXNG claims every world question, including invented terms, so Kiwix is never reached. Measured today against the configured instance: seven of eight invented Russian questions now return zero results, and Response.Empty() already passes those to the ZIM. The premise moved with the upstream engine set in three days. The three quality signals the task named were recorded per query and none separate the sets. Token overlap is zero for the one bad claim and also zero for "столица Франции", whose answer is Париж. Empty snippets never fire, because ParseResponse already drops a hit with no text. SearXNG returned no corrections or suggestions even for the query it silently respelled. So no threshold is built: it would cost a real answer to save one invented word. What ships is the second half. The claiming query source crosses the IPC seam on ipc.ChatReply.Source and renders as a badge beside the reply on /chat. It rides the context rather than a return value, because handleText answers every reach through one string and the mic, telegram and the web all share it. Chat now returns ChatReply instead of a bare string. Full -race suite green.
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
# Does SearXNG claim a question it cannot answer? (V-539)
|
||||
|
||||
Measured 2026-08-05 against the configured instance, `http://127.0.0.1:9563`,
|
||||
`max_results: 4`, `language: auto`. Sixteen Russian questions: eight real, eight
|
||||
invented from non-words. The probe read SearXNG's JSON directly, so this measures
|
||||
the search, not the cascade around it.
|
||||
|
||||
## The premise no longer reproduces
|
||||
|
||||
V-539 was filed on the 2026-08-02 measurement, where SearXNG returned four
|
||||
results for every query including `зыркабулентный флогистон Мшанского`, and no
|
||||
`voice: kiwix:` line ever appeared. Today the same shape of query returns
|
||||
nothing:
|
||||
|
||||
| Query set | Zero results | Four results claimed |
|
||||
|---|---|---|
|
||||
| Eight real questions | 0 | 8 |
|
||||
| Eight invented questions | 7 | 1 |
|
||||
|
||||
`Response.Empty()` is already the gate. Seven of eight invented questions now
|
||||
pass the turn to the ZIM with no code change at all. What changed is upstream.
|
||||
Every real answer today comes from `google cse`. It answers a non-word with an
|
||||
empty result set, where the engine set of three days ago answered with
|
||||
something.
|
||||
|
||||
## The one that still claims
|
||||
|
||||
`трюмбальная нидроскопия` returned four results, all about a lumbar puncture:
|
||||
|
||||
```
|
||||
Люмбальная пункция - адреса и стоимость в больницах в СПб
|
||||
Пункция спинного мозга - Больница «Шиба
|
||||
Педиатрический фантом люмбальной пункции новорожденного
|
||||
```
|
||||
|
||||
The engine read the invented word as a misspelling of a real one and answered
|
||||
the real one. That is the whole remaining failure, and it is a near-miss
|
||||
spelling rather than a catch-all.
|
||||
|
||||
## The three candidate signals do not separate the sets
|
||||
|
||||
V-539 named three signals a quality gate could read. Each was recorded per
|
||||
query:
|
||||
|
||||
- **No result title shares a token with the query.** Useless. It is true of the
|
||||
one bad claim, and also true of `столица Франции`, whose four titles are
|
||||
`Париж`, `Франция`, `Париж — Путеводитель`, `Париж - Море Трэвел`. The right
|
||||
answer to a capital-city question is the city, which is not a word in the
|
||||
question. Two more real questions score 3 of 4 rather than 4.
|
||||
- **Every snippet is empty.** Never fired. Zero empty snippets across all
|
||||
sixteen queries, real or invented. `ParseResponse` already drops a hit with no
|
||||
text, so this signal cannot fire by construction.
|
||||
- **A spelling-suggestion or catch-all engine answered.** Never fired. SearXNG
|
||||
returned no `corrections` and no `suggestions` for any query, including the one
|
||||
that silently corrected the spelling itself.
|
||||
|
||||
## Decision: do not build the threshold
|
||||
|
||||
A gate on token overlap would cost `столица Франции` a correct answer to save
|
||||
one invented word, and the other two signals cannot fire. The task said a wrong
|
||||
threshold costs a real answer and needs measuring first. It was measured and it
|
||||
loses.
|
||||
|
||||
What ships instead is the second half of V-539. The claiming query source now
|
||||
crosses the IPC seam on `ipc.ChatReply.Source`. It renders as a badge beside the
|
||||
reply on `/chat`. The only evidence before it was a `voice:` log line, which is
|
||||
why this was hard to judge. The next occurrence is readable off the UI rather
|
||||
than off the box.
|
||||
|
||||
## Not measured here
|
||||
|
||||
- The cascade. This probe read SearXNG directly. It says nothing about how
|
||||
`querySearch` phrases what it gets, or whether the resident model turns four
|
||||
weak snippets into a confident wrong sentence.
|
||||
- Kiwix. It was healthy on 2026-08-02 and was not re-probed today.
|
||||
- English questions. The premise was about Russian, where the invented words are.
|
||||
- Whether the engine set is stable. The whole finding is that it moved in three
|
||||
days, so this table is a reading of one day.
|
||||
Reference in New Issue
Block a user