fix(openai): handle ContextWindowExceededError (#39300)

This commit is contained in:
ccurme authored and GitHub committed 2026-08-07 09:14:09 -04:00
1 parent f48fa9478d
commit 016e7cb976
2 files changed
+26

No files matched your search

@@ -564,6 +564,7 @@ def _handle_openai_bad_request(e: openai.BadRequestError) -> None:
"context_length_exceeded" in str(e)
or "Input tokens exceed the configured limit" in e.message
or "prompt is too long" in e.message
or "ContextWindowExceededError" in e.message
):
raise OpenAIContextOverflowError(
message=e.message, response=e.response, body=e.body
@@ -4507,6 +4507,31 @@ def test_context_overflow_error_prompt_too_long() -> None:
assert "prompt is too long" in str(exc_info.value)
def test_context_overflow_error_context_window_exceeded() -> None:
"""Test context overflow error triggered by ContextWindowExceededError."""
error_body = {
"error": {
"message": "ContextWindowExceededError: maximum context length exceeded",
"type": "invalid_request_error",
"param": "messages",
"code": "invalid_request_error",
}
}
bad_request_error = openai.BadRequestError(
message=error_body["error"]["message"],
response=MagicMock(status_code=400),
body=error_body,
)
llm = ChatOpenAI()
with patch.object(llm.client, "with_raw_response") as mock_client:
mock_client.create.side_effect = bad_request_error
with pytest.raises(ContextOverflowError) as exc_info:
llm.invoke([HumanMessage(content="test")])
assert "ContextWindowExceededError" in str(exc_info.value)
def test_context_overflow_error_backwards_compatibility() -> None:
"""Test that ContextOverflowError can be caught as BadRequestError."""
llm = ChatOpenAI()