sqlglot.LogicalValidatorNode and ExecutorNode.GeneratorNodepackages/nl2sql/src/nl2sql/pipeline/nodes/generator/node.pyPlanModel expressions into sqlglot expressions.Upstream:
LogicalValidatorNodeDownstream:
ExecutorNodeTrigger conditions:
flowchart LR
Validator[LogicalValidatorNode] --> Generator[GeneratorNode] --> Executor[ExecutorNode]
From SubgraphExecutionState:
ast_planner_response.plan (required)sub_query.datasource_id (required)From NL2SQLContext:
ds_registry (adapter dialect and row limits)Validation performed:
Mutations to SubgraphExecutionState:
generator_response (GeneratorResponse with sql_draft)reasoningerrors on failureSide effects:
SqlVisitor to build sqlglot expression tree.query.sql(dialect=...).GeneratorResponse with SQL and reasoning.SQL_GEN_FAILED.Implements a LangGraph node callable:
def __call__(self, state: SubgraphExecutionState) -> Dict[str, Any]
Key contracts:
GeneratorResponsePlanModel / ExprEmits PipelineError with:
SQL_GEN_FAILEDLogs exceptions via logger.exception.
generatorrow_limit and dialect from datasource config.SqlVisitor for new expression kinds.build_sql_agent_graph() for alternate generation strategies.packages/nl2sql/src/nl2sql/pipeline/nodes/generator/node.py