Prepend enso to the Hanzo endpoint (customOrder 0) models.default list, so a new conversation opens on enso — the balanced orchestrated tier that routes each request to the best-fit model. zen5-* stay selectable; titleModel/summaryModel stay zen5-flash (fast, in-catalog title generation, unrelated to the composer). GATED — config mirror only, do not deploy: the authoritative prod list is the universe chat-config ConfigMap (repo chat.yaml mirrors it), so go-live is a ConfigMap update gated on enso being served on api.hanzo.ai (ENSO_URL in ai) and enso-ultra preservation validation.
261 lines
9.1 KiB
YAML
261 lines
9.1 KiB
YAML
version: 1.3.4
|
|
cache: true
|
|
fileConfig:
|
|
endpoints:
|
|
default:
|
|
fileLimit: 10
|
|
fileSizeLimit: 100
|
|
totalSizeLimit: 500
|
|
supportedMimeTypes:
|
|
- "image/.*"
|
|
- "application/pdf"
|
|
- "text/.*"
|
|
- "application/json"
|
|
- "application/xml"
|
|
serverFileSizeLimit: 500
|
|
avatarSizeLimit: 4
|
|
fileStrategy: "s3"
|
|
interface:
|
|
customWelcome: "Welcome to Hanzo Chat"
|
|
endpointsMenu: true
|
|
modelSelect: true
|
|
parameters: true
|
|
sidePanel: true
|
|
presets: true
|
|
prompts: true
|
|
bookmarks: true
|
|
multiConvo: true
|
|
agents: true
|
|
privacyPolicy:
|
|
externalUrl: 'https://hanzo.ai/privacy'
|
|
openNewTab: true
|
|
termsOfService:
|
|
externalUrl: 'https://hanzo.ai/terms'
|
|
openNewTab: true
|
|
registration:
|
|
socialLogins: ['openid']
|
|
actions:
|
|
allowedDomains:
|
|
- "hanzo.ai"
|
|
- "chat.hanzo.ai"
|
|
- "hanzo.chat"
|
|
- "api.hanzo.ai"
|
|
- "lux.network"
|
|
- "s3.hanzo.ai"
|
|
# Web Search — Hanzo unified backend ONLY, no external SaaS. searxng +
|
|
# firecrawl both point at cloud's /v1/websearch surface (Hanzo
|
|
# metasearch + Hanzo Crawl). Never add Serper/Tavily/Jina/Cohere.
|
|
webSearch:
|
|
searchProvider: 'searxng'
|
|
searxngInstanceUrl: '${SEARXNG_INSTANCE_URL}'
|
|
searxngApiKey: '${WEBSEARCH_API_KEY}'
|
|
scraperProvider: 'firecrawl'
|
|
firecrawlApiUrl: '${FIRECRAWL_API_URL}'
|
|
firecrawlApiKey: '${WEBSEARCH_API_KEY}'
|
|
firecrawlVersion: 'v1'
|
|
# Unified picker (HIP: one source of truth). EVERY endpoint below is the SAME
|
|
# api.hanzo.ai/v1 gateway carrying the per-user ${HANZO_API_KEY}; they differ
|
|
# only by a curated family subset + icon, so metering is identical across all
|
|
# of them (the cloud billing gate). "Hanzo" (Zen house brand) leads at order 0
|
|
# with the zen5-mini default.
|
|
#
|
|
# BRAND POLICY: only families that are GENUINELY INDEPENDENT of the Zen
|
|
# upstreams may be listed. Zen models are derived from GLM/DeepSeek/Kimi/
|
|
# MiniMax/Qwen upstreams, so NEVER list a Qwen or DeepSeek family (that would
|
|
# reveal the Zen mapping). Meta Llama and Mistral are independent open-weight
|
|
# brands Zen's flagship tiers do not build on — safe to resell by real name.
|
|
#
|
|
# Every model listed is served by api.hanzo.ai/v1/models AND verified to return
|
|
# content via a live /v1/chat/completions call — no dead models.
|
|
#
|
|
# OpenAI/Anthropic branded resale is intentionally NOT listed: no funded key
|
|
# path exists yet (direct OPENAI/ANTHROPIC keys unfunded; DO GenAI account
|
|
# lacks proprietary access), so listing them would surface non-invocable
|
|
# models. Add them here the moment a funded key/enablement lands.
|
|
endpoints:
|
|
# Agent Builder: enable Run Code + Web Search so they show active.
|
|
agents:
|
|
capabilities:
|
|
- 'execute_code'
|
|
- 'web_search'
|
|
- 'file_search'
|
|
- 'actions'
|
|
- 'tools'
|
|
custom:
|
|
- name: "Hanzo"
|
|
# Primary endpoint: order ahead of the built-in `agents` endpoint
|
|
# (order 1) so a new /c/new conversation defaults to Hanzo (a working
|
|
# completion path that carries the per-user hk- key) instead of bare
|
|
# `agents`, which requires an explicit agent_id and 400s on first send.
|
|
customOrder: 0
|
|
apiKey: "{{CHAT_OPENID_TOKEN}}"
|
|
baseURL: "https://api.hanzo.ai/v1"
|
|
# zen* now route to DigitalOcean GenAI (do-ai) and return content
|
|
# (cloud >= 1.785.11). fetch:false keeps the menu curated to the
|
|
# tiers we expose.
|
|
models:
|
|
# LIVE catalog only — zen4 generation was SUNSET 2026-05-30 (gateway
|
|
# config.yaml); offering it routed to a dead fallback. Current families
|
|
# the gateway serves: zen5-* (flagship) + zen3-* (omni/vision) + enso (the
|
|
# orchestrated router). enso (Enso Pro) leads as the default — it routes
|
|
# each request to the best-fit model, so an easy turn bills cheap and only a
|
|
# hard one escalates; larger zen5 tiers meter against balance. Order = the
|
|
# default-selected model for new users.
|
|
default:
|
|
- "enso"
|
|
- "zen5-flash"
|
|
- "zen5"
|
|
- "zen5-pro"
|
|
- "zen5-coder"
|
|
fetch: false
|
|
titleConvo: true
|
|
# Title/summary model = zen5-flash: a FAST, NON-reasoning, in-catalog model
|
|
# (live upstream deepseek-4-flash) that returns a clean single-line title in
|
|
# ~1-2s. Replaces zen3-nano, which maps to the reasoning model qwen3-8b and
|
|
# took 16-31s — routinely near the 45s #titleConvo timeout, so new chats often
|
|
# never got a title. zen5-flash was picked by direct api.hanzo.ai/v1 probes:
|
|
# zen5-flash ~1.5s clean, zen3-nano 16-31s, zen5-mini 10-20s, zen5/zen3-vl >40s.
|
|
# The #titleConvo path is also envelope-safe now (wrapHanzoGatewayFetch parity
|
|
# with agent runs), so a 200 error-envelope degrades to a clean skip, not a crash.
|
|
titleModel: "zen5-flash"
|
|
summarize: true
|
|
summaryModel: "zen5-flash"
|
|
# House family DISPLAY name = "Zen" (owned_by:"hanzo" catalog). The
|
|
# endpoint VALUE stays "Hanzo" so existing conversations and the pinned
|
|
# guest endpoint (GUEST_ENDPOINT=Hanzo) keep working; only the picker
|
|
# group label changes (useEndpoints honors modelDisplayLabel for customs).
|
|
# Do NOT conflate: "Zen" is the model family; "Hanzo" agents are separate.
|
|
modelDisplayLabel: "Zen"
|
|
# Third-party provider families — same api.hanzo.ai/v1 gateway + per-user
|
|
# ${HANZO_API_KEY} (identical Commerce metering). CURRENT-GEN models only from
|
|
# the live /v1/models catalog (never sunset gens). Mirrors the live chat-config
|
|
# CM. Zen ("Hanzo") stays house brand + default at order 0.
|
|
# Order: Zen (0) → built-in Agents (1) → third-party providers (2+). The
|
|
# providers start at 2 so the `agents` endpoint (built-in order 1) sits
|
|
# alone between Zen and the providers — Zen family first, Agents second.
|
|
- name: "Qwen"
|
|
customOrder: 2
|
|
apiKey: "{{CHAT_OPENID_TOKEN}}"
|
|
baseURL: "https://api.hanzo.ai/v1"
|
|
models:
|
|
default:
|
|
- "qwen3.5-397b"
|
|
- "qwen3-coder"
|
|
- "qwen3-coder-flash"
|
|
- "qwen3-32b"
|
|
fetch: false
|
|
titleConvo: true
|
|
titleModel: "zen5-flash"
|
|
modelDisplayLabel: "Qwen"
|
|
- name: "Meta Llama"
|
|
customOrder: 3
|
|
apiKey: "{{CHAT_OPENID_TOKEN}}"
|
|
baseURL: "https://api.hanzo.ai/v1"
|
|
models:
|
|
default:
|
|
- "llama-3.3-70b"
|
|
- "llama-4-maverick"
|
|
- "llama-3.1-8b"
|
|
fetch: false
|
|
titleConvo: true
|
|
titleModel: "zen5-flash"
|
|
modelDisplayLabel: "Meta Llama"
|
|
- name: "DeepSeek"
|
|
customOrder: 4
|
|
apiKey: "{{CHAT_OPENID_TOKEN}}"
|
|
baseURL: "https://api.hanzo.ai/v1"
|
|
models:
|
|
default:
|
|
- "deepseek-v4-pro"
|
|
- "deepseek-v4-flash"
|
|
- "deepseek-reasoner"
|
|
- "deepseek-3.2"
|
|
fetch: false
|
|
titleConvo: true
|
|
titleModel: "zen5-flash"
|
|
modelDisplayLabel: "DeepSeek"
|
|
- name: "Mistral"
|
|
customOrder: 5
|
|
apiKey: "{{CHAT_OPENID_TOKEN}}"
|
|
baseURL: "https://api.hanzo.ai/v1"
|
|
iconURL: "/assets/mistral.png"
|
|
models:
|
|
default:
|
|
- "mistral-small"
|
|
- "mistral-3-14b"
|
|
- "mistral-nemo"
|
|
fetch: false
|
|
titleConvo: true
|
|
titleModel: "zen5-flash"
|
|
modelDisplayLabel: "Mistral"
|
|
- name: "Google Gemma"
|
|
customOrder: 6
|
|
apiKey: "{{CHAT_OPENID_TOKEN}}"
|
|
baseURL: "https://api.hanzo.ai/v1"
|
|
models:
|
|
default:
|
|
- "gemma-4-31b"
|
|
- "gemma-3-31b"
|
|
fetch: false
|
|
titleConvo: true
|
|
titleModel: "zen5-flash"
|
|
modelDisplayLabel: "Google Gemma"
|
|
- name: "OpenAI GPT-OSS"
|
|
customOrder: 7
|
|
apiKey: "{{CHAT_OPENID_TOKEN}}"
|
|
baseURL: "https://api.hanzo.ai/v1"
|
|
models:
|
|
default:
|
|
- "gpt-oss-120b"
|
|
- "gpt-oss-20b"
|
|
fetch: false
|
|
titleConvo: true
|
|
titleModel: "zen5-flash"
|
|
modelDisplayLabel: "OpenAI GPT-OSS"
|
|
# Anthropic + OpenAI proprietary — now served via the DO GenAI funded
|
|
# catalog on the SAME api.hanzo.ai/v1 gateway + per-user token (identical
|
|
# Commerce metering). Independent third-party brands listed by real name;
|
|
# no house-family mapping is revealed. Curated frontier-first.
|
|
- name: "Anthropic"
|
|
customOrder: 8
|
|
apiKey: "{{CHAT_OPENID_TOKEN}}"
|
|
baseURL: "https://api.hanzo.ai/v1"
|
|
models:
|
|
default:
|
|
- "claude-opus-4.8"
|
|
- "claude-opus-4.7"
|
|
- "claude-opus-4.5"
|
|
- "claude-5-sonnet"
|
|
- "claude-4.6-sonnet"
|
|
- "claude-4.5-sonnet"
|
|
- "claude-fable-5"
|
|
- "claude-haiku-4.5"
|
|
fetch: false
|
|
titleConvo: true
|
|
titleModel: "enso-flash"
|
|
modelDisplayLabel: "Anthropic"
|
|
- name: "OpenAI"
|
|
customOrder: 9
|
|
apiKey: "{{CHAT_OPENID_TOKEN}}"
|
|
baseURL: "https://api.hanzo.ai/v1"
|
|
models:
|
|
default:
|
|
- "gpt-5.4"
|
|
- "gpt-5.3-codex"
|
|
- "gpt-5.2-pro"
|
|
- "gpt-5.2"
|
|
- "gpt-5.1-codex-max"
|
|
- "gpt-5"
|
|
- "gpt-5-mini"
|
|
- "gpt-5-nano"
|
|
- "gpt-4.1"
|
|
- "gpt-4o"
|
|
- "gpt-4o-mini"
|
|
fetch: false
|
|
titleConvo: true
|
|
titleModel: "enso-flash"
|
|
modelDisplayLabel: "OpenAI"
|
|
balance:
|
|
enabled: false
|
|
startBalance: 0
|