fix(xai): emit text-end immediately when message completes #11898
+25
−6
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Aligns xAI provider streaming behavior with OpenAI's pattern for
text-endevent timing.Problem
Currently, xAI emits
text-endevents only in theflush()handler at the very end of the stream. This differs from OpenAI which emitstext-endwhen the message item is done (response.output_item.done).Solution
Emit
text-endimmediately when message content completes, matching OpenAI's behavior. This gives consumers accurate timing for when text content is finished.Why This Matters
Applications that process streaming events need to know when text content is complete (e.g., to trigger UI updates, start processing, etc.). Deferring
text-endto flush means consumers can't distinguish between "text is done" and "entire response is done".Changes
endedstate incontentBlocksto avoid duplicate emissionstext-endinresponse.output_item.donehandler when message content completesflush()to only emittext-endfor blocks that weren't already endedChecklist