Typed decisions from text. Made in the EU.
thinQit Dex reads your text or JSON once and answers typed questions: pick one option, rate on a scale, check yes or no. Every answer carries calibrated probabilities. The same input gives the same answer. It all runs in the EU, and nothing is stored by default.
Recorded runs
Dex against LLMs, on the same workflow.
Each pane replays a recorded run of the same multi-question workflow: Dex on one side, general LLMs on the other. Answers appear when they arrived. Time and cost tick as they did.
Dex against Claude Fable 5.1
39×faster
547×cheaper
Against the fastest LLM we measured (GPT-5.4 mini): 7.0× faster. Against the cheapest (GPT-4.1 mini): 11× cheaper.
Against Anthropic's Claude Fable 5.1 (claude-fable-5-1 (effort low; thinking cannot be disabled, thinking tokens billed as output)), answering the same 7 questions in one structured-output call. Medians of 10 runs, recorded 2026-09-25, AI agent guardrail check before a tool call, on Dex's own EU inference nodes. Claude Fable 5.1 list price: USD 10 input and 50 output per million tokens, read 2026-09-25 (source). Dex: round trip over the network, at its list price, output free. USD converted at Azure's rate (0.858664 EUR per USD, read 2026-09-25).
Dex, round trip: COST EUR 0.00003310, completed in 0.102 s. Claude Fable 5.1: COST USD 0.02112, completed in 4.17 s.
Race results as a table
| Contender | Model | Median time | Cost of the replayed run | Runs | Agreement with reference |
|---|---|---|---|---|---|
| Dex, GPU compute (table only) | Dex prototype, EU, Dex's own inference node | 0.077 s | EUR 0.00003310 | 10 | 100.0% |
| Dex, round trip | Dex prototype, EU, Dex's own inference node | 0.108 s | EUR 0.00003310 | 10 | 100.0% |
| GPT-5.4 mini | gpt-5.4-mini 2026-03-17 (reasoning_effort none), Azure OpenAI, Sweden Central resource, GlobalStandard deployment (global processing) | 0.762 s | USD 0.0009248 | 10 | 88.6% |
| GPT-5.3 chat | gpt-5.3-chat (gpt-chat-latest 2026-05-05), Azure OpenAI, Sweden Central resource, GlobalStandard deployment (global processing) | 1.039 s | USD 0.002329 | 10 | 100.0% |
| GPT-4.1 | gpt-4.1 2025-04-14, Azure OpenAI, Sweden Central resource, GlobalStandard deployment (global processing) | 1.139 s | USD 0.002224 | 10 | 100.0% |
| GPT-4.1 mini | gpt-4.1-mini 2025-04-14, Azure OpenAI, Sweden Central resource, GlobalStandard deployment (global processing) | 1.320 s | USD 0.0004448 | 10 | 87.1% |
| Claude Haiku 4.5 | claude-haiku-4-5-20251001 (no thinking), Anthropic API, global routing (default inference_geo) | 1.439 s | USD 0.001638 | 10 | 100.0% |
| Claude Sonnet 5 | claude-sonnet-5 (thinking disabled), Anthropic API, global routing (default inference_geo) | 2.359 s | USD 0.004220 | 10 | 100.0% |
| Claude Opus 5.5 | claude-opus-5-5 (effort low; thinking cannot be disabled, thinking tokens billed as output), Anthropic API, global routing (default inference_geo) | 2.373 s | USD 0.008448 | 10 | 85.7% |
| Claude Fable 5.1 | claude-fable-5-1 (effort low; thinking cannot be disabled, thinking tokens billed as output), Anthropic API, global routing (default inference_geo) | 4.249 s | USD 0.02112 | 10 | 85.7% |
Agreement is the share of answers equal to the reference answers recorded with the race. The Dex pane is the slower of our two Dex measurements: the round trip over the network, like the LLM calls. GPU compute alone is in the table.
How we measured
- 01One workflow per race: the same state and the same questions for every contender.
- 02Each contender answered the workflow 10 times after one warm-up call. We report the median time and replay the median run.
- 03LLMs answered all questions in one streamed structured-output call; each answer's time is when it was complete in the stream.
- 04Dex read all questions in one pass, with no text generated. Two Dex timings: GPU compute on Dex's inference node, and the round trip over the network. The headline uses the round trip.
- 05Time runs from sending the request to the last answer. Cost is tokens times list price, with each price's source and read date. Dex at its list price, output free.
- 06Agreement compares each contender's answers with reference answers recorded with the race.
- 07No number is typed in by hand. The page is built from the recorded result files.
Where Dex ran
- Dex
- Dex's own EU inference nodes, on dedicated EU hardware operated by thinQit
- recorded
- 2026-09-25T16:40:19+00:00
Contenders and list prices
| Contender | Model and region | Input / output per Mtok | Price source |
|---|---|---|---|
| Dex, GPU compute | Dex prototype, EU, Dex's own inference node | EUR 0.05 / 0 | Pricing |
| Dex, round trip | Dex prototype, EU, Dex's own inference node | EUR 0.05 / 0 | Pricing |
| GPT-5.4 mini | gpt-5.4-mini 2026-03-17 (reasoning_effort none), Azure OpenAI, Sweden Central resource, GlobalStandard deployment (global processing) | USD 0.75 / 4.5 | list price, 2026-09-25 |
| GPT-5.3 chat | gpt-5.3-chat (gpt-chat-latest 2026-05-05), Azure OpenAI, Sweden Central resource, GlobalStandard deployment (global processing) | USD 1.75 / 14 | list price, 2026-09-25 |
| GPT-4.1 | gpt-4.1 2025-04-14, Azure OpenAI, Sweden Central resource, GlobalStandard deployment (global processing) | USD 2 / 8 | list price, 2026-09-25 |
| GPT-4.1 mini | gpt-4.1-mini 2025-04-14, Azure OpenAI, Sweden Central resource, GlobalStandard deployment (global processing) | USD 0.4 / 1.6 | list price, 2026-09-25 |
| Claude Haiku 4.5 | claude-haiku-4-5-20251001 (no thinking), Anthropic API, global routing (default inference_geo) | USD 1 / 5 | list price, 2026-09-25 |
| Claude Sonnet 5 | claude-sonnet-5 (thinking disabled), Anthropic API, global routing (default inference_geo) | USD 2 / 10 | list price, 2026-09-25 |
| Claude Opus 5.5 | claude-opus-5-5 (effort low; thinking cannot be disabled, thinking tokens billed as output), Anthropic API, global routing (default inference_geo) | USD 4 / 20 | list price, 2026-09-25 |
| Claude Fable 5.1 | claude-fable-5-1 (effort low; thinking cannot be disabled, thinking tokens billed as output), Anthropic API, global routing (default inference_geo) | USD 10 / 50 | list price, 2026-09-25 |
Jev is not in the race. Nobody working on Dex uses it. The cost and speed chart on the pricing page shows Jev only through TypeSafe's own published figures, with the source.
How it works
Chat models write. Dex decides.
A chat model writes an answer word by word, and your code has to parse the prose. Dex reads the text once, compares only the answers you allow, and returns numbers your code can act on.
The ticketIllustrative values
- pick
Which team should handle {{ticket.body}}? - rate
How fast must we reply to {{ticket.body}}? - check
Is the writer of {{ticket.body}} angry?
Chat modelwrites
Free text, one token at a time. Your code still has to find the team, the urgency and the mood in it.
Dexdecides
Reads once. Only your labels can come back. Every answer has probabilities and a confidence.
- 01Processed in the EU. Azure West Europe and Dex's own inference nodes on dedicated EU hardware operated by thinQit. Nothing is stored by default. Data handling
- 02Same input, same answer. The same request bytes to the same GPU version give the same answers, byte for byte. Test against it. Determinism
- 03Probabilities you can act on. Calibrated: 0.8 should be right about 8 times in 10. Below your threshold, an answer abstains. Calibration
- 04You see who answered. Every response names the exact model version, the path that served it (gpu or fallback) and its calibration. served_by
Start
One call, three answers.
Sign up, create a free test key and make your first call today. Paid top-ups open soon.
curl https://api.thinqit.ai/v1/decide \
-H "authorization: Bearer $DEX_API_KEY" \
-H "content-type: application/json" \
-d '{
"state": { "ticket": { "body": "Charged twice for order 4471. Fix it today." } },
"questions": {
"team": { "type": "pick", "instructions": "Which team should handle {{ticket.body}}?",
"options": { "billing": null, "technical": null, "other": null }, "min_confidence": 0.5 },
"urgency": { "type": "rate", "instructions": "How fast must we reply?", "levels": ["Can wait", "This week", "Today"] },
"angry": { "type": "check", "instructions": "Is the writer angry?" }
}
}'from thinqit_dex import Client, pick, rate, check
client = Client() # reads DEX_API_KEY
decision = client.decide(
state={"ticket": {"body": "Charged twice for order 4471. Fix it today."}},
questions={
"team": pick("Which team should handle {{ticket.body}}?",
{"billing": None, "technical": None, "other": None}, min_confidence=0.5),
"urgency": rate("How fast must we reply?", ["Can wait", "This week", "Today"]),
"angry": check("Is the writer angry?"),
},
)
team = decision.pick("team")
route = "human" if team.abstained else team.choiceimport { Client, pick, rate, check } from "@thinqit/dex";
const client = new Client(); // reads DEX_API_KEY
const decision = await client.decide({
state: { ticket: { body: "Charged twice for order 4471. Fix it today." } },
questions: {
team: pick("Which team should handle {{ticket.body}}?", { billing: null, technical: null, other: null }, { min_confidence: 0.5 }),
urgency: rate("How fast must we reply?", ["Can wait", "This week", "Today"]),
angry: check("Is the writer angry?"),
},
});
const team = decision.answers.team;
const route = team.abstained ? "human" : team.choice;EUR 0.05 per million input tokens, at every volume. Output is free. Pricing
Use cases
When to use Dex instead of an LLM.
Your code reads the answer and branches on it.
Use Dex.
A person reads the generated text.
Use an LLM.