import "../index.css" import { Link, Meta, Title } from "@solidjs/meta" import { getStatsLabData, type LabUsageModelEntry, type ModelUsagePoint, type StatsLabData, } from "@opencode-ai/stats-core/domain/home" import { runtime } from "@opencode-ai/stats-core/runtime" import { createAsync, query, useParams } from "@solidjs/router" import { createMemo, createSignal, For, onMount, Show, type JSX } from "solid-js" import { getRequestEvent } from "solid-js/web" import { findModelCatalogLab, formatCatalogLabName, getModelCatalog, type ModelCatalogEntry, type ModelCatalogLab, } from "../model-catalog" import { applyThemePreference, Footer, getGitHubStars, Header, isThemePreference, themeStorageKey, type HeaderLink, type ThemePreference, } from "../stats-shell" const statsCanonicalBaseUrl = "https://opencode.ai/data/" const statsUnfurlPath = "banner.png" const statsUnfurlAlt = "OpenCode Data wordmark on a dark patterned background" const statsUnfurlUrl = new URL(statsUnfurlPath, statsCanonicalBaseUrl).toString() const labHeaderLinks: readonly HeaderLink[] = [ { href: "#overview", label: "Overview" }, { href: "#usage", label: "Usage" }, { href: "#models", label: "Models" }, ] const labFooterLinks: readonly HeaderLink[] = [ { href: import.meta.env.BASE_URL, label: "Data Home" }, { href: `${import.meta.env.BASE_URL}#top-models`, label: "Top Models" }, { href: `${import.meta.env.BASE_URL}#market-share`, label: "Market Share" }, { href: `${import.meta.env.BASE_URL}#geo-breakdown`, label: "Geo Breakdown" }, ] const getLabData = query(async (lab: string) => { "use server" return runtime.runPromise(getStatsLabData(lab)) }, "getStatsLabData") export default function StatsLab() { const event = getRequestEvent() event?.response.headers.set("Cache-Control", "public, max-age=60, s-maxage=300, stale-while-revalidate=86400") const params = useParams() const labParam = createMemo(() => params.lab ?? "") const catalog = createAsync(() => getModelCatalog()) const lab = createMemo(() => { const data = catalog() if (!data) return undefined return findModelCatalogLab(data, labParam()) ?? null }) const stats = createAsync(() => { const entry = lab() if (catalog() === undefined || entry === undefined) return Promise.resolve(undefined) if (!entry) return Promise.resolve(null) return getLabData(entry.id) }) const githubStars = createAsync(() => getGitHubStars()) const [themePreference, setThemePreference] = createSignal("system") const labName = createMemo(() => lab()?.name ?? formatCatalogLabName(labParam())) const labTitle = createMemo(() => `${labName()} Models`) const labDescription = createMemo( () => `Explore ${labName()} models used in OpenCode, with recent token usage, context windows, release dates, and model-specific data.`, ) const labUrl = createMemo(() => new URL(lab()?.id ?? labParam(), statsCanonicalBaseUrl).toString()) const updateThemePreference = (preference: ThemePreference) => { applyThemePreference(preference) setThemePreference(preference) if (typeof window === "undefined") return window.localStorage.setItem(themeStorageKey, preference) } onMount(() => { if (typeof window === "undefined") return const preference = window.localStorage.getItem(themeStorageKey) const nextPreference = isThemePreference(preference) ? preference : "system" applyThemePreference(nextPreference) setThemePreference(nextPreference) }) return (
{labTitle()}
}> }> {(data) => ( <> )}
) } function LabLoading() { return (
Data

Model Lab

Reading model availability and recent OpenCode usage.

) } function LabNotFound(props: { lab: string }) { return (
Data

{formatCatalogLabName(props.lab)}

No models matched this lab.

) } function LabHero(props: { lab: ModelCatalogLab; stats: StatsLabData | null }) { const latest = createMemo( () => props.lab.models .map((model) => model.releaseDate) .filter((value): value is string => value !== undefined) .toSorted((a, b) => new Date(b).getTime() - new Date(a).getTime())[0], ) const featuredModels = createMemo(() => props.lab.models.slice(0, 3).map((model) => model.name)) return (
Data

{props.lab.name}

Tokens Processed {props.stats ? formatTokens(props.stats.totals.tokens) : "Pending"}

{props.stats ? `${formatPercent(props.stats.tokenShare)} of recent OpenCode usage` : latest() ? `Latest release ${formatCatalogDate(latest())}` : "Usage appears after model activity lands"}

) } function LabUsageSection(props: { lab: ModelCatalogLab; data: StatsLabData | null }) { const [activeIndex, setActiveIndex] = createSignal() const usage = createMemo(() => props.data?.usage ?? []) const max = createMemo(() => Math.max(0, ...usage().map((item) => item.tokens)) || 1) const activePoint = createMemo(() => { const index = activeIndex() if (index === undefined) return undefined return usage()[index] }) return (

{props.lab.name} token usage.{" "} Daily OpenCode token volume over the last two months.

item.tokens > 0)} fallback={ } >
{ if (event.pointerType === "touch") return setActiveIndex(undefined) }} >
{(point, index) => (
{ if (event.pointerType !== "touch") return setActiveIndex(index()) }} onPointerEnter={() => setActiveIndex(index())} onPointerMove={(event) => { if (event.pointerType === "touch") return setActiveIndex(index()) }} onClick={() => setActiveIndex(index())} onFocus={() => setActiveIndex(index())} onBlur={() => setActiveIndex(undefined)} onKeyDown={(event) => { if (event.key !== "Enter" && event.key !== " ") return event.preventDefault() setActiveIndex(index()) }} >
{(active) => (
usage().length * 0.62 ? "left" : "right"} > {active().date} {formatTokens(active().tokens)} tokens

Daily tokens {formatTokens(active().tokens)}

)}
)}
) } function LabModelsSection(props: { lab: ModelCatalogLab; usage: LabUsageModelEntry[] }) { const usageBySlug = createMemo(() => new Map(props.usage.map((item) => [item.slug, item]))) return (

{props.lab.name} models. Recent usage and limits.

{(model) => }
) } function LabModelCard(props: { model: ModelCatalogEntry; usage: LabUsageModelEntry | undefined }) { return ( {props.model.name}

Usage {props.usage ? formatTokens(props.usage.tokens) : "—"}

Share {props.usage ? formatPercent(props.usage.share) : "—"}

Context {formatCatalogLimit(props.model.limit?.context)}

Output {formatCatalogLimit(props.model.limit?.output)}

Release {formatCatalogDate(props.model.releaseDate)}

) } function LabEmptyState(props: { title: string; description: string }) { return (
{props.title}

{props.description}

) } function formatCatalogLimit(value: number | undefined) { return value === undefined ? "Unknown" : formatTokens(value) } function formatCatalogDate(value: string | undefined) { if (!value) return "Unknown" const match = /^(\d{4})(?:-(\d{2}))?(?:-(\d{2}))?$/.exec(value) if (!match) return value const year = Number(match[1]) const month = match[2] ? Number(match[2]) - 1 : 0 const day = match[3] ? Number(match[3]) : 1 return new Intl.DateTimeFormat("en", { month: match[2] ? "short" : undefined, day: match[3] ? "numeric" : undefined, year: "numeric", timeZone: "UTC", }).format(new Date(Date.UTC(year, month, day))) } function formatList(values: string[]) { if (values.length <= 1) return values[0] ?? "" if (values.length === 2) return `${values[0]} and ${values[1]}` return `${values.slice(0, -1).join(", ")}, and ${values[values.length - 1]}` } function formatPercent(value: number) { return `${trimNumber(value, value >= 10 ? 1 : 2)}%` } function formatTokens(value: number) { if (value >= 1_000_000_000_000) return `${trimNumber(value / 1_000_000_000_000, value >= 10_000_000_000_000 ? 0 : 1)}T` if (value >= 1_000_000_000) return `${trimNumber(value / 1_000_000_000, value >= 10_000_000_000 ? 0 : 1)}B` if (value >= 1_000_000) return `${trimNumber(value / 1_000_000, value >= 10_000_000 ? 0 : 1)}M` if (value >= 1_000) return `${trimNumber(value / 1_000, value >= 10_000 ? 0 : 1)}K` return String(Math.round(value)) } function trimNumber(value: number, digits: number) { return Number(value.toFixed(digits)).toLocaleString("en") } function usageHeight(value: number, max: number) { if (value <= 0 || max <= 0) return 0 return Math.max(4, (value / max) * 100) } function isLabUsageDense(count: number) { return count > 20 } function isLabUsageLabelHidden(index: number, count: number) { if (count <= 14) return false const cadence = count > 45 ? 7 : count > 28 ? 4 : 2 return index % cadence !== 0 && index !== count - 1 }