Web search

Chat can let the model search the web for fresh or niche facts. Search is an ordered failover chain, not a single endpoint: providers are tried top-first, and if one times out, gets rate-limited or returns nothing, the next one runs. That matters because the free, keyless options are scrapers - an agent loop out-runs their bot thresholds and starts collecting CAPTCHAs.

Configure it in playground Settings -> Web Search:

  1. Toggle Web Search on (the model must support tool calling).
  2. Enable the providers you want, fill in what each needs, and Test each row.
  3. Order them with the arrows - that's the failover order. Keyed providers only spend quota when everything above them failed, so put free ones first.

Providers:

Knobs:

Reading pages. Turning web search on also gives the model fetch page, so it can open a result and read the real thing instead of answering from a snippet. Results are numbered and come back as citation chips under the answer.

Troubleshooting: a bare "Failed to fetch" when testing SearXNG is almost always a wrong host/port or CORS. If every provider is off or half-configured the panel warns you - a search with nothing to run it on fails the tool call rather than silently returning nothing.

Standing up SearXNG. It is a Python app plus a Redis/Valkey cache, so the easy path is Docker:

docker run -d --name valkey valkey/valkey:alpine
docker run -d --name searxng -p 8888:8080 --link valkey -v ./searxng:/etc/searxng searxng/searxng

Then set formats: [html, json] under search: in searxng/settings.yml (JSON is off by default and Quartermaster needs it), restart, and check by hand with curl "http://localhost:8888/search?q=test&format=json" - an HTML body back means the setting did not take. A bare Python install in a VM or WSL works the same way; only the URL matters. Queries are throttled to one every 1.5s process-wide with a 10-minute cache, so an agent loop cannot hammer your instance.

Keys are per playground user, sent on the turn payload and never written into a chat. The browser never talks to a provider directly - every query goes out through Quartermaster, so there is no CORS to fight and no key sitting in client-side JS. An enabled row missing its credentials is skipped rather than attempted, so a half-configured provider costs nothing.

More symptoms: all search providers failed (...) lists each provider's own error in the parenthesis - read it. Brave 422 / "subscription token invalid" is a wrong or unsubscribed key, passed through verbatim. Google "Daily Limit Exceeded" is the 100/day free cap; move it lower in the chain. DuckDuckGo rate-limited (bot challenge) has no fix - it is a fallback, not a primary.

This page is generated from the help wiki that ships inside the app: the same text you get from the Help button, and the same text the playground assistant searches. Corrections go to wiki_articles.json.