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.
| type | criteria | answer |
|---|---|---|
choice | {name: description} | argmax name, probability per name, confidence |
noul | optional {"true": …, "false": …} | p(true) |
score | ordered list of level descriptions | expected 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:
Qwen/Qwen3.5-4B-Base / Qwen/Qwen3.5-0.8B-Base (revision pinned by each checkpoint), vocab head discarded.<decide> token against its option spans.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.
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"])
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.
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.
14 commits
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.
| type | criteria | answer |
|---|---|---|
choice | {name: description} | argmax name, probability per name, confidence |
noul | optional {"true": …, "false": …} | p(true) |
score | ordered list of level descriptions | expected 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:
Qwen/Qwen3.5-4B-Base / Qwen/Qwen3.5-0.8B-Base (revision pinned by each checkpoint), vocab head discarded.<decide> token against its option spans.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.
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"])
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.
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.
14 commits