Décisions

Décisions (Jev)

Posez des questions typées sur vos données et obtenez des réponses exploitables par votre code : la probabilité d’un oui, une option parmi plusieurs ou une position sur une échelle, avec des probabilités calibrées, généralement en moins d’une seconde. Le service utilise l’API de TypeSafe, ses SDK fonctionnent donc sans modification.

POST/v1/systemone
ModèleIDEntrée, par 1M tokensTarif TypeSafeSortie
Jev 1.14jev-1.14$0.024$0.042Gratuit
Jev 1.13jev-1.13$0.035$0.042Gratuit

Jev est le modèle de décision de TypeSafe, qui le qualifie de modèle System One : il comprend le langage naturel comme un modèle de chat, mais au lieu de rédiger du texte, il répond aux questions que vous définissez. jev-latest, jev-1.14.0 et typesafe/jev-1.14 fonctionnent aussi comme identifiants de modèle, et jev-1.13 reste disponible pour les prompts adaptés à ce modèle.

Poser des questions

# 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

Avec les SDK de TypeSafe, définissez l’URL de base sur https://api.zurelay.com, sans /v1 : ils ajoutent eux-mêmes /v1/systemone. Les variables d’environnement TYPESAFE_BASE_URL et TYPESAFE_API_KEY fonctionnent aussi. Tout client HTTP s’utilise de la même façon : envoyez votre clé Zurelay comme jeton Bearer.

La réponse

Réponse
{
"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 }
}

Chaque réponse est renvoyée sous le nom que vous avez donné à sa question. usage indique la base de facturation de la requête, et cost son coût en dollars américains. Pour une même requête, une réponse peut varier d’un ou deux points d’un appel à l’autre.

Paramètres

modelstringrequis
jev-1.14, jev-latest (le même modèle) ou jev-1.13.
statestring, object ou arrayrequis
Le contenu sur lequel décider : du texte ou des données structurées, comme un enregistrement, un historique de conversation ou l’état actuel de votre application. Pour faire référence à un champ dans une question, utilisez son nom entre accents graves, comme `ticket`.
questionsobjectrequis
Vos questions, chacune sous le nom de votre choix. Les réponses sont renvoyées sous les mêmes noms, et ces noms ne sont pas transmis au modèle.
Chaque question
typestringrequis
noul, choice ou score.
instructionsstring, object ou arrayrequis
La question. Un objet peut contenir la question dans un champ et les données auxquelles elle se rapporte dans les autres.
criteriaobject ou array
Pour un choice (obligatoire) : un objet contenant jusqu’à 255 options, chacune avec une description ou null. Pour un score (obligatoire) : un tableau de 2 à 10 niveaux, du plus bas au plus haut. Pour un noul (facultatif) : true et false, qui définissent ce que signifient un oui et un non.

Types de questions

TypeQuestion poséeAnswer
noulUne question à réponse oui ou nonnoul : la probabilité d’un oui, de 0 à 1
choiceLaquelle de vos options convientchoice, le probabilities de chaque option, et un confidence
scoreLa position sur votre échelle ordonnéescore, qui peut se situer entre deux niveaux, un legend, le probabilities de chaque niveau, et un confidence

Une même requête peut combiner les trois types, et poser plusieurs questions coûte à peine plus cher qu’une seule : l’état est lu une seule fois, puis toutes les questions sont traitées en parallèle à partir de cet état.

Limites

  • Jusqu’à 64K tokens par requête pour l’état et l’ensemble des questions, et 32K pour l’état et la question la plus longue.
  • Texte uniquement : une chaîne, un objet JSON ou un tableau. Convertissez d’abord les images, les PDF ou l’audio en texte.
  • Pas de streaming : les réponses sont renvoyées en entier, généralement en moins d’une seconde.
  • Une requête mal formée (un instructions manquant, un score avec un seul niveau) est rejetée avec un 400 avant d’atteindre le modèle, sans frais. Il en va de même pour une requête dépassant 64K tokens, avec le code context_length_exceeded.

Obtenir de bonnes réponses

Jev suit les instructions à la lettre : formulez donc la condition exacte et incluez les cas limites dans les critères. Gardez les comptages, les calculs et les comparaisons de dates dans votre code, et n’envoyez que la partie de l’état nécessaire à la question. Il peut favoriser la première option d’un choix : pour une décision importante, vérifiez que la réponse reste la même en changeant l’ordre des options.

Facturation des décisions

Jev est facturé sur les tokens d’entrée qu’il comptabilise : votre état et vos questions, plus environ 270 tokens internes à chaque requête. Les réponses sont gratuites, comme chez TypeSafe. Une courte requête d’environ 300 tokens coûte environ $0.00001, soit environ $10 pour un million de requêtes. Le champ usage et l’en-tête x-zurelay-input-tokens de chaque réponse indiquent la base de facturation, chaque requête figure dans votre journal des requêtes, et les requêtes qui échouent ne coûtent rien.

Testez vos propres contenus et questions dans le Playground du tableau de bord : choisissez Jev, collez le contenu et définissez les questions à côté. Le bouton Obtenir le code génère la même requête en Python, Node.js ou cURL.

Une question ou un élément manquant ? Contactez notre équipe d’assistance et nous vous répondrons par e-mail, généralement en moins d’une minute.