infiniflow/ragflow · error · ValueError

does not support empty value.

Error message

 does not support empty value.

What it means

check_empty raises when a required string param is falsy ('' , None, empty collection). Used in component check() flows to enforce that fields like model ids, prompts, or dataset ids are present before a run.

Source

Thrown at agent/component/base.py:261

                    if self.func[op_type](value, validation_dict[op_type]):
                        value_legal = True
                        break

                if not value_legal:
                    raise ValueError("Please check runtime conf, {} = {} does not match user-parameter restriction".format(variable, value))

            elif variable in validation_json:
                self._validate_param(attr, validation_json)

    @staticmethod
    def check_string(param, description):
        if type(param).__name__ not in ["str"]:
            raise ValueError(description + " {} not supported, should be string type".format(param))

    @staticmethod
    def check_empty(param, description):
        if not param:
            raise ValueError(description + " does not support empty value.")

    @staticmethod
    def check_nonnegative_integer(param, description):
        if type(param).__name__ not in ["int", "long"] or param < 0:
            raise ValueError(description + " {} not supported, should be 0 or positive integer".format(param))

    @staticmethod
    def check_positive_integer(param, description):
        if type(param).__name__ not in ["int", "long"] or param <= 0:
            raise ValueError(description + " {} not supported, should be positive integer".format(param))

    @staticmethod
    def check_positive_number(param, description):
        if type(param).__name__ not in ["float", "int", "long"] or param <= 0:
            raise ValueError(description + " {} not supported, should be positive numeric".format(param))

    @staticmethod
    def check_nonnegative_number(param, description):

View on GitHub (pinned to 554fb1133a)

Solutions

  1. Fill the field named in the description with a non-empty value in the component's params.
  2. Add UI-level required-field enforcement so the canvas cannot be run with empty required inputs.
  3. When generating DSLs programmatically, assert required fields are non-empty before save/run.
  4. If the field is genuinely optional for your use, remove the check_empty call for it rather than defaulting to junk values.

Example fix

# before
params = {"prompt": ""}

# after
params = {"prompt": "Summarize the following:"}
Defensive patterns

Strategy: validation

Validate before calling

def require_non_empty(conf, required_fields):
    missing = [f for f in required_fields if not conf.get(f)]
    if missing:
        raise ValueError(f'required fields empty/missing: {missing}')

Type guard

def is_filled(v) -> bool:
    return v is not None and v != ''

Try / catch

try:
    param.check()
except ValueError as e:
    if 'does not support empty value' in str(e):
        field = parse_field(str(e))
        raise ValueError(f'fill in required field: {field}') from e
    raise

Prevention

When it happens

Trigger: A component check() invoking check_empty(param, description) with an empty string or None — e.g. a Generation node with an empty prompt, a Retrieval node with no dataset selected.

Common situations: Creating a component in the canvas and forgetting to fill a required field; clearing a dropdown in the UI without picking a replacement; templates shipped with placeholder fields the user never filled; programmatic DSL generation omitting keys.

Related errors


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