Personal LLM analytics product by Nikola Pantelic
GitHub: NikolaPantelic
QueryForge turns natural-language analytics questions into safe SQL, executes them on SQLite, and returns a concise answer with full execution metadata.
Pipeline stages:
- SQL generation (LLM)
- SQL validation
- SQL execution
- Answer generation (LLM)
Core goals:
- Reliable SQL generation for analytical prompts
- Strong query-safety guardrails
- Production-grade observability and error handling
- Good latency and token efficiency
- OpenRouter-backed LLM integration for SQL and answer synthesis
- Multi-layer SQL validation (SELECT-only, forbidden operations, multi-statement blocking, column checks)
- Token accounting (
prompt_tokens,completion_tokens,total_tokens,llm_calls) - Structured timing and stage-level outputs in
PipelineOutput - Benchmark script for repeatable latency/success measurement
- Python 3.13+
- Dependencies in
requirements.txt(openrouter,pandas) OPENROUTER_API_KEYenvironment variable
This repository expects the Kaggle dataset file and converts it to SQLite:
- Open Gaming and Mental Health dataset
- Download
gaming_mental_health_10M_40features.csv - Place it in
data/ - Build SQLite DB:
python3 -m pip install -r requirements.txt
python3 scripts/gaming_csv_to_db.pySet your OpenRouter API key:
set OPENROUTER_API_KEY=<your_key>Linux/macOS:
export OPENROUTER_API_KEY=<your_key>Optional env vars:
OPENROUTER_MODEL(default model override)LOG_LEVEL(default:INFO)
python3 -m unittest discover -s tests -p "test_public.py"
python3 -m unittest discover -s tests -p "test_validator.py"python3 scripts/benchmark.py --runs 3Outputs summary JSON including:
success_rateavg_msp50_msp95_ms
from src.pipeline import AnalyticsPipeline
pipeline = AnalyticsPipeline()
result = pipeline.run("Which addiction level bucket has the highest number of respondents?")
print(result.status)
print(result.sql)
print(result.answer)
print(result.total_llm_stats)src/pipeline.py: orchestration, SQL validation, executionsrc/llm_client.py: OpenRouter calls, prompting, token statssrc/types.py: dataclasses for stage and final outputsscripts/gaming_csv_to_db.py: CSV to SQLite ingestionscripts/benchmark.py: latency/success benchmark runnertests/: integration and validation tests
Current focus is single-turn analytics over one table (gaming_mental_health).
Planned extensions include multi-turn follow-up support, parser-based SQL validation, and metrics export integrations.