Spaces:
Running
Running
File size: 4,167 Bytes
36ad1e2 e42938c 4cf4689 e42938c 4cf4689 e42938c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
---
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




---
## 📌 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 "[email protected]" 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) |