From 4c176d377cd66074ad74c93227ccb167c5144c70 Mon Sep 17 00:00:00 2001 From: Mason Daugherty Date: Fri, 25 Jul 2025 13:56:18 -0400 Subject: [PATCH] nit: notes --- .../openai/langchain_openai/chat_models/_compat.py | 12 +++++++++--- .../openai/langchain_openai/chat_models/base.py | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/libs/partners/openai/langchain_openai/chat_models/_compat.py b/libs/partners/openai/langchain_openai/chat_models/_compat.py index 47d73106069..59ccde78cb0 100644 --- a/libs/partners/openai/langchain_openai/chat_models/_compat.py +++ b/libs/partners/openai/langchain_openai/chat_models/_compat.py @@ -79,9 +79,11 @@ _FUNCTION_CALL_IDS_MAP_KEY = "__openai_function_call_ids__" def _convert_to_v03_ai_message( message: AIMessage, has_reasoning: bool = False ) -> AIMessage: - """Mutate an AIMessage to the old-style v0.3 format.""" + """Mutate an AIMessageV1 to the old-style v0.3 format.""" if isinstance(message.content, list): - new_content: list[Union[dict, str]] = [] + new_content: list[ # Match signature of v0.3 AIMessage content + Union[dict, str] + ] = [] for block in message.content: if isinstance(block, dict): if block.get("type") == "reasoning": @@ -148,7 +150,9 @@ def _convert_to_v03_ai_message( return message -def _convert_from_v03_ai_message(message: AIMessage) -> AIMessage: +def _convert_from_v03_ai_message( + message: AIMessage, +) -> AIMessage: # this should be AIMessageV1? """Convert an old-style v0.3 AIMessage into the new content-block format.""" # Only update ChatOpenAI v0.3 AIMessages # TODO: structure provenance into AIMessage @@ -622,6 +626,8 @@ def _consolidate_calls( def _convert_from_v1_to_responses(message: AIMessage) -> AIMessage: + """Convert a v1 message to the Responses format.""" + if not isinstance(message.content, list): return message diff --git a/libs/partners/openai/langchain_openai/chat_models/base.py b/libs/partners/openai/langchain_openai/chat_models/base.py index 742a202f91a..2d2e349f288 100644 --- a/libs/partners/openai/langchain_openai/chat_models/base.py +++ b/libs/partners/openai/langchain_openai/chat_models/base.py @@ -3511,8 +3511,8 @@ def _construct_responses_api_input(messages: Sequence[BaseMessage]) -> list: input_ = [] for lc_msg in messages: if isinstance(lc_msg, AIMessage): - lc_msg = _convert_from_v03_ai_message(lc_msg) - lc_msg = _convert_from_v1_to_responses(lc_msg) + lc_msg = _convert_from_v03_ai_message(lc_msg) # Stage 1: v0.3 to v1 + lc_msg = _convert_from_v1_to_responses(lc_msg) # Stage 2: v1 to Responses msg = _convert_message_to_dict(lc_msg) # "name" parameter unsupported if "name" in msg: