From 2ec7eab8e2258616830227b99aeee4143a89c201 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Sat, 27 Jun 2026 16:58:13 +0800 Subject: [PATCH] fix(provider): handle audio parts in OpenAI Responses adapter --- .../sources/openai_responses_source.py | 4 +-- tests/test_openai_responses_source.py | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/astrbot/core/provider/sources/openai_responses_source.py b/astrbot/core/provider/sources/openai_responses_source.py index 462c71500..e5d99e347 100644 --- a/astrbot/core/provider/sources/openai_responses_source.py +++ b/astrbot/core/provider/sources/openai_responses_source.py @@ -71,8 +71,8 @@ class ProviderOpenAIResponses(ProviderOpenAIOfficial): if detail: image_part["detail"] = detail converted.append(image_part) - elif part_type == "input_audio": - converted.append(part) + elif part_type in {"audio_url", "input_audio"}: + converted.append({"type": text_type, "text": "[Audio]"}) elif part_type == "think": continue else: diff --git a/tests/test_openai_responses_source.py b/tests/test_openai_responses_source.py index a98f26330..34d348611 100644 --- a/tests/test_openai_responses_source.py +++ b/tests/test_openai_responses_source.py @@ -103,6 +103,38 @@ def test_chat_payload_to_responses_payload_converts_messages_and_tool_calls(): ] +def test_chat_payload_to_responses_payload_replaces_audio_parts_with_placeholder(): + payload = { + "model": "gpt-4.1", + "messages": [ + { + "role": "user", + "content": [ + {"type": "text", "text": "listen"}, + { + "type": "input_audio", + "input_audio": {"data": "abc", "format": "wav"}, + }, + {"type": "audio_url", "audio_url": {"url": "data:audio/wav,abc"}}, + ], + }, + ], + } + + converted = ProviderOpenAIResponses._chat_payload_to_responses_payload(payload) + + assert converted["input"] == [ + { + "role": "user", + "content": [ + {"type": "input_text", "text": "listen"}, + {"type": "input_text", "text": "[Audio]"}, + {"type": "input_text", "text": "[Audio]"}, + ], + }, + ] + + def test_build_responses_request_shares_tool_and_extra_body_handling(): provider = _make_provider() payload = {