|
navi-web: make the batch shape the schema, drop Brave
Every recorded web_search and web_view call in production carried a scalar (20 of 20, 8 of 8), including sessions where three searches on one topic went out one after another. The recommendation was already written in three places — the parameter description, the tool docstring and the server's summary line — so prose was not the problem: `str | list[str]` renders as `anyOf: [string, array]`, and the model took the first branch. The parameter is now a pure array with minItems/maxItems and an examples entry. A BeforeValidator folds a bare "query": "…" into a one-item list, so a laxer caller still works; the cap rides in json_schema_extra rather than pydantic's max_length, so four queries reach the code that runs three and names the rest instead of failing validation. Brave is gone on both paths: the keyed Search API (signup answers 403, so a third backend that can never be enabled) and the ddgs engine of the same name, which answers nothing from this host. The chain is SearXNG -> ddgs. The persona's parallelism rule now separates "several items in one call" from "several calls in one message" — it used to read "when the profile allows parallel tool calls", which the model could only read as "not here". |
|---|
|
|
| deploy/env.template |
|---|
| docs/config.md |
|---|
| docs/mcp.md |
|---|
| docs/tools.md |
|---|
| mcp-servers/navi-web/app/config.py |
|---|
| mcp-servers/navi-web/app/mcp_server.py |
|---|
| mcp-servers/navi-web/app/search.py |
|---|
| mcp_servers.d/navi-web.json |
|---|
| persona.txt |
|---|
| tests/unit/mcp/conftest.py |
|---|
| tests/unit/mcp/test_navi_web_schemas.py 0 → 100644 |
|---|
| tests/unit/mcp/test_navi_web_search.py |
|---|