OpenBMB/ChatDev · error · ConfigError

unsupported node type '{node_type}'

Error message

unsupported node type '{node_type}'

What it means

NodeConfig.from_dict resolves the node's 'type' string through get_node_schema(); an unknown type raises SchemaLookupError wrapped into this ConfigError with path pointing at 'type'. It is also reached via add_successor which delegates to from_dict.

Source

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

                    EnumOption(
                        value=name,
                        label=name,
                        description=schema.summary or "No description provided for this node type",
                    )
                    for name, schema in registrations.items()
                ],
            )
        return specs

    @classmethod
    def from_dict(cls, data: Mapping[str, Any], *, path: str) -> "Node":
        mapping = require_mapping(data, path)
        node_id = require_str(mapping, "id", path)
        node_type = require_str(mapping, "type", path)
        try:
            schema = get_node_schema(node_type)
        except SchemaLookupError as exc:
            raise ConfigError(
                f"unsupported node type '{node_type}'",
                extend_path(path, "type"),
            ) from exc

        description = optional_str(mapping, "description", path)
        # keep_context = bool(mapping.get("keep_context", False))
        log_output = bool(mapping.get("log_output", True))
        context_window = int(mapping.get("context_window", 0))
        input_value = ensure_list(mapping.get("input"))
        output_value = ensure_list(mapping.get("output"))

        input_messages: List[Message] = []
        for value in input_value:
            if isinstance(value, dict) and "role" in value:
                input_messages.append(Message.from_dict(value))
            elif isinstance(value, Message):
                input_messages.append(value)
            else:

View on GitHub (pinned to 4fb2db0ea9)

Solutions

  1. Correct the 'type' string to a registered node type name
  2. Import the module that registers the custom node type before parsing the graph config
  3. List registered node types from the node schema registry to see valid names
  4. Align docs/config with the installed library version

Example fix

# before
- id: n1
  type: llm_agent
# after
- id: n1
  type: agent
Defensive patterns

Strategy: validation

Validate before calling

from entity.configs.node.node import get_node_schema
for n in graph_config['nodes']:
    try:
        get_node_schema(n['type'])
    except SchemaLookupError:
        raise ValueError(f"unknown node type {n['type']}") from None

Try / catch

try:
    node = NodeConfig.from_dict(data, path='nodes[0]')
except ConfigError as e:
    if 'unsupported node type' in str(e):
        # fallback: default type or report allowed types
        ...

Prevention

When it happens

Trigger: Building a graph config with a node whose type is misspelled or unregistered, e.g. type: llm_agent vs the registered 'agent' type.

Common situations: Typos in node type names in YAML/JSON graph definitions; node types from a different library version; missing imports of modules that register custom node types; copy-pasted examples from incompatible docs.

Related errors


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