{"record":{"id":"c4e4856c1ad501d4","repo":"microsoft/semantic-kernel","slug":"agent-is-not-of-the-expected-type-type-bedrockage","errorCode":null,"errorMessage":"Agent is not of the expected type {type(BedrockAgent)}.","messagePattern":"Agent is not of the expected type (.+?)\\.","errorType":"exception","errorClass":"AgentChatException","httpStatus":null,"severity":"error","filePath":"python/semantic_kernel/agents/channels/bedrock_agent_channel.py","lineNumber":59,"sourceCode":"    thread: \"BedrockAgentThread\"\n    MESSAGE_PLACEHOLDER: ClassVar[str] = \"[SILENCE]\"\n\n    @override\n    async def invoke(self, agent: \"Agent\", **kwargs: Any) -> AsyncIterable[tuple[bool, ChatMessageContent]]:\n        \"\"\"Perform a discrete incremental interaction between a single Agent and AgentChat.\n\n        Args:\n            agent: The agent to interact with.\n            kwargs: Additional keyword arguments.\n\n        Returns:\n            An async iterable of ChatMessageContent with a boolean indicating if the\n            message should be visible external to the agent.\n        \"\"\"\n        from semantic_kernel.agents.bedrock.bedrock_agent import BedrockAgent\n\n        if not isinstance(agent, BedrockAgent):\n            raise AgentChatException(f\"Agent is not of the expected type {type(BedrockAgent)}.\")\n        if not self.messages:\n            # This is not supposed to happen, as the channel won't get invoked\n            # before it has received messages. This is just extra safety.\n            raise AgentChatException(\"No chat history available.\")\n\n        # Preprocess chat history\n        await self._ensure_history_alternates()\n        await self._ensure_last_message_is_user()\n\n        async for response in agent.invoke(\n            messages=self.messages[-1].content,\n            thread=self.thread,\n            sessionState=await self._parse_chat_history_to_session_state(),\n        ):\n            # All messages from Bedrock agents are user facing, i.e., function calls are not returned as messages\n            self.messages.append(response.message)\n            yield True, response.message\n","sourceCodeStart":41,"sourceCodeEnd":77,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/python/semantic_kernel/agents/channels/bedrock_agent_channel.py#L41-L77","documentation":"Raised by BedrockAgentChannel.invoke (an AgentChatException) when the supplied agent is not an instance of BedrockAgent. Channels are agent-type-specific; the Bedrock channel only knows how to drive a BedrockAgent, so any other agent type is rejected before invocation.","triggerScenarios":"Registering/invoking a non-Bedrock agent (e.g. ChatCompletionAgent, OpenAIAssistantAgent) through an AgentGroupChat or channel that was created for a BedrockAgent; mixing agent types in a group chat where the channel type mismatches.","commonSituations":"Adding agents of different concrete types to an AgentGroupChat and letting the wrong channel receive a foreign agent; refactoring that swaps an agent's base type without updating the group; incorrect agent construction returning a base Agent instead of BedrockAgent.","solutions":["Ensure only BedrockAgent instances are invoked through the BedrockAgentChannel / added to that agent group chat.","Separate agents by type into compatible groups, or use AgentGroupChat which routes each agent to its own channel.","Verify the agent object you pass is the concrete BedrockAgent subclass, not a parent or sibling type.","Check that agent construction returns the intended subclass (no factory returning a wrong type)."],"exampleFix":"// before\nchat = AgentGroupChat(agent=chat_completion_agent)  # wrong channel/type\nawait chat.invoke()  # raises in bedrock channel\n// after\nchat = AgentGroupChat(agent=bedrock_agent)  # matching types\nawait chat.invoke()","handlingStrategy":"type-guard","validationCode":"from semantic_kernel.agents.bedrock.bedrock_agent import BedrockAgent\ndef assert_bedrock(agent):\n    if not isinstance(agent, BedrockAgent):\n        raise TypeError(f'Expected BedrockAgent, got {type(agent)}')\n    return agent","typeGuard":"def is_bedrock_agent(agent) -> bool:\n    from semantic_kernel.agents.bedrock.bedrock_agent import BedrockAgent\n    return isinstance(agent, BedrockAgent)","tryCatchPattern":"from semantic_kernel.exceptions.agent_exceptions import AgentChatException\ntry:\n    await chat.invoke(agent=agent)\nexcept AgentChatException as e:\n    if 'expected type' in str(e): raise TypeError(e)\n    raise","preventionTips":["Keep AgentGroupChat membership type-consistent","Validate agent concrete type before adding to a chat"],"tags":["bedrock","channel","agent-type","group-chat","type-guard"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}