diff --git a/packages/stats/app/src/routes/[lab]/[model].tsx b/packages/stats/app/src/routes/[lab]/[model].tsx
index ddd8ff1e2e..7d14ec3d01 100644
--- a/packages/stats/app/src/routes/[lab]/[model].tsx
+++ b/packages/stats/app/src/routes/[lab]/[model].tsx
@@ -1205,7 +1205,9 @@ function modelComparisonPairs(
},
detail: "Usage peer",
}))
- const catalogPairs = (catalogEntry && catalog ? catalog.labs.find((lab) => lab.id === catalogEntry.lab)?.models ?? [] : [])
+ const catalogPairs = (
+ catalogEntry && catalog ? (catalog.labs.find((lab) => lab.id === catalogEntry.lab)?.models ?? []) : []
+ )
.filter((model) => model.id !== catalogEntry?.id)
.slice(0, 3)
.map((model) => ({
diff --git a/packages/stats/app/src/routes/[lab]/index.tsx b/packages/stats/app/src/routes/[lab]/index.tsx
index 17b0783823..01b7a4fc2f 100644
--- a/packages/stats/app/src/routes/[lab]/index.tsx
+++ b/packages/stats/app/src/routes/[lab]/index.tsx
@@ -28,11 +28,7 @@ import {
import { SectionHeading } from "../section-heading"
import { runStatsEffect } from "../../stats-runtime"
import { setStatsPageCacheHeaders } from "../stats-cache"
-import {
- ComparisonCardsSection,
- modelRefFromCatalog,
- uniqueComparisonPairs,
-} from "../compare-cards"
+import { ComparisonCardsSection, modelRefFromCatalog, uniqueComparisonPairs } from "../compare-cards"
import {
applyThemePreference,
Footer,
diff --git a/packages/stats/app/src/routes/compare/[firstLab]/[firstModel]/[secondLab]/[secondModel].tsx b/packages/stats/app/src/routes/compare/[firstLab]/[firstModel]/[secondLab]/[secondModel].tsx
index 6455e0f148..88df35bf36 100644
--- a/packages/stats/app/src/routes/compare/[firstLab]/[firstModel]/[secondLab]/[secondModel].tsx
+++ b/packages/stats/app/src/routes/compare/[firstLab]/[firstModel]/[secondLab]/[secondModel].tsx
@@ -1,9 +1,6 @@
import "../../../../index.css"
import { Link, Meta, Title } from "@solidjs/meta"
-import {
- getStatsModelComparisonData,
- type StatsModelComparisonEntry,
-} from "@opencode-ai/stats-core/domain/home"
+import { getStatsModelComparisonData, type StatsModelComparisonEntry } 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 } from "solid-js"
@@ -124,7 +121,11 @@ export default function ModelComparePair() {
const rows = createMemo(() => buildComparisonRows(models()[0], models()[1]))
const relatedPairs = createMemo(() => buildRelatedPairs(catalog(), models()[0], models()[1]))
const selectorModels = createMemo(() =>
- uniqueCatalogModels([comparisonCatalogEntry(models()[0]), comparisonCatalogEntry(models()[1]), ...(catalog()?.models ?? [])]),
+ uniqueCatalogModels([
+ comparisonCatalogEntry(models()[0]),
+ comparisonCatalogEntry(models()[1]),
+ ...(catalog()?.models ?? []),
+ ]),
)
const structuredData = createMemo(() =>
JSON.stringify({
@@ -176,17 +177,16 @@ export default function ModelComparePair() {
- Comparison Table.{" "}
- Compare usage, cost, limits, and features.
+ Comparison Table. Compare usage, cost, limits, and features.
- Loading comparison
- Loading stats for both models.
-
- }
+ fallback={
+
+
Loading comparison
+
Loading stats for both models.
+
+ }
>
@@ -197,12 +197,12 @@ export default function ModelComparePair() {
1}
- fallback={
-
-
No models found
-
The model list could not be loaded.
-
- }
+ fallback={
+
+
No models found
+
The model list could not be loaded.
+
+ }
>
terms.every((term) => modelSearchText(model).includes(term)))
})
const preview = createMemo(
- () =>
- filteredModels().find((model) => model.id === previewId()) ??
- filteredModels()[0] ??
- availableModels()[0],
+ () => filteredModels().find((model) => model.id === previewId()) ?? filteredModels()[0] ?? availableModels()[0],
)
createEffect(() => {
@@ -395,7 +392,10 @@ function CompareModelDetail(props: { model: ModelCatalogEntry }) {
{props.model.name}
-
{props.model.description ?? `${props.model.name} is an AI model from ${formatCatalogLabName(props.model.lab)}.`}
+
+ {props.model.description ??
+ `${props.model.name} is an AI model from ${formatCatalogLabName(props.model.lab)}.`}
+
@@ -464,7 +464,9 @@ function CompareHomeCard(props: { category: CompareCategory }) {
{props.category.second.name}
- {(model) => }
+
+ {(model) => }
+
)
@@ -485,22 +487,25 @@ function LabLogo(props: { lab: string; label: string; size: "large" | "small" |
}
function buildComparisonCategories(models: ModelCatalogEntry[]): CompareCategory[] {
- return categoryTemplates.reduce<{ keys: Set; categories: CompareCategory[] }>((result, template, index) => {
- const candidates = categoryCandidates(template.kind, models)
- const pair = categoryPair(candidates, models, index, result.keys)
- if (!pair) return result
- result.keys.add(comparisonKey(pair.first, pair.second))
- const first = modelRefFromCatalog(pair.first)
- const second = modelRefFromCatalog(pair.second)
- result.categories.push({
- title: template.title,
- description: template.description,
- first,
- second,
- avatars: [first, second],
- })
- return result
- }, { keys: new Set(), categories: [] }).categories
+ return categoryTemplates.reduce<{ keys: Set; categories: CompareCategory[] }>(
+ (result, template, index) => {
+ const candidates = categoryCandidates(template.kind, models)
+ const pair = categoryPair(candidates, models, index, result.keys)
+ if (!pair) return result
+ result.keys.add(comparisonKey(pair.first, pair.second))
+ const first = modelRefFromCatalog(pair.first)
+ const second = modelRefFromCatalog(pair.second)
+ result.categories.push({
+ title: template.title,
+ description: template.description,
+ first,
+ second,
+ avatars: [first, second],
+ })
+ return result
+ },
+ { keys: new Set(), categories: [] },
+ ).categories
}
function categoryPair(
@@ -525,9 +530,10 @@ function categoryCandidates(kind: (typeof categoryTemplates)[number]["kind"], mo
if (kind === "affordable")
return models
.filter((model) => model.cost)
- .toSorted((a, b) => modelCost(a) - modelCost(b) || displayDateTime(b.releaseDate) - displayDateTime(a.releaseDate))
- if (kind === "code")
- return models.filter((model) => model.toolCall || model.reasoning).toSorted(recentModelSort)
+ .toSorted(
+ (a, b) => modelCost(a) - modelCost(b) || displayDateTime(b.releaseDate) - displayDateTime(a.releaseDate),
+ )
+ if (kind === "code") return models.filter((model) => model.toolCall || model.reasoning).toSorted(recentModelSort)
if (kind === "image")
return models
.filter((model) => model.modalities.output.some((modality) => modality.toLowerCase().includes("image")))
diff --git a/packages/stats/app/src/routes/index.css b/packages/stats/app/src/routes/index.css
index 24f470f86d..ca6c335b26 100644
--- a/packages/stats/app/src/routes/index.css
+++ b/packages/stats/app/src/routes/index.css
@@ -5726,11 +5726,15 @@
}
[data-page="stats"] [data-component="compare-home-selector"] button[data-slot="compare-home-select-panel"]:hover,
-[data-page="stats"] [data-component="compare-home-selector"] button[data-slot="compare-home-select-panel"]:focus-within {
+[data-page="stats"]
+ [data-component="compare-home-selector"]
+ button[data-slot="compare-home-select-panel"]:focus-within {
background: var(--stats-layer);
}
-[data-page="stats"] [data-component="compare-home-selector"] button[data-slot="compare-home-select-panel"]:focus-visible {
+[data-page="stats"]
+ [data-component="compare-home-selector"]
+ button[data-slot="compare-home-select-panel"]:focus-visible {
z-index: 1;
outline: 1px solid var(--stats-line-strong);
outline-offset: -1px;
@@ -6043,7 +6047,9 @@
[data-page="stats"] [data-component="compare-model-modal"] button[data-slot="compare-model-modal-row"]:hover,
[data-page="stats"] [data-component="compare-model-modal"] button[data-slot="compare-model-modal-row"]:focus-visible,
-[data-page="stats"] [data-component="compare-model-modal"] button[data-slot="compare-model-modal-row"][data-active="true"] {
+[data-page="stats"]
+ [data-component="compare-model-modal"]
+ button[data-slot="compare-model-modal-row"][data-active="true"] {
color: var(--stats-text);
background: var(--stats-layer-2);
outline: none;
diff --git a/packages/stats/app/src/routes/stats-shell.tsx b/packages/stats/app/src/routes/stats-shell.tsx
index ca9b0e68fc..8906dc9d5a 100644
--- a/packages/stats/app/src/routes/stats-shell.tsx
+++ b/packages/stats/app/src/routes/stats-shell.tsx
@@ -243,7 +243,9 @@ export function Footer(props: {
{ href: "https://www.youtube.com/@anomaly-co", label: i18n.t("footer.youtube") },
]
const bridge = () =>
- props.bridge === undefined ? { href: "#geo-breakdown", label: i18n.t("nav.geoBreakdown").toUpperCase() } : props.bridge
+ props.bridge === undefined
+ ? { href: "#geo-breakdown", label: i18n.t("nav.geoBreakdown").toUpperCase() }
+ : props.bridge
return (