microsoft/autogen · error · ValueError
kernel must be an instance of semantic_kernel.kernel.Kernel
Error message
kernel must be an instance of semantic_kernel.kernel.Kernel
What it means
Thrown by SKChatCompletionAdapter._get_kernel when a kernel value is present but is not an instance of semantic_kernel.kernel.Kernel. This guards against wrong-typed objects (mocks, config dicts, other framework kernels) being passed via the constructor or extra_create_args['kernel'] and failing later deep inside Semantic Kernel.
Source
Thrown at python/packages/autogen-ext/src/autogen_ext/models/semantic_kernel/_sk_chat_completion_adapter.py:434
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.
The `extra_create_args` dictionary can include two special keys:View on GitHub (pinned to 027ecf0a37)
Solutions
- Construct and pass a real semantic_kernel.Kernel instance with at least one AI service registered
- In tests, use MagicMock(spec=Kernel) or build a real Kernel
- Verify the import: from semantic_kernel import Kernel, and that you pass an instance not the class
Example fix
# before
adapter = SKChatCompletionAdapter(kernel={"services": [...]}, model_id="gpt-4o") # dict
# after
from semantic_kernel import Kernel
kernel = Kernel()
kernel.add_service(OpenAIChatCompletion(service_id="openai", kernel=kernel, ...))
adapter = SKChatCompletionAdapter(kernel=kernel, model_id="gpt-4o") Defensive patterns
Strategy: type-guard
Validate before calling
from semantic_kernel import Kernel
assert isinstance(kernel, Kernel), f"expected Kernel, got {type(kernel).__name__}"
adapter = SKChatCompletionAdapter(kernel=kernel, ...) Type guard
from semantic_kernel import Kernel
def is_kernel_instance(obj) -> bool:
return isinstance(obj, Kernel) Try / catch
try:
result = await adapter.create(messages, extra_create_args={"kernel": kernel})
except ValueError as e:
if "instance of semantic_kernel.kernel.Kernel" in str(e):
raise TypeError("passed a non-Kernel object; build a real semantic_kernel.Kernel") from e
raise Prevention
- In tests, use MagicMock(spec=Kernel) rather than bare Mock
- Import Kernel from semantic_kernel directly to avoid same-named classes from other packages
- Pass the instance (kernel), never the class (Kernel) or a config dict
When it happens
Trigger: Passing kernel=some_dict, a Mock/kernel stub, or a kernel class (not an instance) to the constructor, or extra_create_args={'kernel': <non-Kernel>}. The isinstance check runs on every create/create_stream call.
Common situations: Test doubles using unittest.Mock without spec=Kernel; passing a serialized kernel config dict expecting the adapter to build it; name collisions with other 'Kernel' classes imported from different packages.
Related errors
- kernel must be provided either in constructor or extra_creat
- 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/1a379f212e5782a4.
Report an issue: GitHub.