AI DevelopmentAI Agents

Modelos de Decisión Tipados para Agentes: Jev vs Laya

22 de septiembre de 2026
11 min de lectura
Flujo abstracto de triage IA con líneas de routing sobre un escritorio
Compartir:

La mayoría de los agentes en producción no necesitan otro párrafo. Necesitan un juicio: qué equipo atiende este ticket, si esta tool call es segura, qué modelo debe procesar esta petición. Llamar a un LLM frontera para cada micro-decisión es lento, caro y te obliga a parsear prosa de vuelta a un branch.

En este deep-dive te muestro la alternativa System One: modelos de decisión tipados que devuelven un choice, un score o un sí/no calibrado sobre el que tu código puede ramificar — y comparo la vía gestionada (Jev) con la auto-hospedada (Laya), con código verificado contra las fuentes oficiales.

1. El Problema: Llamadas LLM Donde Bastaría un Juez

Mira un agente de soporte típico. Antes de redactar cualquier respuesta debe contestar preguntas estrechas: quién atiende el caso, si la política lo cubre, qué urgencia tiene, si el mensaje es una inyección de prompt. Cada respuesta tiene un espacio acotado que puedes enumerar antes de ver el ticket. Y aun así la mayoría de stacks envía cada pregunta a un modelo de chat y reza para que el JSON parsee.

Lo Que Rompe en Producción

Tres costes se acumulan: latencia (segundos por decisión en vez de milisegundos), dinero (tokens de razonamiento facturados por micro-juicio) y fiabilidad (respuestas en texto libre que inventan etiquetas fuera de tu conjunto). Un branch erróneo-pero-válido se depura; un nombre de tool alucinado enterrado tres capas abajo en una cadena de dependencias es un incidente.

El patrón que lo arregla: el trabajo exacto queda en código, la generación queda en el LLM, y entre medias pones una puerta de juicio rápida. La puerta lee estado no estructurado y devuelve valores tipados con probabilidades. Umbrales, permisos y efectos secundarios quedan en software ordinario, donde puedes testearlos.

2. Conceptos Mínimos: Choice, Score, Noul, Calibración

Tanto Jev como Laya exponen los mismos tres tipos de pregunta. Aprende estas cuatro ideas y cada ejemplo de abajo se lee como inglés llano.

🗳️

Choice

categórico · hasta 255 opciones (Jev)

Elige una opción de un conjunto fijo. Recibes la etiqueta ganadora más una probabilidad por opción. Si la lista puede estar incompleta, incluye siempre other — si no, el modelo debe elegir la respuesta menos incorrecta.

📏

Score

ordinal · 2–10 niveles ordenados

Una posición en una rúbrica que defines tú, p. ej. rutinario / sensible al tiempo / urgente / crítico. El número devuelto pondera por probabilidad entre niveles, así que inspecciona la distribución cuando su forma importe.

⚖️

Noul

sí/no · probabilidad calibrada

Una probabilidad sí/no P(true) de 0.0 a 1.0. Un noul de 0.5 significa igual probabilidad en ambos lados — incertidumbre, no intensidad media. Para intensidad usa un Score.

🎯

Calibración

ECE · Brier score · temperatura

La calibración pregunta si las predicciones al 80% se cumplen ~80% de las veces, medido sobre muchos casos (ECE), con Brier premiando respuestas seguras-y-correctas. Laya trae temperaturas que reajustas por dominio; Jev lo entrena con RLCD.

Jev vs Laya a Nivel de Diseño

Jev (TypeSafe AI, lanzado en septiembre de 2026) es una API gestionada: sampler paralelo, arquitectura no publicada, post-entrenamiento RLCD, límite de 64k tokens por request combinado, $0.042 por millón de tokens de entrada con salida gratis, 70–500ms extremo a extremo. Laya (Convai Innovations, Apache 2.0, pip install laya) es auto-hospedado: un encoder ModernBERT-large de 421M (512 tokens) más un checkpoint multilingüe de 322M (1024 tokens), un Router que elige checkpoint por request, ~33ms por pregunta en una T4. Misma interfaz, trade-off opuesto: dependencia del proveedor vs infraestructura propia. Los números del vendor sitúan a Jev en 67.8% de acuerdo por $0.0004 por caso frente a GPT-5.6 Terra con 67.9% por $0.0304 — pero la referencia es de la propia TypeSafe, así que trátalo como demo del vendor, no como leaderboard.

3. Tutorial, Parte 1: SDK de Jev en Python

Instala el SDK oficial, define TYPESAFE_API_KEY y llama a system_one con un estado más preguntas tipadas. Esta forma está copiada de los docs oficiales del SDK Python — los criteria de Choice son un mapa de opción a descripción (None para etiqueta simple), los de Score una lista ordenada, y las respuestas vuelven separadas en nouls, choices y scores.

Una llamada, tres juicios, en paralelo

# pip install typesafe-sdk  # TYPESAFE_API_KEY en env
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient

with TypeSafeClient() as client:
    response = client.system_one(
        state={"document": "I was charged twice. Please fix this ASAP."},
        questions={
            "billing": Noul(instructions="Is this ticket about billing?"),
            "tone": Choice(
                instructions="What is the customer tone?",
                criteria={"calm": None, "frustrated": None, "angry": None},
            ),
            "urgency": Score(
                instructions="How urgent is this ticket?",
                criteria=["can wait", "this week", "today"],
            ),
        },
    )

print(response.nouls["billing"].noul)    # P(yes), 0..1
print(response.choices["tone"].choice)   # etiqueta ganadora
print(response.scores["urgency"].score)  # posición ponderada, 0..2

Las preguntas de un mismo request comparten el estado preparado y se evalúan en paralelo — una décima pregunta cuesta tokens pero casi nada de tiempo extra. El modelo nunca autoriza nada: tu código lee las probabilidades y aplica la política, con una banda explícita de incertidumbre que va a humanos.

Puerta de política: actuar, revisar o re-rutear

p_billing = response.nouls["billing"].noul

if p_billing > 0.90:
    queue_refund_checks(state)      # el código verifica importes, identidad, límites
elif p_billing > 0.55:
    route_to_human(state, response) # la banda incierta va a revisión
else:
    route_to_specialist(state)

Regla de Oro

Un juicio semántico por pregunta; composición y efectos secundarios en código. Si la pregunta B necesita la respuesta de la A, mete esa respuesta en un request posterior — nunca escondas dependencias del workflow dentro de un prompt.

4. Tutorial, Parte 2: Router de Laya + el Flywheel

Laya corre en local y habla los mismos tres primitivos con schemas de diccionario. Empieza con los presets incluidos para triage inmediato, y usa el Router cuando el tráfico mezcle idiomas — inspecciona el script del input y elige el checkpoint por request con menos del 2% de overhead.

Triage con presets en tres líneas

# pip install laya
import laya

agent = laya.load("convaiinnovations/laya")  # 421M, inglés, ctx 512

triage = agent.predict(
    {"message": "My payment failed twice"},
    laya.triage_questions(),  # intent, urgency, frustration, churn
)

Por Qué Existe el Router

Un solo checkpoint no puede ser óptimo para cada idioma. Router(preload=True) mantiene residentes los checkpoints inglés (421M/512), multilingüe (322M/1024) y typed-decisions (421M/1024) y elige por request — sin cold swap de 7–10s cuando el tráfico alterna idiomas. Caveat de la propia ficha de Convai: los checkpoints base rinden casi como azar en zero-shot sobre typed-decisions (0.362 vs 0.318 aleatorio); los números fuertes pertenecen al checkpoint fine-tuneado sobre el split de entrenamiento de ese benchmark.

La misma tarea con Router.predict

from laya import Router

router = Router(preload=True)

decision = router.predict(
    {"message": "I was charged twice. Please refund the duplicate today."},
    {
        "owner": {
            "type": "choice",
            "instructions": "Which team owns the primary issue?",
            "criteria": {
                "billing": "charges, invoices, refunds, subscriptions",
                "technical": "product failures or errors",
                "account": "login, permissions, or account security",
                "other": "none of the listed teams fits",
            },
        },
        "refund_requested": {
            "type": "noul",
            "instructions": "Does the customer explicitly request a refund?",
        },
    },
)

El patrón flywheel (documentado en el estudio Jev-Flywheel) mantiene el motor congelado y adapta alrededor: reajusta una pequeña decision head sobre las respuestas cuando los revisores discrepan, y corre steering rounds donde un analista propone una pregunta nueva que un humano aprueba. Con las mismas 140 etiquetas y 600 ítems held-out, esa capa subió a Jev de 0.768 a 0.870 y a Laya de 0.722 a 0.802, calibrando ambos (ECE 0.030 y 0.015). El fine-tuning completo de los pesos abiertos de Laya con el mismo presupuesto llegó a 0.896 — más accuracy, pero el 42% de las respuestas no relacionadas derivaron, así que cada otro score debe revalidarse.

5. Errores Comunes en Producción

Estos cinco modos de fallo salen directos de los docs de limitaciones versionados de ambos modelos. Presupuesta los cinco antes de tu primera decisión en vivo.

🔢

Pedir al juez que cuente

números · fechas · matemática exacta

Jev documenta precisión numérica, conteo y comparación de fechas débiles — y un encoder de 400M tampoco es una calculadora. Parsea timestamps, compara importes y verifica autorización de forma determinista; deja al modelo juzgar lenguaje, no aritmética.

📦

Choice cerrado, mundo abierto

falta la opción other

Un Choice sin other o none_of_the_above fuerza una respuesta segura y errónea cuando la clase real no existe. En Laya mantén las listas bajo ~20 opciones: cada opción comparte un presupuesto fijo de tokens y las listas largas se difuminan.

🌡️

Confiar en probabilidades crudas

la calibración es un paso de despliegue

Revalida las probabilidades tras cambiar modelo, schema, idioma o dominio. Ajusta temperatura sobre datos held-out, fija umbrales en el punto operativo que controla el workflow y compara precisión/recall ahí — no solo accuracy.

✂️

Ignorar la ventana

512/1024 vs 64k

Laya trunca input largo en silencio y responde sobre un prefijo — cuenta tokens primero y rechaza. El límite de 64k de Jev es margen, no promesa: el estado largo y ruidoso sigue degradando decisiones. Recupera evidencia enfocada en ambos casos.

🚨

Sin fallback alrededor de la puerta

timeouts · drift · colas de revisión

Una API hospedada necesita timeouts, reintentos y un branch de fallback; un checkpoint local necesita capacidad de serving, planificación de cold-start y monitorización. Ambos necesitan acciones reversibles, colas humanas y logs de versión de estado, distribuciones y overrides.

Qué Evaluar Antes de Elegir

Corre un question set congelado contra los mismos casos etiquetados para cada candidato — baseline de reglas, LLM con structured outputs, Jev y el checkpoint Laya adecuado — y compara precisión/recall por clase, calibración en tu umbral, percentiles de latencia, coste y volumen de revisión. Empieza en shadow mode, publica primero acciones reversibles y fija la versión del modelo o checkpoint más cualquier ajuste de calibración.

Conclusión

La idea útil es más grande que cada producto: muchos pasos de un agente necesitan un juicio acotado, no otro párrafo. Jev lo empaqueta como API de decisiones gestionada con ventana de 64k que alquilas; Laya ofrece pesos inspeccionables Apache-2.0 con ventanas de 512/1024 tokens que posees, fine-tuneas y calibras tú.

Dale a cada capa el trabajo que mejor maneja: el código hace trabajo exacto y posee las acciones, un modelo de decisión testeado convierte texto en respuestas acotadas, los LLMs generan y razonan, los humanos resuelven la incertidumbre con consecuencias. Empieza esta semana reemplazando una llamada LLM de clasificación por una decisión tipada con umbral — esa sola puerta suele pagar el patrón entero.

Fuentes de Este Post

Oficial

  • Launch post de TypeSafe
  • Docs del SDK Python
  • Repo de Laya en GitHub

Análisis independiente

  • Chromiak: Jev and Laya
  • Anthus: Jev vs Laya + flywheel
  • Model card de Laya (HF)

Números clave

  • Jev 67.8% / $0.0004 por caso
  • Flywheel: 0.870 vs 0.802
  • Laya: 33ms, 7.2ms en batch
Diego Rodriguez

Diego Rodriguez

Ingeniero Senior Full-Stack & AI

Diego tiene mas de 9 anos de experiencia construyendo aplicaciones potenciadas por IA de produccion, desde orquestacion de LLMs y pipelines RAG hasta deteccion de riesgos con ML y sistemas de trading algoritmico.

Conoce mas sobre Diego