# Kai 1: Decisions, Not Completions — Hanzo AI

> Kai answers typed questions with a probability for each answer and writes no text. What it is, how to call it, and its limits.

[Back to Blog](https://hanzo.ai/blog)KAI 1September 28, 2026

3 min read

# Kai 1: Decisions, Not Completions

Kai is Hanzo's decision model. Give it a state and a question whose answers you list, and it returns a probability for each answer. It writes no text.

Decision Latency<1 msp50 (one question, GPU bf16)

Output0 tokensKai writes no text; output is not billed

Price$0.021Per million input tokens; Jev costs $0.042

Context Window32,768Native reach across text, code, and multimodal state

## Why not generate the decision

An agent spends many of its steps on choices: which tool, whether a test passed, whether to stop. Asking a language model to write that choice as JSON means parsing what it wrote, retrying when it does not parse, and guessing how sure it was.Kai answers in the shape of the question. A choice gets a probability for every option, a score a distribution over its levels, a noul the probability that it holds. Nothing is generated, so nothing is parsed.

## One call

POST https://api.hanzo.ai/v1/decisions, from the hanzoai SDKs or over HTTP. The model id kai answers as the unified decision model with adaptive reasoning ("auto", "fast", "deep"; Kai-1.7 target). Version pins kai-1.5, kai-1.4, and kai-1.3 provide deterministic reproducibility across text, code, and long-context evidence.

```
import { AiApi, Configuration } from 'hanzoai' const ai = new AiApi(new Configuration({ accessToken: process.env.HANZO_API_KEY })) const { data: decision } = await ai.postDecisions({ aiDecisionsRequest: { model: 'kai', state: { tool_call: 'bash.exec', command: 'pytest -v tests/test_agent.py' }, questions: { next: { type: 'choice', instructions: 'What should the agent do with this command?', criteria: { approve: 'safe to run', reject: 'unsafe', clarify: 'needs the user first' }, }, }, }, }) console.log(decision.answers.next.choice, decision.answers.next.probabilities)
```

```
import os from hanzoai.cloud import ApiClient, Configuration from hanzoai.cloud.api import AiApi from hanzoai.cloud.models.ai_decisions_request import AiDecisionsRequest ai = AiApi(ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))) decision = ai.post_decisions(AiDecisionsRequest.from_dict({ "model": "kai", "state": {"tool_call": "bash.exec", "command": "pytest -v tests/test_agent.py"}, "questions": { "next": { "type": "choice", "instructions": "What should the agent do with this command?", "criteria": {"approve": "safe to run", "reject": "unsafe", "clarify": "needs the user first"}, }, }, })) print(decision.answers["next"].choice, decision.answers["next"].probabilities)
```

## Limits

kai-1.3, the default, was trained on 1,024 tokens of state beside each question. It reads up to 32,768 and marks a longer read routing.extrapolated; past 1,024 its answers are unreliable. Keep the state to what decides the question, or ask for kai-1.4, which was trained on long states and marks no read up to 32,768 extrapolated.

Results, request shapes and limits[How to use Kai](https://hanzo.ai/kai/guide)[Kai against Jev](https://hanzo.ai/kai#benchmarks)[API reference](https://docs.hanzo.ai/docs/decisions)
