W
Wity_Decisions // Kernel
µs→ms

Decision
Kernel

Reusable micro decision kernels for bounded, high-frequency decisions — grounded in your knowledge graph. Declare the answers; the kernel picks one with a calibrated confidence, or abstains when it cannot decide.

Fig. 01 — Resolution space

INPUT : LIVE STATE

SCOPE : BOUNDED

ABSTAIN: CALIBRATED

1 Kernel = 1 Recurring Question Without the cost of unnecessary knowledge

Exhibit_A

[ Token tax ]

Cost

A generative model is charged for every token it might need — for a decision that needs none of them.

Exhibit_B

[ Request path ]

Latency

A decision on the request or control path is budgeted in microseconds to milliseconds. A general model spends them before it answers.

Exhibit_C

[ Routing ]

Control

A label without a trustworthy confidence can't be routed. One unknowable slice forces every answer to be treated as suspect.

Title Block

Wk_Decisions_V1

All answers declared unless otherwise specified

GitHub Playground

Wity Decisions

Fast, calibrated decisions on bounded questions, without LLM token costs or drift.

Fig. 02a — Answer space
Set Power Rotate Antenna Reboot Radio Re-route Traffic

→ Set Power 0.91

Fig. 02 — A decision, resolved
domain decision kernel live state

Input — live state of the system

"raise the gain on the north-sector link"

Declared answers — bounded

Set PowerRotate AntennaReboot RadioRe-route Traffic
Set Power tier semantic
calibrated confidence 0.91
ABSTAIN nothing cleared the gate — hand off, don't guess
Draft · use-case stories

What it's for

Pick the optimal option when new options keep getting added, and the properties of every option keep drifting over time.

Send every prompt to the right model. Without asking an LLM to choose.

Each prompt deserves a different model. Here is a router built from two kernels, step by step.

Step 01

Today, routing is a tax or a tangle.

Models, prices and capabilities can change every week, so the best model for a prompt keeps changing. Most apps either pin one model or hand the choice to a gateway's auto-router. Owning the choice usually means an LLM call just to pick a model, or rules that break each time something changes.

Fig. 02.1

Gateway auto-routers, like OpenRouter's

their routing logic, their idea of 'best', no confidence you can act on

An LLM picks the model

an extra call, tokens and latency on every request, and a different answer each time

Hand-written rules

rewritten whenever a model is added or a price changes

Step 02

Ask the question your router keeps asking.

Before any model, there is one question: what kind of job is this prompt? Define it once.

Fig. 02.2
Kernel draft

Question

"which kind of job is this request?"

Step 03

Declare the possible answers.

List the jobs you handle, each in plain words. The kernel can only ever pick one of them, or abstain when none fits.

Fig. 02.3
Kernel draft

Question

"which kind of job is this request?"

Answers — declared

generate — make a new image from a text prompt

edit — change part of an existing image

background — cut out or replace the background

text-graphic — a logo, poster or graphic with words in it

Step 04

Point it at your model catalogue.

Capabilities, prices and speeds live in your catalogue, referenced rather than copied. Add a model there and the router knows about it, with no code change.

Fig. 02.4
Kernel ready

Question

"which kind of job is this request?"

Answers — declared

generate — make a new image from a text prompt

edit — change part of an existing image

background — cut out or replace the background

text-graphic — a logo, poster or graphic with words in it

Knowledge — by reference

→ model catalogue (capabilities, price, speed · updated live)

Step 05

Let the prompts flow in.

Each prompt gets a job with a confidence, in milliseconds and without an LLM call. Prompts that fit no job are flagged instead of misrouted.

Fig. 02.5

Input

Kernel

which kind of job?

{ prompt: "a watercolour fox in the snow" }

→ generate

0.88

{ prompt: "cut out my product, white background" }

→ background

0.97

{ prompt: "summarise this PDF" }

→ abstain

no job fits

Step 06

Add a second kernel to pick the model.

The job alone doesn't name a model; price and speed do. A second kernel reads the catalogue and the request's budget. Same prompt, different budget, different model.

Fig. 02.6

Input

Kernel 1

which kind of job?

Kernel 2

which model, given price & speed now?

{ prompt: "a watercolour fox in the snow",
  budget: "low" }

→ generate

0.88

→ flux-schnell

0.93

{ prompt: "a watercolour fox in the snow",
  budget: "high" }

→ generate

0.88

→ luma-photon

0.86

{ prompt: "summarise this PDF",
  budget: "low" }

→ abstain

no job fits

→ —

not asked

Step 07

It gets sharper as it runs.

Mark the odd result right or wrong. Each kernel fits its cutoffs to its own question, so a 0.8 comes to mean right about 80% of the time.

Fig. 02.7

Input

Kernel said

judged

{ prompt: "a watercolour fox in the snow" }

→ generate

✓ right

{ prompt: "cut out my product, white background" }

→ background

✓ right

{ prompt: "make my logo pop" }

→ edit

✗ wrong → text-graphic

Kernel calibrated

Question

"which kind of job is this request?"

Answers — declared

generate — make a new image from a text prompt

edit — change part of an existing image

background — cut out or replace the background

text-graphic — a logo, poster or graphic with words in it

Knowledge — by reference

→ model catalogue (capabilities, price, speed · updated live)

Calibration — this question only

cutoffs fitted from judged outcomes · 0.8 means right ~80% of the time

No LLM call to route New model? Update the catalogue, not the code Misfits flagged, not misrouted Confidence you can trust, per question

Bounded decisions do not gain from general intelligence.

Fig. 03 — The thesis

The thesis

A system steering a ship doesn't need to know who won filmfare. Unnecessary knowledge costs the system.

General intelligence carries the whole world with it. For a decision over a known set of answers, that baggage shows up as cost, latency and confident wrong answer, or knowledge the decision never needed. Strip it out and the same decision gets faster, cheaper and more trustworthy.

A concrete case

The same decision, staffed two ways.

Set the technology aside and staff the job with people. The question is always a choice: out of a known, fixed set of answers, which one fits this input? Two offices answer it very differently.

One clerk who knows everything

The know-it-all.

Extraordinarily well-read. Ask anything and they can, in principle, handle it. But to use what they know, they first write your whole request into a hundred-page notebook, page by page, before they answer. Slow, expensive, and — handed something outside their experience — they will still give you their best guess rather than admit the gap.

Broad world knowledge Re-reads every request Never says "I don't know"

A clerk with one chart

The need-to-know.

A chart pinned to the wall and a fixed rack of bins. The chart — not the clerk — holds this domain's rules and exceptions. A letter arrives; the clerk reads it, drops it in the matching bin. If it fits no bin, it goes to the dead-letter tray for a human. The clerk carries no unnecessary knowledge of their own, needs none, and is honest about the edge of the chart.

Only the domain it needs Matches, then moves on Abstains at the edge

Swap the letters for alarms on a live network, or a robot's next action from its state, and nothing changes: a known set of answers, chosen fast, at volume. The chart is the knowledge graph; the bins are the declared answers; the dead-letter tray is the abstain. Hand the same clerk a chart for another domain and they work that too — the clerk stays reusable, the chart supplies the domain. That is a decision kernel: a reusable clerk carrying no unnecessary knowledge, and a chart that supplies the domain exactly.

The category

A different point on the map.

Decision systems sit between two poles: open-ended reasoning that carries the world, and hard-coded rules that carry only what you wrote. Wity Decisions defines a third point — a reusable kernel that borrows a specific domain's knowledge instead of carrying its own.

SystemKnowledge / training basisRuntime stateDecision scopeIntended strength
General LLMsBroad world knowledgeRuntime contextOpen-endedGeneral reasoning / generation
System One modelsGeneral intelligence trained for calibrated decisionsStructured state supplied at inferenceStructured / boundedVery fast general-purpose decisions
Traditional ML modelTask / domain training dataStructured featuresUsually narrowPrediction / classification
Rules / expert systemsExplicit domain rulesExplicit system stateHighly boundedDeterministic decisions
Domain Decision Kernel the kernelSpecific domain knowledge + system-specific knowledge graph + learned patternsLive state of the target systemBoundedHigh-frequency decisions within a particular operational domain

Positioning quadrant

Cost & latency against knowledge grounding.

Grounded · externalized in a live domain graph ▲
slow / expensive
▲ ▶

Grounded · slow

GraphRAG / LLM over a KG

Grounds answers in a graph, but still pays generative inference on every call.

Grounded · fast

Domain Decision Kernel

Bounded selection grounded in a live domain graph — no generation, abstains at the edge.

Carried · slow

General LLMs

Carries the world in its weights and generates for every decision.

Carried · fast

Rules · classic ML · System One

Fast and bounded, but knowledge is hand-coded or baked in — not a live, reusable graph.

fast / cheap
▼ Carried in the model · hand-coded

The move

Declare the answers. Then choose among them.

Instead of asking a model to generate and then parsing whatever comes back, the application states the valid answers before inference — a list of options, an ordered rubric, a true/false statement. The kernel's only job is to pick among them and say how sure it is.

The whole class of "unparseable output" disappears. What remains is the honest failure mode — a wrong valid answer — which a calibrated probability lets the application catch and route.

choicescoreboolean
resolve() — with meanings
resolve({ context: "increase the depth of this submarine", questions: [{ question: "which instrument", criteria: { "Ballast Tanks": "flooding them increases depth by reducing buoyancy", "Sonar": "detects underwater objects using sound", "Periscope": "lets you see above the surface" } }] }) → { answer: "Ballast Tanks", confidence: 0.9, tier: "semantic" }
same question — bare labels

With no meanings to reason over, a small local model cannot get there. So the kernel abstains rather than guess — the design, not a defect. Put the knowledge in the question and it resolves.

Same kernel, different worlds

One architecture, many operational domains.

The kernel is domain-agnostic; the knowledge graph is not. Point it at a different system and the same decision machinery answers a different class of question.

Telecom & network infrastructure

Choose the configuration from live state.

Given cell, link and service KPIs plus active alarms, select the next network configuration action — and abstain when the state doesn't match a known remedy. Runs on the element or at the edge, in the request path.

Network configService assuranceFault triage

Robotics & autonomy

Map state estimates to bounded actions.

Given a state estimate, select from a bounded set of actions inside the control loop — and hand off to a safe state when the estimate is uncertain. Deterministic, local, no cloud round-trip.

Real-time loopSafetyOnboard

Content editors

Pick editing actions from the scene graph.

Given a snapshot of the scene graph and the user's intent, select the editing action to apply. A bounded vocabulary of edits, resolved against the current state of the timeline.

Scene graphUser intentActions

Games & simulations

Select actions from state, objectives & constraints.

In a discrete-action game, choose the next action from the current game state, the objectives, and the constraints you declare — fast, cheap and repeatable across millions of ticks.

Discrete actionsPolicySimulation

Under the hood

Build your own tiered Kernels. Resolve at the cheapest capable tier. Abstain rather than guess.

Most inputs don't need a model at all. So resolution is a ladder — each tier competent for a band of inputs, tried in order. The first proposal to clear its confidence threshold wins; nothing more is invoked than necessary.

rules

exact name / alias matchthe closed-vocabulary head

µs
lexical

fuzzy + token overlap over names & descriptionstypos, paraphrase, shared roots

sub-ms
semantic

sentence-embedding meaning match (local MiniLM)arbitrary phrasing with no shared words

~ms
classifier

zero-shot entailment (local NLI)truth-of-a-statement · rubric judgment

10s of ms
learned

distilled SSM / encoder + classifier head (one pass)domain knowledge carried in the weights

100s of ms
ABSTAIN

nothing above is confident — hand off, don't guess

terminal

Cheapest capable tier

Most inputs don't need a model at all. A closed vocabulary is a grammar; a paraphrase is a fuzzy match. Only genuinely semantic inputs reach a small local model — nothing more is invoked than necessary.

A calibrated gate

Every tier proposes an answer with a probability, and clears a threshold before it's accepted. Confidence means what it says: answers assigned 0.8 are right about 80% of the time, checked per domain on your traffic.

Abstain is first-class

When nothing clears the gate, the engine abstains and hands off. It is allowed to be unsure; it is not allowed to be confidently wrong at scale. Abstention is the design, not an error.

In the Wity stack

A Decision Kernel in the Chain of Thought layer.

Wity Decisions is the platform's decision primitive — a headless, composable core alongside the Knowledge Graph and DIAL. It takes symbolic state — goals, relationships, constraints — and returns typed decisions: state, not output, which the Composition layer renders. It resolves intent into the Affordance layer, but it is not the Inference Bridge: its whole premise is avoiding general inference for bounded decisions.

Knowledge enters through two injected seams, never into the resolver: a World seam for candidate and relational provision — naturally backed by wity-system ↗ — and an enrichment seam for criterion meaning. The kernel stays pure and reusable; both seams plug in only where they are needed.

The three primitives

choice

nominal — one of N declared options

the chosen option + a distribution + confidence

score

ordinal — a level on a declared rubric

the level + its ordinal position + confidence

boolean

dichotomous — the truth of a statement

P(true); certainty = max(p, 1 − p)

Status

A position paper, not a brochure.

Where a claim is measured, it says so; where it is not yet, it says that too. A reliability engine that fudged its own benchmarks would refute its own premise.

Built

  • Deterministic rules + lexical tiers
  • Local MiniLM semantic tier
  • Opt-in zero-shot classifier
  • Calibration gate + machinery
  • Evaluation harness + telemetry

Forthcoming

  • Quantitative head-to-head vs other systems
  • Labeled datasets per primitive & domain
  • Calibration numbers on real traffic

Measured so far, qualitatively: where the knowledge lives — in the question or nowhere — dominates model choice at this scale; small local models do not carry open-world knowledge, so the honest behaviour on such inputs is to abstain; and the abstain gate works — gibberish and degenerate questions that once produced confident wrong answers now abstain. The quantitative head-to-head is forthcoming: it needs labeled datasets still being assembled, and no comparative numbers are claimed that have not been measured.

FAQ

Frequently asked questions

Still have questions? Explore the stack

Is Wity Decisions another LLM wrapper? +
No. There is no LLM tier — not local, not an API, not a fallback. The meaning work is done by small, purpose-fit local encoders and classifiers, and the engine abstains when they aren't confident rather than reaching for a generative model. "LLM-free" is not "model-free."
What kinds of decisions can it make? +
Bounded, high-frequency ones. You declare the answers before inference and the kernel picks among them: choose one of N options (choice), place a value on a declared rubric (score), or judge the truth of a statement (boolean). If you can enumerate the answers, it can decide among them.
Does it run on-prem or at the edge? +
Yes. It is self-hosted and the models are small and local, so decisions happen in microseconds to milliseconds with no cloud round-trip — which is what lets it sit on the request path, in a control loop, or on a network element.
What happens when it isn't sure? +
It abstains and hands off. Abstention is a first-class outcome, not an error: the engine is allowed to be unsure, but not to be confidently wrong at scale. Your application branches on a calibrated confidence and routes the uncertain cases to a person or a safe state.
How is this different from a traditional classifier? +
The kernel is reusable and the domain lives in the knowledge graph, not baked into a retrained model. Answers are declared before inference, confidence is calibrated rather than a raw score, and abstention is built in. Point the same kernel at a different graph and it answers a different domain's questions.
Can I plug in my own domain knowledge? +
Yes. Knowledge enters through two injected seams, never into the resolver: a World seam for candidate and relational provision (naturally backed by a system knowledge graph) and an enrichment seam for criterion meaning. Adding domain knowledge means pointing at a graph or writing declared meanings — not retraining.
Where does it sit in the Wity stack? +
It is a domain decision kernel in the Chain of Thought layer, alongside the Knowledge Graph and DIAL. It takes symbolic state and returns typed decisions — state, not rendered output — which the Composition layer renders. It resolves intent into the Affordance layer, but it is not the Inference Bridge.
Is it production-ready? +
The core is built: deterministic rules and lexical tiers, a local MiniLM semantic tier, an opt-in zero-shot classifier, the calibration gate, and an evaluation harness. Quantitative head-to-head benchmarks are forthcoming and are not claimed until they are measured on labeled data.

Try it

Give it a messy sentenceand a set of answers.

Watch it pick one with a calibrated confidence — or abstain, honestly. Self-hosted, fast, and free of knowledge it doesn't need.

Self-hosted · No LLM in the hot path · Calibrated abstain

Limited access

The playground is open to testers only, for now.

To get test access, write to support@wity.ai.