Skip to main content

Decision Models

POST /v1/systemone answers typed questions about a piece of text: which of these options applies, or how far along a scale something sits. It is compatible with TypeSafe's System One API, and it runs the same decision model behind reranking, tuned for agent memory.

Use it where you would otherwise prompt an LLM for a one-word judgement and parse the reply: classifying a message, picking the best of several candidates, or grading how much of a list is relevant. You get a structured answer with probabilities, at a fraction of the cost and latency.

Model: hs-decide-1-flash

Quick Start​

curl https://inference.hindsight.vectorize.io/v1/systemone \
-H "Authorization: Bearer $HINDSIGHT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "hs-decide-1-flash",
"state": "Question: When is the offsite?",
"questions": {
"answer": {
"type": "choice",
"instructions": "Which note answers the question?",
"criteria": {
"c0": "The offsite moved to April 17.",
"c1": "Priya prefers window seats."
}
}
}
}'
{
"model": "hs-decide-1-flash",
"answers": {
"answer": {
"type": "choice",
"choice": "c0",
"confidence": 0.9,
"probabilities": { "c0": 0.95, "c1": 0.05 }
}
},
"usage": { "input_tokens": 120, "output_tokens": 0 }
}

A client already written against TypeSafe's System One API works by changing its base URL to https://inference.hindsight.vectorize.io and using a Hindsight API key.

Request​

FieldTypeRequiredDescription
statestringYesThe text the questions are about: a conversation, a document, a question with candidate answers
questionsobjectYesQuestion name → question. Answers come back under the same names
modelstringNohs-decide-1-flash (the default)

Each question:

FieldTypeDescription
typestringchoice or score
instructionsstringWhat to decide, in plain words
criteriaobject or arrayFor choice, an object of label → option text (at least two). For score, an array of levels, lowest first

The request body can be up to 2 MB.

Question Types​

choice: which option applies​

The model picks one of the labelled options and reports a probability for each. The probabilities sum to 1, so they also rank the options against each other.

"intent": {
"type": "choice",
"instructions": "What does the user want?",
"criteria": {
"book": "To book a meeting",
"cancel": "To cancel a meeting",
"other": "Something else"
}
}

Answer:

FieldDescription
choiceThe label picked
confidenceHow sure the model is of that pick
probabilitiesLabel → probability, for every option

score: where on a scale​

The model places the state on an ordered scale you describe, lowest level first.

"depth": {
"type": "score",
"instructions": "How far down this ranked list does genuine relevance to the question extend?",
"criteria": [
"Only the first candidate is relevant",
"The first two are relevant",
"The first five are relevant",
"All of the listed candidates are relevant"
]
}

Answer: score, the position on the scale counting from 0 for the first level. It can fall between two levels, so round it to pick one.

Response​

FieldDescription
modelThe model that answered
answersQuestion name → answer, as described above. Each answer also repeats its type
usage.input_tokensThe tokens billed
usage.output_tokensNot billed

Errors​

Besides the common errors:

StatusMeaning
400The model can't answer this request as asked. The body gives its reason
413The body is over 2 MB
422The request is malformed: a missing or mistyped field. The body says which
429The model is busy. Retry after the Retry-After header (seconds)

Billing​

Decision requests cost $0.02 per 1M input tokens, the same rate as reranking. Output is free. usage.input_tokens reports exactly what was billed. See Pricing & billing.