{"record":{"id":"1f83005d26c00e7e","repo":"OpenBMB/ChatDev","slug":"unsupported-node-type-node-type","errorCode":null,"errorMessage":"unsupported node type '{node_type}'","messagePattern":"unsupported node type '(.+?)'","errorType":"validation","errorClass":"ConfigError","httpStatus":null,"severity":"error","filePath":"entity/configs/node/node.py","lineNumber":176,"sourceCode":"                    EnumOption(\n                        value=name,\n                        label=name,\n                        description=schema.summary or \"No description provided for this node type\",\n                    )\n                    for name, schema in registrations.items()\n                ],\n            )\n        return specs\n\n    @classmethod\n    def from_dict(cls, data: Mapping[str, Any], *, path: str) -> \"Node\":\n        mapping = require_mapping(data, path)\n        node_id = require_str(mapping, \"id\", path)\n        node_type = require_str(mapping, \"type\", path)\n        try:\n            schema = get_node_schema(node_type)\n        except SchemaLookupError as exc:\n            raise ConfigError(\n                f\"unsupported node type '{node_type}'\",\n                extend_path(path, \"type\"),\n            ) from exc\n\n        description = optional_str(mapping, \"description\", path)\n        # keep_context = bool(mapping.get(\"keep_context\", False))\n        log_output = bool(mapping.get(\"log_output\", True))\n        context_window = int(mapping.get(\"context_window\", 0))\n        input_value = ensure_list(mapping.get(\"input\"))\n        output_value = ensure_list(mapping.get(\"output\"))\n\n        input_messages: List[Message] = []\n        for value in input_value:\n            if isinstance(value, dict) and \"role\" in value:\n                input_messages.append(Message.from_dict(value))\n            elif isinstance(value, Message):\n                input_messages.append(value)\n            else:","sourceCodeStart":158,"sourceCodeEnd":194,"githubUrl":"https://github.com/OpenBMB/ChatDev/blob/4fb2db0ea90375ce1059f44fe03ffbd191a7a169/entity/configs/node/node.py#L158-L194","documentation":"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.","triggerScenarios":"Building a graph config with a node whose type is misspelled or unregistered, e.g. type: llm_agent vs the registered 'agent' type.","commonSituations":"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.","solutions":["Correct the 'type' string to a registered node type name","Import the module that registers the custom node type before parsing the graph config","List registered node types from the node schema registry to see valid names","Align docs/config with the installed library version"],"exampleFix":"# before\n- id: n1\n  type: llm_agent\n# after\n- id: n1\n  type: agent","handlingStrategy":"validation","validationCode":"from entity.configs.node.node import get_node_schema\nfor n in graph_config['nodes']:\n    try:\n        get_node_schema(n['type'])\n    except SchemaLookupError:\n        raise ValueError(f\"unknown node type {n['type']}\") from None","typeGuard":null,"tryCatchPattern":"try:\n    node = NodeConfig.from_dict(data, path='nodes[0]')\nexcept ConfigError as e:\n    if 'unsupported node type' in str(e):\n        # fallback: default type or report allowed types\n        ...","preventionTips":["Import custom node registration modules before parsing","Validate graph configs against the node registry in CI"],"tags":["config","node","registry","validation"],"backgroundTag":"unknown-config-type-registry","analyzedSha":"4fb2db0ea90375ce1059f44fe03ffbd191a7a169","analyzedAt":"2026-08-27T14:35:29.622Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}