{"record":{"id":"c576cab8b424c9fa","repo":"microsoft/autogen","slug":"invalid-message-type-in-sequence-type-msg","errorCode":null,"errorMessage":"Invalid message type in sequence: {type(msg)}","messagePattern":"Invalid message type in sequence: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/packages/autogen-agentchat/src/autogen_agentchat/agents/_base_chat_agent.py","lineNumber":148,"sourceCode":"                text_msg = TextMessage(content=task, source=\"user\")\n                input_messages.append(text_msg)\n                if output_task_messages:\n                    output_messages.append(text_msg)\n            elif isinstance(task, BaseChatMessage):\n                input_messages.append(task)\n                if output_task_messages:\n                    output_messages.append(task)\n            else:\n                if not task:\n                    raise ValueError(\"Task list cannot be empty.\")\n                # Task is a sequence of messages.\n                for msg in task:\n                    if isinstance(msg, BaseChatMessage):\n                        input_messages.append(msg)\n                        if output_task_messages:\n                            output_messages.append(msg)\n                    else:\n                        raise ValueError(f\"Invalid message type in sequence: {type(msg)}\")\n            response = await self.on_messages(input_messages, cancellation_token)\n            if response.inner_messages is not None:\n                output_messages += response.inner_messages\n            output_messages.append(response.chat_message)\n            return TaskResult(messages=output_messages)\n\n    async def run_stream(\n        self,\n        *,\n        task: str | BaseChatMessage | Sequence[BaseChatMessage] | None = None,\n        cancellation_token: CancellationToken | None = None,\n        output_task_messages: bool = True,\n    ) -> AsyncGenerator[BaseAgentEvent | BaseChatMessage | TaskResult, None]:\n        \"\"\"Run the agent with the given task and return a stream of messages\n        and the final task result as the last item in the stream.\n\n        Args:\n            task: The task to run. Can be a string, a single message, or a sequence of messages.","sourceCodeStart":130,"sourceCodeEnd":166,"githubUrl":"https://github.com/microsoft/autogen/blob/027ecf0a379bcc1d09956d46d12d44a3ad9cee14/python/packages/autogen-agentchat/src/autogen_agentchat/agents/_base_chat_agent.py#L130-L166","documentation":"In BaseChatAgent.run(), when task is a sequence every element must be a BaseChatMessage instance. Anything else (plain strings, dicts, autogen-core message types like SystemMessage) is rejected.","triggerScenarios":"Calling agent.run(task=[\"hello\", \"world\"]) or mixing raw strings/dicts into the message list; passing autogen-core types (SystemMessage, UserMessage) instead of agentchat types (TextMessage).","commonSituations":"Developers coming from autogen-core expecting plain prompts in lists; converting chat histories that contain dicts from JSON.","solutions":["Wrap each string as TextMessage(content=s, source=\"user\").","Convert autogen-core message types to agentchat types (TextMessage/SystemMessage from autogen_agentchat.messages) before passing.","Type-check the whole list up front: all(isinstance(m, BaseChatMessage) for m in task)."],"exampleFix":"// before\nresult = await agent.run(task=[\"summarize this\", \"be brief\"])\n\n// after\nfrom autogen_agentchat.messages import TextMessage\nresult = await agent.run(task=[\n    TextMessage(content=\"summarize this\", source=\"user\"),\n])","handlingStrategy":"type-guard","validationCode":"from autogen_agentchat.messages import BaseChatMessage, TextMessage\n\ndef to_message_list(task):\n    if task is None:\n        return []\n    if isinstance(task, str):\n        return [TextMessage(content=task, source=\"user\")]\n    if isinstance(task, BaseChatMessage):\n        return [task]\n    out = []\n    for m in task:\n        out.append(m if isinstance(m, BaseChatMessage) else TextMessage(content=str(m), source=\"user\"))\n    assert out, \"task list empty\"\n    return out","typeGuard":"from autogen_agentchat.messages import BaseChatMessage\n\ndef all_chat_messages(task) -> bool:\n    return all(isinstance(m, BaseChatMessage) for m in task)","tryCatchPattern":"try:\n    result = await agent.run(task=task)\nexcept ValueError as e:\n    if \"Invalid message type\" in str(e):\n        task = [m if isinstance(m, BaseChatMessage) else TextMessage(content=m, source=\"user\") for m in task]\n        result = await agent.run(task=task)\n    else:\n        raise","preventionTips":["Always wrap raw strings in TextMessage before putting them in a task list.","Convert autogen-core message types to agentchat types at the boundary.","Validate lists with all(isinstance(m, BaseChatMessage) ...) before calling run()."],"tags":["validation","task-input","message-types"],"backgroundTag":null,"analyzedSha":"027ecf0a379bcc1d09956d46d12d44a3ad9cee14","analyzedAt":"2026-08-15T03:38:00.719Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}