Jev responde preguntas tipadas (sí/no, elegir una opción, puntuar en una escala) con probabilidades y confianza, a $0,042 por millón de tokens de entrada y sin cobrar la salida; sirve para clasificar y enrutar, no para generar texto, y conviene medirlo en sombra antes de dejar que decida.
1. Qué es Jev#
Jev es el modelo de TypeSafe que la documentación de Cloudflare describe como un modelo de evaluación estructurada: toma un estado (un texto o un objeto) y lo evalúa contra preguntas tipadas, devolviendo respuestas calibradas con probabilidades y confianza. No genera texto libre. Se ofrece en Workers AI como typesafe/jev y, según guías de terceros, también por otros proveedores.
Las preguntas son de tres tipos, que se pueden combinar en una sola llamada.
| Tipo | Qué responde | Qué devuelve |
|---|---|---|
| noul | Una afirmación de sí o no | Probabilidad de que sea verdadera (0 a 1) |
| choice | Cuál de varias opciones etiquetadas | La opción elegida, su confianza y la probabilidad de cada una |
| score | Dónde cae en una escala ordenada | Un puntaje, su confianza, la leyenda de niveles y la probabilidad de cada nivel |
La utilidad práctica es poner una decisión tipada en el flujo de una aplicación: a qué equipo va un ticket, si un mensaje es urgente, si un texto intenta una inyección de instrucciones. En lugar de pedirle a un modelo de lenguaje que redacte una respuesta y luego interpretar el texto, recibes números que puedes comparar con un umbral.
Documentación: Cloudflare: Jev (typesafe/jev) ↗
2. Cómo se hace la llamada#
La petición lleva el estado y un objeto de preguntas, cada una con su tipo, sus instrucciones y sus criterios. El código arma exactamente la solicitud de ejemplo de la documentación de Cloudflare (en Workers AI se pasa a env.AI.run con el modelo typesafe/jev; por la API REST va dentro del campo input).
import json
solicitud = {
"state": "Help! My payouts have been failing for 3 days.",
"questions": {
"is_urgent": {"type": "noul", "instructions": "Does this convey urgency?",
"criteria": {"true": "Explicitly time-sensitive", "false": "No urgency expressed"}},
"department": {"type": "choice", "instructions": "Which team should handle this?",
"criteria": {"billing": "Payments, invoicing, refunds",
"technical": "Bugs, outages, integrations",
"sales": "Pricing, upgrades, new accounts"}},
"frustration": {"type": "score", "instructions": "How frustrated is the customer?",
"criteria": ["Calm", "Frustrated", "Very angry"]},
},
}
cuerpo = json.dumps({"model": "typesafe/jev", "input": solicitud})
print(sorted(solicitud["questions"]), len(cuerpo) > 0)La respuesta trae, para cada pregunta, su tipo y los números: un noul de 0,95, una opción elegida con confianza 0,8 y un puntaje de 1,04 sobre la leyenda de niveles, además del modelo usado y los tokens consumidos.
3. De la respuesta a una decisión#
Una probabilidad no es una decisión hasta que fijas qué hacer con ella. La función aplica un umbral de confianza: si la confianza de la opción elegida no lo alcanza, el caso pasa a una persona. El puntaje se redondea al nivel más cercano de la leyenda. Se prueba con la respuesta de ejemplo de la documentación.
import json
# Respuesta de ejemplo de la documentación de Cloudflare para typesafe/jev
RESPUESTA = json.loads("""
{"model": "jev-1.13.0",
"answers": {
"is_urgent": {"type": "noul", "noul": 0.95},
"department": {"type": "choice", "choice": "billing", "confidence": 0.8,
"probabilities": {"billing": 0.87, "sales": 0, "technical": 0.13}},
"frustration": {"type": "score", "score": 1.04, "confidence": 0.94,
"legend": {"0": "Calm", "1": "Frustrated", "2": "Very angry"},
"probabilities": {"0": 0, "1": 0.96, "2": 0.04}}},
"usage": {"input_tokens": 426, "output_tokens": 73}}
""")
def decidir(respuesta, umbral=0.7):
"""Convierte las respuestas calibradas en una acción; si la confianza es baja, pasa a una persona."""
a = respuesta["answers"]
area = a["department"]
return {
"urgente": a["is_urgent"]["noul"] >= 0.5,
"equipo": area["choice"] if area["confidence"] >= umbral else "revision_humana",
"tono": a["frustration"]["legend"][str(round(a["frustration"]["score"]))],
"modelo": respuesta["model"],
}
print(decidir(RESPUESTA))
print(decidir(RESPUESTA, umbral=0.9)["equipo"])4. Cuánto cuesta frente a un LLM#
La tabla resume los datos de la ficha de Jev en Cloudflare. La salida no se cobra: solo cuenta la entrada.
| Dato | Valor |
|---|---|
| Identificador en Workers AI | typesafe/jev |
| Versión en la respuesta de ejemplo | jev-1.13.0 |
| Ventana de contexto | 32.000 tokens |
| Entrada | $0,042 por millón de tokens |
| Salida | $0,00 |
| Entrada en caché | $0,00 |
| Retención de datos | Cero, según la documentación |
Con los tokens de la respuesta de ejemplo (426 de entrada y 73 de salida), un millón de solicitudes cuesta alrededor de $17,89 con Jev. Hacer la misma clasificación con un modelo de lenguaje a la tarifa introductoria de Gemini 4 Argon ($2 de entrada y $10 de salida por millón) costaría unos $1.582 por millón de solicitudes, 88 veces más. En pesos, con la TRM del 17 de octubre de 2026: COP 56,801 frente a COP 5,022,328.
from decimal import Decimal as D
TOKENS_ENTRADA, TOKENS_SALIDA = 426, 73 # "usage" de la respuesta de ejemplo de la documentación
JEV_ENTRADA = D("0.042") # USD por millón de tokens de entrada; la salida cuesta 0
ARGON = (D("2"), D("10")) # Gemini 4 Argon, tarifa introductoria hasta el 30 nov 2026
TRM = D("3174.67") # TRM del 17 oct 2026
millon = D(1_000_000)
jev = D(TOKENS_ENTRADA) * JEV_ENTRADA / millon * millon # USD por millón de solicitudes
llm = (D(TOKENS_ENTRADA) * ARGON[0] + D(TOKENS_SALIDA) * ARGON[1]) / millon * millon
print(f"Jev: ${jev:,.2f} | LLM: ${llm:,.2f} por millón de solicitudes | {llm / jev:.0f} veces")
print(f"En pesos: COP {jev * TRM:,.0f} vs COP {llm * TRM:,.0f}")Para profundizarPrecios de las APIs de IA en octubre de 2026: cuánto cuesta cada modelo
Documentación: OpenRouter: qué es Jev ↗ · DataCamp: Jev, el modelo System One ↗ · LangChain: qué es Jev ↗
5. Cuándo usarlo y cuándo no#
- Sirve para clasificar, enrutar, filtrar y puntuar con alto volumen y baja latencia.
- Sirve para decisiones que necesitan una probabilidad que puedas comparar con un umbral y auditar.
- No sirve para redactar, resumir ni conversar: no genera texto.
- Tiene una ventana de 32.000 tokens: un documento largo hay que recortarlo antes.
- Es un modelo de un tercero: revisa qué datos le envías y sus términos antes de mandar información sensible.
Las guías de terceros destacan que Jev nunca alucina y que es mucho más rápido y barato que un LLM. Son afirmaciones de la empresa o de contenido cercano a ella: pruébalas con tus propios datos antes de apoyarte en ellas.
6. Cómo adoptarlo sin riesgo#
- Empieza en modo sombra: deja que Jev decida en paralelo y compara con tu decisión actual antes de aplicarla.
- Mide el acuerdo y, sobre todo, los desacuerdos: ahí se ve si las descripciones de tus opciones son claras.
- Escribe criterios distintos y específicos para cada opción; la calidad del enrutamiento depende de ellos.
- Fija un umbral de confianza y una salida a una persona para lo que no lo alcance.
- Registra la versión del modelo que devuelve cada respuesta, porque puede cambiar.
- Revisa en la documentación de tu proveedor el punto de acceso y el nombre del modelo: las guías de terceros citan otros distintos (jev-1.14, jev-latest).
Para profundizarModelos de decisión: Jev, Microsoft-Decision-1 y la Decisions API de OpenAI
Fuentes y alcance
Documentación consultada el 18 de octubre de 2026. Los ejemplos y criterios de decisión son propuestas editoriales; adáptalos al contrato de tu aplicación y valídalos en tu entorno de pruebas autorizado.