Ollama provider: agentic reliability overhaul
Head-to-head benchmarked against OpenCode on identical seeded coding tasks (qwen3-coder:30b, M1 Max, artifact-verified — methodology and raw data in the anymodel-umb increment 0018-anymodel-vs-opencode-benchmark):
| stack | task success | median turn-around |
|---|---|---|
| anymodel 1.16.2 (ollama) | 0/18 (0%) | ~4s (failed instantly) |
| OpenCode 1.1.52 | 14/18 (78%) | ~115s |
| anymodel 1.17.0 (ollama) | 17/18 (94%) | ~10s |
Fixes
- Text-channel tool-call recovery on the native Ollama wire — Hermes / Qwen-XML / paren forms now convert to real
tool_useblocks in both non-streaming and streaming turns (parity with the openai provider; streaming buffers the text channel and decides at end-of-message) flush()on the NDJSON stream translator — a stream that dies withoutdone:truenow still emitsmessage_stopinstead of hanging the agent loop- Assistant tool_call echo normalization — native
/api/chattypesargumentsas a map; the OpenAI-style string echo caused a 400 ("can't find closing '}'") on every request after the first tool use - Skill fidelity injection for system-less requests — previously built and silently dropped
532/532 tests green (10 new).