microsoft/autogen · error · ValueError

kernel must be provided either in constructor or extra_creat

Error message

kernel must be provided either in constructor or extra_create_args

What it means

Thrown by SKChatCompletionAdapter._get_kernel when no Semantic Kernel instance is available: the constructor was created without a kernel and the create/create_stream call's extra_create_args does not carry a 'kernel' entry. The adapter delegates all model interaction to a Kernel, so it cannot proceed without one.

Source

Thrown at python/packages/autogen-ext/src/autogen_ext/models/semantic_kernel/_sk_chat_completion_adapter.py:432

                    full_name = f"{plugin_name}-{function_name}"
                else:
                    full_name = function_name

                if item.id is None:
                    raise ValueError("Function call ID is required")

                if isinstance(item.arguments, Mapping):
                    arguments = json.dumps(item.arguments)
                else:
                    arguments = item.arguments or "{}"

                function_calls.append(FunctionCall(id=item.id, name=full_name, arguments=arguments))
        return function_calls

    def _get_kernel(self, extra_create_args: Mapping[str, Any]) -> Kernel:
        kernel = extra_create_args.get("kernel", self._kernel)
        if not kernel:
            raise ValueError("kernel must be provided either in constructor or extra_create_args")
        if not isinstance(kernel, Kernel):
            raise ValueError("kernel must be an instance of semantic_kernel.kernel.Kernel")
        return kernel

    def _get_prompt_settings(self, extra_create_args: Mapping[str, Any]) -> Optional[PromptExecutionSettings]:
        return extra_create_args.get("prompt_execution_settings", None) or self._prompt_settings

    async def create(
        self,
        messages: Sequence[LLMMessage],
        *,
        tools: Sequence[Tool | ToolSchema] = [],
        tool_choice: Tool | Literal["auto", "required", "none"] = "auto",
        json_output: Optional[bool | type[BaseModel]] = None,
        extra_create_args: Mapping[str, Any] = {},
        cancellation_token: Optional[CancellationToken] = None,
    ) -> CreateResult:
        """Create a chat completion using the Semantic Kernel client.

View on GitHub (pinned to 027ecf0a37)

Solutions

  1. Pass kernel=kernel to the SKChatCompletionAdapter constructor
  2. Or pass extra_create_args={'kernel': kernel} on each create call
  3. Ensure the kernel object is actually constructed (not None) before wiring the adapter

Example fix

# before
adapter = SKChatCompletionAdapter(model_id="gpt-4o", service_id="openai")
await adapter.create([msg])  # ValueError

# after
kernel = Kernel()
kernel.add_service(OpenAIChatCompletion(service_id="openai", ...))
adapter = SKChatCompletionAdapter(kernel=kernel, model_id="gpt-4o", service_id="openai")
await adapter.create([msg])
Defensive patterns

Strategy: type-guard

Validate before calling

from semantic_kernel import Kernel

kernel = extra_create_args.get("kernel", adapter._kernel) if hasattr(adapter, "_kernel") else None
if not kernel:
    raise ValueError("pass kernel= to SKChatCompletionAdapter or extra_create_args={'kernel': ...}")

Type guard

from semantic_kernel import Kernel

def adapter_has_kernel(adapter) -> bool:
    return bool(getattr(adapter, "_kernel", None))

Try / catch

try:
    result = await adapter.create(messages)
except ValueError as e:
    if "kernel must be provided" in str(e):
        result = await adapter.create(messages, extra_create_args={**extra_create_args, "kernel": kernel})
    else:
        raise

Prevention

When it happens

Trigger: Constructing SKChatCompletionAdapter without kernel= and then calling create without extra_create_args={'kernel': kernel}. Either the constructor or each call must supply the kernel; _get_kernel checks both and falsy values (None) in both places raise.

Common situations: Configuring the adapter purely from model settings and forgetting the kernel dependency; passing the kernel under a different extra_create_args key; DI setups where kernel injection silently yields None.

Related errors


AI-assisted analysis of microsoft/autogen@027ecf0a37 (2026-08-15). Data as JSON: /api/errors/0260d2f169bd7e52. Report an issue: GitHub.