Skip to content

Python: Built-in group chat message types are rejected during checkpoint restore #7789

Description

Description

When a workflow uses GroupChatBuilder with checkpoint persistence, checkpoint restore can fail because built-in group-chat envelope types are not included in the default checkpoint deserialization allowlist.

The affected types include:

  • agent_framework_orchestrations._base_group_chat_orchestrator:GroupChatRequestMessage
  • agent_framework_orchestrations._base_group_chat_orchestrator:GroupChatParticipantMessage
  • agent_framework_orchestrations._base_group_chat_orchestrator:GroupChatResponseMessage

These are framework-owned types emitted and routed by the group-chat orchestration implementation, but users currently need to manually add them to FileCheckpointStorage(allowed_checkpoint_types=...).

Error

Failed to decode pickled checkpoint data: Checkpoint deserialization blocked for type 'agent_framework_orchestrations._base_group_chat_orchestrator:GroupChatParticipantMessage'. To allow this type, either include its 'module:qualname' key in the 'allowed_types' set passed to 'decode_checkpoint_value', or add it to 'allowed_checkpoint_types' on your checkpoint storage.

Reproduction

from agent_framework._workflows._checkpoint import FileCheckpointStorage
from agent_framework_orchestrations import GroupChatBuilder

storage = FileCheckpointStorage("./checkpoints")

workflow = GroupChatBuilder(
    participants=[...],
    orchestrator_agent=...,
    checkpoint_storage=storage,
).build()

# Run until a checkpoint contains a group-chat envelope, then restore it.

Expected behavior

Framework-owned orchestration message types should be included in the framework's trusted checkpoint type registry by default, or the orchestration package should provide a documented helper that registers all of its checkpoint-safe types.

Users should not need to maintain an internal module-path allowlist for built-in MAF orchestration envelopes.

Workaround

storage = FileCheckpointStorage(
    "./checkpoints",
    allowed_checkpoint_types=[
        "agent_framework_orchestrations._base_group_chat_orchestrator:GroupChatRequestMessage",
        "agent_framework_orchestrations._base_group_chat_orchestrator:GroupChatParticipantMessage",
        "agent_framework_orchestrations._base_group_chat_orchestrator:GroupChatResponseMessage",
    ],
)

Additional context

The same consideration may apply to other framework-owned orchestration payloads, such as handoff and Magentic orchestration event/request types. It would be useful to audit all built-in types that can cross a checkpoint boundary and ensure they are registered consistently.

Metadata

Metadata

Labels

orchestrationUsage: [Issues, PRs], Target: multi-agent orchestration (high-level patterns)pythonUsage: [Issues, PRs], Target: PythonreproducedUsage: [Issues], Target: all issues that can be reproduced by the triage workflow

Type

Projects

Status
No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions