diff --git a/python/semantic_kernel/agents/agent.py b/python/semantic_kernel/agents/agent.py index 31712a7ebfb9..3210dc51de02 100644 --- a/python/semantic_kernel/agents/agent.py +++ b/python/semantic_kernel/agents/agent.py @@ -13,6 +13,7 @@ from pydantic import Field, model_validator from semantic_kernel.agents.channels.agent_channel import AgentChannel +from semantic_kernel.connectors.ai.prompt_execution_settings import PromptExecutionSettings from semantic_kernel.contents.chat_message_content import CMC_ITEM_TYPES, ChatMessageContent from semantic_kernel.contents.streaming_chat_message_content import StreamingChatMessageContent from semantic_kernel.contents.utils.author_role import AuthorRole @@ -998,9 +999,19 @@ def _normalize_spec_fields( if v.get("default") is not None } - # Start with model options - arguments = KernelArguments(**model_options) - # Update with input defaults (only if not already provided by model options) + # Convert model options to execution settings + # Model options (like response_format, temperature, etc.) should be execution settings, + # not regular arguments + if model_options: + # Create PromptExecutionSettings from model options + # The PromptExecutionSettings constructor handles **kwargs by putting them in extension_data + # and then unpacking them to actual fields if they exist + exec_settings = PromptExecutionSettings(**model_options) + arguments = KernelArguments(settings=exec_settings) + else: + arguments = KernelArguments() + + # Add input defaults as regular dict items (not execution settings) for k, v in input_defaults.items(): if k not in arguments: arguments[k] = v