chore: merge dev into v2 (#36918)

Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com>
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com>
Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com>
Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com>
Co-authored-by: Brendan Allan <git@brendonovich.dev>
Co-authored-by: Jack <jack@anoma.ly>
Co-authored-by: David Hill <1879069+iamdavidhill@users.noreply.github.com>
Co-authored-by: Jay <53023+jayair@users.noreply.github.com>
Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com>
Co-authored-by: Simon Klee <hello@simonklee.dk>
Co-authored-by: opencode <opencode@sst.dev>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com>
Co-authored-by: James Long <longster@gmail.com>
Co-authored-by: James Long <jlongster@users.noreply.github.com>
Co-authored-by: Dustin Deus <deusdustin@gmail.com>
Co-authored-by: 冯基魁 <56265583+fengjikui@users.noreply.github.com>
Co-authored-by: Frank <frank@anoma.ly>
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
Co-authored-by: Kit Langton <kit.langton@gmail.com>
Co-authored-by: Victor Navarro <vn4varro@gmail.com>
Co-authored-by: Dax Raad <d@ironbay.co>
Co-authored-by: Dax <mail@thdxr.com>
Co-authored-by: Nabs <nabil@instafork.com>
Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com>
Co-authored-by: AidenGeunGeun <eastlandwyvern@gmail.com>
Co-authored-by: Mark <geraint0923@users.noreply.github.com>
Co-authored-by: Jay <air@live.ca>
This commit is contained in:
opencode-agent[bot]
2026-07-14 15:23:34 -05:00
committed by GitHub
co-authored by opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Aiden Cline opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Luke Parker usrnk1 Aarav Sareen Brendan Allan Jack David Hill Jay Brendan Allan Simon Klee opencode Aiden Cline Adam James Long James Long Dustin Deus 冯基魁 Frank Aiden Cline Kit Langton Victor Navarro Dax Raad Dax Nabs Vladimir Glafirov AidenGeunGeun Mark Jay
parent a32c480d45
commit 0d4f9797f4
123 changed files with 3206 additions and 770 deletions
+2 -7
View File
@@ -1,4 +1,4 @@
import { MetaProvider, Meta, Title } from "@solidjs/meta"
import { MetaProvider, Title } from "@solidjs/meta"
import { Router } from "@solidjs/router"
import { FileRoutes } from "@solidjs/start/router"
import { Suspense } from "solid-js"
@@ -9,12 +9,7 @@ import "./app.css"
function AppMeta() {
const i18n = useI18n()
return (
<>
<Title>{i18n.t("app.title")}</Title>
<Meta name="description" content={i18n.t("app.description")} />
</>
)
return <Title>{i18n.t("app.title")}</Title>
}
export default function App() {
@@ -161,16 +161,11 @@ export default function ModelCompareDetailPage(props: ModelCompareDetailPageProp
buildComparisonModel(model.lab, model.slug, model.catalog ?? null, stats()?.models[index] ?? null),
),
)
const title = createMemo(() => {
if (props.family)
return `${props.family.first.name} vs ${props.family.second.name}: ${models()[0].name} vs ${models()[1].name}`
return `${models()[0].name} vs ${models()[1].name} - Model Comparison`
})
const description = createMemo(() => {
if (props.family)
return `Compare the latest ${props.family.first.name} and ${props.family.second.name} models: ${models()[0].name} vs ${models()[1].name}. See benchmarks, usage, price, context length, and features.`
return `Compare ${models()[0].name} and ${models()[1].name} by usage, rank, context window, output limit, cache ratio, and cost across OpenCode data.`
})
const title = createMemo(() => `${models()[0].name} vs ${models()[1].name} - AI Model Comparison`)
const description = createMemo(
() =>
`Compare ${models()[0].name} from ${models()[0].labName} and ${models()[1].name} from ${models()[1].labName} on key metrics including benchmarks, price, context length, usage, and model features.`,
)
const canonicalPath = createMemo(() => {
if (props.family) return canonicalFamilyComparisonPath(props.family.first, props.family.second)
const first = firstCatalog()
@@ -200,6 +200,7 @@ export default function StatsModel() {
pairs={modelComparisonPairs(catalog(), catalogEntry() ?? null, stats() ?? null)}
title="Compare This Model"
description="Other models to compare with this one."
variant="featured"
/>
</>
</Show>
@@ -155,6 +155,7 @@ export default function StatsLab() {
pairs={labComparisonPairs(data(), stats()?.models ?? [])}
title={`${data().name} Model Comparisons`}
description="Model pairs from this lab."
variant="featured"
/>
</>
)}
@@ -74,7 +74,8 @@ export default function ModelCompareIndex() {
const [themePreference, setThemePreference] = createSignal<ThemePreference>("system")
const compareUrl = createMemo(() => localizedUrl(language.locale(), comparePath))
const statsUnfurlUrl = new URL(statsUnfurlPath, localizedUrl("en", "/data/")).toString()
const featuredModels = createMemo(() => (catalog()?.models ?? []).slice(0, 120))
const models = createMemo(() => catalog()?.models ?? [])
const featuredModels = createMemo(() => models().slice(0, 120))
const categories = createMemo(() => buildComparisonCategories(featuredModels()))
const compareHeaderLinks = createMemo<readonly HeaderLink[]>(() => [
{ href: `${import.meta.env.BASE_URL}#top-models`, label: i18n.t("nav.topModels") },
@@ -150,7 +151,7 @@ export default function ModelCompareIndex() {
</section>
<section data-section="compare-home-selector" aria-label="Choose models to compare">
<Show
when={featuredModels().length > 1}
when={models().length > 1}
fallback={
<div data-component="empty-state" data-compact="true">
<strong>No models found</strong>
@@ -158,7 +159,7 @@ export default function ModelCompareIndex() {
</div>
}
>
<CompareHomeSelector models={featuredModels()} />
<CompareHomeSelector models={models()} />
</Show>
</section>
<ComparisonCardsSection
+10 -8
View File
@@ -3063,7 +3063,7 @@
min-width: 0;
}
[data-page="stats"] [data-slot="stats-breadcrumb-select-trigger"] {
[data-page="stats"] button[data-slot="stats-breadcrumb-select-trigger"] {
display: inline-flex;
align-items: center;
justify-content: flex-start;
@@ -3089,13 +3089,13 @@
cursor: pointer;
}
[data-page="stats"] [data-slot="stats-breadcrumb-select-trigger"][data-current="true"],
[data-page="stats"] [data-slot="stats-breadcrumb-select-trigger"]:hover,
[data-page="stats"] [data-slot="stats-breadcrumb-select-trigger"][data-expanded] {
[data-page="stats"] button[data-slot="stats-breadcrumb-select-trigger"][data-current="true"],
[data-page="stats"] button[data-slot="stats-breadcrumb-select-trigger"]:hover,
[data-page="stats"] button[data-slot="stats-breadcrumb-select-trigger"][data-expanded] {
color: var(--stats-text);
}
[data-page="stats"] [data-slot="stats-breadcrumb-select-trigger"]:focus-visible {
[data-page="stats"] button[data-slot="stats-breadcrumb-select-trigger"]:focus-visible {
color: var(--stats-text);
outline: 1px solid var(--stats-text);
outline-offset: 2px;
@@ -3126,7 +3126,7 @@
}
[data-page="stats"]
[data-slot="stats-breadcrumb-select-trigger"][data-expanded]
button[data-slot="stats-breadcrumb-select-trigger"][data-expanded]
[data-slot="stats-breadcrumb-select-icon"] {
transform: rotate(180deg);
}
@@ -6436,7 +6436,7 @@
white-space: nowrap;
}
[data-page="stats"] button[data-slot="compare-detail-select-model"] svg {
[data-page="stats"] button[data-slot="compare-detail-select-model"] > svg {
flex: 0 0 auto;
color: var(--stats-muted);
}
@@ -6510,6 +6510,7 @@
[data-page="stats"] [data-slot="compare-detail-label"][data-heading="true"] span {
display: inline-flex;
align-items: center;
flex: 0 0 auto;
height: 24px;
padding: 0 8px;
color: var(--stats-muted);
@@ -6517,6 +6518,7 @@
font-size: 12px;
font-weight: 500;
line-height: 1;
white-space: nowrap;
}
[data-page="stats"] [data-slot="compare-detail-value"] {
@@ -7884,7 +7886,7 @@
max-width: min(100%, 240px);
}
[data-page="stats"] [data-component="model-hero-breadcrumb"] [data-slot="stats-breadcrumb-select-trigger"] {
[data-page="stats"] [data-component="model-hero-breadcrumb"] button[data-slot="stats-breadcrumb-select-trigger"] {
max-width: min(100%, 240px);
}