jaredpalmer/kev

Space

Kev

35

14 commits

1 linked in READMEs

updated Sep 23, 2026

See the code

README

Kev

Kev is a family of small decision models built on Qwen3.5. You give it one document (the state) and a set of typed questions; it returns a probability for every option of every question, from one forward pass. No text is generated.

This Space runs jaredpalmer/kev-4b and jaredpalmer/kev-0.8b on ZeroGPU. Pick a model, or Both to compare them on the same request.

What it does

typecriteriaanswer
choice{name: description}argmax name, probability per name, confidence
nouloptional {"true": …, "false": …}p(true)
scoreordered list of level descriptionsexpected level, legend, probability per level

The request and response are TypeSafe's public /v1/systemone contract. Each question only sees the state and itself; a secret written into one question is invisible to its siblings (try the Isolation probe example). Option boundaries cannot be forged from user text (Boundary forgery).

The options next to the Decide button mirror the opt-in flags of kev.serve:

  • Calibrated probabilities: one temperature (T = 2.0) fitted on the in-distribution development set for the Qwen3.5 family. It leaves the argmax unchanged and brings out-of-domain ECE from 0.12 to 0.05 on Kev-4B.
  • date_facts: Kev cannot subtract dates by itself. This appends the day count between every pair of absolute dates in the state before the model reads it (the Return window example shows the difference).
  • Option-order stability: re-run the first Choice question under shuffled option orders and report whether the argmax flips.

How it is built

  • Backbone: Qwen/Qwen3.5-4B-Base / Qwen/Qwen3.5-0.8B-Base (revision pinned by each checkpoint), vocab head discarded.
  • Adapter: LoRA r=16 on the attention, MLP and Gated DeltaNet projections, merged into the base weights in fp32. This is the path every number on the model cards was measured with.
  • Readout: a pointer head scores each question's <decide> token against its option spans.
  • Isolation: on these hybrid backbones each question runs as its own causal row continuing from the shared state.

kev/model.py and kev/api.py are copied verbatim from github.com/jaredpalmer/kev at publish time, so the Space runs the same encoder and API code as the repo's server.

API and MCP

The decide endpoint is exposed over the Gradio API and as an MCP tool (mcp_server=True):

from gradio_client import Client
c = Client("jaredpalmer/kev")
rendered, response, report = c.predict(
    "Shoes arrived two weeks late and in the wrong size.",
    '{"department": {"type": "choice", "instructions": "Which team should handle this?", "criteria": {"returns": null, "shipping": null, "billing": null}}}',
    "Kev-4B", False, False, False, 4,
    api_name="/decide",
)
print(response["answers"])

Caveats

Raw probabilities are usable but not perfectly calibrated out of domain (Kev-4B: raw ECE 0.12, 0.05 calibrated; Kev-0.8B is a sub-1B model and noticeably weaker out of domain). Product-shaped questions with no training analogue are not guaranteed. Measure on your own inputs. Model cards with every number: Kev-4B, Kev-0.8B, Kev-9B.

Credits

Model and code by Jared Palmer, Apache-2.0. The first Space for Kev-4B was built by multimodalart at hugging-apps/kev-4b-decision-demo; this one follows its layout. Base models by Qwen, Apache-2.0.

calibration
decision-model
gradio
mcp-server
qwen3.5
typesafe

Contributors

jaredpalmer

14 commits

jaredpalmer/kev

Space

Kev

35

14 commits

1 linked in READMEs

updated Sep 23, 2026

See the code

README

Kev

Kev is a family of small decision models built on Qwen3.5. You give it one document (the state) and a set of typed questions; it returns a probability for every option of every question, from one forward pass. No text is generated.

This Space runs jaredpalmer/kev-4b and jaredpalmer/kev-0.8b on ZeroGPU. Pick a model, or Both to compare them on the same request.

What it does

typecriteriaanswer
choice{name: description}argmax name, probability per name, confidence
nouloptional {"true": …, "false": …}p(true)
scoreordered list of level descriptionsexpected level, legend, probability per level

The request and response are TypeSafe's public /v1/systemone contract. Each question only sees the state and itself; a secret written into one question is invisible to its siblings (try the Isolation probe example). Option boundaries cannot be forged from user text (Boundary forgery).

The options next to the Decide button mirror the opt-in flags of kev.serve:

  • Calibrated probabilities: one temperature (T = 2.0) fitted on the in-distribution development set for the Qwen3.5 family. It leaves the argmax unchanged and brings out-of-domain ECE from 0.12 to 0.05 on Kev-4B.
  • date_facts: Kev cannot subtract dates by itself. This appends the day count between every pair of absolute dates in the state before the model reads it (the Return window example shows the difference).
  • Option-order stability: re-run the first Choice question under shuffled option orders and report whether the argmax flips.

How it is built

  • Backbone: Qwen/Qwen3.5-4B-Base / Qwen/Qwen3.5-0.8B-Base (revision pinned by each checkpoint), vocab head discarded.
  • Adapter: LoRA r=16 on the attention, MLP and Gated DeltaNet projections, merged into the base weights in fp32. This is the path every number on the model cards was measured with.
  • Readout: a pointer head scores each question's <decide> token against its option spans.
  • Isolation: on these hybrid backbones each question runs as its own causal row continuing from the shared state.

kev/model.py and kev/api.py are copied verbatim from github.com/jaredpalmer/kev at publish time, so the Space runs the same encoder and API code as the repo's server.

API and MCP

The decide endpoint is exposed over the Gradio API and as an MCP tool (mcp_server=True):

from gradio_client import Client
c = Client("jaredpalmer/kev")
rendered, response, report = c.predict(
    "Shoes arrived two weeks late and in the wrong size.",
    '{"department": {"type": "choice", "instructions": "Which team should handle this?", "criteria": {"returns": null, "shipping": null, "billing": null}}}',
    "Kev-4B", False, False, False, 4,
    api_name="/decide",
)
print(response["answers"])

Caveats

Raw probabilities are usable but not perfectly calibrated out of domain (Kev-4B: raw ECE 0.12, 0.05 calibrated; Kev-0.8B is a sub-1B model and noticeably weaker out of domain). Product-shaped questions with no training analogue are not guaranteed. Measure on your own inputs. Model cards with every number: Kev-4B, Kev-0.8B, Kev-9B.

Credits

Model and code by Jared Palmer, Apache-2.0. The first Space for Kev-4B was built by multimodalart at hugging-apps/kev-4b-decision-demo; this one follows its layout. Base models by Qwen, Apache-2.0.

calibration
decision-model
gradio
mcp-server
qwen3.5
typesafe

Contributors

jaredpalmer

14 commits