typesafe/jev-1.13Jev is a structured decision model from TypeSafe, and the first of its System One models. System One models make fast, structured decisions for software, returning a typed choice rather...
Billing follows the provider's own reported cost. The unit prices here are for reference; a model marked "billed at actual usage" has no reliable pre-call price, so your usage page is the record of what you paid.
It takes no messages and returns no text, so the OpenAI-compatible endpoints — /v1/chat/completions, /v1/messages, /v1/responses — cannot be used with it and will reject the request. It answers only on POST /v1/decisions, where both sides are structured: you send some material plus a set of typed questions, and it answers each one with a probability.
A request has two parts: state is the material being judged (a string or an object), and questions maps each question's own ID to its definition. Every question carries a type, instructions and criteria. The response's answers are keyed by those same IDs. Up to 32 questions per call, all evaluated against the same state in parallel — so classification and routing usually fit in one call rather than one call per question.
curl https://macdecloud.com/v1/decisions \
-H "Authorization: Bearer dcld-sk-..." \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev-1.13",
"state": "Customer wrote: my card was charged twice for order #4471.",
"questions": {
"urgent": {
"type": "noul",
"instructions": "Does this need a reply today?",
"criteria": {
"true": "money has already left the customer account",
"false": "nothing has been charged yet, or the charge is pending"
}
},
"team": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "payments, refunds, double charges",
"support": "how-to and account questions",
"abuse": "policy violations"
}
}
}
}'The three types want criteria in three different shapes, which is the easiest thing here to get wrong. noul is a yes/no question: criteria is an object carrying both a true and a false key, and the answer looks like {"type":"noul","noul":0.89} — the probability that it holds. choice is single-select: criteria is an object whose keys are the options and whose values describe them; the answer gives the chosen key, a probabilities map over every option, and a confidence. score is a rubric: criteria is an array of level descriptions, and the answer carries a score weighted by probability over those indices, plus a legend (index to description), probabilities and confidence.
All three types answer with a probability, not just a verdict — which is the difference between this and asking a chat model for JSON. You can threshold on confidence and route anything below it to a human, instead of accepting a verdict that never says how sure it is.
The OpenAI SDK has no method for this — the endpoint is not part of its protocol. POST with httpx.
import httpx
resp = httpx.post(
"https://macdecloud.com/v1/decisions",
headers={"Authorization": "Bearer dcld-sk-..."},
json={
"model": "typesafe/jev-1.13",
"state": "Customer wrote: my card was charged twice for order #4471.",
"questions": {
"urgent": {
"type": "noul",
"instructions": "Does this need a reply today?",
"criteria": {
"true": "money has already left the customer account",
"false": "nothing has been charged yet, or the charge is pending",
},
},
"team": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "payments, refunds, double charges",
"support": "how-to and account questions",
"abuse": "policy violations",
},
},
},
},
timeout=120,
)
for qid, answer in resp.json()["answers"].items():
print(qid, answer)