aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md12
1 files changed, 10 insertions, 2 deletions
diff --git a/README.md b/README.md
index 546fa1b..9c0807f 100644
--- a/README.md
+++ b/README.md
@@ -144,7 +144,7 @@ search_url = ""
search_results = 5
search_snippet_chars = 300
search_timeout = 10
-max_searches = 2
+max_searches = 1
```
`presets.ini` is read for two things the API does not report: which models
@@ -382,10 +382,18 @@ Expanding it lists each result's title, link and snippet. The queries are
visible on purpose: when an answer is wrong it is usually the query that was
wrong, and without seeing it a bad search and a bad answer look identical.
-`max_searches` caps searches per turn, default 2. On the last round the tool
+`max_searches` caps searches per turn, default 1. On the last round the tool
is withdrawn from the request, which forces the model to answer instead of
searching again. A local 9B will otherwise keep searching when it is unsure.
+The default is 1 rather than 2 because of an upstream limitation. The first
+tool call of a turn arrives as a proper `tool_calls` delta, but a second one,
+issued after the model has seen the first set of results, comes back as
+literal `<tool_call><function=web_search>` text inside the thinking instead.
+There is no structured call to act on, so the turn ends with an empty reply.
+Observed with Qwen3.5-9B through llama.cpp's router; raise the cap if your
+model and build handle follow-up calls properly.
+
Failures do not abort the turn. A timeout, a refused connection, a non-JSON
response or zero results all come back to the model as a tool result saying
what happened, so it answers with that knowledge rather than silently