JuliusBrussee/caveman · error
rewriter: decode openai response: %w
Error message
rewriter: decode openai response: %w
What it means
completeOpenAI got a 2xx from the OpenAI-compatible chat-completions endpoint but the body did not decode into the expected choices[]/usage structure. The endpoint is likely not actually OpenAI-compatible (different schema, proxied error JSON, or an HTML page returned with success status).
Source
Thrown at rewriter/provider.go:145
})
if err != nil {
return completion{}, err
}
var decoded struct {
Choices []struct {
Message struct {
Content string `json:"content"`
} `json:"message"`
FinishReason string `json:"finish_reason"`
} `json:"choices"`
Usage struct {
Prompt int `json:"prompt_tokens"`
Completion int `json:"completion_tokens"`
} `json:"usage"`
}
if err := json.Unmarshal(raw, &decoded); err != nil {
return completion{}, fmt.Errorf("rewriter: decode openai response: %w", err)
}
var text, stop string
if len(decoded.Choices) > 0 {
text = decoded.Choices[0].Message.Content
stop = decoded.Choices[0].FinishReason
}
return completion{
text: text,
stopReason: stop,
inputTokens: decoded.Usage.Prompt,
outputTokens: decoded.Usage.Completion,
}, nil
}
// openAIAcceptsTemperature reports whether a chat-completions model still takes
// a caller-set temperature. The reasoning families (gpt-5*, o1/o3/o4*) do not.
func openAIAcceptsTemperature(model string) bool {
name := strings.ToLower(strings.TrimSpace(model))View on GitHub (pinned to 766dce6b13)
Solutions
- Inspect the raw response body to see the actual schema returned
- Verify the endpoint truly implements OpenAI chat-completions response format
- Update the decoder to match the provider's actual response shape
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at rewriter/provider.go:145 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of JuliusBrussee/caveman@766dce6b13 (2026-08-18).
Data as JSON: /api/errors/7ef6f543fc9dc435.
Report an issue: GitHub.