OpenBMB/ChatDev · error · RegistryError

Edge processor type '{name}' already registered

Error message

Edge processor type '{name}' already registered

What it means

The edge processor type registry refuses duplicate registration. register_edge_processor raises when the name already exists, ensuring one processor implementation per type name.

Source

Thrown at runtime/edge/processors/registry.py:40

_BUILTINS_LOADED = False


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


def register_edge_processor(
    name: str,
    *,
    config_cls: Type["EdgeProcessorTypeConfig"],
    processor_cls: Type["EdgePayloadProcessor[Any]"],
    summary: str | None = None,
) -> None:
    if name in edge_processor_registry.names():
        raise RegistryError(f"Edge processor type '{name}' already registered")
    entry = EdgeProcessorRegistration(
        name=name,
        config_cls=config_cls,
        processor_cls=processor_cls,
        summary=summary,
    )
    edge_processor_registry.register(name, target=entry)
    register_edge_processor_schema(name, config_cls=config_cls, summary=summary)


def get_edge_processor_registration(name: str) -> EdgeProcessorRegistration:
    _ensure_builtins_loaded()
    entry: RegistryEntry = edge_processor_registry.get(name)
    registration = entry.load()
    if not isinstance(registration, EdgeProcessorRegistration):
        raise RegistryError(f"Entry '{name}' is not an EdgeProcessorRegistration")
    return registration

View on GitHub (pinned to 4fb2db0ea9)

Solutions

  1. Use a namespaced unique name for custom processors
  2. Guard with `if name not in iter_edge_processor_registrations(): ...`
  3. Ensure the plugin module is imported exactly once (fix duplicate package paths)

Example fix

# before
register_edge_processor('transform', config_cls=C, processor_cls=P)

# after
if 'transform' not in iter_edge_processor_registrations():
    register_edge_processor('transform', config_cls=C, processor_cls=P)
Defensive patterns

Strategy: validation

Validate before calling

from runtime.edge.processors.registry import iter_edge_processor_registrations
if 'myproc' not in iter_edge_processor_registrations():
    register_edge_processor('myproc', config_cls=C, processor_cls=P)

Prevention

When it happens

Trigger: Calling register_edge_processor('name', ...) twice, or a plugin registering a processor whose name collides with a builtin or with another plugin's name.

Common situations: Double imports of the registering module (two sys.path aliases), notebook re-runs without kernel restart, or unnamespaced names like 'transform' colliding with builtins.

Related errors


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