From 2c6aa98b18f4bb4edbc68208d67c535d2ca4b723 Mon Sep 17 00:00:00 2001 From: Tao Chen Date: Fri, 24 Apr 2026 12:04:58 -0700 Subject: [PATCH] Add file data type support --- .../_responses.py | 2 + .../foundry_hosting/tests/test_responses.py | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/python/packages/foundry_hosting/agent_framework_foundry_hosting/_responses.py b/python/packages/foundry_hosting/agent_framework_foundry_hosting/_responses.py index 9078c59d22..16fd6e1d58 100644 --- a/python/packages/foundry_hosting/agent_framework_foundry_hosting/_responses.py +++ b/python/packages/foundry_hosting/agent_framework_foundry_hosting/_responses.py @@ -1117,6 +1117,8 @@ def _convert_message_content(content: MessageContent) -> Content: return Content.from_uri(file.file_url) if file.file_id: return Content.from_hosted_file(file.file_id, name=file.filename) + if file.file_data: + return Content.from_uri(file.file_data) if content.type == "computer_screenshot": screenshot = cast(ComputerScreenshotContent, content) return Content.from_uri(screenshot.image_url) diff --git a/python/packages/foundry_hosting/tests/test_responses.py b/python/packages/foundry_hosting/tests/test_responses.py index 237a3c7634..60a3532ee2 100644 --- a/python/packages/foundry_hosting/tests/test_responses.py +++ b/python/packages/foundry_hosting/tests/test_responses.py @@ -1507,6 +1507,47 @@ class TestMultiTurnMixedContent: assert messages[0].contents[1].type == "uri" assert messages[0].contents[1].uri == "https://example.com/doc.pdf" + async def test_text_and_file_data_input_single_turn(self) -> None: + """Agent receives a message with text and file content via inline file_data.""" + agent = _make_agent( + response=AgentResponse(messages=[Message(role="assistant", contents=[Content.from_text("File received")])]) + ) + server = _make_server(agent) + + resp = await _post_json( + server, + { + "model": "test-model", + "input": [ + { + "type": "message", + "role": "user", + "content": [ + {"type": "input_text", "text": "Summarize this document"}, + { + "type": "input_file", + "file_data": "data:application/pdf;base64,JVBERi0xLjQ=", + "filename": "doc.pdf", + }, + ], + } + ], + "stream": False, + }, + ) + + assert resp.status_code == 200 + body = resp.json() + assert body["status"] == "completed" + + messages = agent.run.call_args.kwargs["messages"] + assert len(messages) == 1 + assert len(messages[0].contents) == 2 + assert messages[0].contents[0].type == "text" + assert messages[0].contents[0].text == "Summarize this document" + assert messages[0].contents[1].type == "data" + assert messages[0].contents[1].uri == "data:application/pdf;base64,JVBERi0xLjQ=" + async def test_mixed_text_and_image_input(self) -> None: """Agent receives a single message with both text and image content.""" agent = _make_agent(