Decision request builder for Ollama /v1/systemone
Decision models such as Nimble and Tev1 answer typed questions through an HTTP endpoint, /v1/systemone. Most first attempts fail for one of a few reasons: too many questions or options, a body over 64 KiB, or JSON that PowerShell quietly flattened. This builder produces a request that is valid by construction. Pick a model, describe the text to judge (the state) and your questions, and it generates curl, PowerShell, Python and JavaScript versions of the same request. It checks Ollama’s documented limits as you type, so a 400 or a 413 never reaches your terminal. Everything runs in your browser: nothing you type is sent anywhere, and there is no account. Start from a preset such as ticket triage, or build your own. Not sure what to do with the answer? The section below explains every field of the response.
An example request
The ticket-triage preset, for Nimble on Ollama. The builder above generates this, and the same request as PowerShell, Python and JavaScript, from whatever you type.
curl http://localhost:11434/v1/systemone \
-H 'Content-Type: application/json' \
-d '{
"model": "nimble",
"state": {
"ticket": "I was charged twice. Please refund the extra payment."
},
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should handle this ticket?",
"criteria": {
"billing": "Payments and refunds",
"technical": "Bugs and integrations",
"other": "None of the above"
}
},
"refund": {
"type": "noul",
"instructions": "Does the customer explicitly ask for a refund?"
},
"urgency": {
"type": "score",
"instructions": "How urgent is this ticket?",
"criteria": [
"Routine",
"Soon",
"Urgent"
]
}
}
}'Reading the answer
Ollama’s published example response for the ticket-triage request, and what each field means:
{
"model": "nimble",
"answers": {
"team": {
"type": "choice",
"choice": "billing",
"probabilities": {"billing": 0.985, "technical": 0.012, "other": 0.003},
"confidence": 0.922
},
"refund": {"type": "noul", "noul": 0.997},
"urgency": {
"type": "score",
"score": 0.815,
"legend": {"0": "Routine", "1": "Soon", "2": "Urgent"},
"probabilities": {"0": 0.378, "1": 0.429, "2": 0.193},
"confidence": 0.046
}
},
"usage": {"input_tokens": 841, "output_tokens": 4}
}| Field | Meaning | Common mistake |
|---|---|---|
choice | The option key with the highest probability | Ignoring probabilities — a 0.51 / 0.49 split is not a confident answer |
noul | Probability that the statement is true, from 0 to 1 | Treating it as a boolean. 0.997 is a number; you pick the threshold |
score | Probability-weighted average of the level indices — here 0 to 2 | Reading it as 0–1. 0.815 means "between Routine and Soon", not "81.5%" |
confidence | How concentrated the distribution is: 0 = all options equal, near 1 = one option dominates | Reading it as "chance I'm right". Ollama's spec says it is not calibrated correctness |
usage.input_tokens | Full prompt length summed over every question | Thinking the state was sent once. Each question is scored against the whole state |
Nothing on this page is sent anywhere: the request is built in your browser, and a share link keeps it in the URL fragment, which browsers never send to a server.