CoolFace
Apppublic

stvnnnnnn/nl2sql-backend-t5

sourceHugging Facemitupdated 10mo agoView on Hugging Face
1likes
App README

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 HuggingFace SQL Model


📌 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

TipoSoportadoConversión
SQLite (.sqlite / .db)Usado tal cual
SQL dump (.sql)Convertido a SQLite (best-effort)
CSV (.csv)Importado como tabla
ZIP con CSVCada 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: SongsTrack
  • no such column: LengthMilliseconds
  • 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. 1.¿Ejecuta sin error?
  2. 2.¿Tiene mejor score del modelo?
  3. 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)