Providers
Ollama troubleshooting
Troubleshooting
WSL2 crash loop (repeated reboots)
On WSL2 with NVIDIA/CUDA, the official Ollama Linux installer creates an
ollama.service systemd unit with Restart=always. If that service
autostarts and loads a GPU-backed model during WSL2 boot, Ollama can pin
host memory while loading; Hyper-V memory reclaim cannot always reclaim
those pages, so Windows can terminate the WSL2 VM, systemd restarts
Ollama, and the loop repeats.
Evidence: repeated WSL2 reboots/terminations, high CPU in app.slice or
ollama.service right after WSL2 startup, and SIGTERM from systemd rather
than the Linux OOM killer.
OpenClaw logs a startup warning when it detects WSL2, ollama.service
enabled with Restart=always, and visible CUDA markers.
Mitigation:
sudo systemctl disable ollamaOn the Windows side, add this to %USERPROFILE%\.wslconfig, then run
wsl --shutdown:
[experimental]autoMemoryReclaim=disabledOr shorten keep-alive / start Ollama manually only when needed:
export OLLAMA_KEEP_ALIVE=5mollama serveSee ollama/ollama#11317.
Ollama not detected
Confirm Ollama is running and is in the agent's model scope. For ambient
localhost discovery, set OLLAMA_API_KEY (or an auth profile). A nonempty
manual model list skips discovery; an explicit self-hosted endpoint with
models: [] does not:
ollama servecurl http://localhost:11434/api/tagsNo models available
Pull the model locally, or define it explicitly in
models.providers.ollama:
ollama list # See what's installedollama pull gemma4ollama pull gpt-oss:20bollama pull llama3.3 # Or another modelConnection refused
# Check if Ollama is runningps aux | grep ollama # Or restart Ollamaollama serveRemote host works with curl but not OpenClaw
Verify from the same machine and runtime that runs the Gateway:
openclaw gateway status --deepcurl http://ollama-host:11434/api/tagsCommon causes:
baseUrlpoints atlocalhost, but the Gateway runs in Docker or on another host.- The URL uses
/v1, selecting OpenAI-compatible behavior instead of native Ollama. - The remote host needs firewall or LAN binding changes.
- The model is on your laptop's daemon but not the remote one.
Model outputs tool JSON as text
Usually the provider is in OpenAI-compatible mode, or the model cannot handle tool schemas. Prefer native mode:
{ models: { providers: { ollama: { baseUrl: "http://ollama-host:11434", api: "ollama", }, }, },}If a small local model still fails on tool schemas, set
compat.supportsTools: false on that model entry and retest.
Kimi or GLM returns garbled symbols
Hosted Kimi/GLM responses that are long, non-linguistic symbol runs are treated as a failed provider call rather than a successful reply, so normal retry/fallback/error handling takes over instead of persisting corrupted text into the session.
If it recurs, capture the model name, the current session file, and
whether the run used Cloud + Local or Cloud only, then try a fresh
session and a fallback model:
openclaw infer model run --model ollama/kimi-k2.5:cloud --prompt "Reply with exactly: ok" --jsonopenclaw models set ollama/gemma4Cold local model times out
Large local models can need a long first load. Scope the timeout to the Ollama provider and optionally keep the model loaded between turns:
{ models: { providers: { ollama: { timeoutSeconds: 300, models: [ { id: "gemma4:26b", name: "gemma4:26b", params: { keep_alive: "15m" }, }, ], }, }, },}If the host itself is slow to accept connections, timeoutSeconds also
extends the guarded connect timeout for this provider.
Large-context model is too slow or runs out of memory
Many models advertise contexts larger than your hardware can run
comfortably. Native requests forward the effective contextTokens unless
params.num_ctx overrides it. Cap both OpenClaw's budget and Ollama's request
context for predictable first-token latency:
{ models: { providers: { ollama: { maxTokens: 8192, models: [ { id: "qwen3.5:9b", name: "qwen3.5:9b", contextTokens: 32768, params: { num_ctx: 32768, thinking: false }, }, ], }, }, },}Lower the model entry's contextTokens if OpenClaw sends too much prompt. Lower
params.num_ctx if Ollama's runtime context is too large for the machine.
Lower maxTokens if generation runs too long.