infiniflow/ragflow · error · ValueError

[VariableAggregator] group_name can not be empty!

Error message

[VariableAggregator] group_name can not be empty!

What it means

ValueError from VariableAggregatorParam.check(). The aggregator groups list must contain dicts, and each dict must have a truthy 'group_name'; a group with a missing or empty name is rejected before execution.

Source

Thrown at agent/component/variable_aggregator.py:39


class VariableAggregatorParam(ComponentParamBase):
    """
    Parameters for VariableAggregator

    - groups: list of dicts {"group_name": str, "variables": [variable selectors]}
    """

    def __init__(self):
        super().__init__()
        # each group expects: {"group_name": str, "variables": List[str]}
        self.groups = []

    def check(self):
        self.check_empty(self.groups, "[VariableAggregator] groups")
        for g in self.groups:
            if not g.get("group_name"):
                raise ValueError("[VariableAggregator] group_name can not be empty!")
            if not g.get("variables"):
                raise ValueError(f"[VariableAggregator] variables of group `{g.get('group_name')}` can not be empty")
            if not isinstance(g.get("variables"), list):
                raise ValueError(f"[VariableAggregator] variables of group `{g.get('group_name')}` should be a list of strings")

    def get_input_form(self) -> dict[str, dict]:
        return {
            "variables": {
                "name": "Variables",
                "type": "list",
            }
        }


class VariableAggregator(ComponentBase):
    component_name = "VariableAggregator"

    @timeout(int(os.environ.get("COMPONENT_EXEC_TIMEOUT", 3)))

View on GitHub (pinned to 554fb1133a)

Solutions

  1. Give every aggregation group a non-empty name in the VariableAggregator config.
  2. Delete unnamed placeholder groups.
  3. When authoring DSL programmatically, assert each group dict has a truthy group_name before saving.

Example fix

// before
"groups": [{"variables": ["a@x", "b@y"]}]

// after
"groups": [{"group_name": "inputs", "variables": ["a@x", "b@y"]}]
Defensive patterns

Strategy: validation

Validate before calling

for g in aggregator_param.groups:
    assert g.get('group_name'), f'group missing name: {g}'

Type guard

def group_has_name(g: dict) -> bool:
    return isinstance(g, dict) and bool(g.get('group_name'))

Try / catch

try:
    aggregator_param.check()
except ValueError as e:
    if 'group_name can not be empty' in str(e):
        # name or remove the offending group
        ...

Prevention

When it happens

Trigger: A groups entry like {"variables": [...]} without group_name, or with group_name set to ""/None. check_empty already guaranteed groups itself is non-empty; this fires per-group.

Common situations: Adding a group in the canvas UI but not naming it; hand-edited DSL omitting the key; duplicating a group and clearing the name to change it later.

Related errors


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