microsoft/autogen · error · ValueError

Invalid message type in sequence: {type(msg)}

Error message

Invalid message type in sequence: {type(msg)}

What it means

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.

Source

Thrown at python/packages/autogen-agentchat/src/autogen_agentchat/agents/_base_chat_agent.py:148

                text_msg = TextMessage(content=task, source="user")
                input_messages.append(text_msg)
                if output_task_messages:
                    output_messages.append(text_msg)
            elif isinstance(task, BaseChatMessage):
                input_messages.append(task)
                if output_task_messages:
                    output_messages.append(task)
            else:
                if not task:
                    raise ValueError("Task list cannot be empty.")
                # Task is a sequence of messages.
                for msg in task:
                    if isinstance(msg, BaseChatMessage):
                        input_messages.append(msg)
                        if output_task_messages:
                            output_messages.append(msg)
                    else:
                        raise ValueError(f"Invalid message type in sequence: {type(msg)}")
            response = await self.on_messages(input_messages, cancellation_token)
            if response.inner_messages is not None:
                output_messages += response.inner_messages
            output_messages.append(response.chat_message)
            return TaskResult(messages=output_messages)

    async def run_stream(
        self,
        *,
        task: str | BaseChatMessage | Sequence[BaseChatMessage] | None = None,
        cancellation_token: CancellationToken | None = None,
        output_task_messages: bool = True,
    ) -> AsyncGenerator[BaseAgentEvent | BaseChatMessage | TaskResult, None]:
        """Run the agent with the given task and return a stream of messages
        and the final task result as the last item in the stream.

        Args:
            task: The task to run. Can be a string, a single message, or a sequence of messages.

View on GitHub (pinned to 027ecf0a37)

Solutions

  1. Wrap each string as TextMessage(content=s, source="user").
  2. Convert autogen-core message types to agentchat types (TextMessage/SystemMessage from autogen_agentchat.messages) before passing.
  3. Type-check the whole list up front: all(isinstance(m, BaseChatMessage) for m in task).

Example fix

// before
result = await agent.run(task=["summarize this", "be brief"])

// after
from autogen_agentchat.messages import TextMessage
result = await agent.run(task=[
    TextMessage(content="summarize this", source="user"),
])
Defensive patterns

Strategy: type-guard

Validate before calling

from autogen_agentchat.messages import BaseChatMessage, TextMessage

def to_message_list(task):
    if task is None:
        return []
    if isinstance(task, str):
        return [TextMessage(content=task, source="user")]
    if isinstance(task, BaseChatMessage):
        return [task]
    out = []
    for m in task:
        out.append(m if isinstance(m, BaseChatMessage) else TextMessage(content=str(m), source="user"))
    assert out, "task list empty"
    return out

Type guard

from autogen_agentchat.messages import BaseChatMessage

def all_chat_messages(task) -> bool:
    return all(isinstance(m, BaseChatMessage) for m in task)

Try / catch

try:
    result = await agent.run(task=task)
except ValueError as e:
    if "Invalid message type" in str(e):
        task = [m if isinstance(m, BaseChatMessage) else TextMessage(content=m, source="user") for m in task]
        result = await agent.run(task=task)
    else:
        raise

Prevention

When it happens

Trigger: 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).

Common situations: Developers coming from autogen-core expecting plain prompts in lists; converting chat histories that contain dicts from JSON.

Related errors


AI-assisted analysis of microsoft/autogen@027ecf0a37 (2026-08-15). Data as JSON: /api/errors/c576cab8b424c9fa. Report an issue: GitHub.