Hace unas semanas apareció una categoría de modelos que no escriben: deciden. Les das un texto, una pregunta y unas opciones, y devuelven una probabilidad para cada opción, en milisegundos y sin una sola palabra de más. TypeSafe lanzó Jev el 15 de septiembre de 2026 y en cuatro semanas ya había una veintena de alternativas: Strands Decider de AWS, Laya de Convai, Clef de Cloudflare, pplx-decider de Perplexity y muchos más.
Este tema es una clase completa sobre ellos. No pretende venderte ninguno. Pretende que, al terminar, puedas explicar con tus palabras qué son, cómo leen una pregunta, cómo se entrenan, por qué su confianza es (o no es) fiable y cuándo conviene usarlos. Está pensado para ingenieras e ingenieros de IA: hay fórmulas, números reales y código, pero cada idea llega primero con una imagen.
La idea en una imagen: el columnista y el árbitro
Imagina que necesitas saber a qué equipo enviar un mensaje de soporte: “¡Mis pagos llevan tres días fallando!”. Un LLM se comporta como un columnista: le preguntas y escribe un párrafo. Puede ser brillante, pero tu programa necesita una etiqueta, no un párrafo, así que ahora tienes que parsear lo que escribió, validar que no se salió del formato y hacerlo esperar mientras redacta palabra por palabra.
Un modelo de decisión se comporta como un árbitro con tarjetas: solo puede levantar una de las tarjetas que le diste (billing, sales, retail) y, al levantarla, muestra además un marcador con cuánta seguridad tiene en cada una. No puede improvisar una cuarta tarjeta. No puede escribir otra cosa.
Para decir "billing" el modelo tiene que escribir la palabra: lee el prompt y emite un token.
TypeSafe bautizó a esta clase System One, en referencia a la distinción de Daniel Kahneman entre el pensamiento rápido e intuitivo (Sistema 1) y el lento y deliberado (Sistema 2). El nombre conviene, con una advertencia que ellos mismos reconocen: lo rápido también puede equivocarse. Lo interesante no es que siempre acierte, sino que te diga cuánto cree acertar y que lo haga a bajo costo, de modo que puedas ponerlo en mitad de un flujo de software como un if “difuso”.
Chequeo: ¿por qué un LLM necesita varias pasadas para responder y un modelo de decisión una?
Un LLM genera la respuesta token a token y cada token requiere una pasada completa condicionada por los anteriores. Un modelo de decisión no genera: lee el prompt una vez y reparte probabilidad entre las opciones que ya están escritas en el prompt. No hay bucle de decodificación.
El contrato: estado, preguntas y tres tipos de respuesta
Aunque las arquitecturas difieren, casi todos usan el mismo contrato, el de Jev, que se volvió un estándar de facto: tanto el servidor de Strands Decider como el de Laya exponen POST /v1/systemone con la misma forma. Entra un estado (texto, JSON o una lista de mensajes) y un diccionario de preguntas tipadas:
{
"state": "Help! My payouts have been failing for 3 days!",
"questions": {
"team": { "type": "choice", "instructions": "Which team should handle this?",
"criteria": { "billing": "payments, payouts", "sales": "pricing", "retail": "stores" } },
"urgent": { "type": "noul", "instructions": "Does this convey urgency?" },
"anger": { "type": "score", "instructions": "How frustrated is the writer?",
"criteria": ["calm", "frustrated", "depressed"] }
}
}
Hay exactamente tres tipos de pregunta, y todos son, por dentro, “elegir entre opciones con probabilidad”:
| Tipo | Opciones | Qué devuelve | Ejemplo |
|---|---|---|---|
noul | dos: verdadero y falso | la probabilidad de “verdadero” | “¿Transmite urgencia?” → 0.858 |
choice | N desordenadas | una probabilidad por opción y la ganadora | billing 0.773, sales 0.121, retail 0.106 |
score | L niveles ordenados | la distribución y su valor esperado | calm 0.196, frustrated 0.574, depressed 0.230 → 1.03 |
Los números de la tabla son la salida real del CLI de Strands Decider para esa frase. Observa el score: el modelo no dice “frustrado” sino “1.03 en una escala de 0 a 2”, el promedio ponderado choice y score es el orden: equivocarse por un nivel no es lo mismo que equivocarse por cuatro, y los modelos lo tienen en cuenta al entrenarse.
Dos propiedades prácticas
- Las preguntas son independientes y se responden en paralelo. Jev lo documenta explícitamente: si una pregunta depende de la respuesta de otra, necesitas dos llamadas en secuencia. En Strands, el texto se lee una vez y cada pregunta añade solo sus propios tokens, así que preguntar muchas cosas sobre el mismo texto es casi gratis.
- Las opciones las defines tú, en cada llamada. No hay un conjunto fijo de etiquetas “horneado” en los pesos. Puedes cambiar las categorías mañana sin reentrenar (con límites: Jev admite hasta 255 opciones, y Laya empeora cuando son muchas, como veremos).
Chequeo: tienes dos preguntas, la segunda depende de la primera. ¿Una llamada o dos?
Dos, en secuencia. Todas las preguntas de una llamada se responden en paralelo y no pueden verse entre sí.
Confianza: un número, tres definiciones
Cada modelo devuelve probabilidades y casi todos añaden un número de confianza por pregunta. Aquí está la primera trampa: no significan lo mismo.
Jev y Strands Decider usan, para choice, la probabilidad máxima normalizada para que 0 sea “uniforme” y 1 “certeza total”:
Laya, según el post de presentación de su autor, usa la entropía normalizada de la distribución:
Veamos qué pasa con la misma distribución, la del ejemplo de soporte:
| Definición | Cálculo | Confianza |
|---|---|---|
| Máximo normalizado (Jev, Strands) | 0.66 | |
| Entropía normalizada (Laya) | 0.37 |
Misma distribución, 0.66 contra 0.37. Si fijas un umbral de “actuar solo cuando la confianza sea ≥ 0.9” con un modelo y cambias a otro, no estás pidiendo lo mismo. Y para score hay todavía otras fórmulas: Jev usa la desviación absoluta media alrededor de la moda, Strands la desviación estándar normalizada (porque repartir masa entre dos niveles contiguos de una escala no es duda, es precisión: “algo así como 2.5”).
Chequeo: ¿por qué la confianza de un score no debería ser simplemente la probabilidad máxima?
Porque en una escala ordenada, la masa repartida entre niveles vecinos significa precisión (“entre 2 y 3”), no incertidumbre. La probabilidad máxima la leería como duda, y además ordenaría mal una distribución bimodal (mitad en cada extremo) por encima de una uniforme, cuando la bimodal es el peor caso para una escala.
Calibración: el meteorólogo honesto
Una probabilidad solo sirve si es honesta. Piensa en un meteorólogo: si de todos los días en que anuncia “70% de lluvia” llueve en siete de cada diez, está calibrado. Si llueve en cuatro, es un charlatán con buena voz. Un modelo que dice “0.90” y acierta el 60% de esas veces produce un número que se parece a una probabilidad pero no lo es, y cualquier umbral que pongas encima (“actuar solo con ≥ 0.9”) se vuelve una ilusión.
Ambos responden diez preguntas y en todas dicen "estoy 90% seguro". Hasta aquí no se distinguen.
La medida estándar es el ECE (expected calibration error): agrupas las predicciones por nivel de confianza, comparas en cada grupo la confianza media con la tasa real de acierto y promedias las diferencias ponderadas:
Y esto no es teórico. En el Decision Index (un leaderboard comunitario), Jev tiene confianza media 0.81 frente a una exactitud de 0.74, es decir, un ECE de 0.074; en el grupo de confianza 0.7–0.8 acertó el 59% de las veces, en 0.8–0.9 el 71% y por encima de 0.9, el 93%. Esos datos los reporta un resumen del ecosistema y no los medí yo, pero la lección es coherente con el resto: la mayoría de estos modelos sale sobreconfiada. Laya lo dice en su propia ficha: sin ajustar, su ECE es 0.466 y baja a 0.081 al refitar una temperatura con datos del dominio.
La temperatura: el botón que cambia la confianza y no la respuesta
La herramienta de calibración más simple es dividir los logits por una temperatura
Con
| T | billing | sales | retail | confianza (máx. normalizado) |
|---|---|---|---|---|
| 0.5 | 0.958 | 0.023 | 0.018 | 0.94 |
| 1.0 | 0.773 | 0.121 | 0.106 | 0.66 |
| 1.5 | 0.643 | 0.187 | 0.171 | 0.46 |
| 2.0 | 0.566 | 0.224 | 0.210 | 0.35 |
| 3.0 | 0.487 | 0.262 | 0.251 | 0.23 |
En la práctica, la temperatura se ajusta minimizando la log-verosimilitud negativa sobre un conjunto de validación, a menudo una por tipo de pregunta (el paper de Harvard que veremos ajusta una para choice, otra para noul y otra para score; Gemma 4 31B sin entrenar necesita temperaturas de 6.0 y 7.2: está muy sobreconfiado de fábrica).
Chequeo: un modelo tiene exactitud 80% y confianza media 0.95. ¿Qué puedes hacer para arreglar el ECE sin reentrenar y qué no puedes arreglar así?
Puedes ajustar una temperatura mayor que 1 (con datos de validación) para bajar la confianza hacia 0.80. No puedes subir la exactitud: la temperatura no cambia cuál opción gana.
Cuatro maneras de construir un modelo de decisión
Hasta aquí vimos qué hacen. Ahora, cómo. El problema de ingeniería es siempre el mismo: tengo un texto, una pregunta y K opciones; necesito K números que sumen 1, en una sola pasada. Hay cuatro soluciones y cada una explica a un modelo concreto.
| Idea | Ejemplo | |
|---|---|---|
| A. Leer letras | A un LLM normal se le pide “responde solo con la letra” y se leen las probabilidades de los tokens A, B, C en el siguiente paso, sin generar nada | SemIf; el “zero-shot” del paper de Harvard |
| B. Cabeza puntero | Se quita la cabeza de lenguaje de un LLM y se compara un “estado de pregunta” con el estado final de cada opción | Strands Decider |
| C. Encoder con marcas | Un BERT bidireccional con un [MASK] por opción, y se lee la respuesta en esas marcas | Laya, Von |
| D. Caja negra | No se publica la arquitectura; se accede por API | Jev, Microsoft-Decision-1, OpenAI Decisions |
B. Strands Decider: el jurado que levanta la mano
Analogía. Un jurado lee un expediente completo con tres candidatos. Al terminar, la persona que preside (<answer>) hace una pregunta general: “¿quién encaja?”. Cada candidato ya leyó su propia ficha, y lo que importa es qué tanto coincide la pregunta de la presidencia con lo que cada candidato entendió de sí mismo. Quien más coincide, levanta más la mano. (La analogía se rompe en que aquí nadie vota: lo que hay es un producto punto, no un recuento.)
El estado, la pregunta y las opciones se escriben en un único prompt que termina en <answer>. Qwen3.5-2B lo lee una vez.
Técnicamente, Strands Decider toma Qwen3.5-2B-Base, un decoder preentrenado de 24 capas (18 de atención lineal tipo Gated DeltaNet y 6 de atención completa), le quita la LM head y pone en su lugar una pointer head de aproximadamente un millón de parámetros. El prompt tiene siempre esta forma:
<state>Help! My payouts have been failing for 3 days.</state>
<question type="choice">
Select exactly one option.
Which team should handle this?
<options>
1. billing — payments, invoices, payouts
2. technical — bugs, outages, API errors
3. sales — pricing and upgrades
</options>
</question>
<answer>
El torso lo procesa una vez. Luego la cabeza toma el estado oculto en <answer> como query y el estado oculto del último token de cada opción como keys. Con atención causal, ese último token ya leyó toda su opción, y <answer> ya leyó todo el prompt. El logit de cada opción es un producto punto escalado:
Ese diseño tiene una virtud elegante: la cabeza no tiene ningún parámetro por opción. Por eso (1) no puede aprender “la primera opción suele ser la correcta”, (2) no hay tope de opciones en la arquitectura y (3) las etiquetas pueden ser nuevas en cada llamada, porque el prompt sola establece qué significa cada opción. Los tres tipos de pregunta salen del mismo softmax: noul con dos opciones, choice con N y score con L niveles ordenados.
También hay una decisión de diseño que muestra mentalidad de ingeniería: los autores mantienen la atención causal en lugar de convertir el modelo en bidireccional. Convertir un decoder a bidireccional exigiría reentrenar mucho para recuperar lo que se rompe, y su presupuesto era una sola RTX 3090. A cambio aceptan un defecto medido: invertir el orden de las opciones mueve la distribución unos 0.016, porque las opciones siguen atendiendo a las anteriores.
C. Laya: la mesa redonda con solapas
Analogía. Ahora todos los participantes se sientan en una mesa redonda y todos oyen todo a la vez, antes y después de su turno. Cada candidato lleva una solapa numerada ([MASK]). Al final, en lugar de preguntar al presidente, simplemente se mira qué piensa cada solapa. (Se rompe en que las solapas no “votan”: un MLP convierte el estado de cada una en un número.)
Se arma [CLS] pregunta [SEP] [MASK] a [MASK] b [MASK] c [SEP] estado. Cada opción tiene su [MASK].
Laya sigue la tradición de BERT. El checkpoint en inglés es ModernBERT-large (395M parámetros, 28 capas, bidireccional, ajustado por completo) más una cabeza propia de 2 capas transformer, un option scorer y una cabeza act/escalate: 421M en total. El multilingüe usa mmBERT-base (322M en total, vocabulario de 256k, 100+ idiomas). El prompt es:
[CLS] choice question: ¿Qué equipo? [SEP]
[MASK] billing: pagos [MASK] tech: errores [MASK] other: general [SEP]
{"subject": "Reembolso", "body": "Me cobraron dos veces..."} [SEP]
Cada [MASK] es la “ventanilla” de una opción. El encoder deja un estado en cada una, el scorer lo convierte en un número y el softmax se hace solo entre los [MASK] de esa pregunta. Todas las preguntas de una llamada se apilan en un batch y se responden en una pasada, por eso Laya reporta unos 33–40 ms por pregunta en una GPU T4 y menos por pregunta cuando agrupas varias.
Lo que Laya hace bien… y los límites que su propia ficha admite
- Es pequeñísimo y corre en CPU, con pesos Apache 2.0.
- No es un modelo zero-shot. En el benchmark typed-decisions, los checkpoints base sacan ~0.35 de acierto, por debajo incluso de predecir siempre la clase mayoritaria (0.461). Con fine-tuning sobre ese dominio sube a 0.766. Su ficha lo dice sin rodeos: es “una base rápida para especializar”.
- Muchas opciones lo rompen. Las opciones comparten un presupuesto fijo de tokens (192 o 256). Con 77 opciones quedan 3–4 tokens por opción y la exactitud en Banking77 cae a 0.425 frente al 0.870 de Jev.
- El checkpoint en inglés colapsa fuera del alfabeto latino y lo hace con mucha confianza (Khmer: 0.000 de exactitud con 0.952 de confianza). Por eso existe el
Routerque detecta el script antes de la pasada. - Sale sobreconfiado y su cabeza
act/escalateaún no aporta señal fiable (según la misma ficha).
D. Jev: lo que se sabe y lo que no
Jev es la referencia, pero hay una asimetría que conviene tener presente: casi todo lo que se afirma sobre cómo funciona es una suposición.
| Se sabe (publicado por TypeSafe) | No se sabe (no publicado) |
|---|---|
La interfaz: estado + preguntas tipadas; noul, choice, score | La arquitectura (TypeSafe dice “transformer”; otros sospechan de un LLM abierto o algo tipo BERT) |
| Hasta 255 opciones, 64k tokens de entrada, texto solamente | El tamaño y los pesos |
| Precio: $0.042 por millón de tokens de entrada, salida gratis | El detalle de RLCD, su método de entrenamiento |
| Entrenado con datos sintéticos, según Almeida | Esos datos, y el paper técnico (no existe) |
| Fórmulas de confianza (las calcula fuera del modelo, con programas simples) | Sus límites de generalización: solo existen medidas externas |
Sí hay evidencia externa: una evaluación independiente (nibzard/decision-model-benchmark) midió latencias p50 de 264–316 ms desde la API, con 79.2% en Banking77 y 88.6% en CLINC150. Eso es rápido comparado con un LLM, pero no respalda por sí solo el “40–200x” que TypeSafe obtiene con sus propios flujos de trabajo (y que ellos mismos describen como posiblemente sesgados a su favor).
El giro (método A): un LLM normal, leído con cuidado, ya casi lo hace
Aquí viene lo más instructivo del ecosistema. Un grupo de Harvard y el Kempner Institute (Geuter, Cheng y Alvarez-Melis, arXiv 2610.17205) se preguntó: ¿hacen falta arquitecturas o métodos de RL especiales?. Su receta es casi ofensivamente simple. Le presentas la pregunta a un LLM instruct con opciones etiquetadas A, B, C… y respuesta de una sola letra, y lees los logits de esas letras en la siguiente posición:
donde
Dos ablaciones merecen quedar grabadas: entrenar solo la cabeza con el modelo congelado no mejora nada (78.9), mientras que entrenar el LoRA con la cabeza fija en su inicialización da 84.9. El beneficio viene de adaptar los estados ocultos, no de aprender una cabeza nueva. Y la instrucción importa: sobre el modelo base (sin instruct) la misma receta solo llega a 70.3.
Chequeo: en Strands la query es el estado en <answer> y las keys son los últimos tokens de cada opción. En Laya, ¿dónde se lee la respuesta y por qué cambia la atención?
En Laya se lee en un token [MASK] dedicado a cada opción, y el encoder es bidireccional: cada token atiende a todo el prompt, antes y después. En Strands la atención es causal, por eso cada opción solo ha visto lo que la precede, y por eso hay una pequeña sensibilidad al orden.
Cómo se entrenan
Hay dos filosofías. La primera es la de toda la vida en deep learning: aprendizaje supervisado con mucha atención a los datos y la calibración final (Strands, y el paper de Harvard). La segunda es la que da nombre a la categoría: aprendizaje por refuerzo con recompensas que premian la honestidad (RLCD). Veamos las dos.
Receta supervisada: la de Strands
Se parte de datasets abiertos (clasificación, NLI, ratings, razonamiento multi-paso) convertidos al formato estado, pregunta, opciones.
La pérdida de Strands tiene tres términos y cada uno responde a un riesgo:
- CE con suavizado ordinal. Cross-entropy contra la etiqueta correcta. En las preguntas
scorese mueve el 10% de la masa de la etiqueta a los niveles vecinos: equivocarse por uno es mejor que equivocarse por cuatro, y la cross-entropy pura no sabe eso. - KL hacia el propio torso. El mismo modelo, con el adaptador apagado, produce una distribución sobre los tokens de número que él emitiría tras
<answer>. Mantenerse cerca de ella actúa como ancla: “no olvides lo que ya sabías”. Cuesta una pasada extra y ningún parámetro nuevo. - KL hacia un tutor, solo donde el tutor sabe más. Un modelo más grande congelado (en la v1, gemma-4-31B-it) da distribuciones objetivo, pero solo en las filas donde es medidamente mejor que el alumno. Donde no lo era (clasificación corta), destilar no movió nada en el benchmark; donde sí (documentos de varios pasos), ayudó.
El detalle que vale más que cualquier término de la pérdida
Los autores lo subrayan: el orden de las opciones se baraja en cada ejemplo y en cada época, y la etiqueta se reasigna. Sin eso, la cabeza aprende en silencio que “la ranura 0 suele ser la clase positiva” y pierde generalidad. Con barajado, la única estrategia que sobrevive al descenso de gradiente es leer el texto de la opción. (Las escalas ordinales solo se invierten, nunca se permutan, porque su orden es parte del significado.) Esta es una lección general de cualquier entrenamiento: elimina los atajos que tus datos permiten.
Otras decisiones de higiene: se descartan (nunca se truncan) los ejemplos que no caben en la ventana, porque cortar una lista de opciones haría que una opción se puntúe desde la representación de su vecina; el checkpoint final es una “sopa” (promedio exacto de los LoRA y las cabezas de tres corridas con la misma receta), calibrada después; y todo corre en aproximadamente 11 horas en una sola RTX 3090 (una hora y diez minutos en ocho H100).
Hay una práctica poco común que explica por qué es tan confiable la documentación de Strands: desde su versión 9, cada corrida declara sus predicciones y sus condiciones de fallo antes de entrenar, y el resultado se añade después sin editar lo anterior. La mayoría de las corridas no alcanzó su umbral, y el repositorio lo cuenta. Si estás investigando, copia esa disciplina.
RLCD: premiar la honestidad
Ahora la otra filosofía. Aquí necesitamos primero entender un problema que parece contraintuitivo.
El juego de las apuestas
Analogía. Eres un pronosticador y te pagan según tu predicción. Sabes que, en realidad, un evento ocurre el 70% de las veces. ¿Qué probabilidad deberías declarar? Depende de cómo te pagan. Si el premio es “la probabilidad que le diste a lo que ocurrió”, lo mejor es declarar 100%: apuestas todo a lo más probable y esperas ganar 0.70 por ronda. El sistema te empuja a la exageración. Pero si el pago está diseñado de manera que el valor esperado se maximiza solo cuando declaras tu creencia verdadera, la honestidad se vuelve la mejor estrategia. A eso se le llama regla de puntaje estrictamente propia.
Con un evento que ocurre el 70% de las veces, estos son los valores esperados de tres reglas al declarar distintas probabilidades
| Declaras q | Premio lineal ( | Brier (negativo) | Logarítmica |
|---|---|---|---|
| 0.50 | 0.500 | −0.250 | −0.693 |
| 0.70 (honesto) | 0.580 | −0.210 | −0.611 |
| 0.90 | 0.660 | −0.250 | −0.765 |
| 0.99 | 0.696 | −0.294 | −1.389 |
| 1.00 (exagerado) | 0.700 | −0.300 | −∞ |
Mira las columnas. La lineal sigue subiendo hasta 1.00: premia mentir. Brier y logarítmica tienen su máximo exactamente en 0.70. Pruébalo tú: mueve los controles y comprueba dónde está el óptimo de cada regla.
Esto es lo que ataca el RL ingenuo con recompensa binaria (+1 si aciertas, 0 si no): maximizar exactitud empuja la probabilidad de la ganadora hacia 1 y la del resto hacia 0, y destruye la calibración. La idea de RLCD (Reinforcement Learning for Calibrated Decisions) es usar como recompensa una regla propia. TypeSafe acuñó el nombre y no ha publicado su método. Convai lo reimplementó para Laya y lo documenta en su ficha, y es esa receta la que describo a continuación (el nombre es el mismo; no sé si es el mismo método).
El modelo produce logits z para las opciones de una pregunta. softmax(z) es la distribución que declara.
El bucle de Laya, paso a paso
- Exploración. La política produce logits
z . Para explorar se suman perturbaciones gaussianas de media cero y suma nula (sumar una constante a todos los logits no cambia el softmax) y se obtienenG = 8 distribuciones ruidosas; la desviación del ruido baja de 1.0 a 0.3 durante el entrenamiento. - Recompensa. Cada variante
q se puntúa contra la etiquetay con una combinación de reglas propias: logarítmica, esférica y, para escalas ordinales, la RPS (ranked probability score), que mide la distancia entre distribuciones acumuladas. - Ventaja de grupo. A cada variante se le resta la media del grupo y se divide por su desviación, al estilo GRPO. Sin red de valor.
- Actualización. REINFORCE con esa ventaja. No hay término de cross-entropy supervisada.
- Cabeza de decisión de actuar. Una cabeza adicional recibe +1 si actúa y acierta, −3 si actúa y falla, −0.5 si escala. La matriz hace que actuar solo convenga cuando
p\cdot 1 + (1-p)(-3) > -0.5 , es decir,p > 0.625 . Los símbolos:p es la probabilidad de acertar si actúa;p\cdot 1 es lo que gana cuando acierta (+1);(1-p)(-3) es lo que pierde cuando falla (−3); y-0.5 es el costo seguro de escalar. Despejando,4p-3 > -0.5 . Ejemplo: conp=0.7 , actuar vale0.7-0.9=-0.2 , mejor que-0.5 , así que actúa; conp=0.5 , vale-1 , así que escala. Analogía: un cajero que decide si aprueba un cheque: ganar 1 por cada acierto no compensa perder 3 por cada error, salvo que esté bastante seguro (más de 62.5%). (Aunque, como vimos, esa cabeza hoy no aporta señal útil según la propia ficha.) - Conversaciones. Para varios turnos, entrena sobre prefijos con TD(
\lambda=1 ), así que cada turno aprende contra el desenlace real.
Los datos
| Modelo | Datos de entrenamiento |
|---|---|
| Jev | “Exclusivamente sintéticos”, según su fundador (sin detalles) |
| Strands Decider | 25 datasets públicos de Hugging Face (tópicos, intenciones, sentimiento, NLI, ratings, reglas encadenadas), más ContractNLI, MuSiQue y filas generadas; v1: 246,678 filas. Con inventario y licencias publicados |
| Laya | Datasets públicos con etiqueta humana (soporte, seguridad, jailbreaks, rúbricas, ventas multi-turno); el autor lo presenta como “sin atajos sintéticos” |
| Harvard (Jeff-1.0) | 417,825 preguntas: ~300k de una mezcla pública de 79 tareas, datos con voto humano blando y ~50k con etiquetas de LLMs grandes que votan (teachers) |
Fíjate en el patrón: sin importar el método, la ingeniería de datos hace el trabajo pesado (mezclas balanceadas, etiquetas suaves, barajado, tutores solo donde son mejores). El detalle que más se repite en estas fichas es el mismo: el modelo aprende lo que baratamente predice la etiqueta, y tu trabajo es no dejarle atajos.
Chequeo: ¿por qué una recompensa “+1 si acierta” destruye la calibración, y qué propiedad tienen las reglas como Brier o log que lo evita?
Con recompensa binaria, el valor esperado crece cuanto más masa pones en la opción más probable, así que el óptimo es una distribución degenerada (1 y 0). Las reglas estrictamente propias están diseñadas para que el valor esperado se maximice únicamente al declarar la distribución verdadera, con lo que la honestidad es la mejor estrategia.
Medir: qué dicen (y qué no) los benchmarks
La categoría nació con benchmarks propios porque los clásicos no la miden bien. JevBench (una evaluación comunitaria; su split público tiene 231 preguntas) puntúa Capability = (Inteligencia + Calibración) / 2. El Decision Index pondera ítems públicos (20%), ítems privados de las mismas habilidades (50%) y privados de dominios nuevos (30%) precisamente para detectar modelos afinados contra el set público. S1MB reúne más de cien benchmarks. Y hay evaluaciones independientes como las de nibzard y Red Hat.
Aprender a leer estas tablas es parte del oficio. Cuatro reglas:
- Mira quién midió. En el ranking de 20 alternativas que publicó Marktechpost casi todas las cifras son de los propios autores, y la única tabla con varios modelos viene de Respan, que vende un competidor.
- Mira el set privado. En el Decision Index (snapshot del 10 de octubre), Clef de Cloudflare saca ~61.7 en ítems públicos y ~41.9 en dominios nuevos: casi 20 puntos de caída. Jev cae solo ~3.
- Mira los pesos del compuesto. JevBench pondera inteligencia, calibración, velocidad y costo al 25% cada uno; un modelo de 27B pierde posiciones porque su costo se estima al precio del modelo base. El “número 1” depende de tus pesos.
- Mira la versión y la fecha. Jev puntuaba ~57.9 en el Decision Index 0.2.1 y 60.11 en la 0.3.1; el top cambia casi cada semana.
Algunos números para orientarse
| Medida | Resultado | Fuente |
|---|---|---|
| Strands Decider 2B (v1), JevBench público | 180/231 = 77.9%; Brier 0.280; ECE 0.072 | repo del proyecto |
| Gemma 4 31B zero-shot vs Jev, OpenDecisions | 79.6 vs 80.1 | paper de Harvard |
| Gemma 4 31B + LoRA corto | 84.4 (JevBench v1.7 oficial: 81.5 vs 77.1 de Jev) | paper de Harvard |
| Jev, Banking77 completo (77 clases) | 79.2% de exactitud, p50 316 ms | nibzard/DMB (independiente) |
| Laya, Banking77 (77 opciones) | 0.425 frente a 0.870 de Jev | ficha de Laya (cifra de Jev tomada de terceros) |
| Prompt injection (guardrails) | deberta 89.0% a 54 ms; Jev 86.4% a 348 ms; Laya 85.4% | Red Hat |
| Content safety | Jev 86.2%; granite-guardian-hap 80.3% a 33 ms; Laya 57.9% | Red Hat |
Hay dos ideas de fondo detrás de esa tabla. La primera: los modelos de decisión son excelentes si no tienes datos de tu tarea, y los clasificadores pequeños entrenados con tu tarea suelen igualarlos o ganarles (Red Hat llegó a esa conclusión con guardrails en inglés: un clasificador de ~200M de parámetros en CPU igualó a Jev). La segunda: los números de un modelo no se transfieren entre dominios ni entre prompts; Red Hat vio que un prompt afinado para Laya le subió 17.8 puntos y le bajó 3.7 a Jev.
Usarlos bien en producción
La política de las tres bandas
La forma más útil de consumir una confianza es una política de tres bandas: actúa solo cuando la confianza es alta, confirma cuando es media y escala a una persona cuando es baja. Las bandas de ejemplo de la documentación de Jev son 0.9 y 0.5; Strands reporta que, en tareas cortas de clasificación que no había visto, las respuestas con confianza ≥ 0.9 acertaron alrededor del 95%. Son puntos de partida, no leyes.
Un ticket, un mensaje, una llamada a herramienta que el agente quiere ejecutar. Se formulan las preguntas tipadas.
Para elegir los umbrales de verdad, usa cobertura a un nivel de error más que el ECE: “¿qué fracción de los casos puedo automatizar si acepto un 5% de error?”. En un benchmark de nibzard con Banking77, un umbral de 0.96 sobre la confianza de Jev automatizaba el 51% de los casos con un 3.7% de error entre los aceptados; en NLU++, con varias etiquetas por mensaje, ningún umbral alcanzó el 5% de error. El mismo método en dos tareas distintas produce resultados muy distintos: por eso hay que medirlo con tus datos.
Cómo se ve en código
Strands Decider, desde la línea de comandos, con una pregunta de cada tipo:
pip install strands-decider
strands-decider ask StrandsAgents/strands-decider-2B-qwen3.5-v1-2610 \
--state "Help! My payouts have been failing for 3 days!" \
--choice "Which team should handle this?=billing,sales,retail" \
--noul "Does this convey urgency?" \
--score "How frustrated is the writer?=calm,frustrated,depressed"
Laya, con el Router que elige el checkpoint según el alfabeto del texto:
from laya import Router
router = Router(preload=True)
result = router.predict(
"Hi, we were billed twice for March. Please refund the duplicate.",
{"department": {"type": "choice", "instructions": "Which department?",
"criteria": {"billing": "invoices, refunds", "technical": "bugs", "other": "else"}},
"churn_risk": {"type": "noul", "instructions": "Does the user threaten to leave?"}},
)
print(result["answers"]["department"]["choice"], result["routing"]["model"])
Y un ejemplo de verdad útil: el repositorio de Strands incluye un agente que, antes de ejecutar una herramienta, hace dos preguntas noul sobre la llamada propuesta. Si los argumentos no están fundamentados en lo que dijo el usuario, devuelve la jugada al agente para que pregunte en lugar de adivinar. Es un hybrid agent: el LLM hace el razonamiento difícil y el modelo de decisión toma las decisiones rápidas de rutina.
QUESTIONS = {
"args_grounded": Decider.noul(
"Are the tool's argument values grounded in facts the user actually provided?",
{"true": "every argument value traces back to something the user said",
"false": "an argument value was guessed or invented, not stated by the user"}),
"premature": Decider.noul(
"Is it premature to call this tool now, before clarifying with the user?",
{"true": "the assistant should ask a clarifying question before calling the tool",
"false": "there is nothing left to clarify; calling now is appropriate"}),
}
Cuando el servidor corre localmente, cualquier cliente de Jev funciona cambiando la URL base, porque el endpoint es /v1/systemone en ambos.
Lista de comprobación antes de ponerlo en un flujo
- Fija la versión. En APIs alojadas, un ID versionado (
jev-latestes un alias móvil; un benchmark vio cambiar 20 respuestas entre corridas). En pesos abiertos, el commit y el formato de cuantización: cuantizar o cambiar precisión puede cambiar respuestas. - Construye tu propio conjunto. Unos cientos de ejemplos de tráfico real, con casos difíciles estratificados y una porción de “dominio nuevo”.
- Pon tres referencias. Reglas o palabras clave, un clasificador pequeño entrenado (si tienes datos) y un LLM como juez. El modelo de decisión debe ganar al menos en una dimensión.
- Calibra tú. Una temperatura por tipo de pregunta, ajustada con tus etiquetas.
- Prueba el orden. Baraja las opciones y mide cuántas respuestas cambian (en Strands, ~0.016 de movimiento; en un estudio con preguntas de 16 opciones, Jev cambió el 7.0% de sus respuestas y dos modelos destilados de Jev, entre 7.4% y 11.5%). Una mitigación barata: ordenar las opciones por texto.
- Verifica que existan las tres bandas. Algunos modelos casi nunca producen probabilidades intermedias; entonces tu banda “confirmar” jamás se usa.
- Mide la latencia de extremo a extremo, con red. Un modelo de 30 ms en tu GPU y uno de 300 ms por una API no compiten en el mismo plano.
- Deja rastro de auditoría: hash del estado, preguntas, la distribución completa, versión del modelo, umbral vigente y acción final.
Cuándo no usarlos
Un buen criterio de ingeniería es saber por qué no elegir una herramienta.
| Si… | Prefiere… | Por qué |
|---|---|---|
| No tienes datos de la tarea, las categorías cambian a menudo o son muchas decisiones pequeñas dispersas | Modelo de decisión | Arranque en frío y flexibilidad: no entrenas nada y las etiquetas van en el prompt |
| Tienes miles de etiquetas y categorías estables | Clasificador pequeño entrenado | Igual o más exacto, más rápido y barato; en CPU |
| Fuera de la ruta crítica y la exactitud manda (etiquetado offline, QA diario) | LLM como juez | En JevBench, GPT-6 Luna con razonamiento bajo sacó 97.8 de capacidad contra 77.1 de Jev, por unos 7 centavos más por mil decisiones (aunque con 1.85 s de latencia frente a 0.24 s) |
| Necesitas razonar varios pasos o explicar | LLM | El diseño de una pasada es peor en problemas complejos y no genera explicaciones |
| La latencia se acumula (por ejemplo, 20 decisiones en cadena) | Modelo de decisión | 100 ms extra en cada una suman 2 segundos |
Y un camino intermedio: etiquetar con un modelo de decisión y luego entrenar un clasificador pequeño. La ficha de Laya muestra un caso donde afinar un checkpoint pasa de 0.362 a 0.766 de exactitud.
El mapa del ecosistema
La velocidad de este campo es llamativa: en cuatro semanas pasó de una API cerrada a una categoría con pesos abiertos, leaderboards y un endpoint genérico en vLLM. Un mapa útil se divide por si puedes ejecutarlo tú:
| Grupo | Ejemplos | Nota |
|---|---|---|
| Solo API | Jev (TypeSafe), OpenAI Decisions, Microsoft-Decision-1, meraGPT Decider 1 | No se pueden afinar; fija versión y registra |
| Pesos abiertos de empresas grandes | Cloudflare Clef (27B) y Clef-flash, Liquid d1 (hasta 3B, con imagen y audio), Perplexity pplx-decider, H2O-Lightning-4B | Varios aceptan imágenes y comparten el formato /v1/systemone |
| Abiertos con receta reproducible | Strands Decider, Together Tev1, el paper de Harvard (Jeff-1.0) | Los mejores para aprender y para auditar |
| Comunidad e independientes | Laya, Von, Kev, Mapika Decider, Fastino GLiNER2.5-Decide, AutoTrust JEV | Muy rápidos o pequeños; mide bien antes de confiar |
| Herramientas | AnyJev (envuelve cualquier LLM), SemIf, vLLM y llama.cpp | Para convertir un modelo que ya tienes |
Repaso: ¿lo entendiste de verdad?
Intenta responder cada pregunta antes de abrirla. Si dudas en alguna, vuelve a la sección correspondiente: esa duda es exactamente lo que más te sirve estudiar.
1. Explica con tus palabras por qué un modelo de decisión no puede “alucinar el formato”, pero sí puede equivocarse.
Su salida es una distribución sobre las opciones que tú diste, así que siempre cumple el esquema. Pero la distribución puede estar centrada en la opción incorrecta, incluso con alta confianza.
2. ¿Qué compara la pointer head de Strands y qué compara la decision head de Laya?
Strands compara el estado oculto en <answer> (query) con el del último token de cada opción (keys), con atención causal. Laya lee el estado en un [MASK] por opción, con un encoder bidireccional, y un MLP lo convierte en un logit.
3. ¿Por qué se baraja el orden de las opciones durante el entrenamiento?
Para que el modelo no aprenda el atajo de la posición (“la primera suele ser la correcta”). Barajar fuerza a leer el texto de la opción.
4. Una recompensa por exactitud empuja a las probabilidades a 0 y 1. ¿Qué cambia con una regla propia?
Su valor esperado se maximiza solo al declarar la probabilidad verdadera, de modo que el modelo aprende a ser honesto, que es lo que significa estar calibrado.
5. ¿Qué evidencia sugiere que la arquitectura especial quizá no sea necesaria?
Un LLM instruct leído por los logits de letras ya iguala a Jev en un set de desarrollo (79.6 contra 80.1), y un LoRA corto lo supera (84.4). Las ablaciones indican que el beneficio viene de adaptar los estados ocultos y no de entrenar una cabeza nueva.
6. Tu modelo dice 0.93 y acierta el 75% de esos casos. ¿Qué haces antes de poner un umbral?
Calibrar con tus datos (por ejemplo, una temperatura mayor que 1 por tipo de pregunta), medir de nuevo y elegir el umbral por cobertura a un nivel de error aceptable, no por el valor nominal.
Glosario mínimo
- System One / modelo de decisión
- Modelo que recibe un estado y preguntas cerradas y devuelve probabilidades, sin generar texto.
- noul / choice / score
- Sí/no, elección entre N y escala ordinal.
- Logit
- Puntaje sin normalizar de una opción; el softmax lo convierte en probabilidad.
- Temperatura
- Divisor de los logits para reescalar la confianza sin cambiar la ganadora.
- ECE / Brier
- Medidas de calibración y de calidad probabilística.
- LoRA
- Ajuste de baja dimensión que añade pocos parámetros entrenables a un modelo congelado.
- RLCD
- Nombre de TypeSafe para entrenar con recompensas que premian probabilidades honestas (su método no es público; Laya publica una versión).
- Regla propia
- Función de puntaje cuyo valor esperado solo se maximiza declarando la distribución verdadera.
- Sopa de modelos
- Promedio de pesos de varias corridas de la misma receta.
Fuentes y límites de lo que aquí se afirma
Todo lo que sigue se consultó entre el 24 y el 25 de octubre de 2026 y el campo cambia semana a semana. Cuando una cifra viene de un autor sobre su propio modelo, lo he dicho; cuando la vi solo en un resumen secundario, también.
- Strands Labs, Introducing Strands Decider 2B y el repositorio
strands-labs/strands-decider(README ydocs/architecture.md). - Convai Innovations, fichas de Hugging Face
convaiinnovations/layaylaya-multilingual, y el post de Nandakishor M en dev.to. - TypeSafe AI, Introducing System One Models & Jev; Wikipedia, Jev (AI model); TechCrunch, 18 de septiembre de 2026.
- J. Geuter, A. Cheng, D. Alvarez-Melis, Releasing the Inner Jev: A Simple Recipe for Open Decision Models, arXiv 2610.17205.
- nibzard,
decision-model-benchmark(evaluación independiente de Jev). - Remy, One Month After Jev (resume el Decision Index, JevBench, el estudio de Red Hat y el artículo de Alex Molas); Marktechpost, 20 Jev Alternatives.
Lo que no pude verificar: cómo es Jev por dentro, qué tan cerca está el RLCD de Laya del de TypeSafe, y el contenido del paper JevOut (solo vi su resumen). Si lo vas a usar en algo que importe, mide con tus datos.