How jumperchen/hymir works
HyMIR is a Text-to-SQL research system: it generates a typed semantic plan, compiles that plan into SQL, and evaluates predictions against benchmark queries. The main user workflow is running an experiment over benchmark data and database schemas, then measuring query results and accuracy. A separate oracle encoder converts reference SQL into HyMIR plans for conversion and round-trip evaluation. The README documents additional benchmark and model configurations, but sampled excerpts do not expose every runner call, so uncertain wiring is omitted.
Main entry points: run_experiment.py Experiment runner · dsl_generator.py Plan generator · sql_generator.py SQL generator · evaluator.py SQL evaluator
Components 18
Experiment Workflow
- Experiment runner
scripts/run_experiment.py - Dataset loader
src/dataset_loader.py - Schema sampler
src/schema_value_sampler.py
HyMIR Planning
- Plan generator
src/dsl_generator.py - Plan validation
src/dsl_validation.py - Semantic catalog
src/semantic_catalog.py - Oracle encoder
src/oracle_dsl.py
SQL Generation
- Plan compiler
src/rule_based_dsl_to_sql.py - SQL generator
src/sql_generator.py - SQL postprocessing
src/sql_postprocessing.py - AST rewriter
src/ast_rewriter.py - API model client
src/llm_client.py - Local Qwen client
src/qwen_dsl_client.py
Evaluation
- SQL evaluator
src/evaluator.py - SQL canonicalizer
src/sql_canonicalizer.py
Other components
- Experiment user
- Benchmark data
- SQLite database
Connections 21
- Experiment user → Experiment runner: runs experiment
- Benchmark data → Dataset loader: provides samples
- Experiment runner → Dataset loader: loads data
- Dataset loader → Experiment runner: returns samples
- Experiment runner → Schema sampler: prepares schema
- SQLite database → Schema sampler: provides values
- Experiment runner → Plan generator: requests plan
- Plan generator → Plan validation: validates plan
- Plan generator → Local Qwen client: generates locally
- Plan generator → API model client: requests generation
- Experiment runner → SQL generator: requests SQL
- SQL generator → API model client: requests generation
- Experiment runner → Plan compiler: compiles plan
- Plan compiler → SQLite database: reads schema
- Experiment runner → SQL evaluator: evaluates prediction
- SQL evaluator → SQLite database: executes queries
- SQL evaluator → SQL canonicalizer: canonicalizes SQL
- Experiment runner → Oracle encoder: encodes reference SQL
- Oracle encoder → Semantic catalog: uses labels
- SQL generator → SQL postprocessing: repairs SQL
- SQL postprocessing → AST rewriter: rewrites AST