From b7710095c81d65e12e63c55d5788194e09a96958 Mon Sep 17 00:00:00 2001 From: Alex Castillo Date: Thu, 29 Oct 2026 06:11:55 -0400 Subject: [PATCH] Python: Fix Mistral AI seed setting being rejected by the SDK --- .../mistral_ai_prompt_execution_settings.py | 12 ++++++++++++ .../services/test_mistralai_chat_completion.py | 4 ++-- .../mistral_ai/test_mistralai_request_settings.py | 15 +++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/python/semantic_kernel/connectors/ai/mistral_ai/prompt_execution_settings/mistral_ai_prompt_execution_settings.py b/python/semantic_kernel/connectors/ai/mistral_ai/prompt_execution_settings/mistral_ai_prompt_execution_settings.py index 8153db93577f..6788b2c38191 100644 --- a/python/semantic_kernel/connectors/ai/mistral_ai/prompt_execution_settings/mistral_ai_prompt_execution_settings.py +++ b/python/semantic_kernel/connectors/ai/mistral_ai/prompt_execution_settings/mistral_ai_prompt_execution_settings.py @@ -56,3 +56,15 @@ class MistralAIChatPromptExecutionSettings(MistralAIPromptExecutionSettings): "on the function choice configuration.", ), ] = None + + def prepare_settings_dict(self, **kwargs) -> dict[str, Any]: + """Prepare the settings as a dictionary for sending to the AI service. + + The Mistral SDK has no `seed` parameter, it takes `random_seed`, so `seed` is sent + as `random_seed` unless that one is set explicitly. + """ + settings = super().prepare_settings_dict(**kwargs) + seed = settings.pop("seed", None) + if seed is not None: + settings.setdefault("random_seed", seed) + return settings 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 35df9d37e990..fa66f1ca42a6 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 @@ -385,7 +385,7 @@ async def test_with_different_execution_settings(kernel: Kernel, mock_mistral_ai chat_history=chat_history, settings=settings, kernel=kernel, arguments=arguments ) assert mock_mistral_ai_client_completion.chat.complete_async.call_args.kwargs["temperature"] == 0.2 - assert mock_mistral_ai_client_completion.chat.complete_async.call_args.kwargs["seed"] == 2 + assert mock_mistral_ai_client_completion.chat.complete_async.call_args.kwargs["random_seed"] == 2 async def test_with_different_execution_settings_stream( @@ -406,7 +406,7 @@ async def test_with_different_execution_settings_stream( ): continue assert mock_mistral_ai_client_completion_stream.chat.stream_async.call_args.kwargs["temperature"] == 0.2 - assert mock_mistral_ai_client_completion_stream.chat.stream_async.call_args.kwargs["seed"] == 2 + assert mock_mistral_ai_client_completion_stream.chat.stream_async.call_args.kwargs["random_seed"] == 2 async def test_mistral_ai_chat_completion_get_chat_message_contents_success(): diff --git a/python/tests/unit/connectors/ai/mistral_ai/test_mistralai_request_settings.py b/python/tests/unit/connectors/ai/mistral_ai/test_mistralai_request_settings.py index 1d8fa17ad633..579d979884b7 100644 --- a/python/tests/unit/connectors/ai/mistral_ai/test_mistralai_request_settings.py +++ b/python/tests/unit/connectors/ai/mistral_ai/test_mistralai_request_settings.py @@ -123,3 +123,18 @@ def test_create_options_with_function_choice_behavior(): }, ) assert settings.function_choice_behavior + + +def test_prepare_settings_dict_maps_seed_to_random_seed(): + # The Mistral SDK has no `seed` parameter, only `random_seed` + settings = MistralAIChatPromptExecutionSettings(seed=42) + options = settings.prepare_settings_dict() + assert "seed" not in options + assert options["random_seed"] == 42 + + +def test_prepare_settings_dict_keeps_explicit_random_seed(): + settings = MistralAIChatPromptExecutionSettings(seed=42, random_seed=7) + options = settings.prepare_settings_dict() + assert "seed" not in options + assert options["random_seed"] == 7