The most useful line in Ollama's v0.32.6 release (Aug 4, 2026) is not a new feature. It's this: its OpenAI-compatible /v1/chat/completions endpoint now streams in OpenAI's exact wire format — role only on the first chunk, finish_reason on its own chunk, and usage in a separate chunk. If you ever kept a "local mode" branch in your streaming parser because Ollama's stream was almost but not quite OpenAI-shaped, you can delete it.
That's the whole story, and it's worth two minutes because it collapses the cost of running your agent locally to nearly zero code.
The one-paragraph how-to#
Point your existing OpenAI client at localhost. Nothing else changes.
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1", # Ollama, not api.openai.com
api_key="ollama", # required by the SDK, ignored by Ollama
)
stream = client.chat.completions.create(
model="qwen3.5", # any local tag you've pulled
messages=[{"role": "user", "content": "Summarize this diff."}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")
Before 0.32.6 this mostly worked — until a strict parser tripped on where role or finish_reason showed up. Now the chunk sequence is identical to what api.openai.com sends, so the same loop drives both. The reason to bother is the usual one: the same agent, no per-token bill, and nothing leaving the machine. This is the "OpenAI-compatible local backend" pattern we walked through for LM Studio — Ollama just closed the last gap that made it leak.
The change that actually bites: finish_reason#
The streaming-shape fix is the headline, but the sneaky one is truncation. Previously, a response cut off by the token limit could report finish_reason: "tool_calls" — which is simply wrong. In 0.32.6 a truncated response correctly reports finish_reason: "length".
If your agent branches on finish_reason — "the model wants a tool" vs "the model ran out of room" — the old value was routing truncated turns straight into your tool-call handler, where they'd fail in a confusing way. This is one of those bugs that never throws; it just makes your agent occasionally do the wrong thing under load. Upgrade, then trust finish_reason again.
What else shipped#
- Qwen3.5 is faster on Apple GPUs. On the MLX engine, Qwen3.5 now automatically uses the model's built-in MTP (multi-token prediction) head for speculative decoding — no flag, no config. If you run local models on Apple silicon, your dev loop just got quicker, for free, on any model that ships an MTP head.
- Image generation was removed — temporarily. The release note is blunt: experimental image generation is gone from 0.32.6, and you should stay on 0.32.5 if you need it. Most agent builders don't, so this shouldn't hold up the upgrade.
- Cloud-only tags are clearer.
ollama run kimi-k3now offerskimi-k3:cloudfor cloud-only models that publish no default tag — a small quality-of-life fix for the hybrid local/cloud setups covered in Ollama vs LM Studio vs Jan.
When to use the /v1 endpoint vs Ollama's native API#
Use the OpenAI-compatible /v1 endpoint when you already wrote your agent against OpenAI and just want a local backend under it — that's now a base-URL change and nothing more. Reach for Ollama's native /api/chat when you're building Ollama-first and want its own controls (keep-alive, model options, its native tools schema). Both stream; only the /v1 path is the OpenAI drop-in.
If you're weighing Ollama against a full serving stack for anything past a single machine — concurrency, batching, multiple GPUs — that's a different tool class; see vLLM vs SGLang vs Ollama for where the line is, and the local-agent open-models playbook for picking the model that runs well on the hardware you actually have.



