infiniflow/ragflow · error · ValueError
Not supported operator: {operator}
Error message
Not supported operator: {operator} What it means
ValueError from Switch's condition evaluation (after the ≥/≤ branches shown). When none of the implemented operators match — contains, not contains, start with, end with, empty, not empty, =, ≠, >, <, ≥, ≤ — the fall-through raises 'Not supported operator'.
Source
Thrown at agent/component/switch.py:135
except Exception:
return True if input > value else False
elif operator == "<":
try:
return True if float(input) < float(value) else False
except Exception:
return True if input < value else False
elif operator == "≥":
try:
return True if float(input) >= float(value) else False
except Exception:
return True if input >= value else False
elif operator == "≤":
try:
return True if float(input) <= float(value) else False
except Exception:
return True if input <= value else False
raise ValueError(f"Not supported operator: {operator}")
def thoughts(self) -> str:
return "I’m weighing a few options and will pick the next step shortly."
View on GitHub (pinned to 554fb1133a)
Solutions
- Pick the operator from the Switch UI dropdown so the canonical token is stored.
- If writing DSL, restrict operators to: contains, not contains, start with, end with, empty, not empty, =, ≠, >, <, ≥, ≤.
- Replace '>=' with '≥' and '<=' with '≤' in existing conditions.
Example fix
// before
{"operator": ">=", "value": 10}
// after
{"operator": "≥", "value": 10} Defensive patterns
Strategy: validation
Validate before calling
SWITCH_OPS = {'contains', 'not contains', 'start with', 'end with', 'empty', 'not empty', '=', '≠', '>', '<', '≥', '≤'}
for cond in switch_param.conditions:
assert cond['operator'] in SWITCH_OPS, cond['operator'] Type guard
def is_switch_operator(op: str) -> bool:
return op in {'contains', 'not contains', 'start with', 'end with', 'empty', 'not empty', '=', '≠', '>', '<', '≥', '≤'} Try / catch
try:
switch._invoke()
except ValueError as e:
if 'Not supported operator' in str(e):
# replace with a supported operator token and re-run
... Prevention
- Choose operators from the Switch dropdown; note ≥/≤ are Unicode, not ASCII >=/<=.
- Do not reuse condition objects from Categorize/Loop components verbatim.
- Lint canvas DSL operator vocabularies per component.
When it happens
Trigger: A Switch condition whose operator is anything outside the SwitchParam.operators list: typos like 'starts with', '>=' instead of '≥', 'equals' instead of '=', or a localized label. Note Switch uses '≥'/'≤' Unicode forms, not ASCII '>='/'<='.
Common situations: Hand-editing canvas DSL with ASCII comparison operators; copying conditions from the Categorize or Loop components which use different operator vocabularies; templates authored against an older operator set.
Related errors
- Invalid operator: {operator}
- [Switch] 'To' can not be empty!
- Loop Variable is not complete.
- Loop condition is incomplete.
- Invalid input mode.
AI-assisted analysis of infiniflow/ragflow@554fb1133a (2026-08-15).
Data as JSON: /api/errors/18ff5833d12f6486.
Report an issue: GitHub.