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
- Pass kernel=kernel to the SKChatCompletionAdapter constructor
- Or pass extra_create_args={'kernel': kernel} on each create call
- 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
- Always construct the Kernel first and pass it to the adapter constructor in the same setup function
- Register at least one AI service on the Kernel and assert it is not None before wiring the adapter
- Keep kernel creation in one composition-root module
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
- kernel must be an instance of semantic_kernel.kernel.Kernel
- Please set OPENAI_API_KEY environment variable.
- Please set OPENAI_API_KEY environment variable.
- Please set OPENAI_API_KEY environment variable.
- BING_API_KEY environment variable is not set
AI-assisted analysis of microsoft/autogen@027ecf0a37 (2026-08-15).
Data as JSON: /api/errors/0260d2f169bd7e52.
Report an issue: GitHub.