nl2sql-backend-t5 / README.md
stvnnnnnn's picture
Update README.md
36ad1e2 verified
---
title: NL2SQL Backend T5
emoji: 🧠
colorFrom: blue
colorTo: green
sdk: docker
pinned: false
license: mit
---
# 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 `/infer` totalmente 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
![FastAPI](https://img.shields.io/badge/API-FastAPI-009688?logo=fastapi)
![HuggingFace](https://img.shields.io/badge/Hosted%20on-HuggingFace-yellow?logo=huggingface)
![SQL](https://img.shields.io/badge/Engine-SQLite-blue)
![Model](https://img.shields.io/badge/Model-T5--Large%20Spider-orange)
---
## 📌 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`
- `.sql` dumps (MySQL, PostgreSQL, SQLite)
- `.csv`
- `.zip` con 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
| Tipo | Soportado | Conversión |
|------|-----------|------------|
| SQLite (.sqlite / .db) | ✅ | Usado tal cual |
| SQL dump (.sql) | ✅ | Convertido a SQLite (best-effort) |
| CSV (.csv) | ✅ | Importado como tabla |
| ZIP con CSV | ✅ | Cada CSV → tabla en SQLite |
---
### ✔ 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``Track`
- `no 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:
1. ¿Ejecuta sin error?
2. ¿Tiene mejor score del modelo?
3. ¿Luego de reparar, ejecuta correctamente?
---
## 📂 Endpoints
### 📤 `POST /upload`
Subir una base de datos.
Ejemplo (curl):
```bash
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:
```bash
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.
```bash
{
"connection_id": "db_xxxxxx",
"question": "Muestra los nombres de las canciones."
}
```
### 🧱 `Arquitectura`
Genera SQL, lo ejecuta, repara si es necesario y retorna resultados.
```bash
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)