From 016e7cb9769e82d720e76fb25dbee3f9f4f188e7 Mon Sep 17 00:00:00 2001 From: ccurme Date: Fri, 7 Aug 2026 09:14:09 -0400 Subject: [PATCH] fix(openai): handle `ContextWindowExceededError` (#39300) --- .../langchain_openai/chat_models/base.py | 1 + .../tests/unit_tests/chat_models/test_base.py | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/libs/partners/openai/langchain_openai/chat_models/base.py b/libs/partners/openai/langchain_openai/chat_models/base.py index 576b24f7eb..e39433fb47 100644 --- a/libs/partners/openai/langchain_openai/chat_models/base.py +++ b/libs/partners/openai/langchain_openai/chat_models/base.py @@ -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 diff --git a/libs/partners/openai/tests/unit_tests/chat_models/test_base.py b/libs/partners/openai/tests/unit_tests/chat_models/test_base.py index e4c953f6d2..5c54c458e6 100644 --- a/libs/partners/openai/tests/unit_tests/chat_models/test_base.py +++ b/libs/partners/openai/tests/unit_tests/chat_models/test_base.py @@ -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()