- OllamaProvider actor conforms to LLMProvider; branches between
/api/chat NDJSON (default) and /v1/chat/completions SSE on
useOpenAICompat flag.
- OpenAICompatDecoder handles atomic tool_calls and accepts arguments
as either a JSON-encoded string (OpenAI convention) or object.
Distinct state machine from NDJSONDecoder per the plan's
"zero shared decoder state" directive.
- [DONE] sentinel emits stopReason+usage+messageStop trio; mid-stream
EOF emits .stopReason(.streamTruncated).
- 8 tests for OpenAICompatDecoder + 1 conformance compile check.