From prompt to decision.
Replace one narrow LLM call, measure it, then expand.
Define the answer your code needs.
Use choice for routing, boolean for a check, or score for an ordered rubric. Put application facts in state and ask one thing in each question.
Keep your existing fallback.
Run labeled examples before switching traffic. Set a probability threshold for each choice task. Route uncertain answers and request failures to your existing LLM or a person.
A high probability alone does not prove correctness. Measure accepted-answer accuracy, coverage, latency, and total cost including fallbacks.
Call Dante from your server.
Set DANTE_API_URL to the gateway origin and store DANTE_API_KEY in your server environment. Send one Idempotency-Key per logical run — reusing a key never re-runs a request.
Read errors before retrying: 402 means the account needs credits; 429 and 503 model_warming mean wait, then retry; an ambiguous 503 may still settle, so check GET /v1/requests/{id} before re-running; 409 result_not_retained means the result is gone and was already billed — start a new logical run with a new key instead of silently re-running.
const response = await fetch(
"https://api.dante.example/v1/systemone",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DANTE_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
"model": "dante-latest",
"state": "I was charged twice for my order. Please refund the extra payment.",
"questions": {
"route": {
"type": "choice",
"instructions": "Which team should handle this request?",
"criteria": {
"billing": "Charges, payments, and refunds",
"shipping": "Delivery and tracking",
"technical": "Broken features or login problems"
}
},
"needs_action": {
"type": "noul",
"instructions": "Does this customer need help with a payment issue?"
},
"urgency": {
"type": "score",
"instructions": "Rate the urgency of this request.",
"criteria": [
"Low: general information",
"Medium: a problem needing follow-up",
"High: immediate action needed"
]
}
}
}),
},
);
if (!response.ok) {
throw new Error(`Dante request failed: ${response.status}`);
}
const result = await response.json();
const decision = result.answers["route"];
const probability = decision.probabilities[decision.choice];
const nextStep = probability >= 0.95
? decision.choice
: "needs_review";The response has typed answers and probabilities. You decide which actions those answers authorize.