huggingface/smolagents · error · InterpreterError
Unsupported comparison operator: {op}
Error message
Unsupported comparison operator: {op} What it means
A comparison chain used a comparator node the interpreter does not handle. It supports Is, IsNot, In, NotIn, Eq, NotEq, Lt/LtE/Gt/GtE — anything else in an ast.Compare triggers this error.
Source
Thrown at src/smolagents/local_python_executor.py:995
current_result = left != right
elif op == ast.Lt:
current_result = left < right
elif op == ast.LtE:
current_result = left <= right
elif op == ast.Gt:
current_result = left > right
elif op == ast.GtE:
current_result = left >= right
elif op == ast.Is:
current_result = left is right
elif op == ast.IsNot:
current_result = left is not right
elif op == ast.In:
current_result = left in right
elif op == ast.NotIn:
current_result = left not in right
else:
raise InterpreterError(f"Unsupported comparison operator: {op}")
if current_result is False:
return False
result = current_result if i == 0 else (result and current_result)
left = right
return result
def evaluate_if(
if_statement: ast.If,
state: dict[str, Any],
static_tools: dict[str, Callable],
custom_tools: dict[str, Callable],
authorized_imports: list[str],
) -> Any:
result = None
test_result = evaluate_ast(if_statement.test, state, static_tools, custom_tools, authorized_imports)
if test_result:View on GitHub (pinned to 30bb116109)
Solutions
- If building AST manually, use only standard ast comparison nodes (ast.Eq, ast.Lt, ast.In, etc.)
- Re-run with code parsed via ast.parse rather than hand-built nodes
- Update smolagents if you're on an old version that misses newly supported operators
Defensive patterns
Strategy: validation
Validate before calling
# only build AST via ast.parse on real source, never hand-constructed Compare nodes import ast tree = ast.parse(source_text)
Try / catch
try:
evaluate_ast(tree, state, static_tools, custom_tools, authorized_imports)
except InterpreterError as e:
if 'Unsupported comparison operator' in str(e):
# rebuild tree from source with ast.parse and retry Prevention
- Never construct comparison nodes manually
- Keep smolagents updated alongside your Python version
When it happens
Trigger: Effectively unreachable with standard Python source (the ast module only produces the supported ops), but can occur with manually constructed or patched AST nodes, or after a library version changes AST node types.
Common situations: AST being built programmatically and passed to evaluate_ast; version mismatch between Python's ast node classes and the interpreter's if-elif chain; custom AST transformations injecting exotic operators.
Related errors
- {expression.__class__.__name__} is not supported.
- Cannot unpack non-dict value in **kwargs: {type(starred_dict
- super() needs at least one argument
- super() argument 1 must be type
- super() takes at most 2 arguments
AI-assisted analysis of huggingface/smolagents@30bb116109 (2026-08-28).
Data as JSON: /api/errors/c393ce30b76f2b20.
Report an issue: GitHub.