Skip to content

Commit 1b77a19

Browse files
authored
feat: The response.incomplete event is not handled when using stream_mode=['messages'] (#33871)
1 parent ebfde91 commit 1b77a19

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

libs/partners/openai/langchain_openai/chat_models/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4351,7 +4351,7 @@ def _advance(output_idx: int, sub_idx: int | None = None) -> None:
43514351
elif chunk.type == "response.created":
43524352
id = chunk.response.id
43534353
response_metadata["id"] = chunk.response.id # Backwards compatibility
4354-
elif chunk.type == "response.completed":
4354+
elif chunk.type in ("response.completed", "response.incomplete"):
43554355
msg = cast(
43564356
AIMessage,
43574357
(
Binary file not shown.

libs/partners/openai/tests/integration_tests/chat_models/test_responses_api.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,26 @@ def _check_response(response: BaseMessage | None) -> None:
5858
assert response.response_metadata["service_tier"] # type: ignore[typeddict-item]
5959

6060

61+
@pytest.mark.vcr
62+
def test_incomplete_response() -> None:
63+
model = ChatOpenAI(
64+
model=MODEL_NAME, use_responses_api=True, max_completion_tokens=16
65+
)
66+
response = model.invoke("Tell me a 100 word story about a bear.")
67+
assert response.response_metadata["incomplete_details"]
68+
assert response.response_metadata["incomplete_details"]["reason"]
69+
assert response.response_metadata["status"] == "incomplete"
70+
71+
full: AIMessageChunk | None = None
72+
for chunk in model.stream("Tell me a 100 word story about a bear."):
73+
assert isinstance(chunk, AIMessageChunk)
74+
full = chunk if full is None else full + chunk
75+
assert isinstance(full, AIMessageChunk)
76+
assert full.response_metadata["incomplete_details"]
77+
assert full.response_metadata["incomplete_details"]["reason"]
78+
assert full.response_metadata["status"] == "incomplete"
79+
80+
6181
@pytest.mark.default_cassette("test_web_search.yaml.gz")
6282
@pytest.mark.vcr
6383
@pytest.mark.parametrize("output_version", ["responses/v1", "v1"])

0 commit comments

Comments
 (0)