OpenBMB/ChatDev · error · RegistryError
Entry '{name}' is not an EdgeConditionRegistration
Error message
Entry '{name}' is not an EdgeConditionRegistration What it means
The registry entry stored under the requested condition type name did not load into an EdgeConditionRegistration. This means the registry contains a foreign or corrupted entry — the type name resolves, but to the wrong object type.
Source
Thrown at runtime/edge/conditions/registry.py:61
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
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:View on GitHub (pinned to 4fb2db0ea9)
Solutions
- Always register via register_edge_condition, never by mutating edge_condition_registry directly
- Check what edge_condition_registry.get(name).load() actually returns for that name
- If caused by upgrade, reinstall matching versions of the runtime package so EdgeConditionRegistration is a single class
Defensive patterns
Strategy: try-catch
Validate before calling
from runtime.edge.conditions.registry import iter_edge_condition_registrations assert 'mycond' in iter_edge_condition_registrations()
Try / catch
try:
mgr = build_edge_condition_manager(cond, ctx, ec)
except RegistryError as e:
logger.error('bad condition registration: %s', e)
raise Prevention
- Never mutate registries directly
- Keep single package version
When it happens
Trigger: Registering into edge_condition_registry directly (bypassing register_edge_condition) with a non-EdgeConditionRegistration target, or a name shadowed by another registry sharing the same backing store; then calling get_edge_condition_registration(name) or build_edge_condition_manager with that name.
Common situations: Plugins writing raw entries into the shared registry; version skew where the registration class was moved/redefined so isinstance fails after a partial upgrade; pickling/entrypoint-based registrations that resolve to a different class.
Related errors
- Entry '{name}' is not an EdgeProcessorRegistration
- Entry '{name}' is not a BaseConfig subclass
- Edge condition type '{name}' already registered
- Edge processor type '{name}' already registered
- Memory store '{name}' already registered
AI-assisted analysis of OpenBMB/ChatDev@4fb2db0ea9 (2026-08-27).
Data as JSON: /api/errors/2d636e9233908cba.
Report an issue: GitHub.