Guías para desarrolladores
Jev TypeSafe: decisiones tipadas en TypeScript
Guía de Jev TypeSafe: define preguntas tipadas, valida respuestas de API y dirige decisiones inciertas con seguridad en TypeScript.

Quienes buscan jev typesafe suelen encontrar dos ideas relacionadas, pero distintas: las decisiones de IA tipadas de Jev y el sistema de tipos de TypeScript. Esta guía muestra cómo conectarlas sin confundir un tipo de compilación con un resultado fiable en tiempo de ejecución. Jev responde preguntas estructuradas sobre un estado; tu servicio TypeScript todavía debe validar esa respuesta y decidir qué puede hacer la aplicación.
El sitio de Jev presenta el producto como una herramienta de decisiones independiente para equipos de software. Jev no está afiliado a TypeSafe, no es operado por TypeSafe ni cuenta con su respaldo. Puedes conocer el producto en la página principal de Jev AI y probar su Playground en línea.

Qué significa usar Jev con seguridad de tipos en TypeScript
TypeScript comprueba el código antes de ejecutarlo. No puede demostrar que una respuesta HTTP de un servicio remoto coincida con un tipo declarado por ti. El valor de response.json() debe tratarse como unknown hasta que el código compruebe su estructura.
Hay dos límites importantes:
- Construcción de la solicitud: TypeScript ayuda a mantener coherentes el estado y las definiciones de preguntas.
- Análisis de la respuesta: las comprobaciones en tiempo de ejecución confirman que los datos de red contienen los campos que necesita el código.
Trata la respuesta del modelo como una señal para decidir, no como permiso para ejecutar una acción. Tus reglas de negocio, comprobaciones deterministas y pasos de revisión siguen teniendo el control.

Empieza con los tres tipos de pregunta de Jev
La documentación de Jev describe tres tipos de preguntas. Usa Choice para destinos fijos, Score para una escala ordenada y Noul para una pregunta concreta de sí o no. Una misma solicitud puede evaluar varias preguntas sobre el mismo estado.
| Tipo | Adecuado para | Resultado que debes revisar |
|---|---|---|
| Choice | Seleccionar equipo, cola o categoría | Opción elegida, probabilidades y confianza |
| Score | Gravedad, calidad o urgencia en niveles ordenados | Puntuación ponderada, probabilidades por nivel y confianza |
| Noul | Determinar si una proposición concreta es verdadera | Probabilidad de que la respuesta sea sí, entre 0 y 1 |
Explica los criterios con claridad. Si un ticket puede ser de facturación, técnico o comercial, define qué corresponde a cada opción en vez de pedir a Jev que invente categorías.

Construye una solicitud tipada y valida la respuesta
El siguiente ejemplo llama al endpoint System One documentado desde un servicio TypeScript del servidor. Define el tipo de solicitud, mantiene la clave API en el servidor y comprueba el JSON recibido como unknown antes de entregarlo al código de la aplicación.
type Question =
| { type: "choice"; instructions: string; criteria: Record<string, string> }
| { type: "score"; instructions: string; criteria: string[] }
| { type: "noul"; instructions: string };
type EvaluationRequest = {
model: "jev-latest";
state: string | Record<string, unknown> | string[];
questions: Record<string, Question>;
};
function asRecord(value: unknown): Record<string, unknown> | null {
return typeof value === "object" && value !== null && !Array.isArray(value)
? (value as Record<string, unknown>)
: null;
}
function isProbabilityMap(value: unknown): value is Record<string, number> {
const map = asRecord(value);
return !!map && Object.values(map).every(
(item) => typeof item === "number" && Number.isFinite(item) && item >= 0 && item <= 1
);
}
async function classifyTicket(ticket: string) {
const apiKey = process.env.JEV_API_KEY;
if (!apiKey) throw new Error("JEV_API_KEY is not configured");
const request = {
model: "jev-latest",
state: { message: ticket },
questions: {
department: {
type: "choice",
instructions: "Which team should handle this ticket?",
criteria: {
billing: "Payments, invoices, refunds, or payouts",
technical: "Bugs, outages, or integration failures",
sales: "Pricing, upgrades, or new accounts"
}
}
}
} satisfies EvaluationRequest;
const response = await fetch("/es/v1/systemone", {
method: "POST",
headers: {
Authorization: "Bearer " + apiKey,
"Content-Type": "application/json"
},
body: JSON.stringify(request)
});
if (!response.ok) throw new Error("Jev request failed: " + response.status);
const payload: unknown = await response.json();
const root = asRecord(payload);
const answers = asRecord(root?.answers);
const answer = asRecord(answers?.department);
if (
answer?.type !== "choice" ||
typeof answer.choice !== "string" ||
typeof answer.confidence !== "number" ||
!Number.isFinite(answer.confidence) ||
answer.confidence < 0 ||
answer.confidence > 1 ||
!isProbabilityMap(answer.probabilities)
) {
throw new Error("Unexpected Jev response shape");
}
return {
team: answer.choice,
confidence: answer.confidence,
probabilities: answer.probabilities
};
}
const result = await classifyTicket("Three deploys failed and production is returning 500s.");
if (result.confidence >= 0.8) {
// Apply your allowlist and business rules before routing.
} else {
// Send uncertain cases to a human-review queue.
}
Esta validación comprueba los campos que usa este flujo. Amplíala si el código posterior depende de otros valores. No conviertas toda la respuesta a una interfaz declarada y supongas que el servicio remoto la ha respetado.

Usa la confianza como señal, no como garantía
Las respuestas Choice y Score de Jev incluyen probabilidades y una señal de confianza; Noul devuelve la probabilidad de que la respuesta sea sí. Estos valores sirven para comparar y enrutar casos, pero la confianza no equivale a la precisión medida ni garantiza la seguridad.
Antes de automatizar, reúne ejemplos etiquetados que representen tu caso de uso. Mide los errores relevantes, fija un umbral según los resultados y define qué hacer por debajo de él. En acciones de alto impacto, conserva las reglas deterministas y la aprobación humana aunque la señal del modelo parezca sólida.

Lista de verificación para una integración Jev TypeSafe en producción
- Envía solo el texto o los campos estructurados necesarios para la decisión; elimina los datos personales irrelevantes.
- Guarda JEV_API_KEY en un almacén de secretos del servidor. No la incluyas en código del navegador ni en un repositorio público.
- Prueba ejemplos típicos, ambiguos y adversarios en el Playground de Jev antes de conectar una acción real.
- Registra los identificadores de solicitud y los resultados de validación, no las credenciales ni estados sensibles innecesarios.
- Gestiona los errores HTTP 429 y 529 transitorios con retroceso exponencial acotado.
- Trata una discrepancia de esquema como una ruta de error; no elijas una acción predeterminada en silencio.
- Revisa los umbrales cuando cambien las entradas o los costes del negocio.
Consulta la documentación de la API de Jev para ver los campos actuales. Antes de estimar el uso en producción, revisa también los planes y el consumo.
¿Jev TypeSafe es lo mismo que TypeScript?
No. Jev devuelve decisiones tipadas, como una opción, una puntuación o una probabilidad de sí. TypeScript comprueba estáticamente el código de la aplicación. Una integración robusta usa ambos: tipa la solicitud y el resultado interno, y valida en tiempo de ejecución los datos de red no confiables.
¿Un tipo de TypeScript valida la respuesta de una API?
No. Las anotaciones de tipo desaparecen al ejecutar JavaScript. Analiza la respuesta como unknown y comprueba cada campo que la aplicación necesite antes de enrutar, guardar o mostrar el resultado.
¿Jev ejecuta la acción después de decidir?
La ejecución debe seguir bajo el control de tu aplicación. Pide a Jev que evalúe una pregunta acotada y deja que tus permisos, listas permitidas, reglas deterministas y aprobaciones decidan si se continúa.
Resumen
La forma práctica de usar jev typesafe consiste en marcar una frontera clara entre la decisión estructurada del modelo y la lógica que la consume. Define preguntas concretas, valida cada respuesta en tiempo de ejecución, evalúa con ejemplos reales y envía los casos inciertos o de alto impacto a revisión.