Some OpenAI-compatible endpoints return valid tool_calls for a non-streamed
completion but, when streamed, emit the tool call as plain text or drop it and
close the stream, leaving Strix's tool-driven loop with nothing to execute.
Wrap the model for custom (api_base) endpoints so the request is made
non-streamed (where tool calling works) while still presenting the streaming
interface the runner consumes. Hosted providers are unchanged. Opt back into
streaming with STRIX_STREAM_CUSTOM_ENDPOINT=1.