Skip to content

Commit 6409498

Browse files
authored
openai[patch]: route to Responses API if relevant attributes are set (#31645)
Following #30329.
1 parent 3044bd3 commit 6409498

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -593,8 +593,8 @@ class BaseChatOpenAI(BaseChatModel):
593593
"""
594594

595595
store: Optional[bool] = None
596-
"""If True, the Responses API may store response data for future use. Defaults to
597-
True.
596+
"""If True, OpenAI may store response data for future use. Defaults to True
597+
for the Responses API and False for the Chat Completions API.
598598
599599
.. versionadded:: 0.3.24
600600
"""
@@ -1074,6 +1074,12 @@ def _generate(
10741074
def _use_responses_api(self, payload: dict) -> bool:
10751075
if isinstance(self.use_responses_api, bool):
10761076
return self.use_responses_api
1077+
elif self.include is not None:
1078+
return True
1079+
elif self.reasoning is not None:
1080+
return True
1081+
elif self.truncation is not None:
1082+
return True
10771083
else:
10781084
return _use_responses_api(payload)
10791085

@@ -3173,7 +3179,13 @@ def _use_responses_api(payload: dict) -> bool:
31733179
uses_builtin_tools = "tools" in payload and any(
31743180
_is_builtin_tool(tool) for tool in payload["tools"]
31753181
)
3176-
responses_only_args = {"previous_response_id", "text", "truncation", "include"}
3182+
responses_only_args = {
3183+
"include",
3184+
"previous_response_id",
3185+
"reasoning",
3186+
"text",
3187+
"truncation",
3188+
}
31773189
return bool(uses_builtin_tools or responses_only_args.intersection(payload))
31783190

31793191

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,9 @@ def test_stateful_api() -> None:
317317

318318

319319
def test_route_from_model_kwargs() -> None:
320-
llm = ChatOpenAI(model=MODEL_NAME, model_kwargs={"truncation": "auto"})
320+
llm = ChatOpenAI(
321+
model=MODEL_NAME, model_kwargs={"text": {"format": {"type": "text"}}}
322+
)
321323
_ = next(llm.stream("Hello"))
322324

323325

@@ -356,7 +358,7 @@ def test_file_search() -> None:
356358
def test_stream_reasoning_summary() -> None:
357359
llm = ChatOpenAI(
358360
model="o4-mini",
359-
use_responses_api=True,
361+
# Routes to Responses API if `reasoning` is set.
360362
reasoning={"effort": "medium", "summary": "auto"},
361363
)
362364
message_1 = {"role": "user", "content": "What is 3^3?"}

0 commit comments

Comments
 (0)