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 b802f29597..55c1ba0039 100644 --- a/python/packages/foundry_hosting/agent_framework_foundry_hosting/_responses.py +++ b/python/packages/foundry_hosting/agent_framework_foundry_hosting/_responses.py @@ -20,6 +20,10 @@ ComputerScreenshotContent, CreateResponse, FunctionCallOutputItemParam, + FunctionShellAction, + FunctionShellCallOutputContent, + FunctionShellCallOutputExitOutcome, + LocalEnvironmentResource, MessageContent, MessageContentInputFileContent, MessageContentInputImageContent, @@ -89,17 +93,12 @@ def __init__( ) self._agent = agent - self.create_handler(self._handle_create) # pyright: ignore[reportUnknownMemberType] + self.response_handler(self._handler) # pyright: ignore[reportUnknownMemberType] # Append the user agent prefix for telemetry purposes append_to_user_agent(self.USER_AGENT_PREFIX) - self.create_handler(self._handle_create) # pyright: ignore[reportUnknownMemberType] - - # Append the user agent prefix for telemetry purposes - append_to_user_agent(self.USER_AGENT_PREFIX) - - async def _handle_create( + async def _handler( self, request: CreateResponse, context: ResponseContext, @@ -551,24 +550,26 @@ async def _to_outputs(stream: ResponseEventStream, content: Content) -> AsyncIte async for event in stream.aoutput_item_custom_tool_call_output(content.call_id or "", output): yield event elif content.type == "shell_tool_call": - action: dict[str, Any] = {"type": "exec", "command": content.commands or []} + action = FunctionShellAction(commands=content.commands or [], timeout_ms=0, max_output_length=0) async for event in stream.aoutput_item_function_shell_call( content.call_id or "", action, - {}, + LocalEnvironmentResource(), status=content.status or "completed", ): yield event elif content.type == "shell_tool_result": - output_items: list[dict[str, Any]] = [] + output_items: list[FunctionShellCallOutputContent] = [] if content.outputs: for out in content.outputs: - output_items.append({ - "type": "shell_output", - "stdout": getattr(out, "stdout", "") or "", - "stderr": getattr(out, "stderr", "") or "", - "exit_code": getattr(out, "exit_code", None), - }) + exit_code = getattr(out, "exit_code", None) + output_items.append( + FunctionShellCallOutputContent( + stdout=getattr(out, "stdout", "") or "", + stderr=getattr(out, "stderr", "") or "", + outcome=FunctionShellCallOutputExitOutcome(exit_code=exit_code if exit_code is not None else 0), + ) + ) async for event in stream.aoutput_item_function_shell_call_output( content.call_id or "", output_items, diff --git a/python/packages/foundry_hosting/pyproject.toml b/python/packages/foundry_hosting/pyproject.toml index 23217fa74e..b85c8ed798 100644 --- a/python/packages/foundry_hosting/pyproject.toml +++ b/python/packages/foundry_hosting/pyproject.toml @@ -24,22 +24,11 @@ classifiers = [ ] dependencies = [ "agent-framework-core>=1.0.0,<2", - "azure-ai-agentserver-core==2.0.0a20260414006", - "azure-ai-agentserver-responses==1.0.0a20260414006", - "azure-ai-agentserver-invocations==1.0.0a20260414006", - "azure-monitor-opentelemetry-exporter>=1.0.0a1" + "azure-ai-agentserver-core==2.0.0b1", + "azure-ai-agentserver-responses==1.0.0b1", + "azure-ai-agentserver-invocations==1.0.0b1", ] -[tool.uv.sources] -azure-ai-agentserver-responses = { index = "azure-sdk-for-python" } -azure-ai-agentserver-invocations = { index = "azure-sdk-for-python" } -azure-ai-agentserver-core = { index = "azure-sdk-for-python" } -azure-monitor-opentelemetry-exporter = { index = "azure-sdk-for-python" } - -[[tool.uv.index]] -name = "azure-sdk-for-python" -url = "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/" - [tool.uv] prerelease = "if-necessary-or-explicit" environments = [ diff --git a/python/samples/04-hosting/foundry-hosted-agents/responses/04_workflows/main.py b/python/samples/04-hosting/foundry-hosted-agents/responses/04_workflows/main.py index d4d4d00057..47bd07dc39 100644 --- a/python/samples/04-hosting/foundry-hosted-agents/responses/04_workflows/main.py +++ b/python/samples/04-hosting/foundry-hosted-agents/responses/04_workflows/main.py @@ -34,10 +34,6 @@ def main(): "You are an excellent content writer. You create new content and edit contents based on the feedback." ), name="writer", - # History will be managed by the hosting infrastructure, thus there - # is no need to store history by the service. Learn more at: - # https://developers.openai.com/api/reference/resources/responses/methods/create - default_options={"store": False}, ) reviewer_agent = Agent( @@ -48,10 +44,6 @@ def main(): "Provide the feedback in the most concise manner possible." ), name="reviewer", - # History will be managed by the hosting infrastructure, thus there - # is no need to store history by the service. Learn more at: - # https://developers.openai.com/api/reference/resources/responses/methods/create - default_options={"store": False}, ) workflow_agent = ( diff --git a/python/uv.lock b/python/uv.lock index 6d5f6679f9..36834e9238 100644 --- a/python/uv.lock +++ b/python/uv.lock @@ -508,16 +508,14 @@ dependencies = [ { name = "azure-ai-agentserver-core", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "azure-ai-agentserver-invocations", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "azure-ai-agentserver-responses", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "azure-monitor-opentelemetry-exporter", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, ] [package.metadata] requires-dist = [ { name = "agent-framework-core", editable = "packages/core" }, - { name = "azure-ai-agentserver-core", specifier = "==2.0.0a20260414006", index = "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/" }, - { name = "azure-ai-agentserver-invocations", specifier = "==1.0.0a20260414006", index = "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/" }, - { name = "azure-ai-agentserver-responses", specifier = "==1.0.0a20260414006", index = "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/" }, - { name = "azure-monitor-opentelemetry-exporter", specifier = ">=1.0.0a1", index = "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/" }, + { name = "azure-ai-agentserver-core", specifier = "==2.0.0b1" }, + { name = "azure-ai-agentserver-invocations", specifier = "==1.0.0b1" }, + { name = "azure-ai-agentserver-responses", specifier = "==1.0.0b1" }, ] [[package]] @@ -1036,8 +1034,8 @@ wheels = [ [[package]] name = "azure-ai-agentserver-core" -version = "2.0.0a20260414006" -source = { registry = "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/" } +version = "2.0.0b1" +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "azure-monitor-opentelemetry-exporter", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "hypercorn", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, @@ -1046,36 +1044,36 @@ dependencies = [ { name = "opentelemetry-sdk", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "starlette", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, ] -sdist = { url = "https://pkgs.dev.azure.com/azure-sdk/29ec6040-b234-4e31-b139-33dc4287b756/_packaging/3572dbf9-b5ef-433b-9137-fc4d7768e7cc/pypi/download/azure-ai-agentserver-core/2a20260414006/azure_ai_agentserver_core-2.0.0a20260414006.tar.gz", hash = "sha256:b8d6c5d753650b0eae7468f4dce58faec52baec98ad31744fd5a505c8f3f9267" } +sdist = { url = "https://files.pythonhosted.org/packages/50/a5/8007cc0cbb004290998182f123d6151676fd3cdefaf0bddb2394a6a98278/azure_ai_agentserver_core-2.0.0b1.tar.gz", hash = "sha256:a762186a027586f5c365c096c3fc6ae7dac3b53a3b00b523f0fd9c1d9b8e7bc7", size = 37035, upload-time = "2026-04-15T19:09:40.022Z" } wheels = [ - { url = "https://pkgs.dev.azure.com/azure-sdk/29ec6040-b234-4e31-b139-33dc4287b756/_packaging/3572dbf9-b5ef-433b-9137-fc4d7768e7cc/pypi/download/azure-ai-agentserver-core/2a20260414006/azure_ai_agentserver_core-2.0.0a20260414006-py3-none-any.whl", hash = "sha256:1e816ee611ecdd82d49aee836d6229fae5db1d2321919691afa77de08ad65119" }, + { url = "https://files.pythonhosted.org/packages/a1/1c/e917df68bb92239816f5bf177d6885a04c27a51d77f23608b49c60654325/azure_ai_agentserver_core-2.0.0b1-py3-none-any.whl", hash = "sha256:85c3e4470c30451bc122aa7fe009778514b6f0d52897562f4104ce5f9e382ba5", size = 24317, upload-time = "2026-04-15T19:09:41.197Z" }, ] [[package]] name = "azure-ai-agentserver-invocations" -version = "1.0.0a20260414006" -source = { registry = "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/" } +version = "1.0.0b1" +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "azure-ai-agentserver-core", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, ] -sdist = { url = "https://pkgs.dev.azure.com/azure-sdk/29ec6040-b234-4e31-b139-33dc4287b756/_packaging/3572dbf9-b5ef-433b-9137-fc4d7768e7cc/pypi/download/azure-ai-agentserver-invocations/1a20260414006/azure_ai_agentserver_invocations-1.0.0a20260414006.tar.gz", hash = "sha256:5503f95be679d4245d51d7416e4264fdab471a3bb9db633385cc2d5e950f9df2" } +sdist = { url = "https://files.pythonhosted.org/packages/b4/33/207f901d484646764b5d9eec3f3a02a90658c32aa78821d0221323b01081/azure_ai_agentserver_invocations-1.0.0b1.tar.gz", hash = "sha256:800dd39e32f6e58c0bc56fe74bb77bf4ccda77e133c4eaaa69d7cd8b0bf77a03", size = 29957, upload-time = "2026-04-15T19:35:31.015Z" } wheels = [ - { url = "https://pkgs.dev.azure.com/azure-sdk/29ec6040-b234-4e31-b139-33dc4287b756/_packaging/3572dbf9-b5ef-433b-9137-fc4d7768e7cc/pypi/download/azure-ai-agentserver-invocations/1a20260414006/azure_ai_agentserver_invocations-1.0.0a20260414006-py3-none-any.whl", hash = "sha256:ccae5703c38e25a177075fdfca45fe7cac55c39776ecb0f84c12d7438cfda0cf" }, + { url = "https://files.pythonhosted.org/packages/52/02/e1dfa6747de27163c16bc4bfbb7aeac2d2bb6565e85ed92a6675ccee1ff8/azure_ai_agentserver_invocations-1.0.0b1-py3-none-any.whl", hash = "sha256:3efa15cc6011ba203760048b0153bd711a75adb56fe9b2a34565145a0fa82b09", size = 11376, upload-time = "2026-04-15T19:35:32.067Z" }, ] [[package]] name = "azure-ai-agentserver-responses" -version = "1.0.0a20260414006" -source = { registry = "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/" } +version = "1.0.0b1" +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "azure-ai-agentserver-core", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "azure-core", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "isodate", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, ] -sdist = { url = "https://pkgs.dev.azure.com/azure-sdk/29ec6040-b234-4e31-b139-33dc4287b756/_packaging/3572dbf9-b5ef-433b-9137-fc4d7768e7cc/pypi/download/azure-ai-agentserver-responses/1a20260414006/azure_ai_agentserver_responses-1.0.0a20260414006.tar.gz", hash = "sha256:671a93454cae3a0efdc37fc481e4eb45b1356e5339c8d3a8a0a171632ec8cae5" } +sdist = { url = "https://files.pythonhosted.org/packages/cf/68/9a500cf1869d416810c3d856e483d707890686124adf0d35ff5179f59a4a/azure_ai_agentserver_responses-1.0.0b1.tar.gz", hash = "sha256:8af679bc0369f3e2637348b571942b5b41a1bccc5f261d965211e590a191049b", size = 361804, upload-time = "2026-04-15T19:34:19.404Z" } wheels = [ - { url = "https://pkgs.dev.azure.com/azure-sdk/29ec6040-b234-4e31-b139-33dc4287b756/_packaging/3572dbf9-b5ef-433b-9137-fc4d7768e7cc/pypi/download/azure-ai-agentserver-responses/1a20260414006/azure_ai_agentserver_responses-1.0.0a20260414006-py3-none-any.whl", hash = "sha256:70a497fd78a1c139568b15ef1035e0ff8cf5eaa2d512772398c866fa19e9d2ef" }, + { url = "https://files.pythonhosted.org/packages/41/e8/cf0ac9673b9d8952fd03ee3de9d6d3d51320942ae31b72cdc503f9892d2f/azure_ai_agentserver_responses-1.0.0b1-py3-none-any.whl", hash = "sha256:4d42534b5b6e523219e92d837efde48f76e03882f7013d1fbb4af21e47c6469b", size = 253262, upload-time = "2026-04-15T19:34:21.069Z" }, ] [[package]] @@ -1192,8 +1190,8 @@ wheels = [ [[package]] name = "azure-monitor-opentelemetry-exporter" -version = "1.0.0a20260410001" -source = { registry = "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/" } +version = "1.0.0b51" +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "azure-core", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "azure-identity", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, @@ -1202,9 +1200,9 @@ dependencies = [ { name = "opentelemetry-sdk", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "psutil", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, ] -sdist = { url = "https://pkgs.dev.azure.com/azure-sdk/29ec6040-b234-4e31-b139-33dc4287b756/_packaging/3572dbf9-b5ef-433b-9137-fc4d7768e7cc/pypi/download/azure-monitor-opentelemetry-exporter/1a20260410001/azure_monitor_opentelemetry_exporter-1.0.0a20260410001.tar.gz", hash = "sha256:24be6d2fa88454b08f1aa82958917681ff434f8a19d64c474ac8caebe125217e" } +sdist = { url = "https://files.pythonhosted.org/packages/bc/a4/a6cd2d389bc1009300bcd57c9e2ace4b7e7ae1e5dc0bda415ee803629cf2/azure_monitor_opentelemetry_exporter-1.0.0b51.tar.gz", hash = "sha256:a6171c34326bcd6216938bb40d715c15f1f22984ac1986fc97231336d8ac4c3c", size = 319837, upload-time = "2026-04-06T21:45:46.378Z" } wheels = [ - { url = "https://pkgs.dev.azure.com/azure-sdk/29ec6040-b234-4e31-b139-33dc4287b756/_packaging/3572dbf9-b5ef-433b-9137-fc4d7768e7cc/pypi/download/azure-monitor-opentelemetry-exporter/1a20260410001/azure_monitor_opentelemetry_exporter-1.0.0a20260410001-py2.py3-none-any.whl", hash = "sha256:77823990c3ec7f7bb400a1eb0d7edf99cad04f0b0e393d6f6dd3791bf7d0c0cf" }, + { url = "https://files.pythonhosted.org/packages/ea/1a/6b0b7a6181b42709103a65a676c89fd5055cb1d1b281ebe10c49254a170f/azure_monitor_opentelemetry_exporter-1.0.0b51-py2.py3-none-any.whl", hash = "sha256:6572cac11f96e3b18ae1187cb35cf3b40d0004655dae8048896c41c765bea530", size = 242104, upload-time = "2026-04-06T21:45:47.856Z" }, ] [[package]]