Route with Enso
Send model auto, cap the price of each call, read which model answered, and tell the router how it went.
One request shape for every model. Enso picks per request; you bound what it may spend and grade what it picked.
Send auto, capped
curl -s https://api.hanzo.ai/v1/chat/completions \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-H "X-Max-Cost: 0.002" \
-D headers.txt -o answer.json \
-d '{"model": "auto", "messages": [{"role": "user", "content": "Rewrite this SQL to use a join: SELECT * FROM a WHERE id IN (SELECT a_id FROM b)"}]}'
grep -i '^x-routed-model' headers.txt
jq -r '.model, .choices[0].message.content' answer.jsonX-Max-Cost is a ceiling in USD per 1,000 tokens; models priced above it are
not eligible. X-Max-Latency-Ms bounds latency the same way. The routed model
is in the header and in .model, and it is what you are billed for.
Tell it how it went
curl -s https://api.hanzo.ai/v1/ai/feedback \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg id "$(jq -r .id answer.json)" '{request_id: $id, signal: "accept"}')"accept and up record 1, regenerate 0.25, down, switch, abandon and
revert 0; dismiss records nothing. Send the signal your product already has
— the user kept the answer, re-rolled it, or switched model — and the router
learns from ordinary use. No prompt text is sent or stored.
The same from Python
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["HANZO_API_KEY"], base_url="https://api.hanzo.ai/v1")
raw = client.chat.completions.with_raw_response.create(
model="auto",
messages=[{"role": "user", "content": "Rewrite this SQL to use a join: ..."}],
extra_headers={"X-Max-Cost": "0.002"},
)
answer = raw.parse()
print(raw.headers.get("x-routed-model"), answer.id)
print(answer.choices[0].message.content)Why it pays: most requests are easy, and a router that sends easy ones to a small model spends the large one's price only where it buys something. How the pick is made: Enso.
How is this guide?
Last updated on
Cookbook
Four recipes that put Zen, Enso and Kai in one loop: route a request, triage with typed answers, gate an agent's command, and drive an agent from programs instead of prompts.
Triage with Kai, reply with Zen
Route a support ticket with three typed decisions and no generated tokens, act only on the answers the model stands behind, then let Zen write the reply.