rohitg00/ai-engineering-from-scratch · error · ValueError
unsafe node: {ast.dump(node)}
Error message
unsafe node: {ast.dump(node)} What it means
Error "unsafe node: {ast.dump(node)}" thrown in rohitg00/ai-engineering-from-scratch.
Source
Thrown at phases/19-capstone-projects/49-lm-eval-harness/code/main.py:146
ast.USub: operator.neg,
ast.Pow: operator.pow,
}
def safe_arith_eval(expr: str) -> float:
"""Evaluate a small arithmetic expression without exposing eval."""
tree = ast.parse(expr, mode="eval")
return _safe_eval(tree.body)
def _safe_eval(node: ast.AST) -> float:
if isinstance(node, ast.Constant) and isinstance(node.value, (int, float)):
return node.value
if isinstance(node, ast.BinOp) and type(node.op) in _ARITH_OPS:
return _ARITH_OPS[type(node.op)](_safe_eval(node.left), _safe_eval(node.right))
if isinstance(node, ast.UnaryOp) and type(node.op) in _ARITH_OPS:
return _ARITH_OPS[type(node.op)](_safe_eval(node.operand))
raise ValueError(f"unsafe node: {ast.dump(node)}")
def normalize(s: str) -> str:
return re.sub(r"\s+", " ", s.strip().lower())
def metric_exact_match(prediction: str, targets: List[str]) -> float:
norm_pred = normalize(prediction)
return 1.0 if any(normalize(t) == norm_pred for t in targets) else 0.0
def metric_substring_contains(prediction: str, targets: List[str]) -> float:
norm_pred = normalize(prediction)
return 1.0 if any(normalize(t) in norm_pred for t in targets) else 0.0
def metric_multiple_choice(prediction: str, targets: List[str]) -> float:
pred = prediction.strip()[:1].upper()View on GitHub (pinned to 39ea8a1c6d)
When it happens
Trigger: Thrown at phases/19-capstone-projects/49-lm-eval-harness/code/main.py:146 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of rohitg00/ai-engineering-from-scratch@39ea8a1c6d (2026-08-26).
Data as JSON: /api/errors/3908b0b2734be66a.
Report an issue: GitHub.