fix: handle empty response with reasoning in OpenRouter provider #10136
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.
Related GitHub Issue
Closes: #10106
Description
This PR attempts to address Issue #10106. Feedback and guidance are welcome.
The issue reports an "Unknown API Error" when using OpenRouter with the Mimo-V2-Flash model. The error occurs when the model outputs malformed tool call syntax (like
<tool_call><function=read_file>...) in its reasoning/thinking content, which is not a valid tool call format.Root Cause: When models output reasoning content but no actual text or tool call content, the OpenRouter provider was not handling this gracefully, resulting in an empty assistant response error that manifested as "Unknown API error" in the UI.
Solution: Added
hasContentandhasReasoningtracking variables to the OpenRouter provider's stream processing. When reasoning exists but no actual content was generated, a localized placeholder message is emitted (mirroring the existing safeguard in the Gemini provider atsrc/api/providers/gemini.tslines 298-312).Test Procedure
Pre-Submission Checklist
Screenshots / Videos
N/A - Backend change only, no UI changes.
Documentation Updates
Additional Notes
This fix mirrors the existing safeguard in the Gemini provider. The localized message uses the existing translation key
common:errors.gemini.thinking_complete_no_outputwhich is appropriate for this case as well.Get in Touch
Discord: N/A (automated PR)