OpenBMB/ChatDev · error · ConfigError

node configuration missing

Error message

node configuration missing

What it means

NodeConfig.validate raises this ConfigError when self.config is falsy, delegating to the node type's own validate() afterwards. Like the memory-store analogue, from_dict normally guarantees a config, so this fires on programmatically constructed or mutated node objects.

Source

Thrown at entity/configs/node/node.py:298

        removed_keep = 0

        for message in self.input:
            is_keep = message.keep
            if is_keep and drop_keep:
                removed_keep += 1
                continue
            if not is_keep and drop_non_keep:
                removed_non_keep += 1
                continue
            remaining.append(message)

        if removed_non_keep or removed_keep:
            self.input = remaining
        return removed_non_keep, removed_keep

    def validate(self) -> None:
        if not self.config:
            raise ConfigError("node configuration missing", extend_path(self.path, "config"))
        if hasattr(self.config, "validate"):
            self.config.validate()

    @property
    def node_type(self) -> str:
        return self.type

    @property
    def model_name(self) -> Optional[str]:
        agent = self.as_config(AgentConfig)
        if not agent:
            return None
        return agent.name

    @property
    def role(self) -> Optional[str]:
        agent = self.as_config(AgentConfig)
        if agent:

View on GitHub (pinned to 4fb2db0ea9)

Solutions

  1. Build node configs via NodeConfig.from_dict so config is required and validated
  2. Pass a valid config object when constructing manually
  3. Check node.config is not None before calling validate

Example fix

# before
node = NodeConfig(id='n1', type='agent', config=None)
node.validate()
# after
node = NodeConfig.from_dict({'id':'n1','type':'agent','config':{}}, path='nodes[0]')
node.validate()
Defensive patterns

Strategy: type-guard

Type guard

def node_is_valid(node) -> bool:
    return bool(getattr(node, 'config', None))

Try / catch

try:
    node.validate()
except ConfigError:
    # rebuild via from_dict with a config block
    ...

Prevention

When it happens

Trigger: Creating NodeConfig directly with config=None (e.g. in tests or after a partial copy) and calling validate(), which from_dict also invokes.

Common situations: Direct constructor use in tests/mocks; code that clears config before validation; refactors bypassing from_dict.

Related errors


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