From d7defdd67010a529f905570faab49091a22843fd Mon Sep 17 00:00:00 2001 From: Hardik K Date: Tue, 20 Oct 2026 01:38:16 +0530 Subject: [PATCH] fix(mistral): set metadata usage to CompletionUsage instead of tuple Fixes #14617 --- .../ai/mistral_ai/services/mistral_ai_chat_completion.py | 8 +++----- .../mistral_ai/services/test_mistralai_chat_completion.py | 4 ++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/python/semantic_kernel/connectors/ai/mistral_ai/services/mistral_ai_chat_completion.py b/python/semantic_kernel/connectors/ai/mistral_ai/services/mistral_ai_chat_completion.py index ddfc718653ef..26e474d12e37 100644 --- a/python/semantic_kernel/connectors/ai/mistral_ai/services/mistral_ai_chat_completion.py +++ b/python/semantic_kernel/connectors/ai/mistral_ai/services/mistral_ai_chat_completion.py @@ -251,11 +251,9 @@ def _get_metadata_from_response(self, response: ChatCompletionResponse | Complet } # Check if usage exists and has a value, then add it to the metadata if hasattr(response, "usage") and response.usage is not None: - metadata["usage"] = ( - CompletionUsage( - prompt_tokens=response.usage.prompt_tokens, - completion_tokens=response.usage.completion_tokens, - ), + metadata["usage"] = CompletionUsage( + prompt_tokens=response.usage.prompt_tokens, + completion_tokens=response.usage.completion_tokens, ) return metadata diff --git a/python/tests/unit/connectors/ai/mistral_ai/services/test_mistralai_chat_completion.py b/python/tests/unit/connectors/ai/mistral_ai/services/test_mistralai_chat_completion.py index 2c65de17c0ab..35df9d37e990 100644 --- a/python/tests/unit/connectors/ai/mistral_ai/services/test_mistralai_chat_completion.py +++ b/python/tests/unit/connectors/ai/mistral_ai/services/test_mistralai_chat_completion.py @@ -15,6 +15,7 @@ ) from semantic_kernel.connectors.ai.chat_completion_client_base import ChatCompletionClientBase +from semantic_kernel.connectors.ai.completion_usage import CompletionUsage from semantic_kernel.connectors.ai.function_call_choice_configuration import FunctionCallChoiceConfiguration from semantic_kernel.connectors.ai.function_choice_behavior import FunctionChoiceBehavior, FunctionChoiceType from semantic_kernel.connectors.ai.mistral_ai.prompt_execution_settings.mistral_ai_prompt_execution_settings import ( @@ -112,6 +113,9 @@ async def test_complete_chat_contents( chat_history=chat_history, settings=mock_settings, kernel=kernel, arguments=arguments ) assert content is not None + assert isinstance(content[0].metadata["usage"], CompletionUsage) + assert content[0].metadata["usage"].prompt_tokens == 10 + assert content[0].metadata["usage"].completion_tokens == 5 mock_message_text_content = ChatMessageContent(role=AuthorRole.ASSISTANT, items=[TextContent(text="test")])