Files
hanzo.ai/lib/zen.ts

60 lines
2.4 KiB
TypeScript

/**
* Zen, said once. Every page that names a Zen generation reads it here —
* /models, /zen, /zen/models, the family cards, the Research menu and
* /research-access — so no two of them can disagree about which generation
* answers, which came before it, which is next, and what it is for.
*
* Zen 7 is @hanzo/ui's `RESEARCH` entry, the one the model pickers list, so a
* page and a picker cannot disagree about it either. Its request link is an
* absolute address there, because the pickers run on other hosts; here it is
* this site's own path.
*
* Zen is named as Zen: see lib/upstream for what the copy never says.
*/
import { RESEARCH } from '@hanzo/ui/models/catalog'
const zen7 = RESEARCH.find((m) => m.id === 'zen7')!
export interface Generation {
/** The id a caller passes, or the generation's own id when none answers yet. */
id: string
name: string
/** What it is, in a few words. */
what: string
/** The ids the gateway serves for it. */
ids: readonly string[]
}
/** The generation that answers now: Zen 6, and Zen 6 Flash, its compact build. */
export const NOW: Generation = { id: 'zen6', name: 'Zen 6', what: 'Available now', ids: ['zen6', 'zen6-flash'] }
/** The compact build of the generation that answers now. */
export const FLASH = { id: 'zen6-flash', name: 'Zen 6 Flash' } as const
/** The models that answer now, as the copy says them. */
export const LINEUP = `${NOW.name} and ${FLASH.name}`
/** The generation in research preview: listed everywhere, callable nowhere. */
export const NEXT = {
id: zen7.id,
name: zen7.name!,
what: 'Research preview',
blurb: zen7.description!,
// The catalog names the page; its Zen track is `?track=zen`, since /research-access
// opens on Creative AI (1dedf1e3) and a Zen 7 request landed there.
request: `${new URL(zen7.request!).pathname}?track=zen`,
} as const
/**
* The two jobs Zen 6 is chosen for. Video belongs to Zen 6; the ternary build
* reads text and images. The history of the family is components/zen/line.ts,
* not this module — the header imports NOW from here.
*/
export const USES = [
{ job: 'Agentic coding', detail: 'Long repositories, tool use, long context, and fast speculative decoding.' },
{ job: 'Multimodal work', detail: 'Zen 6 reads text, images, and video in one context.' },
] as const
/** The same two jobs, as one sentence. */
export const JOBS = `Built for ${USES.map((u) => u.job.toLowerCase()).join(' and ')}.`