iflytek/astron-agent · error · CustomException

VARIABLE_POOL_GET_PARAMETER_ERROR

VARIABLE_POOL_GET_PARAMETER_ERROR

Error message

Node {node_id} does not have value {key}

What it means

Raised by VariablePool.get_output_variable while descending into a nested object-typed output: a key segment is not found in the mapping schema's 'properties', so the pool concludes the node has no such value. CustomException with code VARIABLE_POOL_GET_PARAMETER_ERROR and a cause_error string showing the original schema.

Solutions

  1. Inspect cause_error to see the actual schema and correct the key path in the consuming node's config
  2. Update the producing node's output schema to include the missing nested key
  3. Guard with a schema check (key in properties) before calling get_output_variable
  4. Handle CustomException VARIABLE_POOL_GET_PARAMETER_ERROR in the caller to supply a default

Example fix

// before
val = pool.get_output_variable(node_id, "a.b.c")
// after
props = get_output_schema(node_id).get("properties", {})
if "b" in props.get("a", {}).get("properties", {}):
    val = pool.get_output_variable(node_id, "a.b.c")
else:
    val = None
Defensive patterns

Strategy: try-catch

Validate before calling

props = get_output_schema(node_id).get("properties", {})
seg = key.split(".")[1] if "." in key else key
if seg not in props:
    return None

Type guard

def output_key_exists(pool, node_id: str, key: str) -> bool:
    schema = pool.get_output_variable_mapping().get(assemble_mapping_key(node_id, key.split('.')[0]), {}).get('schema', {})
    return key in str(schema)

Try / catch

try:
    val = pool.get_output_variable(node_id, key)
except CustomException as e:
    if e.err_code == CodeEnum.VARIABLE_POOL_GET_PARAMETER_ERROR:
        log.warning(f"missing output {key} on {node_id}: {e.cause_error}")
        val = default
    else:
        raise

Prevention

When it happens

Trigger: get_output_variable(node_id, key) — reached via get_variable, async_execute, or _resolve_configured_value — where key contains a nested path whose object segment is absent from that node's output schema properties at that nesting level.

Common situations: Downstream node references `upstream.result.field` but upstream's schema dropped/renamed `field`; key casing mismatch; consuming output of a conditional branch whose schema lacks the key.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


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

Appendix: source

Thrown at core/workflow/engine/entities/variable_pool.py:623

                )
                mapping_schema = cast(
                    Dict[str, Any],
                    self.output_variable_mapping[mapping_key].get("schema", {}),
                )
                key_type = cast(str, mapping_schema.get("type", ""))
                key_i += 1
                continue
            if key_type == "array":
                mapping_schema = cast(Dict[str, Any], mapping_schema.get("items", {}))
                array_type = cast(str, mapping_schema.get("type", ""))
                if array_type == "object":
                    mapping_schema = cast(
                        Dict[str, Any], mapping_schema.get("properties", {})
                    )
                    if key not in mapping_schema:
                        cause_error = f"key {key} not in {mapping_schema_orig}"
                        msg = f"Node {node_id} does not have value {key}"
                        raise CustomException(
                            err_code=CodeEnum.VARIABLE_POOL_GET_PARAMETER_ERROR,
                            err_msg=msg,
                            cause_error=cause_error,
                        )
                    mapping_schema = cast(Dict[str, Any], mapping_schema[key])
                    key_type = cast(str, mapping_schema.get("type", ""))

                    mapping_value = cast(list, mapping_value)
                    return self._extract_array_value(
                        mapping_value,
                        key,
                        key_type,
                        mapping_schema,
                        key_name_list[key_i:],
                        first_only,
                    )
                else:
                    return mapping_value

View on GitHub (pinned to 5e758547a8)