stvnnnnnn/nl2sql-backend-t5
NL2SQL Backend T5 (Spider)
Backend universal NL→SQL basado en T5-Large entrenado en Spider, con soporte para:
- Subida de bases de datos SQLite / SQL / CSV / ZIP
- Conversión automática de cualquier BD a SQLite
- Construcción dinámica de esquema
- Traducción ES→EN automática
- Re-ranking de candidatos
- SQL Repair Layer (tablas/columnas inexistentes)
- Endpoint
/infertotalmente listo para producción - Implementado para HuggingFace Spaces con Docker
🚀 NL→SQL Universal Backend (FastAPI + T5-large Spider)
Autores: Steven Reátegui licham y Danna Medina Villena Modelo: stvnnnnnn/t5-large-nl2sql-spider API: FastAPI (Docker) Versión: v1.0.0
📌 Descripción
Este Space implementa un backend universal NL→SQL, capaz de:
- Recibir preguntas en lenguaje natural (español o inglés).
- Convertirlas a SQL usando el modelo T5-large fine-tuned en Spider.
- Ejecutar la consulta sobre cualquier base de datos que el usuario suba:
.sqlite/.db.sqldumps (MySQL, PostgreSQL, SQLite).csv.zipcon múltiples CSV
🧠 El backend incluye una SQL Repair Layer que corrige errores del modelo (nombres de tabla/columna inexistentes, pluralización, sinónimos comunes, etc.), aumentando la Execution Accuracy.
📦 Todo se convierte internamente a SQLite, para garantizar compatibilidad universal.
🔥 Características
✔ Soporte universal de fuentes de datos
✔ Traducción automática ES → EN
Si escribes en español, el backend detecta el idioma y traduce con Helsinki-NLP/opus-mt-es-en antes de enviarlo al modelo NL→SQL.
✔ SQL Repair Layer (SRL)
Corrige errores típicos:
no such table: Songs→Trackno such column: Length→Milliseconds- Singularización inteligente: songs → song → track
- Matching difuso (
difflib) - Diccionario de sinónimos (song, track, length…)
✔ Multi-query generation + Re-ranking
Se generan 6 SQL candidatos y se selecciona el mejor según:
- ¿Ejecuta sin error?
- ¿Tiene mejor score del modelo?
- ¿Luego de reparar, ejecuta correctamente?
📂 Endpoints
📤 POST /upload
Subir una base de datos.
Ejemplo (curl):
curl -X POST -F "db_file=@Chinook.sqlite" https://<space>.hf.space/upload📤 GET /connections
Lista todas las bases subidas.
📤 GET /schema/{connection_id}
Devuelve el esquema en formato Spider-like:
Track(TrackId, Name, AlbumId, …) ; Album(AlbumId, Title, ArtistId) ; …📤 GET /preview/{connection_id}/{table}
Vista previa de una tabla.
📤 POST /infer
Genera SQL, lo ejecuta, repara si es necesario y retorna resultados.
{
"connection_id": "db_xxxxxx",
"question": "Muestra los nombres de las canciones."
}🧱 Arquitectura
Genera SQL, lo ejecuta, repara si es necesario y retorna resultados.
Usuario → Pregunta (ES/EN)
→ Detectar idioma
→ Traducir (si ES)
→ T5-large NL→SQL
→ SQL Repair Layer
→ Ejecución real en SQLite
→ Respuesta JSON (SQL + resultados + candidatos)🏁 Estado actual del proyecto
Versión v1.0 — Backend Final Listo para integrarse con:
- Frontend Next.js (UI estilo chat)
- Explorador de esquemas
- Historial de consultas por usuario
- Ejecución segura de SQL (solo lectura)
