iflytek/astron-agent · error · ValueError

Node has no ref node info

Error message

Node {dep_node_id} has no ref node info

What it means

Raised by BaseNode._is_valid_stream_dependency when determining whether a dependency template unit can stream its output to msg/end nodes: for node types other than LLM/AGENT, the template unit must carry ref_node_info identifying the referenced node and variable. Missing ref_node_info is an invalid internal reference configuration.

Solutions

  1. Re-open and re-save the workflow in the editor so ref_node_info is regenerated for each template unit
  2. Fix the DSL so every referenced template unit includes ref_node_info (node id + ref var name)
  3. Remove the broken dependency/variable reference from the msg/end node configuration
  4. Validate the workflow definition against the current schema version before running

Example fix

// before
{"templateUnit": {"type": "knowledge_pro"}}
// after
{"templateUnit": {"type": "knowledge_pro", "refNodeInfo": {"nodeId": "node-1", "refVarName": "answer"}}}
Defensive patterns

Strategy: validation

Validate before calling

def stream_deps_have_ref_info(template_units: list[dict]) -> bool:
    return all(
        u.get("refNodeInfo") or u.get("type") in ("llm", "agent")
        for u in template_units
    )

Try / catch

try:
    await node.msg_or_end_node_stream_output(...)
except ValueError as e:
    if "has no ref node info" in str(e):
        log.error("broken dependency reference: %s", e)
        return None
    raise

Prevention

When it happens

Trigger: A workflow dependency edge references a node's output but its template_unit lacks ref_node_info — e.g. hand-edited or older-format DSL where the reference metadata was not filled in, or a knowledge/flow node reference missing its ref variable.

Common situations: Importing workflows exported from other versions with different reference metadata shape; deleting/renaming nodes in the DSL editor leaving dangling references; programmatic workflow construction that skips populating ref_node_info.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of iflytek/astron-agent@5e758547a8 (2026-09-12). Data as JSON: /api/errors/2693f5ec5fbb8c47. Report an issue: GitHub.

Appendix: source

Thrown at core/workflow/engine/nodes/base_node.py:544

        """
        Check if a dependency node supports streaming output.

        This method determines whether a dependent node can provide streaming
        output based on its node type and configuration.

        :param dep_node_id: ID of the dependent node
        :param template_unit: Template unit containing variable information
        :param variable_pool: Pool containing system parameters and node configurations
        :return: True if the dependency supports streaming, False otherwise
        """
        node_type = dep_node_id.split(":")[0]

        if node_type in [NodeType.LLM.value, NodeType.AGENT.value]:
            # LLM and Agent nodes always support streaming
            return True

        if not template_unit.ref_node_info:
            raise ValueError(f"Node {dep_node_id} has no ref node info")

        if node_type == NodeType.KNOWLEDGE_PRO.value:
            # Knowledge Pro nodes support streaming except for result variables
            return not template_unit.ref_node_info.ref_var_name.startswith("result")

        if node_type == NodeType.FLOW.value:
            # Flow nodes support streaming only in prompt mode
            flow_output_mode = variable_pool.system_params.get(
                ParamKey.FlowOutputMode, node_id=dep_node_id
            )
            return flow_output_mode == EndNodeOutputModeEnum.PROMPT_MODE.value

        return False

    async def _process_llm_output_stream(
        self,
        dep_node_id: str,
        variable_pool: VariablePool,

View on GitHub (pinned to 5e758547a8)