@@ -340,15 +340,15 @@ Auto-detection resolves the base URL from the model name:
340340- All other remote models route to ` https://generativelanguage.googleapis.com/v1beta/openai `
341341- Local mode routes to ` http://localhost:11434/v1 ` (Ollama)
342342
343- ::: note [ Gemini OpenAI-compat wire contract ]
344- Gemini's ` v1beta/openai ` layer is stricter than OpenAI itself in two places:
345- assistant messages carrying a tool call must emit the full ` tool_calls ` array
346- (not null content), and tool messages must emit the ` name ` field so Gemini
347- can populate its native ` function_response. name` . ` OpenAiCompatibleClient `
348- serializes both unconditionally — OpenAI treats them as additive. If you
349- ever see `GenerateContentRequest…function_response.name: Name cannot be
350- empty ` , you are running an older build; upgrade ` atmosphere-ai ` to ` 4.0.39`
351- or later .
343+ ::: note [ OpenAI API compatibility on strict endpoints ]
344+ Some OpenAI-compatible endpoints are stricter than OpenAI itself on
345+ tool-call round trips: the assistant message carrying a tool call must
346+ emit the full ` tool_calls ` array (not null content), and the tool-role
347+ reply must carry the function ` name ` . ` OpenAiCompatibleClient ` now
348+ serializes both unconditionally — additive for OpenAI, required for the
349+ stricter crowd. The serialized wire shape is pinned by unit tests in
350+ ` atmosphere-ai ` so future refactors cannot silently regress either side.
351+ Applies from ` atmosphere-ai ` ` 4.0.39 ` onward .
352352:::
353353
354354### Atmosphere Init-Params
0 commit comments