The Space only had enrollment+attendance parquet committed (.gitignore
excluded data/*.parquet), so seed_database() fell through to the Python
generator on EVERY request, and module-level random.seed() meant each
call produced different data (e.g. 1411 vs 1446 discipline rows).
- un-ignore data/*.parquet; commit all 5 via LFS, regenerated together
for cross-table consistency (verified byte-deterministic)
- app.py startup check now requires all 5 parquet files
- generate_seed_data() re-seeds the RNG per call as defense-in-depth
Day 1 expanded schema: 5 tables, 14B fine-tuned model
- Expanded seed data from 2 tables to 5 (enrollment, attendance, students,
discipline, grades) for cross-table analytics
- Swapped model from 7B base to lfed-qwen2.5-coder-14b-sql-gguf (v2 fine-tune)
- Updated prompts.py: chatml assistant turn format, 3 new few-shot examples
- Updated data_engine.py: dynamic 5-table parquet loading with fallback generator
- Added demographics (gender, race/ethnicity, ELL, SpEd, FRL) to students
- Added discipline incident records with severity/actions
- Added course grades with term GPA calculation
- Updated tests for 5-table schema and chatml prompt format
perf: load seed data from Parquet instead of generating on every query