{"record":{"id":"1a379f212e5782a4","repo":"microsoft/autogen","slug":"kernel-must-be-an-instance-of-semantic-kernel-kern","errorCode":null,"errorMessage":"kernel must be an instance of semantic_kernel.kernel.Kernel","messagePattern":"kernel must be an instance of semantic_kernel\\.kernel\\.Kernel","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/packages/autogen-ext/src/autogen_ext/models/semantic_kernel/_sk_chat_completion_adapter.py","lineNumber":434,"sourceCode":"                    full_name = function_name\n\n                if item.id is None:\n                    raise ValueError(\"Function call ID is required\")\n\n                if isinstance(item.arguments, Mapping):\n                    arguments = json.dumps(item.arguments)\n                else:\n                    arguments = item.arguments or \"{}\"\n\n                function_calls.append(FunctionCall(id=item.id, name=full_name, arguments=arguments))\n        return function_calls\n\n    def _get_kernel(self, extra_create_args: Mapping[str, Any]) -> Kernel:\n        kernel = extra_create_args.get(\"kernel\", self._kernel)\n        if not kernel:\n            raise ValueError(\"kernel must be provided either in constructor or extra_create_args\")\n        if not isinstance(kernel, Kernel):\n            raise ValueError(\"kernel must be an instance of semantic_kernel.kernel.Kernel\")\n        return kernel\n\n    def _get_prompt_settings(self, extra_create_args: Mapping[str, Any]) -> Optional[PromptExecutionSettings]:\n        return extra_create_args.get(\"prompt_execution_settings\", None) or self._prompt_settings\n\n    async def create(\n        self,\n        messages: Sequence[LLMMessage],\n        *,\n        tools: Sequence[Tool | ToolSchema] = [],\n        tool_choice: Tool | Literal[\"auto\", \"required\", \"none\"] = \"auto\",\n        json_output: Optional[bool | type[BaseModel]] = None,\n        extra_create_args: Mapping[str, Any] = {},\n        cancellation_token: Optional[CancellationToken] = None,\n    ) -> CreateResult:\n        \"\"\"Create a chat completion using the Semantic Kernel client.\n\n        The `extra_create_args` dictionary can include two special keys:","sourceCodeStart":416,"sourceCodeEnd":452,"githubUrl":"https://github.com/microsoft/autogen/blob/027ecf0a379bcc1d09956d46d12d44a3ad9cee14/python/packages/autogen-ext/src/autogen_ext/models/semantic_kernel/_sk_chat_completion_adapter.py#L416-L452","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"# before\nadapter = SKChatCompletionAdapter(kernel={\"services\": [...]}, model_id=\"gpt-4o\")  # dict\n\n# after\nfrom semantic_kernel import Kernel\nkernel = Kernel()\nkernel.add_service(OpenAIChatCompletion(service_id=\"openai\", kernel=kernel, ...))\nadapter = SKChatCompletionAdapter(kernel=kernel, model_id=\"gpt-4o\")","handlingStrategy":"type-guard","validationCode":"from semantic_kernel import Kernel\n\nassert isinstance(kernel, Kernel), f\"expected Kernel, got {type(kernel).__name__}\"\nadapter = SKChatCompletionAdapter(kernel=kernel, ...)","typeGuard":"from semantic_kernel import Kernel\n\ndef is_kernel_instance(obj) -> bool:\n    return isinstance(obj, Kernel)","tryCatchPattern":"try:\n    result = await adapter.create(messages, extra_create_args={\"kernel\": kernel})\nexcept ValueError as e:\n    if \"instance of semantic_kernel.kernel.Kernel\" in str(e):\n        raise TypeError(\"passed a non-Kernel object; build a real semantic_kernel.Kernel\") from e\n    raise","preventionTips":["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"],"tags":["semantic-kernel","type-validation","kernel","configuration"],"backgroundTag":null,"analyzedSha":"027ecf0a379bcc1d09956d46d12d44a3ad9cee14","analyzedAt":"2026-08-15T03:38:00.719Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}