Agent guardrails
Check a tool call or command before an agent runs it: allow it, ask the user first, or block it.
Send the facts and your questions about a policy, transaction or agent action. For each question, Caliper-1 returns one of the answers you allowed, with a probability for every option.
Caliper-1 is the first model from Inferr. It is trained mainly on policies, deadlines, amounts and safety checks, and it answers only with the options you define.
Send a policy and the relevant facts, ask typed questions (yes or no, choose one, or a rating scale), and receive a probability for each answer. One request can include long policy documents, multi-step conditions, date windows and amount limits.
Most decisions in software follow written rules, such as refunds within 30 days or expense approval under $500. Language models are designed to generate text. Caliper is designed to apply rules to the facts you give it and to report how confident it is.
Asked whether a return on day 38 is inside a 30-day window, a language model replies with a paragraph. You have to parse the reply and trust its date arithmetic, and you get no measure of its confidence.
Caliper returns outside 0.94: one of the answers you defined, with its probability. You can set a confidence threshold and act on answers above it automatically.
Spend limits, refund windows, agent safety checks and support triage. Each request includes the facts and several questions, and all of them are answered together.
Caliper-1 suits decisions that follow rules or clear criteria and that your software makes many times a day.
Check a tool call or command before an agent runs it: allow it, ask the user first, or block it.
Route each ticket to the right team, and score its urgency and sentiment in the same request.
Apply written policies to a case, such as refund windows, expense limits and eligibility rules.
Classify user content or incoming prompts before they reach your product or your agent.
Choose one item from a long list, such as products, intents, help articles or tools, in a single question.
Check contracts and forms for required clauses, conditions and missing information.
Questions and answers shown are examples.
Requests in production vary in ways that cause problems for decision models. Each case below runs on an example request as you scroll.
Some decision models favour options because of their position in the list. Caliper-1 returns the same answer and the same probabilities for any order of the same options, and lists them in the order you sent.
Inputs often include text written by the people being assessed, such as “pre-approved” or “ignore the above”. Caliper-1 is trained to treat that text as part of the input, not as an instruction to follow.
You can ask up to 256 questions about the same input in one request. Each question is answered separately, so adding a question does not change the answer to another one.
A single question can have up to 5,000 options, enough to choose from a product catalogue, a list of intents or a tool registry. The other decision models we checked allow 255 options or fewer.
The requests and answers shown are examples. No model catches every phrasing, so do not rely on a single model to approve irreversible actions. Option limits for other models are taken from their documentation.
Caliper-1 reads the input once and scores every question and every option in the same pass. Large decisions do not need to be split across many calls.
Each answer includes a probability. Choose a threshold, act automatically on answers above it, and send the rest to a person.
Results on public benchmarks for the jobs Caliper-1 is designed to do. Below them, a comparison with other decision models on the same questions.
Multi-step policies, deadlines, amounts and trade-offs.
89.2%Sending each customer message to the right one of 77 banking intents.
84.1%Whether a tool call, command or code change should go ahead.
74.9%Finding clauses such as audit rights, exclusivity and liability caps.
91.2%Caliper-1 as served, 16 October 2026, on questions the model was not trained on. hard-v1 and devtools-v1 comparisons use the development sets, where Jev results are published for the same questions. BANKING77 is macro-F1, with other models' results from the Decision Index 0.3 public board. LegalBench scores are the average over every task in the named group, 40 questions per task.
Here one decision is a 500-token input with one answer. The chart compares Caliper with popular language models at their OpenRouter list prices.
OpenRouter list prices on 15 October 2026. Language models are charged for about 20 output tokens per answer; Caliper's output is free. Caliper also returns a probability for every option, which these models do not.
It is built on a language model, but it does not generate text. It reads your input once and scores each answer you allow, so it is inexpensive to run and can only return one of your options.
Structured outputs make a language model write in a given format. It can still return a value you did not expect, and you get no reliable measure of its confidence. Caliper can only return your options, and each answer includes a calibrated probability.
Rules applied to the facts you send: policies, deadlines and date windows, amounts and limits, eligibility, safety checks on agent actions, triage and routing. It is weaker on questions that need knowledge that isn't in the input, like trivia, and it does not write open-ended answers.
Yes. The probabilities tell you when to trust it. Choose a threshold for each question using a few hundred of your own examples, act on answers above it, and send the rest to a person or a larger model.
Yes, in practice. The same request returns the same answer, and neither option order nor the other questions in a request change an answer. Under heavy load, probabilities can differ in the third decimal place; the chosen option does not change.
It is trained to resist common attempts, such as claims of pre-approval, notes addressed to an AI reviewer, or “ignore the above”. No model catches every phrasing, so do not rely on a single model to approve irreversible actions.
Up to 5,000 options in one choice question, and up to 256 questions in one request. For very large option sets, the probabilities of clearly unlikely options are approximate; the chosen option and the leading contenders are scored precisely.
Request content is processed in memory and discarded. We never train on it. We keep only counts, token totals and error codes to bill and run the service. Requests are processed in the United States.
Click Get access or email hello@inferrai.com and we'll send you an API key. Then follow the quickstart in the documentation.
Inferr AI is a small lab that builds AI models for specific tasks. Caliper-1 is our first model, and more are in training.
Inferr AI is a brand of RK Web Solutions. For API access or partnerships, email hello@inferrai.com.
Send the facts and your questions in one HTTP request. Each answer comes back as one of your options, with a probability for every option.
curl https://api.inferrai.com/v1/systemone \
-H "Authorization: Bearer $INFERR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "inferr/caliper-1",
"state": { "ticket": "Charged twice for order 4471 and it arrived late." },
"questions": {
"team": { "type": "choice", "instructions": "Which team handles this?",
"criteria": { "billing": null, "shipping": null, "returns": null } },
"refund": { "type": "noul", "instructions": "Should we refund the duplicate charge?" }
}
}'import os, requests
r = requests.post(
"https://api.inferrai.com/v1/systemone",
headers={"Authorization": f"Bearer {os.environ['INFERR_API_KEY']}"},
json={
"model": "inferr/caliper-1",
"state": {"ticket": "Charged twice for order 4471 and it arrived late."},
"questions": {
"team": {"type": "choice", "instructions": "Which team handles this?",
"criteria": {"billing": None, "shipping": None, "returns": None}},
"refund": {"type": "noul", "instructions": "Should we refund the duplicate charge?"},
},
},
)
answers = r.json()["answers"]
print(answers["team"]["choice"], answers["refund"]["noul"])const r = await fetch("https://api.inferrai.com/v1/systemone", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INFERR_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "inferr/caliper-1",
state: { ticket: "Charged twice for order 4471 and it arrived late." },
questions: {
team: { type: "choice", instructions: "Which team handles this?",
criteria: { billing: null, shipping: null, returns: null } },
refund: { type: "noul", instructions: "Should we refund the duplicate charge?" },
},
}),
});
const { answers } = await r.json();
console.log(answers.team.choice, answers.refund.noul);{
"answers": {
"team": {
"type": "choice",
"choice": "billing",
"probabilities": { "billing": 0.81, "shipping": 0.16, "returns": 0.03 }
},
"refund": { "type": "noul", "noul": 0.96 }
},
"usage": { "input_tokens": 74, "output_tokens": 0, "cost": 0.00000296 }
}