En esta página
Galena AI (con la marca Galenia dentro de la app) es un dashboard web que analiza el audio de llamadas telefónicas y decide si la voz es generada por IA o humana. Muestra el veredicto y la confianza del modelo, guarda un historial buscable de solicitudes y expone métricas interactivas de rendimiento de los seis detectores que entrenó el equipo. Construido en HackMTY y después reducido a una demo pública gratuita.
Qué hace
Detector
Sube un archivo WAV — la opción por defecto — o envía el audio en Base64. El payload JSON viene prellenado (call_id, sample_rate, channels), así que solo hace falta el audio en Base64, y un conversor integrado transforma cualquier WAV subido a Base64. El sitio valida el archivo en el navegador (estéreo, 8 kHz, PCM de 16 bits, hasta ~2 minutos), lo manda desde el servidor a la API del modelo y regresa un veredicto Humano / IA con un medidor de confianza (0–1). El detector se puede elegir por solicitud.
Historial
Tabla estilo log de detecciones recientes con búsqueda, filtros, exportación y vista de detalle — incluida la latencia real de cada solicitud. En la demo se guarda en el navegador, así que no hace falta cuenta ni base de datos.
Páginas de API y modelo
| Módulo | Propósito |
|---|---|
| Detector | Subida de WAV o JSON prellenado con Base64, conversor de WAV a Base64, veredicto y medidor de confianza |
| Historial | Log buscable de solicitudes con filtros, exportación y detalle |
| API | Configuración de conexión al modelo, endpoints públicos, ejemplos de request/response |
| Modelo | Curvas ROC y precision-recall, matriz de confusión, distribución de scores, tendencia mensual, comparación de modelos |
| Cuenta | Login de demo opcional (cualquier email, guardado localmente), perfil y preferencias |
Interfaz en español / inglés con temas claro y oscuro.
API del modelo
Un servicio FastAPI sirve los seis detectores ONNX de voz sintética, ordenados por su rendimiento promedio en los sets de llamadas de evaluación:
| Detector | Familia |
|---|---|
| Everest (1.º) | Galena, gradient boosting de histogramas client-only |
| Fuji (2.º) | Acoustic combined |
| Mont Blanc (3.º) | Acoustic hispano |
| Experimentales | Galena full (estéreo) regresión logística, Galena client-only, acoustic baseline |
El navegador nunca habla directamente con el modelo — el sitio lo llama desde el servidor (MODEL_API_URL). confidence es la confianza en el veredicto: p_synthetic si la llamada se marca como sintética, 1 - p_synthetic si es humana.
Stack tecnológico
| Capa | Elección |
|---|---|
| Framework | TanStack Start (React 19, SSR) + TypeScript + Vite |
| UI | shadcn/ui (Radix) + Tailwind CSS v4 |
| Data fetching | TanStack Query |
| Gráficas | Recharts |
| Validación | Zod |
| Datos de la demo | Almacenamiento del navegador (historial y login de demo) |
| Servicio del modelo | Python + FastAPI + ONNX Runtime |
| Deploy | Sitio en Vercel (Nitro); API del modelo en Render con Docker, mantenida despierta con UptimeRobot |
Proceso de desarrollo
Galena AI combina un frontend en TanStack Start con un servicio de inferencia en FastAPI que corre modelos con ONNX Runtime. La versión del hackathon usaba Supabase para auth e historial en una VPS; la demo pública corre en capas gratuitas sin base de datos.
Shell del frontend
- Scaffold del dashboard con shadcn/ui, navegación con sidebar y rutas basadas en archivos para detector, historial, API, modelo y cuenta.
- Pantallas de detector, historial y métricas con predicciones simuladas para que la UX completa fuera navegable antes de tener backend.
- Gráficas con Recharts e i18n ES/EN con temas claro/oscuro.
Branding y fixes de hosting
- Se removió el tooling y branding del scaffold, y se lanzó un nuevo ícono de cristal como favicon y logo que se adapta al tema.
- Fix de los botones de login y copiar al portapapeles cuando se sirve por HTTP plano.
Modelos reales
- Los seis detectores
.onnxdel equipo quedaron envueltos en un servicio FastAPI con endpoints/detecty/health. - Confianza redefinida como confianza en el veredicto.
Despliegue del hackathon
- Autenticación e historial de detecciones conectados a Supabase.
- Soporte de base path para servir una instancia
/devseparada en la VPS, con latencia real registrada. - Detector default configurable por variable de entorno.
Demo pública gratuita
- El sitio pasó a Vercel: el build detecta Vercel y cambia Nitro a su preset.
- Se quitó Supabase: el login pasó a ser un login de demo opcional y el historial se guarda en el navegador, así que la demo no necesita llaves ni cuentas.
- API del modelo empaquetada en Docker para la capa gratuita de Render, que se duerme tras 15 minutos sin uso; UptimeRobot consulta
/healthpara mantenerla despierta.
UX del detector y límites
- La subida de WAV quedó como entrada por defecto, el JSON viene prellenado para que solo se pida el audio en Base64 y se agregó un conversor de WAV a Base64.
- Validación del tamaño en el navegador contra el límite de 4.5 MB por solicitud de Vercel, con notas sobre el formato WAV y la primera solicitud más lenta.
- Medición de la API del modelo con los límites de la capa gratuita (512 MB, 0.1 CPU): numba recompilando funciones de librosa suma ~4 minutos a cada arranque, así que ahora los detectores se eligen con
GALENA_DETECTORSy el calentamiento se controla conGALENA_WARMUP.


Construyendo Galena AI