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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions