Skip to content
Metatext Decide
System One, with a Metatext identity

Decisions from your agent's state. One call, typed answers, a probability on each.

Send the state and the questions. Get back a choice, a score on your rubric, or a yes/no — each with a calibrated probability, none of it generated. On a model you can tune to your decisions and run where your data lives.

In development — the benchmark below is real; the Decide-1 model is in training and the figures shown for it are targets.

api.metatext.io/v1/systemoneDecide-1 · 41 ms
Request
POST /v1/systemone
{
  "model": "decide-1-latest",
  "state": "Hi — I was charged twice for order A-104 last night.
            I need the duplicate refunded today, this is the
            second time this has happened.",
  "questions": {
    "department": { "type": "choice",
      "instructions": "Which team should handle this?",
      "criteria": { "billing": "Charges, invoices, refunds",
                    "technical": "The product does not work",
                    "sales": "Pricing, upgrades" } },
    "frustration": { "type": "score",
      "instructions": "How frustrated is the customer?",
      "criteria": ["Calm", "Frustrated but civil", "Very angry"] },
    "refund_requested": { "type": "noul",
      "instructions": "The customer explicitly asks for a refund." }
  }
}
Answers
  • departmentchoicebilling
    • billing0.94
    • technical0.04
    • sales0.02
  • frustrationscore1.3 / 2
    • 0 · Calm0.06
    • 1 · Frustrated but civil0.58
    • 2 · Very angry0.36
  • refund_requestednoulp = 0.97
    • yes0.97
    • no0.03
Probabilities sum to 1 per question · calibrated (temperature fitted on your data) · nothing generated · Decide never returns text.
The problem

Every agent makes decisions. Almost none of them are typed.

Routing, triage, guardrails, grading, “is this done?” — today each is a prompt, a parse and a hope. A decision is not a paragraph.

Prompt, parse, retry

A frontier call and a JSON regex to route one ticket. Seconds of latency, cents per decision, and an apology wrapped around the answer.

No probability, no threshold

You cannot automate what you cannot trust. A chat model’s “confidence” is prose; a policy needs a number that means what it says.

Redefined on every request

The same three questions copy-pasted into four services, drifting. Nobody knows which version is authoritative.

What you get

Typed questions in. Calibrated answers out. Nothing generated.

Choice

Pick one option from a list you define — up to 255. A probability on every option, summing to 1, so your code can route on a threshold instead of a string.

Score

A position on an ordered rubric you wrote, one sentence per level. The answer is the expected level, so “between frustrated and angry” comes back as 1.4, not a forced rung.

Noul

Is this statement true of the state? A single calibrated probability. Batch twenty of them — a policy, a checklist, a guardrail — in one call.

Extract

The fields the questions referred to — amounts, dates, parties, clause spans — with offsets, from the same request. The one primitive Jev does not have.

The benchmark

We measured Jev against every open alternative. Here is the honest table.

Zero-shot, nothing open matches Jev. Fine-tuned on the workflow, an open encoder does — and it runs on four CPU cores where your data already is. Suite: typed-decisions, a public dataset of 4 workflows, 400 JSON states and 5 questions each.

ModelAccuracyBeats baselineECE untuned → after 1 temperature / type
Decide-1target
Metatext, tuned on the workflow — target
0.73018/20≤ 0.02
Jev (TypeSafe)
hosted, zero-shot — card publishes 0.727
0.72618/200.079 → 0.020
Open encoder, fine-tuned in-domain
laya-typed-decisions; 0.762 held-out after calibration
0.71418/200.161 → 0.016
Best open zero-shot
gliner2-large-v1, one call per case
0.4869/200.300 → 0.029
NLI-head System One
wfzyx/von-1.0
0.4615/200.249 → 0.027
Open encoder, zero-shot
convaiinnovations/laya — card publishes 0.362
0.3432/200.196 → 0.020

Measured rows: same harness, same 2,000 decisions, same scoring code, 4 CPU cores, raw JSON public in the benchmark write-up. Decide-1 row: Target — the Metatext model is in training; figures are placeholders for design validation.

Every model, every suite, every question, with the published numbers beside ours: the System One benchmark. Full write-up and raw JSON: benchmark/results/RESULTS.md.

Tuned to your decisions

A few hundred of your decisions. A checkpoint that knows your domain, calibrated to it.

Zero-shot is the floor. The lever the benchmark found is the fine-tune, then the temperature — and both attach to the decision set you save.

Fine-tune on the target workflow

A few hundred labelled decisions from your traffic. On the public typed-decisions suite that step took an open encoder from 0.343 zero-shot to 0.714 — Jev scores 0.726.

One temperature per question type

Fitted on a held-out slice of your decisions. ECE 0.161 → 0.016 on the same suite, and held-out accuracy 0.712 → 0.762 because Score is an expected level and sharpening moves it.

Calibration — ticket-triage@3 · held-out 1,000 decisions
Before tuning
p = 0.1p = 0.9
accuracy
0.343
ECE
0.194
Decide-1 tuned + calibrated (target)
p = 0.1p = 0.9
accuracy
0.762
ECE
0.016
Bars: fraction correct per confidence bin — a calibrated model climbs the diagonal. Left column is a measured open encoder zero-shot; right column is the target. Target — the Metatext model is in training; figures are placeholders for design validation.
Define once, call by name

Save the decision set. Version it. Call it from any service — or let your agent call it.

The hosted category makes you redefine every question on every request. Here the set lives server-side, versioned, and the fine-tune and the temperatures attach to it.

Define once, version it

ticket-triage@3: department, urgency, refund_requested, frustration. Update it in one place; every caller moves.

Your agent calls it directly

An MCP server, not a doc telling your agent how to write the call. decide(set: "ticket-triage", state: …) from Claude Code, Cursor or Codex, mid-task.

# Saved, versioned, called by name — from code or from an agent via MCP
r = client.decide(set="ticket-triage@3", state=ticket)
r["department"].choice        # "billing"
r["department"].probabilities # {"billing": 0.94, "technical": 0.04, "sales": 0.02}
r["refund_requested"].noul    # 0.97
r["frustration"].score        # 1.3   (expected level on your 0–2 rubric)
Use cases

Where a typed decision replaces a prompt today.

Each one is a page with the questions, the thresholds people use, a code sample and something you can check.

Run it where the data lives

Hosted by us, or the same container in your VPC.

Hosted, or the same container in your VPC

Data never has to leave. The image is the one we run; Enterprise ships the registry and the MCP server inside it.

Open weights underneath

Apache-2.0 models. No lock-in on the weights; the request shape is compatible with the category’s hosted API, so nothing is bespoke.

A base-URL change from Jev

POST /v1/systemone with the same state and questions. An existing integration moves in one line and can keep both endpoints.

Pricing

Free to try. Priced for the sets you save and the model you tune.

Indicative only — nothing is on sale yet. These tiers are here so you can tell us whether the shape is right.

Free

$0/mo

Try the API and the demo presets.

  • 5k decisions / month
  • 3 saved decision sets
  • Hosted only
  • Benchmark harness and raw results
Get early access

Team

$149/mo

For a team that ships decisions in production.

  • 250k decisions / month
  • Unlimited saved sets, versioned
  • Per-member API keys
  • MCP server for your agents
Get early access

Tuned

from $990 one-off + Team

A checkpoint that knows your domain.

  • Fine-tune on your labelled decisions
  • One fitted temperature per question type
  • Your accuracy and ECE, on your page
  • Re-tune on request
Get early access

Enterprise

Custom

Run it where the data lives.

  • VPC / on-prem image
  • Registry + MCP server in the image
  • SSO, audit log
  • Support for tuning in your environment
Talk to us

Get early access — and tell us which decision you'd hand over first

We're building Metatext Decide with the first teams that use it. Leave your email, answer as much as you like, and say yes to a short interview if you want a say in what ships.

  • Early access to Decide as it opens up
  • A 20-minute interview if you want one — research, not a pitch
  • The benchmark harness and raw results, today
  • No spam — early-access updates only
Where do decisions happen in your stack today?
What kind of decisions?
Have you tried Jev?
What stops you using a hosted decision API?
Would you pay?
Open to a 20-minute interview?

Research, not a pitch — we want to hear how you decide today.

Early-access updates only. No spam, unsubscribe any time.

Questions

Is Metatext Decide available today?
No. The benchmark and its raw results are real and public; the Decide-1 model is in training, and the hosted API, registry and tuning are in development. Join the early-access list and we'll reach out as they open up.
Is this Jev?
No, and we are not affiliated with TypeSafe. It is the same request shape — state plus typed questions in, calibrated answers out — on a Metatext model, with open weights underneath, tuning on your decisions, and extraction in the same call.
Does an open model match Jev?
Not zero-shot, on any suite we have run: Jev leads by 0.24–0.35. Fine-tuned on the target workflow, an open encoder is within 0.012 of Jev on the public typed-decisions suite and ahead of it held-out after calibration. That is the product, and the numbers are on this page.
What does “calibrated” mean here?
That a 0.9 is right about nine times in ten. We measure it as expected calibration error (ECE) on held-out decisions; the target for a tuned checkpoint is ≤ 0.02, which is what the benchmark reached after one fitted temperature per question type.
Can I self-host?
Yes — that is the point. The same container we host runs in your VPC or on-prem; the models are 150M–450M parameters and run on CPU.
Which models are underneath?
Decide-1 is the Metatext model, in training. Today the benchmark runs GLiNER2 and LAYA checkpoints (Apache-2.0); the write-up lists every candidate we surveyed and measured.
Is the pricing final?
No. The tiers are indicative so you can tell us whether the shape is right — especially whether tuning is worth paying for. Early-access pricing will be set with the first teams.