IT-RAT the stack/typryx Live demo Stack Guides Console
typed answers · optional add-on

Typryx. A typed answer with a probability, never a guess.

Typryx takes a question from a versioned template and returns a typed answer read off a probability distribution, or refuses with a named reason instead of inventing one. Every answer, refusal or timeout lands on a hash-chained journal.

releasev0.6.0 · Go 1.27
tests1051 tests · httptest fakes, no live calls
depsone direct dependency
spend cap1,000 calls an hour, by default
image16.8 MB · ghcr.io, signed
licenceApache-2.0 · public on GitHub
a measured replay

Every real judgement from one run, replayed in the same order.

Not an illustration: these are the 60 real arithmetic judgements, qwen2.5:7b run locally on Ollama, wording v2, in the order they were asked. Watch how often "confident" and "right" turn out to be different things.

under the hood

The path of one ask.

Inside, a call crosses the door, the template lookup, the egress filter and the hourly cap before it reaches a swappable backend.

agent, over MCP built: Claude Code 2.1.270 tokenfuse MCP broker built: named upstream, tool_call recorded typryx door template egress filter hourly cap only the fields a template names leave; freeform is opt-in 1,000 calls/hour by default, counted past door + template + filter backend, swappable stub openai-logprobs jev answer read from the distribution, never the backend’s claim typed answer + probability or: unanswered, with a reason · wire omits both fields journal + ledger 4 event types · sha-384 of what left the box never the state itself the calibration loop a later truth POST /v1/outcome typryx calibration calibration_drift a bound crossed, per template × version × backend × model still planned, or built and not run live verdryx: a typed grader beside the LLM judge wardryx: a signal that may become a hold, never a deny tokenfuse: router shadow mode costcrew: a suggested anomaly classat triage (built, opt-in) genaryx: a panel, live only when configured engram: an optional importance score journal: on the shared events volume: Trailryx refuses these four by design
every named exit

Where can an ask stop, and what does it leave behind?

Six shapes, exact codes from internal/service/service.go and internal/api/api.go. Pick one.

one ask, five gates answered
door template egress filter hourly cap backend key -> agent:// versioned registry named fields, size cap 1,000 an hour under a timeout 401 404 400 / 413 429 200, unanswered
HTTP 200 answered on the wire

the core of this page

Where Jev meets the stack.

Three question shapes are the whole contract: choice, score, noul (yes/no). Switch the backend and watch what is sent and what comes back change; the typed-answer shape at the far right never does.

one template, three backends stub
eval.outcome_met type: noul fields: task, final_answer used in the calibration run typryx door · template · filter hourly cap same gates for every backend only task + final_answer ever reach the backend below sent → nothing leaves the process stub comes back → typed answer answer, probability or unanswered + reason same shape for all three measured

where your data goes · measured 2026-09-30

Three modes: where your data goes.

With Jev, the fields a question names go to TypeSafe AI. With your own model, nothing leaves your hardware; with it off, the stack runs as it did before.

accuracy on 434 questions, with its 95% interval 2026-09-30
pick a bar for its interval and where it ran

ECE is expected calibration error: lower means the confidence a backend states matches how often it is right.

modewhere it ranaccuracy95% intervalECEmedian time
typryx + JevTypeSafe AI's hosted service (jev-1.13.0), called from a laptop87.1%83.6 to 89.90.042229 ms
typryx + your own modelqwen2.5:7b on Ollama, on an 8-vCPU machine with no GPU70.0%65.6 to 74.20.2732,130 ms
without typryxa fixed default answer, which is today's behaviour25.1%21.3 to 29.40.749no model call
how to choose it at install

TYPED_MODE=jev|own-model|off for stack-single, and --typed-mode jev|own-model|off for stack-k8s and stack-up. Off is the default. released in stack-single v1.1.16 and stack-k8s v1.1.22; stack-up runs from main

your data, your model

Your own model, on your own questions.

typryx does not train, fine-tune, host or ship a model.

from a question to a tuned model step 1 of 9
ask

steps 1 to 5: built, tested, run on the stub backend steps 6 to 9: not run end to end, no tuned model measured yet
what leaves the box

Toggle the extra fields. The egress never changes.

Only task and final_answer are in the template's fields, so on a template ask they are the only two that reach the backend. The one exception is a freeform question, which sends the whole state when TYPRYX_ALLOW_FREEFORM=1 is set (off by default).

state, up to 5 fields task final_answer user_email customer_iban api_token egress filter template.Egress, 2 out, always task final_answer → backend, and only there held back, counted held_back_fields: 0 toggle a field on above to hold it back sha-384 of the egress: unchanged the hash covers what LEFT the box, so extra held-back state never moves it

Measured (undated, see the typryx README): a five-field state carrying user_email and, separately, customer_iban, neither ever reached the backend or the record.

decision speed, measured 2026-09-25

The one-token shortcut is not always faster.

Same 60 items, seed 1, timed end to end from the caller, one run each, so read the medians as indicative rather than final.

median, with a p95 whisker hosted API
calibration, measured 2026-09-25

Stated confidence and actual accuracy are not the same number.

Eight groups, 480 judgements, never pooled. Every group was 96% to 100% confident on average and right 50% to 73% of the time.

reliability, 8 groups all
pick a dot for its numbers
where it plugs in

What each part of the stack would get.

Three edges are built and wired in, and each has been run: MCP clients and the TokenFuse broker on 2026-09-25, Verdryx's typed grader against typryx v0.5.1.

typryx, and nine possible readers solid mint = built and wired in, dashed = planned or stub only
pick a node

Click or focus a node above for what typryx gives it, which template, and what happens with typryx absent.

what it holds to

A probability, never an enforcement decision.

Never invents an answer

A backend error, a timeout, missing or malformed probabilities, a cap hit: the answer is unanswered with a named reason.

No deny from a probability

Wardryx's hold_if_signal rule may turn a signal into a hold, which a person releases; nothing turns a probability into a deny.

A later truth, scored honestly

An outcome posted later is scored against the exact template version an answer was asked under, never against whatever the live template says today.

limits

What is not proven yet.

  • Not yet: a model tuned from an export and measured against the one it replaces, the Wardryx signal with a real backend behind it, and the deeper consumers.
  • OpenAI's current models, gpt-5.x and gpt-6, refuse token probabilities outright, so the openai-logprobs backend reaches only earlier hosted models and open models.
in the stack

Optional, and it changes nothing when it is absent.

common questions

A typed answer, and what it does and does not do

Is typryx required to run the rest of the stack?

No. It is an optional add-on, and every other service keeps its current path unchanged when it is absent. Nothing in this repository or a planned consumer is built to depend on it.

What leaves the box when I send it a state?

Only the fields the template's own fields list names, held by the type system rather than a promise: internal/backend.Backend.Ask takes a template.Egress, a type constructible only inside the template package. Measured on a live run: a state carrying user_email and, separately, customer_iban, neither reached the backend or the record.

Can a probability block anything?

Not here, and not in a consumer. A probability is a signal a policy can threshold; Wardryx's hold_if_signal rule can turn one into a hold, which a person releases, and never into a deny. That path is built and released, and measured on the stub backend only.

How do I know a probability is honest?

Not from the number alone, which is the finding of the calibration run below: every group was 96% to 100% confident on average and right 50% to 73% of the time. typryx calibration groups by template, version, backend and model, never pooled, and prints accuracy, mean confidence, ECE and Brier against a later truth posted to /v1/outcome, so calibration is measured rather than assumed.

Does typryx need Jev to be useful?

No. Jev is one backend behind one interface, not the contract. The stub backend answers deterministically for tests and demos, and openai-logprobs reaches any OpenAI-compatible server, including a model on your own hardware. Jev has run live (2026-09-30) and was the most accurate of the three data modes on the 434 questions, but it is a hosted service: choosing it sends the fields a question names to TypeSafe AI. With your own model nothing leaves your hardware, and with typryx off the stack runs as it did before.

Can I use my own model instead of Jev?

Yes. Point typryx at any OpenAI-compatible server you run, such as Ollama or vLLM, and nothing leaves your hardware. On the same 434 questions a 7B model on a machine with no GPU was less accurate and less well calibrated than Jev, and slower. You can also tune a model on your own questions: typryx keeps an opt-in training log and exports the questions a person has judged, and it measures the new model against the old per template. It does not train or ship a model, and no tune has been run from an export yet.