Decisiones

Decisiones (Jev)

Haz preguntas tipadas sobre tus datos y obtén respuestas con las que tu código puede actuar: la probabilidad de que sea sí, una opción de un conjunto o un punto en una escala, con probabilidades calibradas, normalmente en menos de un segundo. Se sirve en la propia API de TypeSafe, así que sus SDK funcionan sin cambios.

POST/v1/systemone
ModeloIDEntrada, por 1M de tokensPrecio de TypeSafeSalida
Jev 1.14jev-1.14$0.024$0.042Gratis
Jev 1.13jev-1.13$0.035$0.042Gratis

Jev es el modelo de decisiones de TypeSafe, que llama modelo System One: entiende el lenguaje natural como un modelo de chat, pero en lugar de escribir texto responde a las preguntas que tú defines. jev-latest, jev-1.14.0 y typesafe/jev-1.14 también funcionan como IDs de modelo, y jev-1.13 sigue disponible para prompts ajustados sobre él.

Haz preguntas

# pip install typesafe-sdk
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient
with TypeSafeClient(
base_url="https://api.zurelay.com",
api_key="YOUR_ZURELAY_KEY",
model="jev-1.14",
) as client:
response = client.system_one(
state={"ticket": "I was charged twice for October, please refund one today."},
questions={
"refund": Noul(instructions="Is the customer asking for money back?"),
"team": Choice(
instructions="Which team should handle this?",
criteria={"billing": "Charges and refunds", "technical": "Bugs and outages"},
),
"urgency": Score(
instructions="How urgent is it?",
criteria=["can wait", "this week", "today"],
),
},
)
print(response.nouls["refund"].noul) # 0.98
print(response.choices["team"].choice) # billing
print(response.scores["urgency"].score) # 1.9

Con los SDK de TypeSafe, define la URL base como https://api.zurelay.com, sin /v1: ellos añaden /v1/systemone por su cuenta. Las variables de entorno TYPESAFE_BASE_URL y TYPESAFE_API_KEY también funcionan. Cualquier cliente HTTP funciona igual: envía tu clave de Zurelay como Bearer token.

La respuesta

Respuesta
{
"id": "req_8Kq2vXbN4tR7mWc1pLs9dYe3",
"model": "jev-1.14",
"answers": {
"refund": { "type": "noul", "noul": 0.98 },
"team": {
"type": "choice",
"choice": "billing",
"probabilities": { "billing": 1.0, "technical": 0.0 },
"confidence": 1.0
},
"urgency": {
"type": "score",
"score": 1.9,
"legend": { "0": "can wait", "1": "this week", "2": "today" },
"probabilities": { "0": 0.0, "1": 0.1, "2": 0.9 },
"confidence": 0.81
}
},
"usage": { "input_tokens": 396, "output_tokens": 61, "cost": 0.00001386 }
}

Cada respuesta llega bajo el nombre que le diste a su pregunta. usage es aquello sobre lo que se facturó la solicitud, y cost lo que costó en dólares estadounidenses. La misma solicitud puede dar una respuesta con uno o dos puntos de diferencia entre una llamada y la siguiente.

Parámetros

modelstringobligatorio
jev-1.14, jev-latest (el mismo modelo) o jev-1.13.
statestring, object o arrayobligatorio
El contenido sobre el que decidir: un texto, o datos estructurados como un registro, un historial de chat o el estado actual de tu app. Para referirte a un campo en una pregunta, usa su nombre entre comillas invertidas, como `ticket`.
questionsobjectobligatorio
Tus preguntas, cada una bajo un nombre que tú eliges. Las respuestas llegan con esos mismos nombres, y los nombres no se envían al modelo.
Cada pregunta
typestringobligatorio
noul, choice o score.
instructionsstring, object o arrayobligatorio
La pregunta. Un objeto puede contener la pregunta en un campo y los datos a los que se refiere en otros.
criteriaobject o array
Para un choice (obligatorio): un objeto de opciones, cada una con una descripción o null, hasta 255. Para un score (obligatorio): un array de 2 a 10 niveles, del más bajo al primero. Para un noul (opcional): true y false, qué significan un sí y un no.

Tipos de pregunta

TipoPreguntaRespuesta
noulUna pregunta de sí o nonoul: la probabilidad de que sea sí, de 0 a 1
choiceCuál de tus opciones encajachoice, el probabilities de cada opción y una confidence
scoreDónde se sitúa en tu escala ordenadascore, que puede quedar entre niveles, una legend, el probabilities de cada nivel y una confidence

Una misma petición puede combinar los tres tipos, y hacer muchas preguntas cuesta apenas más que una: el estado se lee una sola vez y todas las preguntas se responden en paralelo sobre él.

Límites

  • Hasta 64K tokens por petición, sumando el estado y todas las preguntas, y 32K para el estado junto con la pregunta más larga.
  • Solo texto: una cadena, un objeto JSON o un array. Convierte antes en texto las imágenes, PDF o audio.
  • Sin streaming: las respuestas llegan completas, normalmente en menos de un segundo.
  • Una petición mal formada (falta un instructions, una puntuación con un solo nivel) se rechaza con un 400 antes de llegar al modelo y no cuesta nada. También una que supere los 64K tokens, con el código context_length_exceeded.

Cómo obtener buenas respuestas

Jev lee las instrucciones al pie de la letra, así que escribe la condición exacta y pon los casos límite en los criterios. Deja los recuentos, la aritmética y las comparaciones de fechas en el código, y envía solo la parte del estado que necesita la pregunta. Puede inclinarse por la primera opción de una elección: para una decisión importante, comprueba que la respuesta se mantiene al reordenar las opciones.

Pagar por las decisiones

Jev se factura por los tokens de entrada que cuenta: tu estado y tus preguntas, más unos 270 tokens propios en cada petición. Las respuestas son gratis, igual que en TypeSafe. Una petición corta de unos 300 tokens cuesta alrededor de $0.00001, así que un millón de ellas cuesta unos $10. Las cabeceras usage y x-zurelay-input-tokens de cada respuesta indican sobre qué se facturó, cada petición aparece en tu registro de peticiones y las que fallan no cuestan nada.

Prueba tu propio contenido y tus preguntas en el Playground del panel: elige Jev, pega el contenido, coloca las preguntas al lado y su botón Get code escribe la misma petición en Python, Node.js o cURL.

¿Tienes dudas o falta algo? Escribe a nuestro equipo de soporte y te responderemos por email, normalmente en menos de un minuto.