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  

![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 "[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)