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.