Skip to content

fix: wrap stream errors in valid OpenAI chunks#2376

Open
Stranmor wants to merge 1 commit intolbjlaq:mainfrom
Stranmor:fix/sse-error-format
Open

fix: wrap stream errors in valid OpenAI chunks#2376
Stranmor wants to merge 1 commit intolbjlaq:mainfrom
Stranmor:fix/sse-error-format

Conversation

@Stranmor
Copy link
Copy Markdown
Contributor

Summary

Fixes #2371. Prevents IDE parsers (Cursor, etc.) from crashing on custom error JSON objects by wrapping all SSE stream errors in structurally valid formats.

Changes

Problem: PR #2322 changed yield Err(...) to yield Ok(Bytes::from(json!({"error":...}))). This custom JSON shape crashes IDE parsers that strictly expect choices[0].delta in every SSE chunk.

Fix: All stream error responses now use valid formats:

Stream Type Before (crashes parser) After (valid chunk)
OpenAI modern {"error":{...}, "choices":[]} {"choices":[{"delta":{"content":"[Antigravity Error: ...]"}, "finish_reason":"stop"}]}
OpenAI legacy Same broken format Same valid format
Gemini handler {"error":{...}} {"candidates":[{"content":{"parts":[{"text":"[Error]"}]}}]} — valid Gemini format that downstream OpenAI mappers translate correctly

The error message is rendered as normal assistant text in the IDE chat, making it visible to the user without crashing the parser.

All SSE stream error responses now use structurally valid formats that
IDE parsers (Cursor, etc.) can process without crashing:

- OpenAI modern stream: choices[0].delta.content with error text
- OpenAI legacy stream: same choices[0].delta.content pattern
- Gemini handler: valid candidates[].content.parts[].text format
  so downstream OpenAI mappers translate it correctly

Fixes lbjlaq#2371
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: SSE error formatting crashes IDE parser, breaking storage discovery

1 participant