De dos APIs a un Smart API Router: reglas, v29 y Deep Analyze tras un solo endpoint
Hasta esta semana, zn ofrecía dos APIs. Elegías una por petición y los límites de tu plan estaban repartidos entre ambas. Era un impuesto de diseño en cada integración: elegir mal daba una falsa sensación de seguridad, y elegir bien exigía entender nuestras tripas mejor de lo que deberías tener que entenderlas.
Hoy hay un solo endpoint. POST /analyze enruta cada petición por tres capas escalonadas — reglas deterministas, la puerta neuronal v29 y Deep Analyze — y te dice cuál decidió.
TL;DR
POST /analyzees ahora un Smart API Router (SAR): Nivel 1 reglas deterministas (<50 µs), Nivel 2 v29 neural int8 (~15–18 ms), Nivel 3 Deep Analyze (mmBERT v8, ~166 ms en caliente) para la banda ambigua./v30/analyzesigue funcionando como alias de compatibilidad. La ruta de productoPOST /prod/analyzese mantiene solo-reglas para quien quiera la puerta de latencia ultrabaja.- El router es fail-open: si Deep Analyze expira (presupuesto de 6 s) o falla, sigues recibiendo el veredicto de v29. Una puerta de seguridad nunca debe convertirse en la caída.
- Los planes ahora llevan cuotas explícitas de DeepAnalyze por tier, desde 25/mes en la prueba de 48 h hasta 30.000/mes en Growth, con packs de exceso desde $9.
- Cero retención de datos en los planes de pago. La respuesta incluye
tier,decided_by,latency_msy unevidence_idque puedes auditar.
Por qué dos APIs era la forma equivocada
El primer endpoint, POST /analyze, es un motor de reglas deterministas: normalización más un catálogo de patrones de inyección (pi-direct y compañía). Responde en microsegundos, es trivialmente auditable y, cuando una regla salta, casi nunca se equivoca. Pero las reglas solo cazan lo que ya has visto.
El segundo endpoint, POST /v30/analyze, ejecuta v29: un transformer multilingüe, exportado a ONNX y cuantizado a int8, que puntúa el texto crudo y bloquea por encima de un umbral calibrado (τ = 0,950 tras la pasada de endurecimiento multilingüe). El intercambio es otro: ~15–18 ms p50 en CPU, cobertura muchísimo mejor, y aún así lejos del coste y la latencia de un guard basado en LLM.
Ambos son productos honestos. Juntos eran una mala interfaz. Los clientes tenían que saber en qué modelo de amenaza estaban para elegir endpoint en cada llamada, las cuotas estaban partidas y la evidencia de los dos caminos no era directamente comparable. En la práctica, la gente acababa usando el camino rápido y perdiendo en silencio la cobertura neuronal que estaba pagando.
Un endpoint, tres cerebros
El router decide por petición, a la vista de todos:
- Nivel 1 — Reglas. Normaliza, busca patrones deterministas. Si una regla salta, devuelve. Coste: microsegundos.
- Nivel 2 — v29 neural. Si las reglas no concluyen, puntúa con el modelo int8. Los casos claramente benignos o claramente ataque terminan aquí.
- Nivel 3 — Deep Analyze. Solo cuando la puntuación de v29 cae en la banda incierta (0,50–0,935) la petición va a Deep Analyze, el modelo mmBERT v8 que existe exactamente para eso: texto que parece benigno a un encoder pequeño pero merece una segunda opinión.
La fusión del veredicto es simple a propósito: el router combina la puntuación de v29 con la de Deep Analyze y bloquea a partir de 0,935. Cada respuesta lleva ahora tier (rules, advanced, deep), decided_by, latency_ms y evidence_id, para que midas tu propio tráfico por camino de decisión.
Deep Analyze: el nivel que tuvo que ganarse su sitio
Deep Analyze es nuestro detector multilingüe mmBERT v8, exportado a ONNX int8 y servido desde una Lambda de contenedor (3 GB de memoria, 4 GB efímeros, techo de 120 s). En caliente responde en ~166 ms. Los arranques en frío tardan ~24 s, y por eso nunca está en el borde síncrono de un camino sin protección: solo se ejecuta para la banda ambigua, dentro de un presupuesto duro de 6 s del router, y el router vuelve a v29 si no llega.
Conseguir un modelo lo bastante bueno para merecer ese hueco llevó más que el propio router. Nuestros posts anteriores contaron la historia completa: el dataset que nos mentía y diecisiete entrenamientos fallidos donde el modelo puntuaba 0,498–0,509 con todo porque la pérdida nunca veía una etiqueta. El arreglo fue ordinario —entrenamiento supervisado de extremo a extremo, congelar el split, dejar de ajustar sobre el test— y el resultado fue una puerta con FPR 0,82 %, FNR 8,20 %, AUROC 0,9958 sobre el split de test congelado, a 17,9 ms p50 en int8.
Deep Analyze va más allá en la rebanada más difícil. En nuestras pruebas internas separa entradas adversarias a 0,9999999998, mientras que texto benigno pero sospechoso se queda en 1,35e-7. No son probabilidades de marketing; son los números que ve nuestra propia puerta cuando decide, registrados con un evidence_id por cada bloqueo.
Desplegarlo sin romper producción
Un router delante de cada petición da miedo de desplegar. Lo hicimos en tres movimientos: primero modo sombra, donde el camino en vivo y el router decidían y solo comparábamos —Deep Analyze puntuando junto al veredicto de producción sin tocarlo—. Después canary al 50 % tras el alias, con alarmas de CloudWatch sobre errores de Lambda, fail-opens de Deep y latencia p99, conectadas a SNS. Después el 100 %.
Las garantías aburridas son lo importante: el rollback es cambiar la versión del alias, el router tiene 39/39 tests unitarios incluyendo una suite de equivalencia que demuestra que el camino enrutado devuelve el mismo veredicto que la llamada directa, y el fail-open se ejercita en tests, no se espera que funcione.
Planes: límites más grandes y cuotas explícitas de DeepAnalyze
Los planes antiguos contaban un solo cubo de llamadas y dejaban Deep Analyze como experimento. El canon nuevo da a cada tier una cuota estándar y una cuota DeepAnalyze en el mismo sitio, y sube los techos:
La retención no cambia: los planes de pago almacenan cero input. Guardamos el veredicto, el nivel y los hashes necesarios para el Evidence Vault, con 90 días de retención. El tier Contributor —gratis para siempre— es el único que almacena input, anonimizado, y solo porque aceptas la telemetría comunitaria para entrenar el modelo. Si usas cualquier plan de pago, tus prompts no están en nuestro set de entrenamiento. Nunca.
Qué cambia para ti
Si llamabas a /v30/analyze, no se rompe nada: mismo camino, misma forma de respuesta, ahora con tier y decided_by diciéndote de dónde salió cada veredicto. Si llamabas a /analyze esperando solo reglas, pásate a /prod/analyze para el camino determinista —o quédate y obtén el router completo por el mismo precio. Una clave, un endpoint, tres cerebros.
Si quieres ver el camino de decisión sobre tu propio tráfico antes de fiarte, para eso está la prueba gratuita de 48 h: un POST, una clave de API y evidencia de cada bloqueo.