OpenBMB/ChatDev · error · ValueError

Node {node.id} has no human configuration

Error message

Node {node.id} has no human configuration

What it means

The node is a human node but node.as_config(HumanConfig) returned None/empty — the HumanConfig payload is missing from the node, so there is no task description or settings.

Source

Thrown at runtime/node/executor/human_executor.py:33

    """Executor used for human interaction nodes."""
    
    def execute(self, node: Node, inputs: List[Message]) -> List[Message]:
        """Execute a human node.
        
        Args:
            node: Human node definition
            inputs: Input messages
            
        Returns:
            Result supplied by the human reviewer
        """
        self._ensure_not_cancelled()
        if node.node_type != "human":
            raise ValueError(f"Node {node.id} is not a human node")
        
        human_config = node.as_config(HumanConfig)
        if not human_config:
            raise ValueError(f"Node {node.id} has no human configuration")
        
        human_task_description = human_config.description
        # Use prompt-style preview so humans see the same flattened text format
        # instead of raw message JSON.
        input_data = self._inputs_to_text(inputs)

        prompt_service = self.context.get_human_prompt_service()
        if prompt_service is None:
            raise RuntimeError("HumanPromptService is not configured; cannot execute human node")

        prompt_result = prompt_service.request(
            node.id,
            human_task_description or "",
            inputs=input_data,
            metadata={"node_type": "human"},
        )

        return [self._build_message(

View on GitHub (pinned to 4fb2db0ea9)

Solutions

  1. Add a valid HumanConfig (at minimum a description) to the node's config payload
  2. Validate workflow definitions against the current schema before execution
  3. After runtime upgrades, migrate node configs to the current field names

Example fix

# before
node = Node(id='n1', node_type='human')  # no config

# after
node = Node(id='n1', node_type='human', config={'description': 'Review the draft'})
Defensive patterns

Strategy: validation

Validate before calling

cfg = node.as_config(HumanConfig)
if not cfg:
    raise ValueError('human node missing config')

Type guard

def has_human_config(node) -> bool:
    return bool(node.as_config(HumanConfig))

Prevention

When it happens

Trigger: A 'human' node whose config dict is absent, empty, or failed to deserialize into HumanConfig.

Common situations: Workflow builder omitted config when creating the node; renamed/moved HumanConfig fields between versions breaking deserialization; hand-written workflow YAML missing the config block.

Related errors


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