infiniflow/ragflow · error · ContractError

CodeExec contract must contain exactly one business output,

Error message

CodeExec contract must contain exactly one business output, got {len(business_outputs)}

What it means

Error "CodeExec contract must contain exactly one business output, got {len(business_outputs)}" thrown in infiniflow/ragflow.

Source

Thrown at agent/tools/code_exec.py:72

def _validate_business_output_name(name: str) -> None:
    if not name or not name.strip():
        raise ContractError("CodeExec business output name must not be empty")
    if name in SYSTEM_OUTPUT_KEYS:
        raise ContractError(f"CodeExec reserved output name is not allowed: {name}")
    if "." in name:
        raise ContractError(f"CodeExec business output name must not contain '.': {name}")


def select_business_output(outputs: Mapping[str, object]) -> tuple[str, object]:
    if len(outputs) == 1:
        only_name, only_meta = next(iter(outputs.items()))
        _validate_business_output_name(only_name)
        return only_name, only_meta

    business_outputs = [(name, meta) for name, meta in outputs.items() if name not in SYSTEM_OUTPUT_KEYS]
    if len(business_outputs) != 1:
        raise ContractError(f"CodeExec contract must contain exactly one business output, got {len(business_outputs)}")
    _validate_business_output_name(business_outputs[0][0])
    return business_outputs[0]


def normalize_output_value(value):
    if isinstance(value, (tuple, list)):
        return [normalize_output_value(item) for item in value]
    if isinstance(value, dict):
        return {key: normalize_output_value(item) for key, item in value.items()}
    return value


def infer_actual_type(value) -> str:
    value = normalize_output_value(value)
    if value is None:
        return "Null"
    if isinstance(value, bool):
        return "Boolean"

View on GitHub (pinned to 554fb1133a)

Solutions

  1. Define exactly one business output in the CodeExec contract.
  2. Merge multiple outputs into a single object output if several values are needed.

Example fix

outputs = [{'name': 'result', 'type': 'Object'}]  # exactly one

When it happens

Trigger: Thrown at agent/tools/code_exec.py:72 when the library encounters an invalid state.

Common situations: A CodeExec contract declares zero or multiple business outputs; reducing the contract to a single output prevents this error.


AI-assisted analysis of infiniflow/ragflow@554fb1133a (2026-08-15). Data as JSON: /api/errors/d186eec01febb163. Report an issue: GitHub.