OpenBMB/ChatDev · error · ValueError

Node {node.id} is not a passthrough node

Error message

Node {node.id} is not a passthrough node

What it means

PassthroughNodeExecutor.execute asserts node.node_type == 'passthrough'; any other type reaching it is a routing or node-construction bug.

Source

Thrown at runtime/node/executor/passthrough_executor.py:16

"""Passthrough node executor."""

from typing import List

from entity.configs import Node
from entity.configs.node.passthrough import PassthroughConfig
from entity.messages import Message, MessageRole
from runtime.node.executor.base import NodeExecutor


class PassthroughNodeExecutor(NodeExecutor):
    """Forward input messages without modifications."""

    def execute(self, node: Node, inputs: List[Message]) -> List[Message]:
        if node.node_type != "passthrough":
            raise ValueError(f"Node {node.id} is not a passthrough node")

        config = node.as_config(PassthroughConfig)
        if config is None:
            raise ValueError(f"Node {node.id} missing passthrough configuration")

        if not inputs:
            warning_msg = f"Passthrough node '{node.id}' triggered without inputs"
            self.log_manager.warning(warning_msg, node_id=node.id, details={"input_count": 0})
            return [Message(content="", role=MessageRole.USER)]

        if config.only_last_message:
            if len(inputs) > 1:
                self.log_manager.debug(
                    f"Passthrough node '{node.id}' received {len(inputs)} inputs; forwarding the latest entry",
                    node_id=node.id,
                    details={"input_count": len(inputs)},
                )
            return [inputs[-1].clone()]

View on GitHub (pinned to 4fb2db0ea9)

Solutions

  1. Set node_type to 'passthrough' for nodes forwarded to this executor
  2. Route through create_executor rather than manual construction
  3. Repair malformed workflow definitions

Example fix

# before
node.node_type = 'relay'

# after
node.node_type = 'passthrough'
Defensive patterns

Strategy: type-guard

Validate before calling

assert node.node_type == 'passthrough'

Type guard

def is_passthrough_node(node) -> bool:
    return node.node_type == 'passthrough'

Prevention

When it happens

Trigger: Invoking PassthroughNodeExecutor with a node whose type isn't 'passthrough'.

Common situations: Direct executor instantiation in tests; corrupted workflow files; refactored routing tables.

Related errors


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