Construyendo Galena AI

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óduloPropósito
DetectorSubida de WAV o JSON prellenado con Base64, conversor de WAV a Base64, veredicto y medidor de confianza
HistorialLog buscable de solicitudes con filtros, exportación y detalle
APIConfiguración de conexión al modelo, endpoints públicos, ejemplos de request/response
ModeloCurvas ROC y precision-recall, matriz de confusión, distribución de scores, tendencia mensual, comparación de modelos
CuentaLogin 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:

DetectorFamilia
Everest (1.º)Galena, gradient boosting de histogramas client-only
Fuji (2.º)Acoustic combined
Mont Blanc (3.º)Acoustic hispano
ExperimentalesGalena 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

CapaElección
FrameworkTanStack Start (React 19, SSR) + TypeScript + Vite
UIshadcn/ui (Radix) + Tailwind CSS v4
Data fetchingTanStack Query
GráficasRecharts
ValidaciónZod
Datos de la demoAlmacenamiento del navegador (historial y login de demo)
Servicio del modeloPython + FastAPI + ONNX Runtime
DeploySitio 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 .onnx del equipo quedaron envueltos en un servicio FastAPI con endpoints /detect y /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 /dev separada 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 /health para 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_DETECTORS y el calentamiento se controla con GALENA_WARMUP.

Blog

recent-work

Construyendo Galena AI

Dashboard de detección de voz sintética — seis detectores ONNX detrás de un servicio FastAPI, confianza del veredicto, historial de llamadas y métricas interactivas del modelo.

Leer más →

Galena AI

Dashboard de detección de voz sintética — seis detectores ONNX vía FastAPI, confianza del veredicto, historial de llamadas y métricas interactivas.

Cómo se construyó →
border-home1