From 7c0d1cb3245ae9a6cb4decb59dec8ea231f29143 Mon Sep 17 00:00:00 2001 From: Chester Curme Date: Wed, 23 Jul 2025 09:53:46 -0400 Subject: [PATCH] openai: fix lint and tests --- .../langchain_openai/chat_models/base.py | 16 +++++++++------ .../chat_models/test_responses_api.py | 20 +++++++++++++------ .../tests/unit_tests/chat_models/test_base.py | 6 ++---- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/libs/partners/openai/langchain_openai/chat_models/base.py b/libs/partners/openai/langchain_openai/chat_models/base.py index 827c5ae67eb..742a202f91a 100644 --- a/libs/partners/openai/langchain_openai/chat_models/base.py +++ b/libs/partners/openai/langchain_openai/chat_models/base.py @@ -3807,11 +3807,12 @@ def _construct_lc_result_from_responses_api( ) if image_generation_call.output_format: mime_type = f"image/{image_generation_call.output_format}" - for block in message.content: + for content_block in message.content: # OK to mutate output message if ( - block.get("type") == "image" - and "base64" in block + isinstance(content_block, dict) + and content_block.get("type") == "image" + and "base64" in content_block and "mime_type" not in block ): block["mime_type"] = mime_type @@ -4055,10 +4056,13 @@ def _convert_responses_chunk_to_generation_chunk( ) elif output_version == "v1": message = cast(AIMessageChunk, _convert_to_v1_from_responses(message)) - for block in message.content: - if block.get("index", -1) > current_index: + for content_block in message.content: + if ( + isinstance(content_block, dict) + and content_block.get("index", -1) > current_index + ): # blocks were added for v1 - current_index = block["index"] + current_index = content_block["index"] else: pass return ( diff --git a/libs/partners/openai/tests/integration_tests/chat_models/test_responses_api.py b/libs/partners/openai/tests/integration_tests/chat_models/test_responses_api.py index 525b8b292cc..527eece1241 100644 --- a/libs/partners/openai/tests/integration_tests/chat_models/test_responses_api.py +++ b/libs/partners/openai/tests/integration_tests/chat_models/test_responses_api.py @@ -496,7 +496,7 @@ def test_code_interpreter(output_version: Literal["v0", "responses/v1", "v1"]) - code_interpreter_result = next( item for item in response.content - if item["type"] == "code_interpreter_result" + if isinstance(item, dict) and item["type"] == "code_interpreter_result" ) assert tool_outputs assert code_interpreter_result @@ -528,12 +528,14 @@ def test_code_interpreter(output_version: Literal["v0", "responses/v1", "v1"]) - ] else: code_interpreter_call = next( - item for item in response.content if item["type"] == "code_interpreter_call" + item + for item in response.content + if isinstance(item, dict) and item["type"] == "code_interpreter_call" ) code_interpreter_result = next( item for item in response.content - if item["type"] == "code_interpreter_result" + if isinstance(item, dict) and item["type"] == "code_interpreter_result" ) assert code_interpreter_call assert code_interpreter_result @@ -701,7 +703,9 @@ def test_image_generation_streaming(output_version: str) -> None: # v1 standard_keys = {"type", "base64", "id", "status", "index"} tool_output = next( - block for block in complete_ai_message.content if block["type"] == "image" + block + for block in complete_ai_message.content + if isinstance(block, dict) and block["type"] == "image" ) assert set(standard_keys).issubset(tool_output.keys()) @@ -758,7 +762,9 @@ def test_image_generation_multi_turn(output_version: str) -> None: else: standard_keys = {"type", "base64", "id", "status"} tool_output = next( - block for block in ai_message.content if block["type"] == "image" + block + for block in ai_message.content + if isinstance(block, dict) and block["type"] == "image" ) assert set(standard_keys).issubset(tool_output.keys()) @@ -810,6 +816,8 @@ def test_image_generation_multi_turn(output_version: str) -> None: else: standard_keys = {"type", "base64", "id", "status"} tool_output = next( - block for block in ai_message2.content if block["type"] == "image" + block + for block in ai_message2.content + if isinstance(block, dict) and block["type"] == "image" ) assert set(standard_keys).issubset(tool_output.keys()) 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 952cd27658e..e1d83a4f047 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 @@ -2534,8 +2534,7 @@ def test_convert_to_v1_from_chat_completions( }, { "type": "image", - "source_type": "base64", - "data": "...", + "base64": "...", "id": "img_123", }, { @@ -2739,8 +2738,7 @@ def test_convert_from_v1_to_responses( }, { "type": "image", - "source_type": "base64", - "data": "...", + "base64": "...", "id": "img_123", }, {