This commit is contained in:
Chester Curme 2025-03-11 15:08:45 -04:00
parent aee80f0e48
commit d4f2aad929
2 changed files with 40 additions and 1 deletions

View File

@ -1039,7 +1039,16 @@ class BaseChatOpenAI(BaseChatModel):
response = raw_response.parse()
generation_info = {"headers": dict(raw_response.headers)}
else:
response = await self.async_client.create(**payload)
if "tools" in payload and any(
_is_builtin_tool(tool) for tool in payload["tools"]
):
responses_payload = _transform_payload_for_responses(payload)
response = await self.root_async_client.responses.create(
**responses_payload
)
return self._create_chat_result_responses(response, generation_info)
else:
response = await self.async_client.create(**payload)
return await run_in_executor(
None, self._create_chat_result, response, generation_info
)

View File

@ -1228,3 +1228,33 @@ def test_structured_output_and_tools() -> None:
assert len(full.tool_calls) == 1
tool_call = full.tool_calls[0]
assert tool_call["name"] == "GenerateUsername"
def test_web_search() -> None:
llm = ChatOpenAI(model="gpt-4o")
response = llm.invoke(
"What was a positive news story from today?",
tools=[{"type": "web_search_preview"}],
)
assert isinstance(response, AIMessage)
assert response.content
assert response.usage_metadata["input_tokens"] > 0
assert response.usage_metadata["output_tokens"] > 0
assert response.usage_metadata["total_tokens"] > 0
assert response.response_metadata["model_name"]
assert response.response_metadata["status"]
async def test_web_search_async() -> None:
llm = ChatOpenAI(model="gpt-4o")
response = await llm.ainvoke(
"What was a positive news story from today?",
tools=[{"type": "web_search_preview"}],
)
assert isinstance(response, AIMessage)
assert response.content
assert response.usage_metadata["input_tokens"] > 0
assert response.usage_metadata["output_tokens"] > 0
assert response.usage_metadata["total_tokens"] > 0
assert response.response_metadata["model_name"]
assert response.response_metadata["status"]