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 registrationView on GitHub (pinned to 4fb2db0ea9)
Solutions
- Choose a unique, namespaced name (e.g. 'myplugin.retry_condition')
- Guard registration: `if name not in iter_edge_condition_registrations(): register(...)`
- 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
- Namespace plugin names
- Register in idempotent guarded blocks
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
- Edge processor type '{name}' already registered
- Memory store '{name}' already registered
- Entry '{name}' is not a BaseConfig subclass
- Entry '{name}' is not an EdgeConditionRegistration
- Edge condition type '{condition.type}' does not provide a ma
AI-assisted analysis of OpenBMB/ChatDev@4fb2db0ea9 (2026-08-27).
Data as JSON: /api/errors/ecb530368a3099be.
Report an issue: GitHub.