Merge pull request #1 from WhoisMonesh/fix/openrouter-handle-embedded-error-responses

fix: handle errors embedded in OpenRouter non-streaming responses
This commit is contained in:
Monesh Ram 2026-02-21 16:59:08 +05:30 • committed by GitHub
commit 2466b91e18
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 28 additions and 1 deletions

View file

@ -211,6 +211,30 @@ class OpenrouterConfig(OpenAIGPTConfig):
json_mode=json_mode,
)
# Check for error embedded in response body (OpenRouter-specific behavior)
# OpenRouter can return errors in a 200 response when a downstream provider fails
try:
response_json = raw_response.json()
if "error" in response_json:
error_chunk = response_json["error"]
error_msg = OpenRouterErrorMessage(
message="Message: {}, Metadata: {}".format(
error_chunk.get("message", "Unknown error"),
error_chunk.get("metadata", {}),
),
code=error_chunk.get("code", 500),
metadata=error_chunk.get("metadata", {}),
)
raise OpenRouterException(
message=error_msg["message"],
status_code=error_msg["code"],
headers=error_msg["metadata"].get("headers", {}),
)
except OpenRouterException:
raise
except Exception:
pass
# Extract cost from OpenRouter response body
# OpenRouter returns cost information in the usage object when usage.include=true
try:

View file

@ -12,4 +12,7 @@ exclude = ["litellm/types/*", "litellm/__init__.py", "litellm/proxy/example_conf
"litellm/llms/anthropic/chat/__init__.py" = ["F401"]
"litellm/llms/azure_ai/embed/__init__.py" = ["F401"]
"litellm/llms/azure_ai/rerank/__init__.py" = ["F401"]
"litellm/llms/bedrock/chat/__init__.py" = ["F401"]
"litellm/llms/bedrock/chat/__init__.py" = ["F401"]
"litellm/proxy/utils.py" = ["F401", "PLR0915"]
"litellm/proxy/guardrails/guardrail_hooks/litellm_content_filter/content_filter.py" = ["PLR0915"]
"litellm/proxy/guardrails/guardrail_hooks/guardrail_benchmarks/test_eval.py" = ["PLR0915"]