{"record":{"id":"0260d2f169bd7e52","repo":"microsoft/autogen","slug":"kernel-must-be-provided-either-in-constructor-or-e","errorCode":null,"errorMessage":"kernel must be provided either in constructor or extra_create_args","messagePattern":"kernel must be provided either in constructor or extra_create_args","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":432,"sourceCode":"                    full_name = f\"{plugin_name}-{function_name}\"\n                else:\n                    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.","sourceCodeStart":414,"sourceCodeEnd":450,"githubUrl":"https://github.com/microsoft/autogen/blob/027ecf0a379bcc1d09956d46d12d44a3ad9cee14/python/packages/autogen-ext/src/autogen_ext/models/semantic_kernel/_sk_chat_completion_adapter.py#L414-L450","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"# before\nadapter = SKChatCompletionAdapter(model_id=\"gpt-4o\", service_id=\"openai\")\nawait adapter.create([msg])  # ValueError\n\n# after\nkernel = Kernel()\nkernel.add_service(OpenAIChatCompletion(service_id=\"openai\", ...))\nadapter = SKChatCompletionAdapter(kernel=kernel, model_id=\"gpt-4o\", service_id=\"openai\")\nawait adapter.create([msg])","handlingStrategy":"type-guard","validationCode":"from semantic_kernel import Kernel\n\nkernel = extra_create_args.get(\"kernel\", adapter._kernel) if hasattr(adapter, \"_kernel\") else None\nif not kernel:\n    raise ValueError(\"pass kernel= to SKChatCompletionAdapter or extra_create_args={'kernel': ...}\")","typeGuard":"from semantic_kernel import Kernel\n\ndef adapter_has_kernel(adapter) -> bool:\n    return bool(getattr(adapter, \"_kernel\", None))","tryCatchPattern":"try:\n    result = await adapter.create(messages)\nexcept ValueError as e:\n    if \"kernel must be provided\" in str(e):\n        result = await adapter.create(messages, extra_create_args={**extra_create_args, \"kernel\": kernel})\n    else:\n        raise","preventionTips":["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"],"tags":["semantic-kernel","configuration","kernel","required-parameter"],"backgroundTag":null,"analyzedSha":"027ecf0a379bcc1d09956d46d12d44a3ad9cee14","analyzedAt":"2026-08-15T03:38:00.719Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}