OpenBMB/ChatDev · error · RegistryError

Edge condition type '{condition.type}' does not provide a ma

Error message

Edge condition type '{condition.type}' does not provide a manager implementation

What it means

The requested edge condition type is registered, but its registration has no manager_cls, so build_edge_condition_manager cannot instantiate an EdgeConditionManager for the edge. Every usable condition type must supply a manager implementation class.

Source

Thrown at runtime/edge/conditions/registry.py:80

    return registration


def iter_edge_condition_registrations() -> Dict[str, EdgeConditionRegistration]:
    """Iterate over registered condition types."""
    _ensure_builtins_loaded()
    return {name: entry.load() for name, entry in edge_condition_registry.items()}


def build_edge_condition_manager(
    condition: "EdgeConditionConfig",
    context: ConditionFactoryContext,
    execution_context: ExecutionContext
) -> "EdgeConditionManager[Any]":
    """Instantiate the manager responsible for a specific edge."""
    registration = get_edge_condition_registration(condition.type)
    manager_cls = registration.manager_cls
    if not manager_cls:
        raise RegistryError(
            f"Edge condition type '{condition.type}' does not provide a manager implementation"
        )
    return manager_cls(condition.config, context, execution_context)


__all__ = [
    "EdgeConditionRegistration",
    "register_edge_condition",
    "get_edge_condition_registration",
    "iter_edge_condition_registrations",
    "build_edge_condition_manager",
]

View on GitHub (pinned to 4fb2db0ea9)

Solutions

  1. Register the condition type with a concrete manager_cls implementing EdgeConditionManager
  2. If the condition is intentionally abstract, stop referencing it in edge configs
  3. Switch the edge to a fully implemented builtin condition type

Example fix

# before
register_edge_condition('mycond', config_cls=C, manager_cls=None)

# after
class MyCondManager(EdgeConditionManager[MyCondConfig]):
    ...
register_edge_condition('mycond', config_cls=C, manager_cls=MyCondManager)
Defensive patterns

Strategy: validation

Validate before calling

from runtime.edge.conditions.registry import get_edge_condition_registration
reg = get_edge_condition_registration(cond.type)
if reg.manager_cls is None:
    raise ConfigError(f'{cond.type} has no manager; pick a builtin type')

Prevention

When it happens

Trigger: An edge config uses condition.type = X where X's registration was created with manager_cls=None (or omitted), and the graph executes edges via _prepare_edge_conditions or _execute_node which call build_edge_condition_manager.

Common situations: Registering a config-only or abstract condition type meant only for schema/documentation; copying a registration call and forgetting the manager_cls argument; custom condition types that were never fully implemented.

Related errors


AI-assisted analysis of OpenBMB/ChatDev@4fb2db0ea9 (2026-08-27). Data as JSON: /api/errors/4eeaad3a009b3c67. Report an issue: GitHub.