OpenBMB/ChatDev · error · RegistryError

Edge condition type '{name}' already registered

Error message

Edge condition type '{name}' already registered

What it means

The edge condition type registry refuses duplicate registration. Each condition type name must map to exactly one EdgeConditionRegistration; registering the same name twice (e.g. via register_edge_condition) raises RegistryError.

Source

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


def _ensure_builtins_loaded() -> None:
    global _BUILTINS_LOADED
    if not _BUILTINS_LOADED:
        import_module("runtime.edge.conditions.builtin_types")
        _BUILTINS_LOADED = True


def register_edge_condition(
    name: str,
    *,
    config_cls: Type["EdgeConditionTypeConfig"],
    manager_cls: Type["EdgeConditionManager[Any]"],
    summary: str | None = None,
) -> None:
    """Register a manager class that encapsulates edge processing logic."""
    if name in edge_condition_registry.names():
        raise RegistryError(f"Edge condition type '{name}' already registered")
    entry = EdgeConditionRegistration(
        name=name,
        config_cls=config_cls,
        manager_cls=manager_cls,
        summary=summary,
    )
    edge_condition_registry.register(name, target=entry)
    register_edge_condition_schema(name, config_cls=config_cls, summary=summary)


def get_edge_condition_registration(name: str) -> EdgeConditionRegistration:
    """Retrieve a registered condition type."""
    _ensure_builtins_loaded()
    entry: RegistryEntry = edge_condition_registry.get(name)
    registration = entry.load()
    if not isinstance(registration, EdgeConditionRegistration):
        raise RegistryError(f"Entry '{name}' is not an EdgeConditionRegistration")
    return registration

View on GitHub (pinned to 4fb2db0ea9)

Solutions

  1. Choose a unique, namespaced name (e.g. 'myplugin.retry_condition')
  2. Guard registration: `if name not in iter_edge_condition_registrations(): register(...)`
  3. Avoid importing the registering module via two different paths; fix sys.path/duplicate package copies

Example fix

# before
register_edge_condition('condition', config_cls=C, manager_cls=M)

# after
from runtime.edge.conditions.registry import iter_edge_condition_registrations
if 'condition' not in iter_edge_condition_registrations():
    register_edge_condition('condition', config_cls=C, manager_cls=M)
Defensive patterns

Strategy: validation

Validate before calling

from runtime.edge.conditions.registry import iter_edge_condition_registrations
if 'mycond' not in iter_edge_condition_registrations():
    register_edge_condition('mycond', config_cls=C, manager_cls=M)

Prevention

When it happens

Trigger: Calling register_edge_condition with a name already in edge_condition_registry.names(), typically because a plugin/builtin module is imported twice or a custom condition reuses a builtin name like 'condition' or 'timeout'.

Common situations: Plugin modules imported under different paths (module + package alias) causing double registration on re-import; picking a name that collides with a builtin; module-reload scenarios in notebooks or test suites.

Related errors


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