diff --git a/skillclaw/protocols/openai_responses.py b/skillclaw/protocols/openai_responses.py index 3691333..b628a61 100644 --- a/skillclaw/protocols/openai_responses.py +++ b/skillclaw/protocols/openai_responses.py @@ -48,6 +48,12 @@ def content_to_openai_chat_content(content: Any) -> str | list[dict[str, Any]]: image_url = image_url.get("url") if isinstance(image_url, str) and image_url: parts.append({"type": "image_url", "image_url": {"url": image_url}}) + elif item_type in {"input_video", "video_url"}: + video_url = item.get("video_url") or item.get("url") + if isinstance(video_url, dict): + video_url = video_url.get("url") + if isinstance(video_url, str) and video_url: + parts.append({"type": "video_url", "video_url": {"url": video_url}}) if not parts: return "" if all(part.get("type") == "text" for part in parts): diff --git a/tests/test_responses_codex.py b/tests/test_responses_codex.py index 47a12aa..9824c12 100644 --- a/tests/test_responses_codex.py +++ b/tests/test_responses_codex.py @@ -120,6 +120,11 @@ def test_codex_responses_multimodal_image_input_converts_to_openai_chat_content_ } ] +def test_codex_responses_minimax_video_input_converts_to_openai_chat_content_parts(): + body = {"model":"MiniMax-M3","input":[{"type":"message","role":"user","content":[{"type":"input_video","video_url":"https://example.test/video.mp4"}]}]} + converted = openai_responses.to_openai_body(body, "fallback-model") + assert converted["messages"][0]["content"] == [{"type":"video_url","video_url":{"url":"https://example.test/video.mp4"}}] + def test_codex_responses_skill_function_call_and_output_convert_to_chat_tool_roundtrip(): body = {