From 15f01471646cf0bc135d9d8d9f04f203205b86af Mon Sep 17 00:00:00 2001 From: Tao Chen Date: Fri, 29 Aug 2025 12:52:30 -0700 Subject: [PATCH] Add message id to OpenAI chat response update (#561) --- python/packages/azure/tests/test_azure_chat_client.py | 4 ++++ python/packages/main/agent_framework/openai/_chat_client.py | 4 ++++ python/packages/main/tests/openai/test_openai_chat_client.py | 2 ++ .../main/tests/openai/test_openai_chat_client_base.py | 2 ++ 4 files changed, 12 insertions(+) diff --git a/python/packages/azure/tests/test_azure_chat_client.py b/python/packages/azure/tests/test_azure_chat_client.py index 3917fe0a7b..732e6f7fd5 100644 --- a/python/packages/azure/tests/test_azure_chat_client.py +++ b/python/packages/azure/tests/test_azure_chat_client.py @@ -580,6 +580,8 @@ async def test_get_streaming( messages=chat_history, ): assert msg is not None + assert msg.message_id is not None + assert msg.response_id is not None mock_create.assert_awaited_once_with( model=azure_openai_unit_test_env["AZURE_OPENAI_CHAT_DEPLOYMENT_NAME"], stream=True, @@ -683,6 +685,8 @@ async def test_azure_openai_chat_client_streaming() -> None: async for chunk in response: assert chunk is not None assert isinstance(chunk, ChatResponseUpdate) + assert chunk.message_id is not None + assert chunk.response_id is not None for content in chunk.contents: if isinstance(content, TextContent) and content.text: full_message += content.text diff --git a/python/packages/main/agent_framework/openai/_chat_client.py b/python/packages/main/agent_framework/openai/_chat_client.py index a242ccf364..035c32ef09 100644 --- a/python/packages/main/agent_framework/openai/_chat_client.py +++ b/python/packages/main/agent_framework/openai/_chat_client.py @@ -208,6 +208,8 @@ class OpenAIChatClientBase(OpenAIHandler, ChatClientBase): contents=[UsageContent(details=self._usage_details_from_openai(chunk.usage), raw_representation=chunk)], ai_model_id=chunk.model, additional_properties=chunk_metadata, + response_id=chunk.id, + message_id=chunk.id, ) contents: list[AIContents] = [] finish_reason: ChatFinishReason | None = None @@ -227,6 +229,8 @@ class OpenAIChatClientBase(OpenAIHandler, ChatClientBase): additional_properties=chunk_metadata, finish_reason=finish_reason, raw_representation=chunk, + response_id=chunk.id, + message_id=chunk.id, ) def _usage_details_from_openai(self, usage: CompletionUsage) -> UsageDetails: diff --git a/python/packages/main/tests/openai/test_openai_chat_client.py b/python/packages/main/tests/openai/test_openai_chat_client.py index 78207a6acb..e757b5cc6d 100644 --- a/python/packages/main/tests/openai/test_openai_chat_client.py +++ b/python/packages/main/tests/openai/test_openai_chat_client.py @@ -250,6 +250,8 @@ async def test_openai_chat_client_streaming() -> None: async for chunk in response: assert chunk is not None assert isinstance(chunk, ChatResponseUpdate) + assert chunk.message_id is not None + assert chunk.response_id is not None for content in chunk.contents: if isinstance(content, TextContent) and content.text: full_message += content.text diff --git a/python/packages/main/tests/openai/test_openai_chat_client_base.py b/python/packages/main/tests/openai/test_openai_chat_client_base.py index d1c01e21f5..63b4b9394b 100644 --- a/python/packages/main/tests/openai/test_openai_chat_client_base.py +++ b/python/packages/main/tests/openai/test_openai_chat_client_base.py @@ -162,6 +162,8 @@ async def test_scmc_chat_options( messages=chat_history, ): assert isinstance(msg, ChatResponseUpdate) + assert msg.message_id is not None + assert msg.response_id is not None mock_create.assert_awaited_once_with( model=openai_unit_test_env["OPENAI_CHAT_MODEL_ID"], stream=True,