Hanzo

Meet enso

Hanzo's own model family — enso, enso-flash, and enso-ultra. What each one is for, and how to pick.

Meet enso

After this page you can pick the right enso model for a job, switch between them with a one-string change, and work out what a request will cost before you send it.

enso is Hanzo's own model family. There are three of them. They share one endpoint, one key, and one request shape — the only thing that changes between them is the model string.

See them for yourself

The model catalog is public. No key, no account — you can run this line right now, before you have either:

curl -s https://api.hanzo.ai/v1/models \
  | jq -r '.data[] | select(.id | startswith("enso")) | [.id, .context, .pricing.input, .pricing.output] | @tsv' \
  | column -t
enso        1000000  20  60
enso-flash  1000000  2   6
enso-ultra  200000   40  120

That is the real output, and it is the same catalog the rest of this page is built from — id, context window, then price in US dollars per million tokens, input and output. The gateway is the source of truth for these numbers, so if this page and that command ever disagree, believe the command.

Which one

Start with enso-flash.

It has the full million-token context window and costs a tenth of enso. Most work never needs more than this — reach for a bigger model when flash actually disappoints you, not before.

ModelContextIn / Out (per 1M tokens)Reach for it when
enso-flash1,000,0002/2 / 6Default. High volume, tight latency budget, everyday work.
enso1,000,00020/20 / 60The answer's quality matters more than its cost — hard reasoning, long documents, code that has to be right.
enso-ultra200,00040/40 / 120Being right matters more than being fast or cheap.

The three tiers are roughly 1x, 10x, and 20x the same unit of cost, which makes the choice easier than it looks: you are deciding how much a better answer is worth to you on this particular request.

What makes enso-ultra different

enso is a model. enso-ultra is a strategy. Instead of answering directly, it probes with a model sized to the task, escalates to a panel of models only when the task turns out to be hard, then verifies the candidate answers and selects the best one.

You pay for that in two currencies: money, and context. Ultra's window is 200K tokens, not 1M — it is the one enso model that cannot take your whole codebase in a single prompt. If your input is large, enso is the better tool even though it is the cheaper one.

Switching between them

One string. Everything else about the request is identical.

curl https://api.hanzo.ai/v1/chat/completions \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "enso-flash",
    "messages": [{ "role": "user", "content": "Name three uses for a paperclip." }]
  }'
import os
from openai import OpenAI

client = OpenAI(base_url="https://api.hanzo.ai/v1", api_key=os.environ["HANZO_API_KEY"])

answer = client.chat.completions.create(
    model="enso-flash",                      # -> "enso" or "enso-ultra"
    messages=[{"role": "user", "content": "Name three uses for a paperclip."}],
)
print(answer.choices[0].message.content)
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://api.hanzo.ai/v1',
  apiKey: process.env.HANZO_API_KEY,
});

const answer = await client.chat.completions.create({
  model: 'enso-flash',                       // -> 'enso' or 'enso-ultra'
  messages: [{ role: 'user', content: 'Name three uses for a paperclip.' }],
});
console.log(answer.choices[0].message.content);

That is the whole migration path between tiers. It is also why you should start cheap: moving up costs you one word of a diff, so there is no reason to pay for a bigger model until a smaller one has actually failed you.

/v1/chat/completions is a standard chat-completions endpoint, so a client you already have installed works against it once you point its base URL at api.hanzo.ai/v1. Every model in our catalog answers on that one path.

What a request costs

Prices are per million tokens, so divide. A 2,000-token prompt with a 500-token answer:

ModelInputOutputTotal
enso-flash2,000 x 2/1M=2/1M = 0.004500 x 6/1M=6/1M = 0.003$0.007
enso2,000 x 20/1M=20/1M = 0.04500 x 60/1M=60/1M = 0.03$0.07
enso-ultra2,000 x 40/1M=40/1M = 0.08500 x 120/1M=120/1M = 0.06$0.14

A token is roughly three quarters of a word, so "2,000 tokens" is about three pages. The response you get back reports exactly what you were charged for in its usage field — trust that over any estimate, including this one.

Next

  • All models — the full live catalog. enso is our own family; the gateway serves many more on the same key.
  • API keys — what a key is, and where yours comes from.
  • Build a game — enso doing something you can play, in three different ways.

How is this guide?

Last updated on

On this page