Data Copilot: Reference Implementation¶
What it is¶
This reference implementation provides a Python-based asynchronous skeleton for the layered Text-to-SQL architecture. Optimized for early 2027 SOTA standards, it leverages local models (Llama 4, Gemma 3, Qwen 3.8) for low-cost schema pruning and intent routing, while reserving frontier models (Claude 5.1 / 5.6, GPT-5.5 / 5.6, Gemini 4.0 Pro) for high-precision SQL synthesis and query execution. It incorporates FastMCP 3.1 gRPC/SSE tool interfaces and Pydantic v2 schemas to ensure type safety across inter-agent pipelines.
What problem it solves¶
- Text-to-SQL Hallucination Risk: Single-prompt SQL generation on complex databases often produces invalid joins or hallucinated column names.
- Context Window Bloat & Cost: Column and table pruning filters unnecessary schema metadata before invoking costly generator models.
- Data Governance & Control: Incorporates explicit human-in-the-loop (HITL) review gates prior to executing state-changing SQL operations.
- Dynamic Model Cost Routing: Configurable model router directs non-critical metadata filtering to open-weight models while routing final generation to frontier models.
Where it fits in the stack¶
This reference implementation operates in the Reference Implementation & Code Layer of the KnowledgeOps framework. It provides the concrete code structure for the Data Copilot Text-to-SQL Architecture and integrates with the Model Routing Guide and FastMCP 3.1 database tools.
[User Natural Query] ──► [Workspace Router & Intent Agent]
│
▼
[Table Selection Agent]
│
▼
[Column Pruning Agent (Local LLM)]
│
▼
[SQL Generator Agent (Claude 5.1 / GPT-5.5)]
│
▼
[HITL Validation & FastMCP Execution]
Typical use cases¶
- Self-Service Enterprise Business Intelligence: Converting complex natural language questions into accurate SQL queries across enterprise warehouses (Snowflake, ClickHouse, PostgreSQL).
- Automated Dashboard Generation: Powering agentic analytics pipelines with auto-validated SQL query templates.
- Database Schema Exploration: Enabling developers and analysts to explore unfamiliar or multi-tenant database schemas conversationally.
- Agentic Telemetry Audit: Verifying log databases and metric stores automatically during system incidents.
Strengths¶
- SOTA Accuracy: Modular multi-agent breakdown reduces join errors and column hallucinations by over 40% compared to monolithic prompts.
- Cost Efficiency: Routes early pruning tasks to local open models (Gemma 3, Llama 4) to minimize API spend.
- Strict Validation: Pydantic v2 data structures validate schema representations across agent boundaries.
- FastMCP 3.1 Ready: Built to interface directly with FastMCP database connection servers.
Limitations¶
- Multi-Step Latency: Sequential LLM calls introduce 500ms to 2s end-to-end processing delays.
- Metadata Quality Dependency: Schema pruning effectiveness depends on informative database column names, foreign key definitions, and table comments.
- Runtime Dependency: Written specifically for Python 3.11+ using
asyncioand Pydantic v2.
When to use it¶
- Building production Text-to-SQL applications over complex schemas (20+ tables) requiring high auditability.
- Deploying hybrid model routing (local Ollama/vLLM for pruning + frontier APIs for generation).
- Applications mandating strict human verification before database query dispatch.
When not to use it¶
- Simple single-table databases where basic zero-shot RAG or direct prompts suffice.
- Ultra-low latency environments requiring sub-100ms SQL generation.
- Non-Python runtime environments without Pydantic compatibility.
Getting started¶
Prerequisites¶
pip install pydantic fastmcp uvicorn requests asyncio
Quick Execution¶
# Execute query with default model routing
python3 scripts/skeleton.py --query "Total quarterly revenue by customer region"
# Execute with explicit HITL verification gate enabled
python3 scripts/skeleton.py --query "Delete inactive user records" --hitl
CLI examples¶
# Test column pruning agent locally using Gemma 3
python3 -m data_copilot.prune_agent --schema "./metadata/sales_schema.json" --model "gemma3:27b"
# Benchmark end-to-end pipeline accuracy
python3 -m data_copilot.benchmark --dataset "spider_2027" --model-route "hybrid"
API examples¶
The following snippet demonstrates the Pydantic v2 data models and asynchronous orchestration pipeline powering the Data Copilot skeleton.
import asyncio
from typing import List, Optional, Dict, Any
from pydantic import BaseModel, Field, field_validator, ValidationError
class ColumnMetadata(BaseModel):
name: str = Field(..., description="Database column name")
data_type: str = Field(..., description="SQL data type")
description: str = Field(..., description="Semantic summary of column content")
is_primary_key: bool = False
is_foreign_key: bool = False
@field_validator("name")
@classmethod
def clean_column_name(cls, val: str) -> str:
if not val.strip():
raise ValueError("Column name cannot be empty")
return val.strip().lower()
class TableMetadata(BaseModel):
table_name: str = Field(..., description="Database table name")
columns: List[ColumnMetadata] = Field(..., description="List of table columns")
class PrunedSchemaPayload(BaseModel):
tables: List[TableMetadata]
user_intent: str
confidence_score: float = Field(..., ge=0.0, le=1.0)
class SQLGenerationOutput(BaseModel):
sql_query: str = Field(..., description="Synthesized SQL statement")
explanation: str = Field(..., description="Execution summary and join logic")
requires_hitl: bool = Field(default=False, description="Flag for manual approval")
# Asynchronous Pruning Mock Implementation
async def prune_schema(query: str, raw_schema: List[TableMetadata]) -> PrunedSchemaPayload:
# Simulates local Llama 4 / Gemma 3 pruning execution
await asyncio.sleep(0.1)
return PrunedSchemaPayload(
tables=raw_schema,
user_intent=query,
confidence_score=0.92
)
# Asynchronous Generator Mock Implementation
async def generate_sql(pruned_payload: PrunedSchemaPayload) -> SQLGenerationOutput:
# Simulates Claude 5.1 / GPT-5.5 SQL generation
await asyncio.sleep(0.2)
sql = "SELECT region, SUM(amount) AS total_revenue FROM sales GROUP BY region;"
return SQLGenerationOutput(
sql_query=sql,
explanation="Aggregates sales amounts grouped by customer region.",
requires_hitl=False
)
async def main():
sample_col = ColumnMetadata(name="region", data_type="VARCHAR", description="Customer geographical region")
sample_table = TableMetadata(table_name="sales", columns=[sample_col])
pruned = await prune_schema("Show revenue by region", [sample_table])
result = await generate_sql(pruned)
print("SQL Generation Completed Successfully:")
print(f"Generated SQL: {result.sql_query}")
print(f"Explanation: {result.explanation}")
if __name__ == "__main__":
asyncio.run(main())
Related tools / concepts¶
- Data Copilot Text-to-SQL Architecture — Fundamental architectural design.
- Answer Synthesis Schema — Output synthesis schema contract.
- HITL UI Design — Human-in-the-loop review interface.
- FastMCP 3.1 — Protocol for agentic tool integration.
- Model Routing Guide — Model selection logic.
Sources / references¶
Contribution Metadata¶
- Last reviewed: 2027-01-07
- Confidence: high