nl-sql / src /nl_sql /execution /errors.py
liovina's picture
Deploy NL_SQL HEAD to HF Space
942050b verified
"""Error taxonomy for the execution layer.
The pipeline reports outcomes via this fixed enum so eval metrics can slice
failures by exact category. Adding a new failure mode requires extending
this enum first; downstream code must exhaust the cases.
"""
from __future__ import annotations
from enum import StrEnum
class ExecutionErrorKind(StrEnum):
INVALID_SQL = "invalid_sql" # AST guard rejected before execute
EXECUTION_TIMEOUT = "execution_timeout"
EXECUTION_FAILED = "execution_failed" # database raised at execute time
EMPTY_RESULT = "empty_result" # not an error per se; tracked for slicing
LOW_CONFIDENCE = "low_confidence" # confidence flag from generator
REPAIR_FAILED = "repair_failed" # second-pass also rejected
class ExecutionError(Exception):
def __init__(self, kind: ExecutionErrorKind, message: str) -> None:
super().__init__(f"{kind.value}: {message}")
self.kind = kind
self.message = message
class ValidationError(ExecutionError):
def __init__(self, message: str) -> None:
super().__init__(ExecutionErrorKind.INVALID_SQL, message)