From b1ce938ebeb9ea184ec36573260424c76fbb8e14 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Mon, 24 Aug 2026 01:54:31 -0400 Subject: [PATCH 001/185] fix(console): support DeepSeek weekend pricing (#44305) Co-authored-by: MrMushrooooom Co-authored-by: Frank --- .../console/app/src/routes/zen/util/handler.ts | 4 ++-- .../console/app/src/routes/zen/util/pricing.ts | 11 +++++++++++ packages/console/app/test/pricing.test.ts | 16 ++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 packages/console/app/src/routes/zen/util/pricing.ts create mode 100644 packages/console/app/test/pricing.test.ts diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index 7e185591e417..107f8ad4427a 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -47,6 +47,7 @@ import { createProviderBudgetTracker } from "./providerBudgetTracker" import { accumulateUsage, HOT_WORKSPACES } from "./usageBatcher" import { Workspace } from "@opencode-ai/console-core/workspace.js" import { countryFromRequest, isModelCountryRestricted } from "~/lib/request-country" +import { isPeakPricing } from "./pricing" import { prepareRequestBody } from "./requestBody" type ZenData = Awaited> @@ -992,9 +993,8 @@ export async function handler( const { inputTokens, outputTokens, reasoningTokens, cacheReadTokens, cacheWrite5mTokens, cacheWrite1hTokens } = usageInfo - const hour = new Date().getUTCHours() const modelCost = - modelInfo.costPeak && ((hour >= 1 && hour < 4) || (hour >= 6 && hour < 10)) + modelInfo.costPeak && isPeakPricing(new Date()) ? modelInfo.costPeak : modelInfo.cost200K && inputTokens + (cacheReadTokens ?? 0) + (cacheWrite5mTokens ?? 0) + (cacheWrite1hTokens ?? 0) > 200_000 diff --git a/packages/console/app/src/routes/zen/util/pricing.ts b/packages/console/app/src/routes/zen/util/pricing.ts new file mode 100644 index 000000000000..b7b6def61ecf --- /dev/null +++ b/packages/console/app/src/routes/zen/util/pricing.ts @@ -0,0 +1,11 @@ +export function isPeakPricing(date: Date) { + // DeepSeek peak pricing in China Standard Time (UTC+8): + // - Weekdays only + // - 9 AM to noon + // - 2 PM to 6 PM + const dateCN = new Date(date.getTime() + 8 * 3_600 * 1000) + const dayCN = dateCN.getUTCDay() + if (dayCN === 0 || dayCN === 6) return false + const hourCN = dateCN.getUTCHours() + return (hourCN >= 9 && hourCN < 12) || (hourCN >= 14 && hourCN < 18) +} diff --git a/packages/console/app/test/pricing.test.ts b/packages/console/app/test/pricing.test.ts new file mode 100644 index 000000000000..2955b3e0f8b9 --- /dev/null +++ b/packages/console/app/test/pricing.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, test } from "bun:test" +import { isPeakPricing } from "../src/routes/zen/util/pricing" + +describe("isPeakPricing", () => { + test.each([ + ["weekday 09:00 CN starts peak pricing", "2026-08-27T01:00:00.000Z", true], + ["weekday 12:00 CN ends peak pricing", "2026-08-27T04:00:00.000Z", false], + ["weekday 14:00 CN starts peak pricing", "2026-08-27T06:00:00.000Z", true], + ["weekday 18:00 CN ends peak pricing", "2026-08-27T10:00:00.000Z", false], + ["Saturday in Beijing", "2026-08-29T01:00:00.000Z", false], + ["Sunday in Beijing", "2026-08-30T06:00:00.000Z", false], + ["Monday in Beijing", "2026-08-31T01:00:00.000Z", true], + ] as const)("handles %s", (_name, timestamp, expected) => { + expect(isPeakPricing(new Date(timestamp))).toBe(expected) + }) +}) From f2a1d547f1760babcfe1ba15e368df06125517d5 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 24 Aug 2026 02:13:33 -0400 Subject: [PATCH 002/185] fix(console): set duplex for streamed zen requests --- packages/console/app/src/routes/zen/util/handler.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index 107f8ad4427a..7ef910122f13 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -242,10 +242,11 @@ export async function handler( return headers })(), body: reqBody, + duplex: "half", // Propagate caller disconnects to the upstream provider request so // abandoned Console requests do not leave orphaned inference work open. signal: input.request.signal, - }) + } as RequestInit & { duplex: "half" }) const isStream = res.headers.get("content-type")?.toLowerCase().includes("text/event-stream") ?? false logger.metric({ is_stream: isStream }) From 7bbfe425f628ad01d9b6e5f7194edc4dc716268a Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 24 Aug 2026 02:18:34 -0400 Subject: [PATCH 003/185] always allow ox alpha in go --- packages/console/app/src/routes/zen/util/handler.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index 107f8ad4427a..05479512d7a1 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -864,6 +864,8 @@ export async function handler( // Validate lite subscription billing if (opts.modelList === "lite" && authInfo.billing.lite && authInfo.lite) { + if (Object.values(modelInfo.cost).every((price) => price === 0)) return "lite" + try { const consoleGoUrl = `https://opencode.ai/workspace/${authInfo.workspaceID}/go` const sub = authInfo.lite From 4dbeeddc77e657d5b8fb0aef3efc9c067c1e5b3f Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 24 Aug 2026 03:01:02 -0400 Subject: [PATCH 004/185] discontinue first month discount --- packages/console/app/src/i18n/ar.ts | 19 +++++++++---------- packages/console/app/src/i18n/br.ts | 19 +++++++++---------- packages/console/app/src/i18n/da.ts | 19 +++++++++---------- packages/console/app/src/i18n/de.ts | 19 +++++++++---------- packages/console/app/src/i18n/en.ts | 19 +++++++++---------- packages/console/app/src/i18n/es.ts | 19 +++++++++---------- packages/console/app/src/i18n/fr.ts | 19 +++++++++---------- packages/console/app/src/i18n/it.ts | 19 +++++++++---------- packages/console/app/src/i18n/ja.ts | 19 +++++++++---------- packages/console/app/src/i18n/ko.ts | 19 +++++++++---------- packages/console/app/src/i18n/no.ts | 19 +++++++++---------- packages/console/app/src/i18n/pl.ts | 19 +++++++++---------- packages/console/app/src/i18n/ru.ts | 19 +++++++++---------- packages/console/app/src/i18n/th.ts | 19 +++++++++---------- packages/console/app/src/i18n/tr.ts | 19 +++++++++---------- packages/console/app/src/i18n/uk.ts | 19 +++++++++---------- packages/console/app/src/i18n/zh.ts | 19 +++++++++---------- packages/console/app/src/i18n/zht.ts | 19 +++++++++---------- packages/console/app/src/routes/go/index.tsx | 7 +------ packages/web/src/content/docs/ar/go.mdx | 4 ++-- packages/web/src/content/docs/bs/go.mdx | 4 ++-- packages/web/src/content/docs/da/go.mdx | 4 ++-- packages/web/src/content/docs/de/go.mdx | 4 ++-- packages/web/src/content/docs/es/go.mdx | 4 ++-- packages/web/src/content/docs/fr/go.mdx | 4 ++-- packages/web/src/content/docs/go.mdx | 4 ++-- packages/web/src/content/docs/it/go.mdx | 4 ++-- packages/web/src/content/docs/ja/go.mdx | 4 ++-- packages/web/src/content/docs/ko/go.mdx | 4 ++-- packages/web/src/content/docs/nb/go.mdx | 4 ++-- packages/web/src/content/docs/pl/go.mdx | 4 ++-- packages/web/src/content/docs/pt-br/go.mdx | 4 ++-- packages/web/src/content/docs/ru/go.mdx | 4 ++-- packages/web/src/content/docs/th/go.mdx | 4 ++-- packages/web/src/content/docs/tr/go.mdx | 4 ++-- packages/web/src/content/docs/zh-cn/go.mdx | 4 ++-- packages/web/src/content/docs/zh-tw/go.mdx | 4 ++-- 37 files changed, 199 insertions(+), 222 deletions(-) diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts index d648ceee2153..130e93c45afd 100644 --- a/packages/console/app/src/i18n/ar.ts +++ b/packages/console/app/src/i18n/ar.ts @@ -254,7 +254,7 @@ export const dict = { "go.title": "OpenCode Go | نماذج برمجة منخفضة التكلفة للجميع", "go.banner.text": "Ox Alpha Free متاح على Go لفترة محدودة", "go.meta.description": - "يبدأ Go بسعر $5 للشهر الأول، ثم $10/شهر، مع حدود استخدام سخية ووصول موثوق إلى نماذج البرمجة الرائدة.", + "يبلغ سعر Go ‏$10/شهر، مع حدود استخدام سخية ووصول موثوق إلى نماذج البرمجة الرائدة.", "go.hero.title": "نماذج برمجة منخفضة التكلفة للجميع", "go.hero.body": "يجلب Go البرمجة الوكيلة للمبرمجين حول العالم. يوفر حدودًا سخية ووصولًا موثوقًا إلى أقوى النماذج مفتوحة المصدر، حتى تتمكن من البناء باستخدام وكلاء أقوياء دون القلق بشأن التكلفة أو التوفر.", @@ -263,9 +263,8 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "اشترك في Go", "go.cta.price": "$10/شهر", - "go.cta.promo": "$5 للشهر الأول", "go.pricing.body": - "استخدمه مع أي وكيل. $5 للشهر الأول، ثم $10/شهر. قم بزيادة الرصيد إذا لزم الأمر. الإلغاء في أي وقت.", + "استخدمه مع أي وكيل. $10/شهر. قم بزيادة الرصيد إذا لزم الأمر. الإلغاء في أي وقت.", "go.graph.free": "مجاني", "go.graph.freePill": "Big Pickle ونماذج مجانية", "go.graph.go": "Go", @@ -298,20 +297,20 @@ export const dict = { "go.testimonials.frank.quote": "أتمنى لو كنت لا أزال في Nvidia.", "go.problem.title": "ما المشكلة التي يحلها Go؟", "go.problem.body": - "نحن نركز على تقديم تجربة OpenCode لأكبر عدد ممكن من الناس. OpenCode Go هو اشتراك منخفض التكلفة: $5 للشهر الأول، ثم $10/شهر. يوفر حدودا سخية ووصولا موثوقا إلى نماذج المصدر المفتوح الأكثر قدرة.", + "نحن نركز على تقديم تجربة OpenCode لأكبر عدد ممكن من الناس. OpenCode Go هو اشتراك منخفض التكلفة بسعر $10/شهر. يوفر حدودا سخية ووصولا موثوقا إلى نماذج المصدر المفتوح الأكثر قدرة.", "go.problem.subtitle": " ", "go.problem.item1": "أسعار اشتراك منخفضة التكلفة", "go.problem.item2": "حدود سخية ووصول موثوق", "go.problem.item3": "مصمم لأكبر عدد ممكن من المبرمجين", "go.problem.item4": "مجموعة منسقة من النماذج المختبرة للبرمجة الوكيلة", "go.how.title": "كيف يعمل Go", - "go.how.body": "يبدأ Go من $5 للشهر الأول، ثم $10/شهر. يمكنك استخدامه مع OpenCode أو أي وكيل.", + "go.how.body": "يبلغ سعر Go ‏$10/شهر. يمكنك استخدامه مع OpenCode أو أي وكيل.", "go.how.step1.title": "أنشئ حسابًا", "go.how.step1.beforeLink": "اتبع", "go.how.step1.link": "تعليمات الإعداد", "go.how.step2.title": "اشترك في Go", - "go.how.step2.link": "$5 للشهر الأول", - "go.how.step2.afterLink": "ثم $10/شهر مع حدود سخية", + "go.how.step2.link": "$10/شهر", + "go.how.step2.afterLink": "مع حدود سخية", "go.how.step3.title": "ابدأ البرمجة", "go.how.step3.body": "مع وصول موثوق لنماذج مفتوحة المصدر", "go.privacy.title": "خصوصيتك مهمة بالنسبة لنا", @@ -327,11 +326,11 @@ export const dict = { "go.faq.a2": "يتضمن Go النماذج المدرجة أدناه، مع حدود سخية وإتاحة موثوقة.", "go.faq.q3": "هل Go هو نفسه Zen؟", "go.faq.a3": - "لا. يعتمد Zen على الدفع حسب الاستخدام، بينما يبدأ Go بسعر $5 للشهر الأول، ثم $10/شهر، مع حدود سخية ووصول موثوق إلى مجموعة منسقة من النماذج.", + "لا. يعتمد Zen على الدفع حسب الاستخدام، بينما يبلغ سعر Go ‏$10/شهر، مع حدود سخية ووصول موثوق إلى مجموعة منسقة من النماذج.", "go.faq.q4": "كم تكلفة Go؟", "go.faq.a4.p1.beforePricing": "تكلفة Go", - "go.faq.a4.p1.pricingLink": "$5 للشهر الأول", - "go.faq.a4.p1.afterPricing": "ثم $10/شهر مع حدود سخية.", + "go.faq.a4.p1.pricingLink": "$10/شهر", + "go.faq.a4.p1.afterPricing": "مع حدود سخية.", "go.faq.a4.p2.beforeAccount": "يمكنك إدارة اشتراكك في", "go.faq.a4.p2.accountLink": "حسابك", "go.faq.a4.p3": "ألغِ في أي وقت.", diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts index 6554f390ee7c..ae60ee500c02 100644 --- a/packages/console/app/src/i18n/br.ts +++ b/packages/console/app/src/i18n/br.ts @@ -258,7 +258,7 @@ export const dict = { "go.title": "OpenCode Go | Modelos de codificação de baixo custo para todos", "go.banner.text": "Ox Alpha Free está disponível no Go por tempo limitado", "go.meta.description": - "O Go começa em $5 no primeiro mês, depois $10/mês, com limites generosos de uso e acesso confiável aos principais modelos de codificação.", + "O Go custa $10/mês, com limites generosos de uso e acesso confiável aos principais modelos de codificação.", "go.hero.title": "Modelos de codificação de baixo custo para todos", "go.hero.body": "O Go traz a codificação com agentes para programadores em todo o mundo. Oferecendo limites generosos e acesso confiável aos modelos de código aberto mais capazes, para que você possa construir com agentes poderosos sem se preocupar com custos ou disponibilidade.", @@ -267,9 +267,8 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Assinar o Go", "go.cta.price": "$10/mês", - "go.cta.promo": "$5 no primeiro mês", "go.pricing.body": - "Use com qualquer agente. $5 no primeiro mês, depois $10/mês. Recarregue o crédito se necessário. Cancele a qualquer momento.", + "Use com qualquer agente. $10/mês. Recarregue o crédito se necessário. Cancele a qualquer momento.", "go.graph.free": "Grátis", "go.graph.freePill": "Big Pickle e modelos gratuitos", "go.graph.go": "Go", @@ -303,7 +302,7 @@ export const dict = { "go.testimonials.frank.quote": "Eu queria ainda estar na Nvidia.", "go.problem.title": "Que problema o Go resolve?", "go.problem.body": - "Estamos focados em levar a experiência do OpenCode para o maior número de pessoas possível. OpenCode Go é uma assinatura de baixo custo: $5 no primeiro mês, depois $10/mês. Oferece limites generosos e acesso confiável aos modelos open source mais capazes.", + "Estamos focados em levar a experiência do OpenCode para o maior número de pessoas possível. OpenCode Go é uma assinatura de baixo custo de $10/mês. Oferece limites generosos e acesso confiável aos modelos open source mais capazes.", "go.problem.subtitle": " ", "go.problem.item1": "Preço de assinatura de baixo custo", "go.problem.item2": "Limites generosos e acesso confiável", @@ -311,13 +310,13 @@ export const dict = { "go.problem.item4": "Uma seleção de modelos testados para codificação com agentes", "go.how.title": "Como o Go funciona", "go.how.body": - "O Go começa em $5 no primeiro mês, depois $10/mês. Você pode usá-lo com o OpenCode ou qualquer agente.", + "O Go custa $10/mês. Você pode usá-lo com o OpenCode ou qualquer agente.", "go.how.step1.title": "Crie uma conta", "go.how.step1.beforeLink": "siga as", "go.how.step1.link": "instruções de configuração", "go.how.step2.title": "Assinar o Go", - "go.how.step2.link": "$5 no primeiro mês", - "go.how.step2.afterLink": "depois $10/mês com limites generosos", + "go.how.step2.link": "$10/mês", + "go.how.step2.afterLink": "com limites generosos", "go.how.step3.title": "Comece a codificar", "go.how.step3.body": "com acesso confiável a modelos de código aberto", "go.privacy.title": "Sua privacidade é importante para nós", @@ -334,11 +333,11 @@ export const dict = { "go.faq.a2": "O Go inclui os modelos listados abaixo, com limites generosos e acesso confiável.", "go.faq.q3": "O Go é o mesmo que o Zen?", "go.faq.a3": - "Não. Zen é pay-as-you-go, enquanto o Go começa em $5 no primeiro mês, depois $10/mês, com limites generosos e acesso confiável a uma seleção de modelos.", + "Não. Zen é pay-as-you-go, enquanto o Go custa $10/mês, com limites generosos e acesso confiável a uma seleção de modelos.", "go.faq.q4": "Quanto custa o Go?", "go.faq.a4.p1.beforePricing": "O Go custa", - "go.faq.a4.p1.pricingLink": "$5 no primeiro mês", - "go.faq.a4.p1.afterPricing": "depois $10/mês com limites generosos.", + "go.faq.a4.p1.pricingLink": "$10/mês", + "go.faq.a4.p1.afterPricing": "com limites generosos.", "go.faq.a4.p2.beforeAccount": "Você pode gerenciar sua assinatura em sua", "go.faq.a4.p2.accountLink": "conta", "go.faq.a4.p3": "Cancele a qualquer momento.", diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts index 336f3b8276d9..8f17a2beb6cb 100644 --- a/packages/console/app/src/i18n/da.ts +++ b/packages/console/app/src/i18n/da.ts @@ -256,7 +256,7 @@ export const dict = { "go.title": "OpenCode Go | Kodningsmodeller til lav pris for alle", "go.banner.text": "Ox Alpha Free er tilgængelig på Go i en begrænset periode", "go.meta.description": - "Go starter ved $5 for den første måned, derefter $10/måned, med generøse brugsgrænser og pålidelig adgang til førende kodningsmodeller.", + "Go koster $10/måned, med generøse brugsgrænser og pålidelig adgang til førende kodningsmodeller.", "go.hero.title": "Kodningsmodeller til lav pris for alle", "go.hero.body": "Go bringer agentisk kodning til programmører over hele verden. Med generøse grænser og pålidelig adgang til de mest kapable open source-modeller, så du kan bygge med kraftfulde agenter uden at bekymre dig om omkostninger eller tilgængelighed.", @@ -265,9 +265,8 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Abonner på Go", "go.cta.price": "$10/måned", - "go.cta.promo": "$5 første måned", "go.pricing.body": - "Brug med enhver agent. $5 første måned, derefter $10/måned. Tank op med kredit efter behov. Afmeld når som helst.", + "Brug med enhver agent. $10/måned. Tank op med kredit efter behov. Afmeld når som helst.", "go.graph.free": "Gratis", "go.graph.freePill": "Big Pickle og gratis modeller", "go.graph.go": "Go", @@ -300,7 +299,7 @@ export const dict = { "go.testimonials.frank.quote": "Jeg ville ønske, jeg stadig var hos Nvidia.", "go.problem.title": "Hvilket problem løser Go?", "go.problem.body": - "Vi fokuserer på at bringe OpenCode-oplevelsen ud til så mange som muligt. OpenCode Go er et lavprisabonnement: $5 for den første måned, derefter $10/måned. Det giver generøse grænser og pålidelig adgang til de mest kapable open source-modeller.", + "Vi fokuserer på at bringe OpenCode-oplevelsen ud til så mange som muligt. OpenCode Go er et lavprisabonnement til $10/måned. Det giver generøse grænser og pålidelig adgang til de mest kapable open source-modeller.", "go.problem.subtitle": " ", "go.problem.item1": "Lavpris abonnementspriser", "go.problem.item2": "Generøse grænser og pålidelig adgang", @@ -308,13 +307,13 @@ export const dict = { "go.problem.item4": "Et kurateret modeludvalg testet til agentisk kodning", "go.how.title": "Hvordan Go virker", "go.how.body": - "Go starter ved $5 for den første måned, derefter $10/måned. Du kan bruge det med OpenCode eller enhver agent.", + "Go koster $10/måned. Du kan bruge det med OpenCode eller enhver agent.", "go.how.step1.title": "Opret en konto", "go.how.step1.beforeLink": "følg", "go.how.step1.link": "opsætningsinstruktionerne", "go.how.step2.title": "Abonner på Go", - "go.how.step2.link": "$5 første måned", - "go.how.step2.afterLink": "derefter $10/måned med generøse grænser", + "go.how.step2.link": "$10/måned", + "go.how.step2.afterLink": "med generøse grænser", "go.how.step3.title": "Start kodning", "go.how.step3.body": "med pålidelig adgang til open source-modeller", "go.privacy.title": "Dit privatliv er vigtigt for os", @@ -331,11 +330,11 @@ export const dict = { "go.faq.a2": "Go inkluderer modellerne nedenfor med generøse grænser og pålidelig adgang.", "go.faq.q3": "Er Go det samme som Zen?", "go.faq.a3": - "Nej. Zen er pay-as-you-go, mens Go starter ved $5 for den første måned, derefter $10/måned, med generøse grænser og pålidelig adgang til et kurateret modeludvalg.", + "Nej. Zen er pay-as-you-go, mens Go koster $10/måned, med generøse grænser og pålidelig adgang til et kurateret modeludvalg.", "go.faq.q4": "Hvad koster Go?", "go.faq.a4.p1.beforePricing": "Go koster", - "go.faq.a4.p1.pricingLink": "$5 første måned", - "go.faq.a4.p1.afterPricing": "derefter $10/måned med generøse grænser.", + "go.faq.a4.p1.pricingLink": "$10/måned", + "go.faq.a4.p1.afterPricing": "med generøse grænser.", "go.faq.a4.p2.beforeAccount": "Du kan administrere dit abonnement i din", "go.faq.a4.p2.accountLink": "konto", "go.faq.a4.p3": "Annuller til enhver tid.", diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts index 5f1218caa6ee..49d9242dabb1 100644 --- a/packages/console/app/src/i18n/de.ts +++ b/packages/console/app/src/i18n/de.ts @@ -258,7 +258,7 @@ export const dict = { "go.title": "OpenCode Go | Kostengünstige Coding-Modelle für alle", "go.banner.text": "Ox Alpha Free ist für begrenzte Zeit auf Go verfügbar", "go.meta.description": - "Go beginnt bei $5 für deinen ersten Monat, danach $10/Monat, mit großzügigen Nutzungslimits und zuverlässigem Zugang zu führenden Coding-Modellen.", + "Go kostet $10/Monat, mit großzügigen Nutzungslimits und zuverlässigem Zugang zu führenden Coding-Modellen.", "go.hero.title": "Kostengünstige Coding-Modelle für alle", "go.hero.body": "Go bringt Agentic Coding zu Programmierern auf der ganzen Welt. Mit großzügigen Limits und zuverlässigem Zugang zu den leistungsfähigsten Open-Source-Modellen, damit du mit leistungsstarken Agenten entwickeln kannst, ohne dir Gedanken über Kosten oder Verfügbarkeit zu machen.", @@ -267,9 +267,8 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Go abonnieren", "go.cta.price": "$10/Monat", - "go.cta.promo": "$5 im ersten Monat", "go.pricing.body": - "Mit jedem Agenten nutzbar. $5 im ersten Monat, danach $10/Monat. Guthaben bei Bedarf aufladen. Jederzeit kündbar.", + "Mit jedem Agenten nutzbar. $10/Monat. Guthaben bei Bedarf aufladen. Jederzeit kündbar.", "go.graph.free": "Kostenlos", "go.graph.freePill": "Big Pickle und kostenlose Modelle", "go.graph.go": "Go", @@ -302,7 +301,7 @@ export const dict = { "go.testimonials.frank.quote": "Ich wünschte, ich wäre noch bei Nvidia.", "go.problem.title": "Welches Problem löst Go?", "go.problem.body": - "Wir konzentrieren uns darauf, die OpenCode-Erfahrung so vielen Menschen wie möglich zugänglich zu machen. OpenCode Go ist ein kostengünstiges Abonnement: $5 im ersten Monat, danach $10/Monat. Es bietet großzügige Limits und zuverlässigen Zugang zu den leistungsfähigsten Open-Source-Modellen.", + "Wir konzentrieren uns darauf, die OpenCode-Erfahrung so vielen Menschen wie möglich zugänglich zu machen. OpenCode Go ist ein kostengünstiges Abonnement für $10/Monat. Es bietet großzügige Limits und zuverlässigen Zugang zu den leistungsfähigsten Open-Source-Modellen.", "go.problem.subtitle": " ", "go.problem.item1": "Kostengünstiges Abonnement", "go.problem.item2": "Großzügige Limits und zuverlässiger Zugang", @@ -310,13 +309,13 @@ export const dict = { "go.problem.item4": "Eine kuratierte, für Agentic Coding getestete Modellauswahl", "go.how.title": "Wie Go funktioniert", "go.how.body": - "Go beginnt bei $5 für den ersten Monat, danach $10/Monat. Du kannst es mit OpenCode oder jedem Agenten nutzen.", + "Go kostet $10/Monat. Du kannst es mit OpenCode oder jedem Agenten nutzen.", "go.how.step1.title": "Konto erstellen", "go.how.step1.beforeLink": "folge den", "go.how.step1.link": "Einrichtungsanweisungen", "go.how.step2.title": "Go abonnieren", - "go.how.step2.link": "$5 im ersten Monat", - "go.how.step2.afterLink": "danach $10/Monat mit großzügigen Limits", + "go.how.step2.link": "$10/Monat", + "go.how.step2.afterLink": "mit großzügigen Limits", "go.how.step3.title": "Loslegen mit Coding", "go.how.step3.body": "mit zuverlässigem Zugang zu Open-Source-Modellen", "go.privacy.title": "Deine Privatsphäre ist uns wichtig", @@ -333,11 +332,11 @@ export const dict = { "go.faq.a2": "Go umfasst die unten aufgeführten Modelle mit großzügigen Limits und zuverlässigem Zugriff.", "go.faq.q3": "Ist Go dasselbe wie Zen?", "go.faq.a3": - "Nein. Zen ist Pay-as-you-go, während Go bei $5 für deinen ersten Monat beginnt, danach $10/Monat, mit großzügigen Limits und zuverlässigem Zugang zu einer kuratierten Modellauswahl.", + "Nein. Zen ist Pay-as-you-go, während Go $10/Monat kostet, mit großzügigen Limits und zuverlässigem Zugang zu einer kuratierten Modellauswahl.", "go.faq.q4": "Wie viel kostet Go?", "go.faq.a4.p1.beforePricing": "Go kostet", - "go.faq.a4.p1.pricingLink": "$5 im ersten Monat", - "go.faq.a4.p1.afterPricing": "danach $10/Monat mit großzügigen Limits.", + "go.faq.a4.p1.pricingLink": "$10/Monat", + "go.faq.a4.p1.afterPricing": "mit großzügigen Limits.", "go.faq.a4.p2.beforeAccount": "Du kannst dein Abonnement in deinem", "go.faq.a4.p2.accountLink": "Konto verwalten", "go.faq.a4.p3": "Jederzeit kündbar.", diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index 9b57bb875034..810b82672510 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -255,7 +255,7 @@ export const dict = { "go.title": "OpenCode Go | Low cost coding models for everyone", "go.banner.text": "Ox Alpha Free is available on Go for a limited time", "go.meta.description": - "Go starts at $5 for your first month, then $10/month, with generous usage limits and reliable access to leading coding models.", + "Go costs $10/month, with generous usage limits and reliable access to leading coding models.", "go.hero.title": "Low cost coding models for everyone", "go.hero.body": "Go brings agentic coding to programmers around the world. Offering generous limits and reliable access to the most capable open-source models, so you can build with powerful agents without worrying about cost or availability.", @@ -264,8 +264,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Subscribe to Go", "go.cta.price": "$10/month", - "go.cta.promo": "$5 first month", - "go.pricing.body": "Use with any agent. $5 first month, then $10/month. Top up credit if needed. Cancel any time.", + "go.pricing.body": "Use with any agent. $10/month. Top up credit if needed. Cancel any time.", "go.graph.free": "Free", "go.graph.freePill": "Big Pickle and free models", "go.graph.go": "Go", @@ -299,20 +298,20 @@ export const dict = { "go.testimonials.frank.quote": "I wish I was still at Nvidia.", "go.problem.title": "What problem is Go solving?", "go.problem.body": - "We're focused on bringing the OpenCode experience to as many people as possible. OpenCode Go is a low cost subscription: $5 for your first month, then $10/month. It provides generous limits and reliable access to the most capable open source models.", + "We're focused on bringing the OpenCode experience to as many people as possible. OpenCode Go is a low cost $10/month subscription. It provides generous limits and reliable access to the most capable open source models.", "go.problem.subtitle": " ", "go.problem.item1": "Low cost subscription pricing", "go.problem.item2": "Generous limits and reliable access", "go.problem.item3": "Built for as many programmers as possible", "go.problem.item4": "A curated model lineup tested for agentic coding", "go.how.title": "How Go works", - "go.how.body": "Go starts at $5 for your first month, then $10/month. You can use it with OpenCode or any agent.", + "go.how.body": "Go costs $10/month. You can use it with OpenCode or any agent.", "go.how.step1.title": "Create an account", "go.how.step1.beforeLink": "follow the", "go.how.step1.link": "setup instructions", "go.how.step2.title": "Subscribe to Go", - "go.how.step2.link": "$5 first month", - "go.how.step2.afterLink": "then $10/month with generous limits", + "go.how.step2.link": "$10/month", + "go.how.step2.afterLink": "with generous limits", "go.how.step3.title": "Start coding", "go.how.step3.body": "with reliable access to open-source models", "go.privacy.title": "Your privacy is important to us", @@ -329,11 +328,11 @@ export const dict = { "go.faq.a2": "Go includes the models listed below, with generous limits and reliable access.", "go.faq.q3": "Is Go the same as Zen?", "go.faq.a3": - "No. Zen is pay-as-you-go, while Go starts at $5 for your first month, then $10/month, with generous limits and reliable access to a curated model lineup.", + "No. Zen is pay-as-you-go, while Go costs $10/month, with generous limits and reliable access to a curated model lineup.", "go.faq.q4": "How much does Go cost?", "go.faq.a4.p1.beforePricing": "Go costs", - "go.faq.a4.p1.pricingLink": "$5 first month", - "go.faq.a4.p1.afterPricing": "then $10/month with generous limits.", + "go.faq.a4.p1.pricingLink": "$10/month", + "go.faq.a4.p1.afterPricing": "with generous limits.", "go.faq.a4.p2.beforeAccount": "You can manage your subscription in your", "go.faq.a4.p2.accountLink": "account", "go.faq.a4.p3": "Cancel any time.", diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts index da0edf3e846b..3e796ecde881 100644 --- a/packages/console/app/src/i18n/es.ts +++ b/packages/console/app/src/i18n/es.ts @@ -259,7 +259,7 @@ export const dict = { "go.title": "OpenCode Go | Modelos de programación de bajo coste para todos", "go.banner.text": "Ox Alpha Free está disponible en Go por tiempo limitado", "go.meta.description": - "Go comienza en $5 el primer mes, luego 10 $/mes, con límites de uso generosos y acceso fiable a modelos de programación líderes.", + "Go cuesta 10 $/mes, con límites de uso generosos y acceso fiable a modelos de programación líderes.", "go.hero.title": "Modelos de programación de bajo coste para todos", "go.hero.body": "Go lleva la programación agéntica a programadores de todo el mundo. Ofrece límites generosos y acceso fiable a los modelos de código abierto más capaces, para que puedas crear con agentes potentes sin preocuparte por el coste o la disponibilidad.", @@ -268,9 +268,8 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Suscribirse a Go", "go.cta.price": "10 $/mes", - "go.cta.promo": "$5 el primer mes", "go.pricing.body": - "Úsalo con cualquier agente. $5 el primer mes, luego 10 $/mes. Recarga crédito si es necesario. Cancela en cualquier momento.", + "Úsalo con cualquier agente. 10 $/mes. Recarga crédito si es necesario. Cancela en cualquier momento.", "go.graph.free": "Gratis", "go.graph.freePill": "Big Pickle y modelos gratuitos", "go.graph.go": "Go", @@ -304,20 +303,20 @@ export const dict = { "go.testimonials.frank.quote": "Ojalá siguiera en Nvidia.", "go.problem.title": "¿Qué problema resuelve Go?", "go.problem.body": - "Nos enfocamos en llevar la experiencia de OpenCode a tantas personas como sea posible. OpenCode Go es una suscripción de bajo coste: $5 el primer mes, luego 10 $/mes. Proporciona límites generosos y acceso fiable a los modelos de código abierto más capaces.", + "Nos enfocamos en llevar la experiencia de OpenCode a tantas personas como sea posible. OpenCode Go es una suscripción de bajo coste de 10 $/mes. Proporciona límites generosos y acceso fiable a los modelos de código abierto más capaces.", "go.problem.subtitle": " ", "go.problem.item1": "Precios de suscripción de bajo coste", "go.problem.item2": "Límites generosos y acceso fiable", "go.problem.item3": "Creado para tantos programadores como sea posible", "go.problem.item4": "Una selección de modelos probados para programación agéntica", "go.how.title": "Cómo funciona Go", - "go.how.body": "Go comienza en $5 el primer mes, luego 10 $/mes. Puedes usarlo con OpenCode o cualquier agente.", + "go.how.body": "Go cuesta 10 $/mes. Puedes usarlo con OpenCode o cualquier agente.", "go.how.step1.title": "Crear una cuenta", "go.how.step1.beforeLink": "sigue las", "go.how.step1.link": "instrucciones de configuración", "go.how.step2.title": "Suscribirse a Go", - "go.how.step2.link": "$5 el primer mes", - "go.how.step2.afterLink": "luego 10 $/mes con límites generosos", + "go.how.step2.link": "10 $/mes", + "go.how.step2.afterLink": "con límites generosos", "go.how.step3.title": "Empezar a programar", "go.how.step3.body": "con acceso fiable a modelos de código abierto", "go.privacy.title": "Tu privacidad es importante para nosotros", @@ -334,11 +333,11 @@ export const dict = { "go.faq.a2": "Go incluye los modelos que se indican abajo, con límites generosos y acceso confiable.", "go.faq.q3": "¿Es Go lo mismo que Zen?", "go.faq.a3": - "No. Zen es de pago por uso, mientras que Go comienza en $5 el primer mes, luego 10 $/mes, con límites generosos y acceso fiable a una selección de modelos.", + "No. Zen es de pago por uso, mientras que Go cuesta 10 $/mes, con límites generosos y acceso fiable a una selección de modelos.", "go.faq.q4": "¿Cuánto cuesta Go?", "go.faq.a4.p1.beforePricing": "Go cuesta", - "go.faq.a4.p1.pricingLink": "$5 el primer mes", - "go.faq.a4.p1.afterPricing": "luego 10 $/mes con límites generosos.", + "go.faq.a4.p1.pricingLink": "10 $/mes", + "go.faq.a4.p1.afterPricing": "con límites generosos.", "go.faq.a4.p2.beforeAccount": "Puedes gestionar tu suscripción en tu", "go.faq.a4.p2.accountLink": "cuenta", "go.faq.a4.p3": "Cancela en cualquier momento.", diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts index 29f7a1958dd7..737583535451 100644 --- a/packages/console/app/src/i18n/fr.ts +++ b/packages/console/app/src/i18n/fr.ts @@ -260,7 +260,7 @@ export const dict = { "go.title": "OpenCode Go | Modèles de code à faible coût pour tous", "go.banner.text": "Ox Alpha Free est disponible sur Go pour une durée limitée", "go.meta.description": - "Go commence à $5 pour le premier mois, puis 10 $/mois, avec des limites d'utilisation généreuses et un accès fiable aux principaux modèles de codage.", + "Go coûte 10 $/mois, avec des limites d'utilisation généreuses et un accès fiable aux principaux modèles de codage.", "go.hero.title": "Modèles de code à faible coût pour tous", "go.hero.body": "Go apporte le codage agentique aux programmeurs du monde entier. Offrant des limites généreuses et un accès fiable aux modèles open source les plus capables, pour que vous puissiez construire avec des agents puissants sans vous soucier du coût ou de la disponibilité.", @@ -269,9 +269,8 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "S'abonner à Go", "go.cta.price": "10 $/mois", - "go.cta.promo": "$5 le premier mois", "go.pricing.body": - "Utilisez-le avec n'importe quel agent. $5 le premier mois, puis 10 $/mois. Rechargez du crédit si nécessaire. Annulez à tout moment.", + "Utilisez-le avec n'importe quel agent. 10 $/mois. Rechargez du crédit si nécessaire. Annulez à tout moment.", "go.graph.free": "Gratuit", "go.graph.freePill": "Big Pickle et modèles gratuits", "go.graph.go": "Go", @@ -304,7 +303,7 @@ export const dict = { "go.testimonials.frank.quote": "J'aimerais être encore chez Nvidia.", "go.problem.title": "Quel problème Go résout-il ?", "go.problem.body": - "Nous nous efforçons d'apporter l'expérience OpenCode au plus grand nombre. OpenCode Go est un abonnement à faible coût : $5 pour le premier mois, puis 10 $/mois. Il offre des limites généreuses et un accès fiable aux modèles open source les plus performants.", + "Nous nous efforçons d'apporter l'expérience OpenCode au plus grand nombre. OpenCode Go est un abonnement à faible coût de 10 $/mois. Il offre des limites généreuses et un accès fiable aux modèles open source les plus performants.", "go.problem.subtitle": " ", "go.problem.item1": "Prix d'abonnement bas", "go.problem.item2": "Limites généreuses et accès fiable", @@ -312,13 +311,13 @@ export const dict = { "go.problem.item4": "Une sélection de modèles testés pour le codage agentique", "go.how.title": "Comment fonctionne Go", "go.how.body": - "Go commence à $5 pour le premier mois, puis 10 $/mois. Vous pouvez l'utiliser avec OpenCode ou n'importe quel agent.", + "Go coûte 10 $/mois. Vous pouvez l'utiliser avec OpenCode ou n'importe quel agent.", "go.how.step1.title": "Créez un compte", "go.how.step1.beforeLink": "suivez les", "go.how.step1.link": "instructions de configuration", "go.how.step2.title": "Abonnez-vous à Go", - "go.how.step2.link": "$5 le premier mois", - "go.how.step2.afterLink": "puis 10 $/mois avec des limites généreuses", + "go.how.step2.link": "10 $/mois", + "go.how.step2.afterLink": "avec des limites généreuses", "go.how.step3.title": "Commencez à coder", "go.how.step3.body": "avec un accès fiable aux modèles open source", "go.privacy.title": "Votre vie privée est importante pour nous", @@ -335,11 +334,11 @@ export const dict = { "go.faq.a2": "Go inclut les modèles ci-dessous, avec des limites généreuses et un accès fiable.", "go.faq.q3": "Est-ce que Go est la même chose que Zen ?", "go.faq.a3": - "Non. Zen est un paiement à l'utilisation, tandis que Go commence à $5 pour le premier mois, puis 10 $/mois, avec des limites généreuses et un accès fiable à une sélection de modèles.", + "Non. Zen est un paiement à l'utilisation, tandis que Go coûte 10 $/mois, avec des limites généreuses et un accès fiable à une sélection de modèles.", "go.faq.q4": "Combien coûte Go ?", "go.faq.a4.p1.beforePricing": "Go coûte", - "go.faq.a4.p1.pricingLink": "$5 le premier mois", - "go.faq.a4.p1.afterPricing": "puis 10 $/mois avec des limites généreuses.", + "go.faq.a4.p1.pricingLink": "10 $/mois", + "go.faq.a4.p1.afterPricing": "avec des limites généreuses.", "go.faq.a4.p2.beforeAccount": "Vous pouvez gérer votre abonnement dans votre", "go.faq.a4.p2.accountLink": "compte", "go.faq.a4.p3": "Annulez à tout moment.", diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts index 18d26e0d3436..af6b35f46fda 100644 --- a/packages/console/app/src/i18n/it.ts +++ b/packages/console/app/src/i18n/it.ts @@ -256,7 +256,7 @@ export const dict = { "go.title": "OpenCode Go | Modelli di coding a basso costo per tutti", "go.banner.text": "Ox Alpha Free è disponibile su Go per un periodo limitato", "go.meta.description": - "Go inizia a $5 per il primo mese, poi $10/mese, con limiti di utilizzo generosi e un accesso affidabile ai principali modelli di coding.", + "Go costa $10/mese, con limiti di utilizzo generosi e un accesso affidabile ai principali modelli di coding.", "go.hero.title": "Modelli di coding a basso costo per tutti", "go.hero.body": "Go porta il coding agentico ai programmatori di tutto il mondo. Offrendo limiti generosi e un accesso affidabile ai modelli open source più capaci, in modo da poter costruire con agenti potenti senza preoccuparsi dei costi o della disponibilità.", @@ -265,9 +265,8 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Abbonati a Go", "go.cta.price": "$10/mese", - "go.cta.promo": "$5 il primo mese", "go.pricing.body": - "Usalo con qualsiasi agente. $5 il primo mese, poi $10/mese. Ricarica il credito se necessario. Annulla in qualsiasi momento.", + "Usalo con qualsiasi agente. $10/mese. Ricarica il credito se necessario. Annulla in qualsiasi momento.", "go.graph.free": "Gratis", "go.graph.freePill": "Big Pickle e modelli gratuiti", "go.graph.go": "Go", @@ -300,20 +299,20 @@ export const dict = { "go.testimonials.frank.quote": "Vorrei essere ancora a Nvidia.", "go.problem.title": "Quale problema risolve Go?", "go.problem.body": - "Ci concentriamo nel portare l'esperienza OpenCode a quante più persone possibile. OpenCode Go è un abbonamento a basso costo: $5 il primo mese, poi $10/mese. Offre limiti generosi e accesso affidabile ai modelli open source più capaci.", + "Ci concentriamo nel portare l'esperienza OpenCode a quante più persone possibile. OpenCode Go è un abbonamento a basso costo da $10/mese. Offre limiti generosi e accesso affidabile ai modelli open source più capaci.", "go.problem.subtitle": " ", "go.problem.item1": "Prezzo di abbonamento a basso costo", "go.problem.item2": "Limiti generosi e accesso affidabile", "go.problem.item3": "Costruito per il maggior numero possibile di programmatori", "go.problem.item4": "Una selezione curata di modelli testati per il coding agentico", "go.how.title": "Come funziona Go", - "go.how.body": "Go inizia a $5 per il primo mese, poi $10/mese. Puoi usarlo con OpenCode o qualsiasi agente.", + "go.how.body": "Go costa $10/mese. Puoi usarlo con OpenCode o qualsiasi agente.", "go.how.step1.title": "Crea un account", "go.how.step1.beforeLink": "segui le", "go.how.step1.link": "istruzioni di configurazione", "go.how.step2.title": "Abbonati a Go", - "go.how.step2.link": "$5 il primo mese", - "go.how.step2.afterLink": "poi $10/mese con limiti generosi", + "go.how.step2.link": "$10/mese", + "go.how.step2.afterLink": "con limiti generosi", "go.how.step3.title": "Inizia a programmare", "go.how.step3.body": "con accesso affidabile ai modelli open source", "go.privacy.title": "La tua privacy è importante per noi", @@ -330,11 +329,11 @@ export const dict = { "go.faq.a2": "Go include i modelli elencati di seguito, con limiti generosi e accesso affidabile.", "go.faq.q3": "Go è lo stesso di Zen?", "go.faq.a3": - "No. Zen è a consumo, mentre Go inizia a $5 per il primo mese, poi $10/mese, con limiti generosi e un accesso affidabile a una selezione curata di modelli.", + "No. Zen è a consumo, mentre Go costa $10/mese, con limiti generosi e un accesso affidabile a una selezione curata di modelli.", "go.faq.q4": "Quanto costa Go?", "go.faq.a4.p1.beforePricing": "Go costa", - "go.faq.a4.p1.pricingLink": "$5 il primo mese", - "go.faq.a4.p1.afterPricing": "poi $10/mese con limiti generosi.", + "go.faq.a4.p1.pricingLink": "$10/mese", + "go.faq.a4.p1.afterPricing": "con limiti generosi.", "go.faq.a4.p2.beforeAccount": "Puoi gestire il tuo abbonamento nel tuo", "go.faq.a4.p2.accountLink": "account", "go.faq.a4.p3": "Annulla in qualsiasi momento.", diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts index 7521971c2bf3..a94febc6bef4 100644 --- a/packages/console/app/src/i18n/ja.ts +++ b/packages/console/app/src/i18n/ja.ts @@ -255,7 +255,7 @@ export const dict = { "go.title": "OpenCode Go | すべての人のための低価格なコーディングモデル", "go.banner.text": "Ox Alpha Freeは期間限定でGoで利用できます", "go.meta.description": - "Goは最初の月$5、その後$10/月で、主要なコーディングモデルへのゆとりある利用上限と安定したアクセスを提供します。", + "Goは月額$10で、主要なコーディングモデルへのゆとりある利用上限と安定したアクセスを提供します。", "go.hero.title": "すべての人のための低価格なコーディングモデル", "go.hero.body": "Goは、世界中のプログラマーにエージェント型コーディングをもたらします。最も高性能なオープンソースモデルへの十分な制限と安定したアクセスを提供し、コストや可用性を気にすることなく強力なエージェントで構築できます。", @@ -264,9 +264,8 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Goを購読する", "go.cta.price": "$10/月", - "go.cta.promo": "初月 $5", "go.pricing.body": - "どのエージェントでも使えます。最初の月$5、その後$10/月。必要に応じてクレジットを追加。いつでもキャンセルできます。", + "どのエージェントでも使えます。月額$10。必要に応じてクレジットを追加。いつでもキャンセルできます。", "go.graph.free": "無料", "go.graph.freePill": "Big Pickleと無料モデル", "go.graph.go": "Go", @@ -300,20 +299,20 @@ export const dict = { "go.testimonials.frank.quote": "まだNvidiaにいられたらよかったのに。", "go.problem.title": "Goはどのような問題を解決していますか?", "go.problem.body": - "私たちはOpenCodeの体験をできるだけ多くの人に届けることに注力しています。OpenCode Goは低価格のサブスクリプションで、最初の月は$5、その後は$10/月です。ゆとりある上限と、最も高性能なオープンソースモデルへの信頼できるアクセスを提供します。", + "私たちはOpenCodeの体験をできるだけ多くの人に届けることに注力しています。OpenCode Goは月額$10の低価格なサブスクリプションです。ゆとりある上限と、最も高性能なオープンソースモデルへの信頼できるアクセスを提供します。", "go.problem.subtitle": " ", "go.problem.item1": "低価格なサブスクリプション料金", "go.problem.item2": "十分な制限と安定したアクセス", "go.problem.item3": "できるだけ多くのプログラマーのために構築", "go.problem.item4": "エージェント型コーディング向けにテストされた厳選モデルラインナップ", "go.how.title": "Goの仕組み", - "go.how.body": "Goは最初の月$5、その後$10/月で始まります。OpenCodeまたは任意のエージェントで使えます。", + "go.how.body": "Goは月額$10です。OpenCodeまたは任意のエージェントで使えます。", "go.how.step1.title": "アカウントを作成", "go.how.step1.beforeLink": "", "go.how.step1.link": "セットアップ手順はこちら", "go.how.step2.title": "Goを購読する", - "go.how.step2.link": "最初の月$5", - "go.how.step2.afterLink": "その後$10/月、ゆとりある上限付き", + "go.how.step2.link": "月額$10", + "go.how.step2.afterLink": "ゆとりある上限付き", "go.how.step3.title": "コーディングを開始", "go.how.step3.body": "オープンソースモデルへの安定したアクセスで", "go.privacy.title": "あなたのプライバシーは私たちにとって重要です", @@ -330,11 +329,11 @@ export const dict = { "go.faq.a2": "Go には、十分な利用上限と安定したアクセスを備えた、以下のモデルが含まれます。", "go.faq.q3": "GoはZenと同じですか?", "go.faq.a3": - "いいえ。Zenは従量課金制ですが、Goは最初の月$5、その後$10/月で、厳選されたモデルラインナップへのゆとりある上限と安定したアクセスを提供します。", + "いいえ。Zenは従量課金制ですが、Goは月額$10で、厳選されたモデルラインナップへのゆとりある上限と安定したアクセスを提供します。", "go.faq.q4": "Goの料金は?", "go.faq.a4.p1.beforePricing": "Goは", - "go.faq.a4.p1.pricingLink": "最初の月$5", - "go.faq.a4.p1.afterPricing": "その後$10/月、ゆとりある上限付き。", + "go.faq.a4.p1.pricingLink": "月額$10", + "go.faq.a4.p1.afterPricing": "ゆとりある上限付き。", "go.faq.a4.p2.beforeAccount": "管理画面:", "go.faq.a4.p2.accountLink": "アカウント", "go.faq.a4.p3": "いつでもキャンセル可能です。", diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts index 8a05597de5ba..2884c6fbf312 100644 --- a/packages/console/app/src/i18n/ko.ts +++ b/packages/console/app/src/i18n/ko.ts @@ -252,7 +252,7 @@ export const dict = { "go.title": "OpenCode Go | 모두를 위한 저비용 코딩 모델", "go.banner.text": "Ox Alpha Free가 한정된 기간 동안 Go에서 제공됩니다", "go.meta.description": - "Go는 첫 달 $5, 이후 $10/월로 시작하며, 넉넉한 사용 한도와 주요 코딩 모델에 대한 안정적인 액세스를 제공합니다.", + "Go는 월 $10이며, 넉넉한 사용 한도와 주요 코딩 모델에 대한 안정적인 액세스를 제공합니다.", "go.hero.title": "모두를 위한 저비용 코딩 모델", "go.hero.body": "Go는 전 세계 프로그래머들에게 에이전트 코딩을 제공합니다. 가장 유능한 오픈 소스 모델에 대한 넉넉한 한도와 안정적인 액세스를 제공하므로, 비용이나 가용성 걱정 없이 강력한 에이전트로 빌드할 수 있습니다.", @@ -261,9 +261,8 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Go 구독하기", "go.cta.price": "$10/월", - "go.cta.promo": "첫 달 $5", "go.pricing.body": - "어떤 에이전트와도 사용할 수 있습니다. 첫 달 $5, 이후 $10/월. 필요하면 크레딧을 충전하세요. 언제든지 취소할 수 있습니다.", + "어떤 에이전트와도 사용할 수 있습니다. 월 $10. 필요하면 크레딧을 충전하세요. 언제든지 취소할 수 있습니다.", "go.graph.free": "무료", "go.graph.freePill": "Big Pickle 및 무료 모델", "go.graph.go": "Go", @@ -297,20 +296,20 @@ export const dict = { "go.testimonials.frank.quote": "아직 Nvidia에 있었으면 좋았을 텐데요.", "go.problem.title": "Go는 어떤 문제를 해결하나요?", "go.problem.body": - "우리는 가능한 많은 사람들에게 OpenCode 경험을 제공하는 데 집중하고 있습니다. OpenCode Go는 저렴한 구독 서비스로, 첫 달 $5, 이후 $10/월입니다. 넉넉한 한도와 가장 뛰어난 오픈 소스 모델에 대한 안정적인 액세스를 제공합니다.", + "우리는 가능한 많은 사람들에게 OpenCode 경험을 제공하는 데 집중하고 있습니다. OpenCode Go는 월 $10의 저렴한 구독 서비스입니다. 넉넉한 한도와 가장 뛰어난 오픈 소스 모델에 대한 안정적인 액세스를 제공합니다.", "go.problem.subtitle": " ", "go.problem.item1": "저렴한 구독 가격", "go.problem.item2": "넉넉한 한도와 안정적인 액세스", "go.problem.item3": "가능한 한 많은 프로그래머를 위해 제작됨", "go.problem.item4": "에이전트 코딩용으로 테스트된 엄선된 모델 라인업", "go.how.title": "Go 작동 방식", - "go.how.body": "Go는 첫 달 $5, 이후 $10/월로 시작합니다. OpenCode 또는 어떤 에이전트와도 함께 사용할 수 있습니다.", + "go.how.body": "Go는 월 $10입니다. OpenCode 또는 어떤 에이전트와도 함께 사용할 수 있습니다.", "go.how.step1.title": "계정 생성", "go.how.step1.beforeLink": "", "go.how.step1.link": "설정 지침을 따르세요", "go.how.step2.title": "Go 구독", - "go.how.step2.link": "첫 달 $5", - "go.how.step2.afterLink": "이후 $10/월, 넉넉한 한도 포함", + "go.how.step2.link": "월 $10", + "go.how.step2.afterLink": "넉넉한 한도 포함", "go.how.step3.title": "코딩 시작", "go.how.step3.body": "오픈 소스 모델에 대한 안정적인 액세스와 함께", "go.privacy.title": "귀하의 프라이버시는 우리에게 중요합니다", @@ -326,11 +325,11 @@ export const dict = { "go.faq.a2": "Go에는 넉넉한 한도와 안정적인 액세스를 제공하는 아래 모델이 포함됩니다.", "go.faq.q3": "Go는 Zen과 같은가요?", "go.faq.a3": - "아니요. Zen은 종량제인 반면, Go는 첫 달 $5, 이후 $10/월로 시작하며, 엄선된 모델 라인업에 대한 넉넉한 한도와 안정적인 액세스를 제공합니다.", + "아니요. Zen은 종량제인 반면, Go는 월 $10이며, 엄선된 모델 라인업에 대한 넉넉한 한도와 안정적인 액세스를 제공합니다.", "go.faq.q4": "Go 비용은 얼마인가요?", "go.faq.a4.p1.beforePricing": "Go 비용은", - "go.faq.a4.p1.pricingLink": "첫 달 $5", - "go.faq.a4.p1.afterPricing": "이후 $10/월, 넉넉한 한도 포함.", + "go.faq.a4.p1.pricingLink": "월 $10", + "go.faq.a4.p1.afterPricing": "넉넉한 한도 포함.", "go.faq.a4.p2.beforeAccount": "구독 관리는 다음에서 가능합니다:", "go.faq.a4.p2.accountLink": "계정", "go.faq.a4.p3": "언제든지 취소할 수 있습니다.", diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts index 02b15686dea7..bca1396cf449 100644 --- a/packages/console/app/src/i18n/no.ts +++ b/packages/console/app/src/i18n/no.ts @@ -256,7 +256,7 @@ export const dict = { "go.title": "OpenCode Go | Rimelige kodemodeller for alle", "go.banner.text": "Ox Alpha Free er tilgjengelig på Go i en begrenset periode", "go.meta.description": - "Go starter på $5 for den første måneden, deretter $10/måned, med sjenerøse bruksgrenser og pålitelig tilgang til ledende kodemodeller.", + "Go koster $10/måned, med sjenerøse bruksgrenser og pålitelig tilgang til ledende kodemodeller.", "go.hero.title": "Rimelige kodemodeller for alle", "go.hero.body": "Go bringer agent-koding til programmerere over hele verden. Med rause grenser og pålitelig tilgang til de mest kapable åpen kildekode-modellene, kan du bygge med kraftige agenter uten å bekymre deg for kostnader eller tilgjengelighet.", @@ -265,9 +265,8 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Abonner på Go", "go.cta.price": "$10/måned", - "go.cta.promo": "$5 første måned", "go.pricing.body": - "Bruk med hvilken som helst agent. $5 første måned, deretter $10/måned. Fyll på kreditt ved behov. Avslutt når som helst.", + "Bruk med hvilken som helst agent. $10/måned. Fyll på kreditt ved behov. Avslutt når som helst.", "go.graph.free": "Gratis", "go.graph.freePill": "Big Pickle og gratis modeller", "go.graph.go": "Go", @@ -300,7 +299,7 @@ export const dict = { "go.testimonials.frank.quote": "Jeg skulle ønske jeg fortsatt var hos Nvidia.", "go.problem.title": "Hvilket problem løser Go?", "go.problem.body": - "Vi fokuserer på å bringe OpenCode-opplevelsen til så mange som mulig. OpenCode Go er et rimelig abonnement: $5 for den første måneden, deretter $10/måned. Det gir sjenerøse grenser og pålitelig tilgang til de mest kapable åpen kildekode-modellene.", + "Vi fokuserer på å bringe OpenCode-opplevelsen til så mange som mulig. OpenCode Go er et rimelig abonnement til $10/måned. Det gir sjenerøse grenser og pålitelig tilgang til de mest kapable åpen kildekode-modellene.", "go.problem.subtitle": " ", "go.problem.item1": "Rimelig abonnementspris", "go.problem.item2": "Rause grenser og pålitelig tilgang", @@ -308,13 +307,13 @@ export const dict = { "go.problem.item4": "Et kuratert modellutvalg testet for agent-koding", "go.how.title": "Hvordan Go fungerer", "go.how.body": - "Go starter på $5 for den første måneden, deretter $10/måned. Du kan bruke det med OpenCode eller hvilken som helst agent.", + "Go koster $10/måned. Du kan bruke det med OpenCode eller hvilken som helst agent.", "go.how.step1.title": "Opprett en konto", "go.how.step1.beforeLink": "følg", "go.how.step1.link": "oppsettsinstruksjonene", "go.how.step2.title": "Abonner på Go", - "go.how.step2.link": "$5 første måned", - "go.how.step2.afterLink": "deretter $10/måned med sjenerøse grenser", + "go.how.step2.link": "$10/måned", + "go.how.step2.afterLink": "med sjenerøse grenser", "go.how.step3.title": "Begynn å kode", "go.how.step3.body": "med pålitelig tilgang til åpen kildekode-modeller", "go.privacy.title": "Personvernet ditt er viktig for oss", @@ -331,11 +330,11 @@ export const dict = { "go.faq.a2": "Go inkluderer modellene nedenfor, med høye grenser og pålitelig tilgang.", "go.faq.q3": "Er Go det samme som Zen?", "go.faq.a3": - "Nei. Zen er betaling etter bruk, mens Go starter på $5 for den første måneden, deretter $10/måned, med sjenerøse grenser og pålitelig tilgang til et kuratert modellutvalg.", + "Nei. Zen er betaling etter bruk, mens Go koster $10/måned, med sjenerøse grenser og pålitelig tilgang til et kuratert modellutvalg.", "go.faq.q4": "Hva koster Go?", "go.faq.a4.p1.beforePricing": "Go koster", - "go.faq.a4.p1.pricingLink": "$5 første måned", - "go.faq.a4.p1.afterPricing": "deretter $10/måned med sjenerøse grenser.", + "go.faq.a4.p1.pricingLink": "$10/måned", + "go.faq.a4.p1.afterPricing": "med sjenerøse grenser.", "go.faq.a4.p2.beforeAccount": "Du kan administrere abonnementet ditt i din", "go.faq.a4.p2.accountLink": "konto", "go.faq.a4.p3": "Avslutt når som helst.", diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts index 782747742893..36a58f17a7f5 100644 --- a/packages/console/app/src/i18n/pl.ts +++ b/packages/console/app/src/i18n/pl.ts @@ -257,7 +257,7 @@ export const dict = { "go.title": "OpenCode Go | Niskokosztowe modele do kodowania dla każdego", "go.banner.text": "Ox Alpha Free jest dostępny w Go przez ograniczony czas", "go.meta.description": - "Go kosztuje $5 za pierwszy miesiąc, a następnie $10/miesiąc, oferując hojne limity użycia i niezawodny dostęp do wiodących modeli do kodowania.", + "Go kosztuje $10/miesiąc, oferując hojne limity użycia i niezawodny dostęp do wiodących modeli do kodowania.", "go.hero.title": "Niskokosztowe modele do kodowania dla każdego", "go.hero.body": "Go udostępnia programowanie z agentami programistom na całym świecie. Oferuje hojne limity i niezawodny dostęp do najzdolniejszych modeli open source, dzięki czemu możesz budować za pomocą potężnych agentów, nie martwiąc się o koszty czy dostępność.", @@ -266,9 +266,8 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Zasubskrybuj Go", "go.cta.price": "$10/miesiąc", - "go.cta.promo": "$5 pierwszy miesiąc", "go.pricing.body": - "Używaj z dowolnym agentem. $5 za pierwszy miesiąc, potem $10/miesiąc. Doładuj konto w razie potrzeby. Anuluj w dowolnym momencie.", + "Używaj z dowolnym agentem. $10/miesiąc. Doładuj konto w razie potrzeby. Anuluj w dowolnym momencie.", "go.graph.free": "Darmowe", "go.graph.freePill": "Big Pickle i darmowe modele", "go.graph.go": "Go", @@ -301,7 +300,7 @@ export const dict = { "go.testimonials.frank.quote": "Chciałbym wciąż być w Nvidia.", "go.problem.title": "Jaki problem rozwiązuje Go?", "go.problem.body": - "Skupiamy się na udostępnieniu doświadczenia OpenCode jak największej liczbie osób. OpenCode Go to tania subskrypcja: $5 za pierwszy miesiąc, potem $10/miesiąc. Zapewnia hojne limity i niezawodny dostęp do najbardziej wydajnych modeli open source.", + "Skupiamy się na udostępnieniu doświadczenia OpenCode jak największej liczbie osób. OpenCode Go to tania subskrypcja za $10/miesiąc. Zapewnia hojne limity i niezawodny dostęp do najbardziej wydajnych modeli open source.", "go.problem.subtitle": " ", "go.problem.item1": "Niskokosztowa cena subskrypcji", "go.problem.item2": "Hojne limity i niezawodny dostęp", @@ -309,13 +308,13 @@ export const dict = { "go.problem.item4": "Starannie dobrany zestaw modeli przetestowanych pod kątem kodowania z agentami", "go.how.title": "Jak działa Go", "go.how.body": - "Go zaczyna się od $5 za pierwszy miesiąc, potem $10/miesiąc. Możesz go używać z OpenCode lub dowolnym agentem.", + "Go kosztuje $10/miesiąc. Możesz go używać z OpenCode lub dowolnym agentem.", "go.how.step1.title": "Załóż konto", "go.how.step1.beforeLink": "postępuj zgodnie z", "go.how.step1.link": "instrukcją konfiguracji", "go.how.step2.title": "Zasubskrybuj Go", - "go.how.step2.link": "$5 za pierwszy miesiąc", - "go.how.step2.afterLink": "potem $10/miesiąc z hojnymi limitami", + "go.how.step2.link": "$10/miesiąc", + "go.how.step2.afterLink": "z hojnymi limitami", "go.how.step3.title": "Zacznij kodować", "go.how.step3.body": "z niezawodnym dostępem do modeli open source", "go.privacy.title": "Twoja prywatność jest dla nas ważna", @@ -332,11 +331,11 @@ export const dict = { "go.faq.a2": "Go obejmuje poniższe modele z wysokimi limitami i niezawodnym dostępem.", "go.faq.q3": "Czy Go to to samo co Zen?", "go.faq.a3": - "Nie. Zen działa w modelu płatności za użycie, natomiast Go kosztuje $5 za pierwszy miesiąc, a następnie $10/miesiąc, oferując hojne limity i niezawodny dostęp do starannie dobranego zestawu modeli.", + "Nie. Zen działa w modelu płatności za użycie, natomiast Go kosztuje $10/miesiąc, oferując hojne limity i niezawodny dostęp do starannie dobranego zestawu modeli.", "go.faq.q4": "Ile kosztuje Go?", "go.faq.a4.p1.beforePricing": "Go kosztuje", - "go.faq.a4.p1.pricingLink": "$5 za pierwszy miesiąc", - "go.faq.a4.p1.afterPricing": "potem $10/miesiąc z hojnymi limitami.", + "go.faq.a4.p1.pricingLink": "$10/miesiąc", + "go.faq.a4.p1.afterPricing": "z hojnymi limitami.", "go.faq.a4.p2.beforeAccount": "Możesz zarządzać subskrypcją na swoim", "go.faq.a4.p2.accountLink": "koncie", "go.faq.a4.p3": "Anuluj w dowolnym momencie.", diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts index 97029f3f895c..ae3f0cc67a6e 100644 --- a/packages/console/app/src/i18n/ru.ts +++ b/packages/console/app/src/i18n/ru.ts @@ -260,7 +260,7 @@ export const dict = { "go.title": "OpenCode Go | Недорогие модели для кодинга для всех", "go.banner.text": "Ox Alpha Free доступна в Go в течение ограниченного времени", "go.meta.description": - "Go стоит $5 за первый месяц, затем $10/месяц и предлагает щедрые лимиты использования и надежный доступ к ведущим моделям для кодинга.", + "Go стоит $10/месяц и предлагает щедрые лимиты использования и надежный доступ к ведущим моделям для кодинга.", "go.hero.title": "Недорогие модели для кодинга для всех", "go.hero.body": "Go открывает доступ к агентам-программистам разработчикам по всему миру. Предлагая щедрые лимиты и надежный доступ к наиболее способным моделям с открытым исходным кодом, вы можете создавать проекты с мощными агентами, не беспокоясь о затратах или доступности.", @@ -269,9 +269,8 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Подписаться на Go", "go.cta.price": "$10/месяц", - "go.cta.promo": "$5 первый месяц", "go.pricing.body": - "Используйте с любым агентом. $5 за первый месяц, затем $10/месяц. Пополняйте баланс при необходимости. Отменить можно в любое время.", + "Используйте с любым агентом. $10/месяц. Пополняйте баланс при необходимости. Отменить можно в любое время.", "go.graph.free": "Бесплатно", "go.graph.freePill": "Big Pickle и бесплатные модели", "go.graph.go": "Go", @@ -305,7 +304,7 @@ export const dict = { "go.testimonials.frank.quote": "Жаль, что я больше не в Nvidia.", "go.problem.title": "Какую проблему решает Go?", "go.problem.body": - "Мы стремимся сделать OpenCode доступным для как можно большего числа людей. OpenCode Go - это недорогая подписка: $5 за первый месяц, затем $10/месяц. Она предоставляет щедрые лимиты и надежный доступ к самым мощным моделям с открытым исходным кодом.", + "Мы стремимся сделать OpenCode доступным для как можно большего числа людей. OpenCode Go - это недорогая подписка за $10/месяц. Она предоставляет щедрые лимиты и надежный доступ к самым мощным моделям с открытым исходным кодом.", "go.problem.subtitle": " ", "go.problem.item1": "Недорогая подписка", "go.problem.item2": "Щедрые лимиты и надежный доступ", @@ -313,13 +312,13 @@ export const dict = { "go.problem.item4": "Отобранные модели, протестированные для агентного программирования", "go.how.title": "Как работает Go", "go.how.body": - "Go начинается с $5 за первый месяц, затем $10/месяц. Вы можете использовать его с OpenCode или любым агентом.", + "Go стоит $10/месяц. Вы можете использовать его с OpenCode или любым агентом.", "go.how.step1.title": "Создайте аккаунт", "go.how.step1.beforeLink": "следуйте", "go.how.step1.link": "инструкциям по настройке", "go.how.step2.title": "Подпишитесь на Go", - "go.how.step2.link": "$5 за первый месяц", - "go.how.step2.afterLink": "затем $10/месяц с щедрыми лимитами", + "go.how.step2.link": "$10/месяц", + "go.how.step2.afterLink": "с щедрыми лимитами", "go.how.step3.title": "Начните кодить", "go.how.step3.body": "с надежным доступом к open-source моделям", "go.privacy.title": "Ваша приватность важна для нас", @@ -336,11 +335,11 @@ export const dict = { "go.faq.a2": "Go включает перечисленные ниже модели с щедрыми лимитами и надежным доступом.", "go.faq.q3": "Go — это то же самое, что и Zen?", "go.faq.a3": - "Нет. Zen оплачивается по мере использования, а Go стоит $5 за первый месяц, затем $10/месяц и предлагает щедрые лимиты и надежный доступ к отобранным моделям.", + "Нет. Zen оплачивается по мере использования, а Go стоит $10/месяц и предлагает щедрые лимиты и надежный доступ к отобранным моделям.", "go.faq.q4": "Сколько стоит Go?", "go.faq.a4.p1.beforePricing": "Go стоит", - "go.faq.a4.p1.pricingLink": "$5 за первый месяц", - "go.faq.a4.p1.afterPricing": "затем $10/месяц с щедрыми лимитами.", + "go.faq.a4.p1.pricingLink": "$10/месяц", + "go.faq.a4.p1.afterPricing": "с щедрыми лимитами.", "go.faq.a4.p2.beforeAccount": "Вы можете управлять подпиской в своем", "go.faq.a4.p2.accountLink": "аккаунте", "go.faq.a4.p3": "Отмена в любое время.", diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts index 3d1de2536a96..db8efed74eba 100644 --- a/packages/console/app/src/i18n/th.ts +++ b/packages/console/app/src/i18n/th.ts @@ -255,7 +255,7 @@ export const dict = { "go.title": "OpenCode Go | โมเดลเขียนโค้ดราคาประหยัดสำหรับทุกคน", "go.banner.text": "Ox Alpha Free พร้อมใช้งานบน Go ในช่วงเวลาจำกัด", "go.meta.description": - "Go เริ่มต้นที่ $5 สำหรับเดือนแรก จากนั้น $10/เดือน พร้อมขีดจำกัดการใช้งานที่เอื้อเฟื้อและการเข้าถึงโมเดลเขียนโค้ดชั้นนำอย่างเชื่อถือได้", + "Go มีราคา $10/เดือน พร้อมขีดจำกัดการใช้งานที่เอื้อเฟื้อและการเข้าถึงโมเดลเขียนโค้ดชั้นนำอย่างเชื่อถือได้", "go.hero.title": "โมเดลเขียนโค้ดราคาประหยัดสำหรับทุกคน", "go.hero.body": "Go นำการเขียนโค้ดแบบเอเจนต์มาสู่นักเขียนโปรแกรมทั่วโลก เสนอขีดจำกัดที่กว้างขวางและการเข้าถึงโมเดลโอเพนซอร์สที่มีความสามารถสูงสุดได้อย่างน่าเชื่อถือ เพื่อให้คุณสามารถสร้างสรรค์ด้วยเอเจนต์ที่ทรงพลังโดยไม่ต้องกังวลเรื่องค่าใช้จ่ายหรือความพร้อมใช้งาน", @@ -264,8 +264,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "สมัครสมาชิก Go", "go.cta.price": "$10/เดือน", - "go.cta.promo": "$5 เดือนแรก", - "go.pricing.body": "ใช้กับเอเจนต์ใดก็ได้ $5 ในเดือนแรก จากนั้น $10/เดือน เติมเครดิตหากจำเป็น ยกเลิกได้ตลอดเวลา", + "go.pricing.body": "ใช้กับเอเจนต์ใดก็ได้ $10/เดือน เติมเครดิตหากจำเป็น ยกเลิกได้ตลอดเวลา", "go.graph.free": "ฟรี", "go.graph.freePill": "Big Pickle และโมเดลฟรี", "go.graph.go": "Go", @@ -298,20 +297,20 @@ export const dict = { "go.testimonials.frank.quote": "ผมหวังว่าผมจะยังอยู่ที่ Nvidia", "go.problem.title": "Go แก้ปัญหาอะไร?", "go.problem.body": - "เรามุ่งมั่นที่จะนำประสบการณ์ OpenCode ไปสู่ผู้คนให้ได้มากที่สุด OpenCode Go เป็นการสมัครสมาชิกราคาประหยัด: $5 สำหรับเดือนแรก จากนั้น $10/เดือน โดยมอบขีดจำกัดที่เอื้อเฟื้อและการเข้าถึงโมเดลโอเพนซอร์สที่มีความสามารถสูงสุดอย่างเชื่อถือได้", + "เรามุ่งมั่นที่จะนำประสบการณ์ OpenCode ไปสู่ผู้คนให้ได้มากที่สุด OpenCode Go เป็นการสมัครสมาชิกราคาประหยัด $10/เดือน โดยมอบขีดจำกัดที่เอื้อเฟื้อและการเข้าถึงโมเดลโอเพนซอร์สที่มีความสามารถสูงสุดอย่างเชื่อถือได้", "go.problem.subtitle": " ", "go.problem.item1": "ราคาการสมัครสมาชิกที่ต่ำ", "go.problem.item2": "ขีดจำกัดที่กว้างขวางและการเข้าถึงที่เชื่อถือได้", "go.problem.item3": "สร้างขึ้นเพื่อโปรแกรมเมอร์จำนวนมากที่สุดเท่าที่จะเป็นไปได้", "go.problem.item4": "ชุดโมเดลที่คัดสรรและผ่านการทดสอบสำหรับการเขียนโค้ดแบบเอเจนต์", "go.how.title": "Go ทำงานอย่างไร", - "go.how.body": "Go เริ่มต้นที่ $5 สำหรับเดือนแรก จากนั้น $10/เดือน คุณสามารถใช้กับ OpenCode หรือเอเจนต์ใดก็ได้", + "go.how.body": "Go มีราคา $10/เดือน คุณสามารถใช้กับ OpenCode หรือเอเจนต์ใดก็ได้", "go.how.step1.title": "สร้างบัญชี", "go.how.step1.beforeLink": "ทำตาม", "go.how.step1.link": "คำแนะนำการตั้งค่า", "go.how.step2.title": "สมัครสมาชิก Go", - "go.how.step2.link": "$5 เดือนแรก", - "go.how.step2.afterLink": "จากนั้น $10/เดือน พร้อมขีดจำกัดที่เอื้อเฟื้อ", + "go.how.step2.link": "$10/เดือน", + "go.how.step2.afterLink": "พร้อมขีดจำกัดที่เอื้อเฟื้อ", "go.how.step3.title": "เริ่มเขียนโค้ด", "go.how.step3.body": "ด้วยการเข้าถึงโมเดลโอเพนซอร์สที่เชื่อถือได้", "go.privacy.title": "ความเป็นส่วนตัวของคุณสำคัญสำหรับเรา", @@ -328,11 +327,11 @@ export const dict = { "go.faq.a2": "Go รวมโมเดลด้านล่างนี้ พร้อมขีดจำกัดที่มากและการเข้าถึงที่เชื่อถือได้", "go.faq.q3": "Go เหมือนกับ Zen หรือไม่?", "go.faq.a3": - "ไม่ Zen เป็นแบบจ่ายตามการใช้งาน ขณะที่ Go เริ่มต้นที่ $5 สำหรับเดือนแรก จากนั้น $10/เดือน พร้อมขีดจำกัดที่เอื้อเฟื้อและการเข้าถึงชุดโมเดลที่คัดสรรอย่างเชื่อถือได้", + "ไม่ Zen เป็นแบบจ่ายตามการใช้งาน ขณะที่ Go มีราคา $10/เดือน พร้อมขีดจำกัดที่เอื้อเฟื้อและการเข้าถึงชุดโมเดลที่คัดสรรอย่างเชื่อถือได้", "go.faq.q4": "Go ราคาเท่าไหร่?", "go.faq.a4.p1.beforePricing": "Go ราคา", - "go.faq.a4.p1.pricingLink": "$5 เดือนแรก", - "go.faq.a4.p1.afterPricing": "จากนั้น $10/เดือน พร้อมขีดจำกัดที่เอื้อเฟื้อ", + "go.faq.a4.p1.pricingLink": "$10/เดือน", + "go.faq.a4.p1.afterPricing": "พร้อมขีดจำกัดที่เอื้อเฟื้อ", "go.faq.a4.p2.beforeAccount": "คุณสามารถจัดการการสมัครสมาชิกของคุณได้ใน", "go.faq.a4.p2.accountLink": "บัญชีของคุณ", "go.faq.a4.p3": "ยกเลิกได้ตลอดเวลา", diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts index 3942034935e0..b5b8b1fe673b 100644 --- a/packages/console/app/src/i18n/tr.ts +++ b/packages/console/app/src/i18n/tr.ts @@ -258,7 +258,7 @@ export const dict = { "go.title": "OpenCode Go | Herkes için düşük maliyetli kodlama modelleri", "go.banner.text": "Ox Alpha Free sınırlı bir süre için Go'da kullanılabilir", "go.meta.description": - "Go ilk ay $5, sonrasında ayda 10$ fiyatıyla başlar; cömert kullanım limitleri ve önde gelen kodlama modellerine güvenilir erişim sunar.", + "Go ayda 10$'dır; cömert kullanım limitleri ve önde gelen kodlama modellerine güvenilir erişim sunar.", "go.hero.title": "Herkes için düşük maliyetli kodlama modelleri", "go.hero.body": "Go, dünya çapındaki programcılara ajan tabanlı kodlama getiriyor. En yetenekli açık kaynaklı modellere cömert limitler ve güvenilir erişim sunarak, maliyet veya erişilebilirlik konusunda endişelenmeden güçlü ajanlarla geliştirme yapmanızı sağlar.", @@ -267,9 +267,8 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Go'ya abone ol", "go.cta.price": "Ayda 10$", - "go.cta.promo": "İlk ay $5", "go.pricing.body": - "Herhangi bir ajanla kullanın. İlk ay $5, sonrasında ayda 10$. Gerekirse kredi yükleyin. İstediğiniz zaman iptal edin.", + "Herhangi bir ajanla kullanın. Ayda 10$. Gerekirse kredi yükleyin. İstediğiniz zaman iptal edin.", "go.graph.free": "Ücretsiz", "go.graph.freePill": "Big Pickle ve ücretsiz modeller", "go.graph.go": "Go", @@ -303,7 +302,7 @@ export const dict = { "go.testimonials.frank.quote": "Keşke hala Nvidia'da olsaydım.", "go.problem.title": "Go hangi sorunu çözüyor?", "go.problem.body": - "OpenCode deneyimini mümkün olduğunca çok kişiye ulaştırmaya odaklandık. OpenCode Go düşük maliyetli bir aboneliktir: İlk ay $5, sonrasında ayda 10$. Cömert limitler ve en yetenekli açık kaynak modellere güvenilir erişim sağlar.", + "OpenCode deneyimini mümkün olduğunca çok kişiye ulaştırmaya odaklandık. OpenCode Go, ayda 10$ olan düşük maliyetli bir aboneliktir. Cömert limitler ve en yetenekli açık kaynak modellere güvenilir erişim sağlar.", "go.problem.subtitle": " ", "go.problem.item1": "Düşük maliyetli abonelik fiyatlandırması", "go.problem.item2": "Cömert limitler ve güvenilir erişim", @@ -311,13 +310,13 @@ export const dict = { "go.problem.item4": "Ajan tabanlı kodlama için test edilmiş, özenle seçilmiş model seçenekleri", "go.how.title": "Go nasıl çalışır?", "go.how.body": - "Go ilk ay $5, sonrasında ayda 10$ fiyatıyla başlar. OpenCode veya herhangi bir ajanla kullanabilirsiniz.", + "Go ayda 10$'dır. OpenCode veya herhangi bir ajanla kullanabilirsiniz.", "go.how.step1.title": "Bir hesap oluşturun", "go.how.step1.beforeLink": "takip edin", "go.how.step1.link": "kurulum talimatları", "go.how.step2.title": "Go'ya abone olun", - "go.how.step2.link": "İlk ay $5", - "go.how.step2.afterLink": "sonrasında cömert limitlerle ayda 10$", + "go.how.step2.link": "Ayda 10$", + "go.how.step2.afterLink": "cömert limitlerle", "go.how.step3.title": "Kodlamaya başlayın", "go.how.step3.body": "açık kaynaklı modellere güvenilir erişimle", "go.privacy.title": "Gizliliğiniz bizim için önemlidir", @@ -334,11 +333,11 @@ export const dict = { "go.faq.a2": "Go, aşağıda listelenen modelleri cömert limitler ve güvenilir erişimle sunar.", "go.faq.q3": "Go, Zen ile aynı mı?", "go.faq.a3": - "Hayır. Zen kullandıkça öde modelidir; Go ise ilk ay $5, sonrasında ayda 10$ fiyatıyla başlar ve özenle seçilmiş model seçeneklerine cömert limitlerle güvenilir erişim sunar.", + "Hayır. Zen kullandıkça öde modelidir; Go ise ayda 10$'dır ve özenle seçilmiş model seçeneklerine cömert limitlerle güvenilir erişim sunar.", "go.faq.q4": "Go ne kadar?", "go.faq.a4.p1.beforePricing": "Go'nun maliyeti", - "go.faq.a4.p1.pricingLink": "İlk ay $5", - "go.faq.a4.p1.afterPricing": "sonrasında cömert limitlerle ayda 10$.", + "go.faq.a4.p1.pricingLink": "ayda 10$", + "go.faq.a4.p1.afterPricing": "cömert limitlerle.", "go.faq.a4.p2.beforeAccount": "Aboneliğinizi", "go.faq.a4.p2.accountLink": "hesabınızdan", "go.faq.a4.p3": "yönetebilirsiniz. İstediğiniz zaman iptal edin.", diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts index 587b3a133e27..f56cee238c0a 100644 --- a/packages/console/app/src/i18n/uk.ts +++ b/packages/console/app/src/i18n/uk.ts @@ -257,7 +257,7 @@ export const dict = { "go.title": "OpenCode Go | Недорогі моделі кодування для всіх", "go.banner.text": "Ox Alpha Free доступна в Go протягом обмеженого часу", "go.meta.description": - "Go починається від $5 за перший місяць, потім $10/місяць, зі щедрими лімітами використання та надійним доступом до провідних моделей для кодування.", + "Go коштує $10/місяць, зі щедрими лімітами використання та надійним доступом до провідних моделей для кодування.", "go.hero.title": "Недорогі моделі кодування для всіх", "go.hero.body": "Go надає агентне програмування програмістам у всьому світі, пропонуючи щедрі ліміти та надійний доступ до найкращих моделей з відкритим кодом.", @@ -266,9 +266,8 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Підписатися на Go", "go.cta.price": "$10/місяць", - "go.cta.promo": "$5 перший місяць", "go.pricing.body": - "Використовуйте з будь-яким агентом. $5 перший місяць, потім $10/місяць. Поповнюйте за потреби. Скасуйте в будь-який час.", + "Використовуйте з будь-яким агентом. $10/місяць. Поповнюйте за потреби. Скасуйте в будь-який час.", "go.graph.free": "Безкоштовно", "go.graph.freePill": "Big Pickle та безкоштовні моделі", "go.graph.go": "Go", @@ -301,7 +300,7 @@ export const dict = { "go.testimonials.frank.quote": "Хотів би я досі бути в Nvidia.", "go.problem.title": "Яку проблему вирішує Go?", "go.problem.body": - "Ми зосереджені на тому, щоб зробити досвід OpenCode доступним для якомога більшої кількості людей. OpenCode Go — це недорога підписка: $5 за перший місяць, потім $10/місяць. Вона надає щедрі ліміти та надійний доступ до найкращих моделей з відкритим кодом.", + "Ми зосереджені на тому, щоб зробити досвід OpenCode доступним для якомога більшої кількості людей. OpenCode Go — це недорога підписка за $10/місяць. Вона надає щедрі ліміти та надійний доступ до найкращих моделей з відкритим кодом.", "go.problem.subtitle": " ", "go.problem.item1": "Недорога підписка", "go.problem.item2": "Щедрі ліміти та надійний доступ", @@ -309,13 +308,13 @@ export const dict = { "go.problem.item4": "Добірка моделей, протестованих для агентного кодування", "go.how.title": "Як працює Go", "go.how.body": - "Go починається від $5 за перший місяць, потім $10/місяць. Використовуйте з OpenCode або будь-яким агентом.", + "Go коштує $10/місяць. Використовуйте з OpenCode або будь-яким агентом.", "go.how.step1.title": "Створіть обліковий запис", "go.how.step1.beforeLink": "дотримуйтесь", "go.how.step1.link": "інструкцій з налаштування", "go.how.step2.title": "Підпишіться на Go", - "go.how.step2.link": "$5 перший місяць", - "go.how.step2.afterLink": "потім $10/місяць із щедрими лімітами", + "go.how.step2.link": "$10/місяць", + "go.how.step2.afterLink": "із щедрими лімітами", "go.how.step3.title": "Почніть кодувати", "go.how.step3.body": "з надійним доступом до моделей з відкритим кодом", "go.privacy.title": "Ваша конфіденційність важлива для нас", @@ -332,11 +331,11 @@ export const dict = { "go.faq.a2": "Go включає моделі, перелічені нижче, із щедрими лімітами та надійним доступом.", "go.faq.q3": "Чи Go те саме, що Zen?", "go.faq.a3": - "Ні. Zen — це плата за використання, тоді як Go починається від $5 за перший місяць, потім $10/місяць, із щедрими лімітами та надійним доступом до добірки моделей.", + "Ні. Zen — це плата за використання, тоді як Go коштує $10/місяць, із щедрими лімітами та надійним доступом до добірки моделей.", "go.faq.q4": "Скільки коштує Go?", "go.faq.a4.p1.beforePricing": "Go коштує", - "go.faq.a4.p1.pricingLink": "$5 за перший місяць", - "go.faq.a4.p1.afterPricing": "потім $10/місяць із щедрими лімітами.", + "go.faq.a4.p1.pricingLink": "$10/місяць", + "go.faq.a4.p1.afterPricing": "із щедрими лімітами.", "go.faq.a4.p2.beforeAccount": "Ви можете керувати підпискою в", "go.faq.a4.p2.accountLink": "обліковому записі", "go.faq.a4.p3": "Скасуйте в будь-який час.", diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts index 5ffc220cc965..e55cf0715e18 100644 --- a/packages/console/app/src/i18n/zh.ts +++ b/packages/console/app/src/i18n/zh.ts @@ -245,7 +245,7 @@ export const dict = { "go.title": "OpenCode Go | 人人可用的低成本编程模型", "go.banner.text": "Ox Alpha Free 限时加入 Go", - "go.meta.description": "Go 首月 $5,之后 $10/月,提供充裕的使用限额,并可可靠访问领先的编程模型。", + "go.meta.description": "Go 每月 $10,提供充裕的使用限额,并可可靠访问领先的编程模型。", "go.hero.title": "人人可用的低成本编程模型", "go.hero.body": "Go 将代理编程带给全世界的程序员。提供充裕的限额和对最强大的开源模型的可靠访问,让您可以利用强大的代理进行构建,而无需担心成本或可用性。", @@ -254,8 +254,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "订阅 Go", "go.cta.price": "$10/月", - "go.cta.promo": "首月 $5", - "go.pricing.body": "可配合任何代理使用。首月 $5,之后 $10/月。如有需要可充值。随时取消。", + "go.pricing.body": "可配合任何代理使用。每月 $10。如有需要可充值。随时取消。", "go.graph.free": "免费", "go.graph.freePill": "Big Pickle 和免费模型", "go.graph.go": "Go", @@ -288,20 +287,20 @@ export const dict = { "go.testimonials.frank.quote": "我希望我还在 Nvidia。", "go.problem.title": "Go 解决了什么问题?", "go.problem.body": - "我们致力于将 OpenCode 体验带给尽可能多的人。OpenCode Go 是一款低成本订阅服务:首月 $5,之后 $10/月。它提供充裕的额度,并让您能可靠地使用最强大的开源模型。", + "我们致力于将 OpenCode 体验带给尽可能多的人。OpenCode Go 是一款每月 $10 的低成本订阅服务。它提供充裕的额度,并让您能可靠地使用最强大的开源模型。", "go.problem.subtitle": " ", "go.problem.item1": "低成本订阅定价", "go.problem.item2": "充裕的限额和可靠的访问", "go.problem.item3": "为尽可能多的程序员打造", "go.problem.item4": "经过代理编程测试的精选模型阵容", "go.how.title": "Go 如何工作", - "go.how.body": "Go 起价为首月 $5,之后 $10/月。您可以将其与 OpenCode 或任何代理搭配使用。", + "go.how.body": "Go 每月 $10。您可以将其与 OpenCode 或任何代理搭配使用。", "go.how.step1.title": "创建账户", "go.how.step1.beforeLink": "遵循", "go.how.step1.link": "设置说明", "go.how.step2.title": "订阅 Go", - "go.how.step2.link": "首月 $5", - "go.how.step2.afterLink": "之后 $10/月,额度充裕", + "go.how.step2.link": "每月 $10", + "go.how.step2.afterLink": "额度充裕", "go.how.step3.title": "开始编程", "go.how.step3.body": "可靠访问开源模型", "go.privacy.title": "您的隐私对我们很重要", @@ -314,11 +313,11 @@ export const dict = { "go.faq.q2": "Go 包含哪些模型?", "go.faq.a2": "Go 包含下方列出的模型,提供充足的限额和可靠的访问。", "go.faq.q3": "Go 和 Zen 一样吗?", - "go.faq.a3": "不。Zen 是按量付费,而 Go 首月 $5,之后 $10/月,提供充裕的限额,并可可靠访问精选模型阵容。", + "go.faq.a3": "不。Zen 是按量付费,而 Go 每月 $10,提供充裕的限额,并可可靠访问精选模型阵容。", "go.faq.q4": "Go 多少钱?", "go.faq.a4.p1.beforePricing": "Go 费用为", - "go.faq.a4.p1.pricingLink": "首月 $5", - "go.faq.a4.p1.afterPricing": "之后 $10/月,额度充裕。", + "go.faq.a4.p1.pricingLink": "每月 $10", + "go.faq.a4.p1.afterPricing": "额度充裕。", "go.faq.a4.p2.beforeAccount": "您可以在您的", "go.faq.a4.p2.accountLink": "账户", "go.faq.a4.p3": "中管理订阅。随时取消。", diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts index 274542dae31a..0c0247edc865 100644 --- a/packages/console/app/src/i18n/zht.ts +++ b/packages/console/app/src/i18n/zht.ts @@ -245,7 +245,7 @@ export const dict = { "go.title": "OpenCode Go | 低成本全民編碼模型", "go.banner.text": "Ox Alpha Free 限時加入 Go", - "go.meta.description": "Go 首月 $5,之後 $10/月,提供充裕的使用限額,並可穩定存取領先的編碼模型。", + "go.meta.description": "Go 每月 $10,提供充裕的使用限額,並可穩定存取領先的編碼模型。", "go.hero.title": "低成本全民編碼模型", "go.hero.body": "Go 將代理編碼帶給全世界的程式設計師。提供寬裕的限額以及對最強大開源模型的穩定存取,讓你可以使用強大的代理進行構建,而無需擔心成本或可用性。", @@ -254,8 +254,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "訂閱 Go", "go.cta.price": "$10/月", - "go.cta.promo": "首月 $5", - "go.pricing.body": "可搭配任何代理使用。首月 $5,之後 $10/月。如有需要可儲值。隨時取消。", + "go.pricing.body": "可搭配任何代理使用。每月 $10。如有需要可儲值。隨時取消。", "go.graph.free": "免費", "go.graph.freePill": "Big Pickle 與免費模型", "go.graph.go": "Go", @@ -288,20 +287,20 @@ export const dict = { "go.testimonials.frank.quote": "我希望我還在 Nvidia。", "go.problem.title": "Go 正在解決什麼問題?", "go.problem.body": - "我們致力於將 OpenCode 體驗帶給盡可能多的人。OpenCode Go 是一款低成本訂閱服務:首月 $5,之後 $10/月。它提供充裕的額度,並讓您能可靠地使用最強大的開源模型。", + "我們致力於將 OpenCode 體驗帶給盡可能多的人。OpenCode Go 是一款每月 $10 的低成本訂閱服務。它提供充裕的額度,並讓您能可靠地使用最強大的開源模型。", "go.problem.subtitle": " ", "go.problem.item1": "低成本訂閱定價", "go.problem.item2": "寬裕的限額與穩定存取", "go.problem.item3": "專為盡可能多的程式設計師打造", "go.problem.item4": "針對代理編碼測試的精選模型陣容", "go.how.title": "Go 如何運作", - "go.how.body": "Go 起價為首月 $5,之後 $10/月。您可以將其與 OpenCode 或任何代理搭配使用。", + "go.how.body": "Go 每月 $10。您可以將其與 OpenCode 或任何代理搭配使用。", "go.how.step1.title": "建立帳號", "go.how.step1.beforeLink": "遵循", "go.how.step1.link": "設定說明", "go.how.step2.title": "訂閱 Go", - "go.how.step2.link": "首月 $5", - "go.how.step2.afterLink": "之後 $10/月,額度充裕", + "go.how.step2.link": "每月 $10", + "go.how.step2.afterLink": "額度充裕", "go.how.step3.title": "開始編碼", "go.how.step3.body": "穩定存取開源模型", "go.privacy.title": "你的隱私對我們很重要", @@ -314,11 +313,11 @@ export const dict = { "go.faq.q2": "Go 包含哪些模型?", "go.faq.a2": "Go 包含下方列出的模型,提供充足的額度與穩定的存取。", "go.faq.q3": "Go 與 Zen 一樣嗎?", - "go.faq.a3": "不。Zen 是按量付費,而 Go 首月 $5,之後 $10/月,提供充裕的限額,並可穩定存取精選模型陣容。", + "go.faq.a3": "不。Zen 是按量付費,而 Go 每月 $10,提供充裕的限額,並可穩定存取精選模型陣容。", "go.faq.q4": "Go 費用是多少?", "go.faq.a4.p1.beforePricing": "Go 費用為", - "go.faq.a4.p1.pricingLink": "首月 $5", - "go.faq.a4.p1.afterPricing": "之後 $10/月,額度充裕。", + "go.faq.a4.p1.pricingLink": "每月 $10", + "go.faq.a4.p1.afterPricing": "額度充裕。", "go.faq.a4.p2.beforeAccount": "你可以在你的", "go.faq.a4.p2.accountLink": "帳戶", "go.faq.a4.p3": "中管理訂閱。隨時取消。", diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index 025599067395..f5177ce6d0e3 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -375,12 +375,7 @@ export default function Home() { {(part) => { if (part === "{{text}}") return {i18n.t("go.cta.text")} if (part === "{{price}}") { - return ( - - {i18n.t("go.cta.price")} - {i18n.t("go.cta.promo")} - - ) + return {i18n.t("go.cta.price")} } return part }} diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx index b08caa8582ff..0beba1bce1f8 100644 --- a/packages/web/src/content/docs/ar/go.mdx +++ b/packages/web/src/content/docs/ar/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go هو اشتراك منخفض التكلفة — **$5 للشهر الأول**، ثم **$10/شهريًا** — يمنحك وصولًا موثوقًا إلى نماذج البرمجة المفتوحة الشائعة. +OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهريًا** يمنحك وصولًا موثوقًا إلى نماذج البرمجة المفتوحة الشائعة. يعمل Go مثل أي مزود آخر في OpenCode. تشترك في OpenCode Go وتحصل على مفتاح API الخاص بك. وهو **اختياري تمامًا**، ولا تحتاج إلى استخدامه لاستخدام OpenCode. @@ -31,7 +31,7 @@ OpenCode Go هو اشتراك منخفض التكلفة — **$5 للشهر ال 2. ثم عملنا مع عدد قليل من المزودين للتأكد من تقديم هذه النماذج بالشكل الصحيح. 3. وأخيرًا، أجرينا مقارنات معيارية لمزيج النموذج/المزود، وتوصلنا إلى قائمة نشعر بالثقة في التوصية بها. -يمنحك OpenCode Go الوصول إلى هذه النماذج مقابل **$5 للشهر الأول**، ثم **$10/شهريًا**. +يمنحك OpenCode Go الوصول إلى هذه النماذج مقابل **$10/شهريًا**. --- diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index 593c0a9748e7..ffa9ee462489 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go je povoljna pretplata — **$5 za vaš prvi mjesec**, a zatim **$10/mjesečno** — koja vam pruža pouzdan pristup popularnim otvorenim modelima za programiranje. +OpenCode Go je povoljna pretplata od **$10/mjesečno** koja vam pruža pouzdan pristup popularnim otvorenim modelima za programiranje. Go radi kao bilo koji drugi provajder u OpenCode-u. Pretplatite se na OpenCode Go i dobijete svoj API ključ. On je **potpuno opcionalan** i ne morate ga koristiti da @@ -39,7 +39,7 @@ Da bismo to popravili, uradili smo nekoliko stvari: 3. Na kraju smo benchmarkovali kombinaciju modela/provajdera i osmislili listu koju rado preporučujemo. -OpenCode Go vam daje pristup ovim modelima za **$5 za vaš prvi mjesec**, a zatim **$10/mjesečno**. +OpenCode Go vam daje pristup ovim modelima za **$10/mjesečno**. --- diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx index 3a5241aa2fe5..e490fd79c946 100644 --- a/packages/web/src/content/docs/da/go.mdx +++ b/packages/web/src/content/docs/da/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go er et lavprisabonnement — **$5 for din første måned**, derefter **$10/måned** — der giver dig pålidelig adgang til populære åbne kodningsmodeller. +OpenCode Go er et lavprisabonnement til **$10/måned**, der giver dig pålidelig adgang til populære åbne kodningsmodeller. Go fungerer som enhver anden udbyder i OpenCode. Du abonnerer på OpenCode Go og får din API-nøgle. Det er **helt valgfrit**, og du behøver ikke at bruge det for at @@ -39,7 +39,7 @@ For at løse dette, gjorde vi et par ting: 3. Til sidst benchmarkede vi kombinationen af model og udbyder, og kom frem til en liste, som vi trygt kan anbefale. -OpenCode Go giver dig adgang til disse modeller for **$5 for din første måned**, derefter **$10/måned**. +OpenCode Go giver dig adgang til disse modeller for **$10/måned**. --- diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx index fdab5d989149..f8afac5a984a 100644 --- a/packages/web/src/content/docs/de/go.mdx +++ b/packages/web/src/content/docs/de/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go ist ein kostengünstiges Abonnement — **5 $ für deinen ersten Monat**, danach **10 $/Monat** —, das dir zuverlässigen Zugriff auf beliebte offene Coding-Modelle bietet. +OpenCode Go ist ein kostengünstiges Abonnement für **10 $/Monat**, das dir zuverlässigen Zugriff auf beliebte offene Coding-Modelle bietet. Go funktioniert wie jeder andere Provider in OpenCode. Du abonnierst OpenCode Go und erhältst deinen API-Key. Es ist **völlig optional** und du musst es nicht nutzen, um @@ -33,7 +33,7 @@ Um dies zu beheben, haben wir einige Dinge getan: 2. Anschließend haben wir mit einigen Providern zusammengearbeitet, um sicherzustellen, dass diese korrekt bereitgestellt werden. 3. Zuletzt haben wir die Kombination aus Modell und Provider einem Benchmark unterzogen und eine Liste erstellt, die wir mit gutem Gewissen empfehlen können. -OpenCode Go bietet dir Zugriff auf diese Modelle für **5 $ im ersten Monat**, danach **10 $/Monat**. +OpenCode Go bietet dir Zugriff auf diese Modelle für **10 $/Monat**. --- diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index 99de803726f6..ae1ded7f661a 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go es una suscripción de bajo costo — **$5 por tu primer mes**, luego **$10/mes** — que te brinda acceso confiable a modelos abiertos de programación populares. +OpenCode Go es una suscripción de bajo costo de **$10/mes** que te brinda acceso confiable a modelos abiertos de programación populares. Go funciona como cualquier otro proveedor en OpenCode. Te suscribes a OpenCode Go y obtienes tu API key. Es **completamente opcional** y no necesitas usarlo para @@ -39,7 +39,7 @@ Para solucionar esto, hicimos un par de cosas: 3. Finalmente, evaluamos el rendimiento de la combinación del modelo/proveedor y elaboramos una lista que nos sentimos seguros de recomendar. -OpenCode Go te da acceso a estos modelos por **$5 por tu primer mes**, luego **$10/mes**. +OpenCode Go te da acceso a estos modelos por **$10/mes**. --- diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx index 8f2ab085c959..ae22a99b95e1 100644 --- a/packages/web/src/content/docs/fr/go.mdx +++ b/packages/web/src/content/docs/fr/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go est un abonnement à bas coût — **5 $ pour votre premier mois**, puis **10 $/mois** — qui vous donne un accès fiable aux modèles de codage ouverts populaires. +OpenCode Go est un abonnement à bas coût à **10 $/mois** qui vous donne un accès fiable aux modèles de codage ouverts populaires. Go fonctionne comme n'importe quel autre fournisseur dans OpenCode. Vous vous abonnez à OpenCode Go et obtenez votre clé d'API. C'est **totalement facultatif** et vous n'avez pas besoin de l'utiliser pour utiliser OpenCode. @@ -31,7 +31,7 @@ Pour remédier à cela, nous avons fait plusieurs choses : 2. Nous avons ensuite travaillé avec quelques fournisseurs pour nous assurer qu'ils étaient correctement servis. 3. Enfin, nous avons évalué les performances de la combinaison modèle/fournisseur et avons dressé une liste que nous nous sentons à l'aise de recommander. -OpenCode Go vous donne accès à ces modèles pour **5 $ pour votre premier mois**, puis **10 $/mois**. +OpenCode Go vous donne accès à ces modèles pour **10 $/mois**. --- diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index 38faf1c008e3..14b59bda2e78 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -7,7 +7,7 @@ import config from "../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go is a low cost subscription — **$5 for your first month**, then **$10/month** — that gives you reliable access to popular open coding models. +OpenCode Go is a low cost **$10/month subscription** that gives you reliable access to popular open coding models. Go works like any other provider in OpenCode. You subscribe to OpenCode Go and get your API key. It's **completely optional** and you don't need to use it to @@ -39,7 +39,7 @@ To fix this, we did a couple of things: 3. Finally, we benchmarked the combination of the model/provider and came up with a list that we feel good recommending. -OpenCode Go gives you access to these models for **$5 for your first month**, then **$10/month**. +OpenCode Go gives you access to these models for **$10/month**. --- diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx index 7f2ba354dcac..c9cf9a9ce520 100644 --- a/packages/web/src/content/docs/it/go.mdx +++ b/packages/web/src/content/docs/it/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go è un abbonamento a basso costo — **5 $ per il primo mese**, poi **10 $/mese** — che ti offre un accesso affidabile ai popolari modelli di programmazione aperti. +OpenCode Go è un abbonamento a basso costo da **10 $/mese** che ti offre un accesso affidabile ai popolari modelli di programmazione aperti. Go funziona come qualsiasi altro provider in OpenCode. Ti abboni a OpenCode Go e ottieni la tua chiave API. È **completamente facoltativo** e non hai bisogno di usarlo per @@ -37,7 +37,7 @@ Per risolvere questo problema, abbiamo fatto un paio di cose: 3. Infine, abbiamo eseguito dei benchmark sulla combinazione modello/provider e abbiamo stilato un elenco che ci sentiamo di raccomandare. -OpenCode Go ti dà accesso a questi modelli a **5 $ per il primo mese**, poi a **10 $/mese**. +OpenCode Go ti dà accesso a questi modelli a **10 $/mese**. --- diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx index f0253821d5d6..dfdf981e1f39 100644 --- a/packages/web/src/content/docs/ja/go.mdx +++ b/packages/web/src/content/docs/ja/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Goは低価格のサブスクリプションで、**初月は5ドル**、その後は**月額10ドル**で、人気のオープンなコーディングモデルに安定してアクセスできます。 +OpenCode Goは、人気のオープンなコーディングモデルに安定してアクセスできる、低価格の**月額10ドルのサブスクリプション**です。 GoはOpenCodeの他のプロバイダーと同様に機能します。OpenCode GoをサブスクライブしてAPIキーを取得します。これは**完全に任意**であり、OpenCodeを使用するために必須ではありません。 @@ -31,7 +31,7 @@ OpenCodeでうまく動作する一部のモデルとプロバイダーをテス 2. 次に、これらが正しく提供されていることを確認するために、いくつかのプロバイダーと協力しました。 3. 最後に、モデルとプロバイダーの組み合わせをベンチマークし、自信を持ってお勧めできるリストを作成しました。 -OpenCode Goを使用すると、これらのモデルに**初月は5ドル**、その後は**月額10ドル**でアクセスできます。 +OpenCode Goを使用すると、これらのモデルに**月額10ドル**でアクセスできます。 --- diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx index fe1b8c0fd9ad..1ebb317df7ea 100644 --- a/packages/web/src/content/docs/ko/go.mdx +++ b/packages/web/src/content/docs/ko/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go는 인기 있는 오픈 코딩 모델에 안정적으로 액세스할 수 있게 해주는 저비용 구독 서비스입니다. **첫 달은 $5**, 이후에는 **월 $10**입니다. +OpenCode Go는 인기 있는 오픈 코딩 모델에 안정적으로 액세스할 수 있게 해주는 **월 $10**의 저비용 구독 서비스입니다. Go는 OpenCode의 다른 제공자와 똑같이 작동합니다. OpenCode Go를 구독하고 API 키를 발급받으면 됩니다. 이는 **완전히 선택 사항**이며, OpenCode를 사용하기 위해 꼭 필요하지는 않습니다. @@ -31,7 +31,7 @@ OpenCode와 잘 맞는 선별된 모델과 제공자 그룹을 테스트했습 2. 그런 다음 몇몇 제공자와 협력해, 이 모델들이 올바르게 서비스되도록 했습니다. 3. 마지막으로 모델/제공자 조합을 벤치마킹해, 자신 있게 추천할 수 있는 목록을 만들었습니다. -OpenCode Go를 사용하면 **첫 달은 $5**, 이후에는 **월 $10**으로 이러한 모델에 액세스할 수 있습니다. +OpenCode Go를 사용하면 **월 $10**으로 이러한 모델에 액세스할 수 있습니다. --- diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx index f10b239d1dce..d687cb6edeee 100644 --- a/packages/web/src/content/docs/nb/go.mdx +++ b/packages/web/src/content/docs/nb/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go er et lavkostnadsabonnement — **$5 for din første måned**, deretter **$10/måned** — som gir deg pålitelig tilgang til populære åpne kodemodeller. +OpenCode Go er et lavkostnadsabonnement til **$10/måned** som gir deg pålitelig tilgang til populære åpne kodemodeller. Go fungerer som enhver annen leverandør i OpenCode. Du abonnerer på OpenCode Go og får din API-nøkkel. Det er **helt valgfritt**, og du trenger ikke å bruke det for å @@ -39,7 +39,7 @@ For å fikse dette, gjorde vi et par ting: 3. Til slutt utførte vi ytelsestester på kombinasjonen av modell og leverandør, og kom frem til en liste som vi trygt kan anbefale. -OpenCode Go gir deg tilgang til disse modellene for **$5 for din første måned**, deretter **$10/måned**. +OpenCode Go gir deg tilgang til disse modellene for **$10/måned**. --- diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx index ae0e78c3141a..3190e32ee28a 100644 --- a/packages/web/src/content/docs/pl/go.mdx +++ b/packages/web/src/content/docs/pl/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go to niskokosztowa subskrypcja — **5 $ za pierwszy miesiąc**, a następnie **10 $/miesiąc** — która zapewnia niezawodny dostęp do popularnych otwartych modeli do kodowania. +OpenCode Go to niskokosztowa subskrypcja za **10 $/miesiąc**, która zapewnia niezawodny dostęp do popularnych otwartych modeli do kodowania. Go działa jak każdy inny dostawca w OpenCode. Subskrybujesz OpenCode Go i otrzymujesz swój klucz API. Jest to **całkowicie opcjonalne** i nie musisz z tego korzystać, aby @@ -33,7 +33,7 @@ Aby to naprawić, zrobiliśmy kilka rzeczy: 2. Następnie nawiązaliśmy współpracę z kilkoma dostawcami, aby upewnić się, że są one obsługiwane poprawnie. 3. Na koniec przetestowaliśmy kombinację modelu/dostawcy i stworzyliśmy listę, którą możemy z przekonaniem polecić. -OpenCode Go daje Ci dostęp do tych modeli za **5 $ za pierwszy miesiąc**, a następnie **10 $/miesiąc**. +OpenCode Go daje Ci dostęp do tych modeli za **10 $/miesiąc**. --- diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index 2383fe02ccd9..abbd2ec71eac 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -O OpenCode Go é uma assinatura de baixo custo — **US$ 5 no seu primeiro mês**, depois **US$ 10/mês** — que oferece acesso confiável a modelos abertos de programação populares. +O OpenCode Go é uma assinatura de baixo custo de **US$ 10/mês** que oferece acesso confiável a modelos abertos de programação populares. O Go funciona como qualquer outro provedor no OpenCode. Você assina o OpenCode Go e obtém a sua chave de API. Ele é **totalmente opcional** e você não precisa usá-lo para @@ -39,7 +39,7 @@ Para resolver isso, fizemos algumas coisas: 3. Por fim, avaliamos por benchmark a combinação de modelo/provedor e elaboramos uma lista que nos sentimos confortáveis em recomendar. -O OpenCode Go lhe dá acesso a esses modelos por **US$ 5 no seu primeiro mês**, depois **US$ 10/mês**. +O OpenCode Go lhe dá acesso a esses modelos por **US$ 10/mês**. --- diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx index eb70ffa9cffb..67ed83f5d4fe 100644 --- a/packages/web/src/content/docs/ru/go.mdx +++ b/packages/web/src/content/docs/ru/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go — это недорогая подписка (**$5 за первый месяц**, далее **$10 в месяц**), которая предоставляет надежный доступ к популярным открытым моделям для программирования. +OpenCode Go — это недорогая подписка за **$10 в месяц**, которая предоставляет надежный доступ к популярным открытым моделям для программирования. Go работает так же, как и любой другой провайдер в OpenCode. Вы оформляете подписку на OpenCode Go и получаете свой API-ключ. Использование Go **абсолютно необязательно**, и вам не нужно использовать его, чтобы @@ -39,7 +39,7 @@ Go работает так же, как и любой другой провай 3. Наконец, мы провели бенчмаркинг комбинаций модель/провайдер и составили список, который мы смело можем рекомендовать. -OpenCode Go дает вам доступ к этим моделям за **$5 в первый месяц**, далее **$10 в месяц**. +OpenCode Go дает вам доступ к этим моделям за **$10 в месяц**. --- diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx index c615e3c30c43..e620ba09f527 100644 --- a/packages/web/src/content/docs/th/go.mdx +++ b/packages/web/src/content/docs/th/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go คือการสมัครสมาชิกในราคาประหยัด — **$5 สำหรับเดือนแรก** จากนั้น **$10/เดือน** — ซึ่งให้คุณเข้าถึงโมเดลโอเพนซอร์สยอดนิยมสำหรับการเขียนโค้ดได้อย่างเสถียร +OpenCode Go คือการสมัครสมาชิกในราคาประหยัด **$10/เดือน** ซึ่งให้คุณเข้าถึงโมเดลโอเพนซอร์สยอดนิยมสำหรับการเขียนโค้ดได้อย่างเสถียร Go ทำงานเหมือนกับผู้ให้บริการ (provider) รายอื่นๆ ใน OpenCode คุณสามารถสมัครสมาชิก OpenCode Go และรับ API key ของคุณ บริการนี้เป็น**ทางเลือกเพิ่มเติม** และคุณไม่จำเป็นต้องใช้มันเพื่อใช้งาน OpenCode @@ -31,7 +31,7 @@ Go ทำงานเหมือนกับผู้ให้บริกา 2. จากนั้นเราได้ทำงานร่วมกับผู้ให้บริการบางรายเพื่อให้แน่ใจว่าการให้บริการเป็นไปอย่างถูกต้อง 3. สุดท้าย เราได้ทำการวัดประสิทธิภาพ (benchmark) ของการทำงานร่วมกันระหว่างโมเดลและผู้ให้บริการ จนได้รายชื่อที่เรามั่นใจในการแนะนำ -OpenCode Go ให้คุณเข้าถึงโมเดลเหล่านี้ได้ในราคา **$5 สำหรับเดือนแรก** จากนั้น **$10/เดือน** +OpenCode Go ให้คุณเข้าถึงโมเดลเหล่านี้ได้ในราคา **$10/เดือน** --- diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx index 2cfd7c23a95f..7dab1a6ab365 100644 --- a/packages/web/src/content/docs/tr/go.mdx +++ b/packages/web/src/content/docs/tr/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go, popüler açık kodlama modellerine güvenilir erişim sağlayan düşük maliyetli bir aboneliktir — **ilk ayınız için 5$**, sonrasında **aylık 10$**. +OpenCode Go, popüler açık kodlama modellerine güvenilir erişim sağlayan düşük maliyetli **aylık 10$ aboneliğidir**. Go, OpenCode'daki diğer sağlayıcılar gibi çalışır. OpenCode Go'ya abone olur ve API anahtarınızı alırsınız. Bu **tamamen isteğe bağlıdır** ve OpenCode'u kullanmak için bunu kullanmanıza gerek yoktur. @@ -31,7 +31,7 @@ Bunu çözmek için birkaç şey yaptık: 2. Ardından, bunların doğru şekilde sunulduğundan emin olmak için birkaç sağlayıcıyla birlikte çalıştık. 3. Son olarak, model/sağlayıcı kombinasyonunu kıyasladık (benchmark) ve gönül rahatlığıyla önerebileceğimiz bir liste oluşturduk. -OpenCode Go, bu modellere **ilk ayınız için 5$**, ardından **aylık 10$** karşılığında erişmenizi sağlar. +OpenCode Go, bu modellere **aylık 10$** karşılığında erişmenizi sağlar. --- diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx index 68f1760627b6..e61b8ee74d4d 100644 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ b/packages/web/src/content/docs/zh-cn/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go 是一项低成本的订阅服务 —— **首月 5 美元**,之后 **每月 10 美元** —— 让你能够稳定地访问流行的开源编程模型。 +OpenCode Go 是一项**每月 10 美元的低成本订阅服务**,让你能够稳定地访问流行的开源编程模型。 Go 的工作方式与 OpenCode 中的任何其他提供商(provider)一样。订阅 OpenCode Go 后你将获得 API 密钥。它是 **完全可选** 的,并非使用 OpenCode 所必需的条件。 @@ -31,7 +31,7 @@ Go 的工作方式与 OpenCode 中的任何其他提供商(provider)一样 2. 随后我们与一些提供商合作,以确保正确提供这些服务。 3. 最后,我们对模型和提供商的组合进行了基准测试(benchmark),得出了一份我们乐于推荐的列表。 -OpenCode Go 让你能够访问这些模型,**首月只需 5 美元**,之后 **每月 10 美元**。 +OpenCode Go 让你能够以**每月 10 美元**的价格访问这些模型。 --- diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx index 349787ecd3a4..8c76676be585 100644 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ b/packages/web/src/content/docs/zh-tw/go.mdx @@ -7,7 +7,7 @@ import config from "../../../../config.mjs" export const console = config.console export const email = `mailto:${config.email}` -OpenCode Go 是一項低成本的訂閱服務——**首月 $5 美元**,之後**每月 $10 美元**——讓您能穩定使用受歡迎的開源寫程式模型。 +OpenCode Go 是一項**每月 $10 美元的低成本訂閱服務**,讓您能穩定使用受歡迎的開源寫程式模型。 Go 的運作方式與 OpenCode 中的任何其他供應商相同。您訂閱 OpenCode Go 並取得您的 API key。這是**完全可選的**,您不需要使用它也能使用 OpenCode。 @@ -31,7 +31,7 @@ Go 的運作方式與 OpenCode 中的任何其他供應商相同。您訂閱 Ope 2. 接著我們與幾家供應商合作,確保這些模型被正確地提供服務。 3. 最後,我們對模型與供應商的組合進行了基準測試,並整理出一份我們樂於推薦的清單。 -OpenCode Go 讓您可以存取這些模型,**首月只需 $5 美元**,之後**每月 $10 美元**。 +OpenCode Go 讓您可以用**每月 $10 美元**存取這些模型。 --- From 3f2e0e89ecd286483aabad9e52871a08240f13c1 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Mon, 24 Aug 2026 07:18:00 +0000 Subject: [PATCH 005/185] chore: generate --- packages/console/app/src/i18n/ar.ts | 6 ++---- packages/console/app/src/i18n/br.ts | 3 +-- packages/console/app/src/i18n/da.ts | 6 ++---- packages/console/app/src/i18n/de.ts | 6 ++---- packages/console/app/src/i18n/en.ts | 3 +-- packages/console/app/src/i18n/fr.ts | 3 +-- packages/console/app/src/i18n/ko.ts | 3 +-- packages/console/app/src/i18n/no.ts | 6 ++---- packages/console/app/src/i18n/pl.ts | 3 +-- packages/console/app/src/i18n/ru.ts | 3 +-- packages/console/app/src/i18n/tr.ts | 6 ++---- packages/console/app/src/i18n/uk.ts | 6 ++---- 12 files changed, 18 insertions(+), 36 deletions(-) diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts index 130e93c45afd..ab945d533947 100644 --- a/packages/console/app/src/i18n/ar.ts +++ b/packages/console/app/src/i18n/ar.ts @@ -253,8 +253,7 @@ export const dict = { "go.title": "OpenCode Go | نماذج برمجة منخفضة التكلفة للجميع", "go.banner.text": "Ox Alpha Free متاح على Go لفترة محدودة", - "go.meta.description": - "يبلغ سعر Go ‏$10/شهر، مع حدود استخدام سخية ووصول موثوق إلى نماذج البرمجة الرائدة.", + "go.meta.description": "يبلغ سعر Go ‏$10/شهر، مع حدود استخدام سخية ووصول موثوق إلى نماذج البرمجة الرائدة.", "go.hero.title": "نماذج برمجة منخفضة التكلفة للجميع", "go.hero.body": "يجلب Go البرمجة الوكيلة للمبرمجين حول العالم. يوفر حدودًا سخية ووصولًا موثوقًا إلى أقوى النماذج مفتوحة المصدر، حتى تتمكن من البناء باستخدام وكلاء أقوياء دون القلق بشأن التكلفة أو التوفر.", @@ -263,8 +262,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "اشترك في Go", "go.cta.price": "$10/شهر", - "go.pricing.body": - "استخدمه مع أي وكيل. $10/شهر. قم بزيادة الرصيد إذا لزم الأمر. الإلغاء في أي وقت.", + "go.pricing.body": "استخدمه مع أي وكيل. $10/شهر. قم بزيادة الرصيد إذا لزم الأمر. الإلغاء في أي وقت.", "go.graph.free": "مجاني", "go.graph.freePill": "Big Pickle ونماذج مجانية", "go.graph.go": "Go", diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts index ae60ee500c02..eff2099984ca 100644 --- a/packages/console/app/src/i18n/br.ts +++ b/packages/console/app/src/i18n/br.ts @@ -309,8 +309,7 @@ export const dict = { "go.problem.item3": "Feito para o maior número possível de programadores", "go.problem.item4": "Uma seleção de modelos testados para codificação com agentes", "go.how.title": "Como o Go funciona", - "go.how.body": - "O Go custa $10/mês. Você pode usá-lo com o OpenCode ou qualquer agente.", + "go.how.body": "O Go custa $10/mês. Você pode usá-lo com o OpenCode ou qualquer agente.", "go.how.step1.title": "Crie uma conta", "go.how.step1.beforeLink": "siga as", "go.how.step1.link": "instruções de configuração", diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts index 8f17a2beb6cb..3f86c9f4755d 100644 --- a/packages/console/app/src/i18n/da.ts +++ b/packages/console/app/src/i18n/da.ts @@ -265,8 +265,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Abonner på Go", "go.cta.price": "$10/måned", - "go.pricing.body": - "Brug med enhver agent. $10/måned. Tank op med kredit efter behov. Afmeld når som helst.", + "go.pricing.body": "Brug med enhver agent. $10/måned. Tank op med kredit efter behov. Afmeld når som helst.", "go.graph.free": "Gratis", "go.graph.freePill": "Big Pickle og gratis modeller", "go.graph.go": "Go", @@ -306,8 +305,7 @@ export const dict = { "go.problem.item3": "Bygget til så mange programmører som muligt", "go.problem.item4": "Et kurateret modeludvalg testet til agentisk kodning", "go.how.title": "Hvordan Go virker", - "go.how.body": - "Go koster $10/måned. Du kan bruge det med OpenCode eller enhver agent.", + "go.how.body": "Go koster $10/måned. Du kan bruge det med OpenCode eller enhver agent.", "go.how.step1.title": "Opret en konto", "go.how.step1.beforeLink": "følg", "go.how.step1.link": "opsætningsinstruktionerne", diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts index 49d9242dabb1..c06b54569474 100644 --- a/packages/console/app/src/i18n/de.ts +++ b/packages/console/app/src/i18n/de.ts @@ -267,8 +267,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Go abonnieren", "go.cta.price": "$10/Monat", - "go.pricing.body": - "Mit jedem Agenten nutzbar. $10/Monat. Guthaben bei Bedarf aufladen. Jederzeit kündbar.", + "go.pricing.body": "Mit jedem Agenten nutzbar. $10/Monat. Guthaben bei Bedarf aufladen. Jederzeit kündbar.", "go.graph.free": "Kostenlos", "go.graph.freePill": "Big Pickle und kostenlose Modelle", "go.graph.go": "Go", @@ -308,8 +307,7 @@ export const dict = { "go.problem.item3": "Für so viele Programmierer wie möglich gebaut", "go.problem.item4": "Eine kuratierte, für Agentic Coding getestete Modellauswahl", "go.how.title": "Wie Go funktioniert", - "go.how.body": - "Go kostet $10/Monat. Du kannst es mit OpenCode oder jedem Agenten nutzen.", + "go.how.body": "Go kostet $10/Monat. Du kannst es mit OpenCode oder jedem Agenten nutzen.", "go.how.step1.title": "Konto erstellen", "go.how.step1.beforeLink": "folge den", "go.how.step1.link": "Einrichtungsanweisungen", diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index 810b82672510..19a1663ab193 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -254,8 +254,7 @@ export const dict = { "go.title": "OpenCode Go | Low cost coding models for everyone", "go.banner.text": "Ox Alpha Free is available on Go for a limited time", - "go.meta.description": - "Go costs $10/month, with generous usage limits and reliable access to leading coding models.", + "go.meta.description": "Go costs $10/month, with generous usage limits and reliable access to leading coding models.", "go.hero.title": "Low cost coding models for everyone", "go.hero.body": "Go brings agentic coding to programmers around the world. Offering generous limits and reliable access to the most capable open-source models, so you can build with powerful agents without worrying about cost or availability.", diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts index 737583535451..90cac740878f 100644 --- a/packages/console/app/src/i18n/fr.ts +++ b/packages/console/app/src/i18n/fr.ts @@ -310,8 +310,7 @@ export const dict = { "go.problem.item3": "Conçu pour autant de programmeurs que possible", "go.problem.item4": "Une sélection de modèles testés pour le codage agentique", "go.how.title": "Comment fonctionne Go", - "go.how.body": - "Go coûte 10 $/mois. Vous pouvez l'utiliser avec OpenCode ou n'importe quel agent.", + "go.how.body": "Go coûte 10 $/mois. Vous pouvez l'utiliser avec OpenCode ou n'importe quel agent.", "go.how.step1.title": "Créez un compte", "go.how.step1.beforeLink": "suivez les", "go.how.step1.link": "instructions de configuration", diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts index 2884c6fbf312..d5018d071d87 100644 --- a/packages/console/app/src/i18n/ko.ts +++ b/packages/console/app/src/i18n/ko.ts @@ -251,8 +251,7 @@ export const dict = { "go.title": "OpenCode Go | 모두를 위한 저비용 코딩 모델", "go.banner.text": "Ox Alpha Free가 한정된 기간 동안 Go에서 제공됩니다", - "go.meta.description": - "Go는 월 $10이며, 넉넉한 사용 한도와 주요 코딩 모델에 대한 안정적인 액세스를 제공합니다.", + "go.meta.description": "Go는 월 $10이며, 넉넉한 사용 한도와 주요 코딩 모델에 대한 안정적인 액세스를 제공합니다.", "go.hero.title": "모두를 위한 저비용 코딩 모델", "go.hero.body": "Go는 전 세계 프로그래머들에게 에이전트 코딩을 제공합니다. 가장 유능한 오픈 소스 모델에 대한 넉넉한 한도와 안정적인 액세스를 제공하므로, 비용이나 가용성 걱정 없이 강력한 에이전트로 빌드할 수 있습니다.", diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts index bca1396cf449..7137791c653a 100644 --- a/packages/console/app/src/i18n/no.ts +++ b/packages/console/app/src/i18n/no.ts @@ -265,8 +265,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Abonner på Go", "go.cta.price": "$10/måned", - "go.pricing.body": - "Bruk med hvilken som helst agent. $10/måned. Fyll på kreditt ved behov. Avslutt når som helst.", + "go.pricing.body": "Bruk med hvilken som helst agent. $10/måned. Fyll på kreditt ved behov. Avslutt når som helst.", "go.graph.free": "Gratis", "go.graph.freePill": "Big Pickle og gratis modeller", "go.graph.go": "Go", @@ -306,8 +305,7 @@ export const dict = { "go.problem.item3": "Bygget for så mange programmerere som mulig", "go.problem.item4": "Et kuratert modellutvalg testet for agent-koding", "go.how.title": "Hvordan Go fungerer", - "go.how.body": - "Go koster $10/måned. Du kan bruke det med OpenCode eller hvilken som helst agent.", + "go.how.body": "Go koster $10/måned. Du kan bruke det med OpenCode eller hvilken som helst agent.", "go.how.step1.title": "Opprett en konto", "go.how.step1.beforeLink": "følg", "go.how.step1.link": "oppsettsinstruksjonene", diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts index 36a58f17a7f5..47405096238c 100644 --- a/packages/console/app/src/i18n/pl.ts +++ b/packages/console/app/src/i18n/pl.ts @@ -307,8 +307,7 @@ export const dict = { "go.problem.item3": "Stworzony dla jak największej liczby programistów", "go.problem.item4": "Starannie dobrany zestaw modeli przetestowanych pod kątem kodowania z agentami", "go.how.title": "Jak działa Go", - "go.how.body": - "Go kosztuje $10/miesiąc. Możesz go używać z OpenCode lub dowolnym agentem.", + "go.how.body": "Go kosztuje $10/miesiąc. Możesz go używać z OpenCode lub dowolnym agentem.", "go.how.step1.title": "Załóż konto", "go.how.step1.beforeLink": "postępuj zgodnie z", "go.how.step1.link": "instrukcją konfiguracji", diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts index ae3f0cc67a6e..30678c52b7b2 100644 --- a/packages/console/app/src/i18n/ru.ts +++ b/packages/console/app/src/i18n/ru.ts @@ -311,8 +311,7 @@ export const dict = { "go.problem.item3": "Создан для максимального числа программистов", "go.problem.item4": "Отобранные модели, протестированные для агентного программирования", "go.how.title": "Как работает Go", - "go.how.body": - "Go стоит $10/месяц. Вы можете использовать его с OpenCode или любым агентом.", + "go.how.body": "Go стоит $10/месяц. Вы можете использовать его с OpenCode или любым агентом.", "go.how.step1.title": "Создайте аккаунт", "go.how.step1.beforeLink": "следуйте", "go.how.step1.link": "инструкциям по настройке", diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts index b5b8b1fe673b..dddeb94fb96a 100644 --- a/packages/console/app/src/i18n/tr.ts +++ b/packages/console/app/src/i18n/tr.ts @@ -267,8 +267,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Go'ya abone ol", "go.cta.price": "Ayda 10$", - "go.pricing.body": - "Herhangi bir ajanla kullanın. Ayda 10$. Gerekirse kredi yükleyin. İstediğiniz zaman iptal edin.", + "go.pricing.body": "Herhangi bir ajanla kullanın. Ayda 10$. Gerekirse kredi yükleyin. İstediğiniz zaman iptal edin.", "go.graph.free": "Ücretsiz", "go.graph.freePill": "Big Pickle ve ücretsiz modeller", "go.graph.go": "Go", @@ -309,8 +308,7 @@ export const dict = { "go.problem.item3": "Mümkün olduğunca çok programcı için geliştirildi", "go.problem.item4": "Ajan tabanlı kodlama için test edilmiş, özenle seçilmiş model seçenekleri", "go.how.title": "Go nasıl çalışır?", - "go.how.body": - "Go ayda 10$'dır. OpenCode veya herhangi bir ajanla kullanabilirsiniz.", + "go.how.body": "Go ayda 10$'dır. OpenCode veya herhangi bir ajanla kullanabilirsiniz.", "go.how.step1.title": "Bir hesap oluşturun", "go.how.step1.beforeLink": "takip edin", "go.how.step1.link": "kurulum talimatları", diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts index f56cee238c0a..958cf9fcb43d 100644 --- a/packages/console/app/src/i18n/uk.ts +++ b/packages/console/app/src/i18n/uk.ts @@ -266,8 +266,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Підписатися на Go", "go.cta.price": "$10/місяць", - "go.pricing.body": - "Використовуйте з будь-яким агентом. $10/місяць. Поповнюйте за потреби. Скасуйте в будь-який час.", + "go.pricing.body": "Використовуйте з будь-яким агентом. $10/місяць. Поповнюйте за потреби. Скасуйте в будь-який час.", "go.graph.free": "Безкоштовно", "go.graph.freePill": "Big Pickle та безкоштовні моделі", "go.graph.go": "Go", @@ -307,8 +306,7 @@ export const dict = { "go.problem.item3": "Створено для якомога більшої кількості програмістів", "go.problem.item4": "Добірка моделей, протестованих для агентного кодування", "go.how.title": "Як працює Go", - "go.how.body": - "Go коштує $10/місяць. Використовуйте з OpenCode або будь-яким агентом.", + "go.how.body": "Go коштує $10/місяць. Використовуйте з OpenCode або будь-яким агентом.", "go.how.step1.title": "Створіть обліковий запис", "go.how.step1.beforeLink": "дотримуйтесь", "go.how.step1.link": "інструкцій з налаштування", From 4371298fff79bf72c6016ddf05d277f11973913b Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 24 Aug 2026 03:54:38 -0400 Subject: [PATCH 006/185] fix(console): discontinue first-month Go discount (#44633) --- packages/console/app/src/i18n/ar.ts | 4 ++-- packages/console/app/src/i18n/br.ts | 4 ++-- packages/console/app/src/i18n/da.ts | 4 ++-- packages/console/app/src/i18n/de.ts | 4 ++-- packages/console/app/src/i18n/en.ts | 4 ++-- packages/console/app/src/i18n/es.ts | 4 ++-- packages/console/app/src/i18n/fr.ts | 4 ++-- packages/console/app/src/i18n/it.ts | 4 ++-- packages/console/app/src/i18n/ja.ts | 4 ++-- packages/console/app/src/i18n/ko.ts | 4 ++-- packages/console/app/src/i18n/no.ts | 4 ++-- packages/console/app/src/i18n/pl.ts | 4 ++-- packages/console/app/src/i18n/ru.ts | 4 ++-- packages/console/app/src/i18n/th.ts | 4 ++-- packages/console/app/src/i18n/tr.ts | 4 ++-- packages/console/app/src/i18n/uk.ts | 4 ++-- packages/console/app/src/i18n/zh.ts | 4 ++-- packages/console/app/src/i18n/zht.ts | 4 ++-- packages/console/core/src/billing.ts | 1 - packages/opencode/src/session/retry.ts | 2 +- packages/opencode/test/session/retry.test.ts | 2 +- packages/ui/src/i18n/am.ts | 2 +- packages/ui/src/i18n/ar.ts | 2 +- packages/ui/src/i18n/az.ts | 2 +- packages/ui/src/i18n/bg.ts | 2 +- packages/ui/src/i18n/bn.ts | 2 +- packages/ui/src/i18n/br.ts | 2 +- packages/ui/src/i18n/bs.ts | 2 +- packages/ui/src/i18n/ca.ts | 2 +- packages/ui/src/i18n/cs.ts | 2 +- packages/ui/src/i18n/da.ts | 2 +- packages/ui/src/i18n/de.ts | 2 +- packages/ui/src/i18n/dv.ts | 2 +- packages/ui/src/i18n/dz.ts | 2 +- packages/ui/src/i18n/el.ts | 2 +- packages/ui/src/i18n/en.ts | 2 +- packages/ui/src/i18n/es.ts | 2 +- packages/ui/src/i18n/et.ts | 2 +- packages/ui/src/i18n/fa.ts | 2 +- packages/ui/src/i18n/fi.ts | 2 +- packages/ui/src/i18n/fo.ts | 2 +- packages/ui/src/i18n/fr.ts | 2 +- packages/ui/src/i18n/hi.ts | 2 +- packages/ui/src/i18n/hr.ts | 2 +- packages/ui/src/i18n/hu.ts | 2 +- packages/ui/src/i18n/hy.ts | 2 +- packages/ui/src/i18n/id.ts | 2 +- packages/ui/src/i18n/is.ts | 2 +- packages/ui/src/i18n/it.ts | 2 +- packages/ui/src/i18n/ja.ts | 2 +- packages/ui/src/i18n/ka.ts | 2 +- packages/ui/src/i18n/km.ts | 2 +- packages/ui/src/i18n/ko.ts | 2 +- packages/ui/src/i18n/lo.ts | 2 +- packages/ui/src/i18n/lt.ts | 2 +- packages/ui/src/i18n/lv.ts | 2 +- packages/ui/src/i18n/mk.ts | 2 +- packages/ui/src/i18n/mn.ts | 2 +- packages/ui/src/i18n/ms.ts | 2 +- packages/ui/src/i18n/my.ts | 2 +- packages/ui/src/i18n/ne.ts | 2 +- packages/ui/src/i18n/nl.ts | 2 +- packages/ui/src/i18n/no.ts | 2 +- packages/ui/src/i18n/pa.ts | 2 +- packages/ui/src/i18n/pl.ts | 2 +- packages/ui/src/i18n/ro.ts | 2 +- packages/ui/src/i18n/ru.ts | 2 +- packages/ui/src/i18n/si.ts | 2 +- packages/ui/src/i18n/sk.ts | 2 +- packages/ui/src/i18n/sl.ts | 2 +- packages/ui/src/i18n/sq.ts | 2 +- packages/ui/src/i18n/sr.ts | 2 +- packages/ui/src/i18n/sv.ts | 2 +- packages/ui/src/i18n/tg.ts | 2 +- packages/ui/src/i18n/th.ts | 2 +- packages/ui/src/i18n/tk.ts | 2 +- packages/ui/src/i18n/tr.ts | 2 +- packages/ui/src/i18n/uk.ts | 2 +- packages/ui/src/i18n/ur.ts | 2 +- packages/ui/src/i18n/uz.ts | 2 +- packages/ui/src/i18n/vi.ts | 2 +- packages/ui/src/i18n/zh.ts | 2 +- packages/ui/src/i18n/zht.ts | 2 +- 83 files changed, 100 insertions(+), 101 deletions(-) diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts index ab945d533947..e82395918bc0 100644 --- a/packages/console/app/src/i18n/ar.ts +++ b/packages/console/app/src/i18n/ar.ts @@ -677,8 +677,8 @@ export const dict = { "workspace.lite.other.message": "عضو آخر في مساحة العمل هذه مشترك بالفعل في OpenCode Go. يمكن لعضو واحد فقط لكل مساحة عمل الاشتراك.", "workspace.lite.promo.description": - "يبدأ OpenCode Go بسعر {{price}}، ثم $10/شهر، ويوفر وصولا موثوقا لنماذج البرمجة المفتوحة الشهيرة مع حدود استخدام سخية.", - "workspace.lite.promo.price": "$5 للشهر الأول", + "يبلغ سعر OpenCode Go {{price}}، ويوفر وصولا موثوقا لنماذج البرمجة المفتوحة الشهيرة مع حدود استخدام سخية.", + "workspace.lite.promo.price": "$10/شهر", "workspace.lite.promo.modelsTitle": "ما يتضمنه", "workspace.lite.promo.footer": "صُممت الخطة بشكل أساسي للمستخدمين الدوليين، وتوفر وصولًا عالميًا مستقرًا. قد تتغير الأسعار وحدود الاستخدام بينما نتعلم من الاستخدام المبكر والملاحظات.", diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts index eff2099984ca..49c0f2aa31d5 100644 --- a/packages/console/app/src/i18n/br.ts +++ b/packages/console/app/src/i18n/br.ts @@ -689,8 +689,8 @@ export const dict = { "workspace.lite.other.message": "Outro membro neste workspace já assina o OpenCode Go. Apenas um membro por workspace pode assinar.", "workspace.lite.promo.description": - "O OpenCode Go começa em {{price}}, depois $10/mês, e oferece acesso confiável a modelos de codificação abertos populares com limites de uso generosos.", - "workspace.lite.promo.price": "$5 no primeiro mês", + "O OpenCode Go custa {{price}} e oferece acesso confiável a modelos de codificação abertos populares com limites de uso generosos.", + "workspace.lite.promo.price": "$10/mês", "workspace.lite.promo.modelsTitle": "O que está incluído", "workspace.lite.promo.footer": "O plano foi desenvolvido principalmente para usuários internacionais e oferece acesso global estável. Os preços e limites de uso podem mudar à medida que aprendemos com o uso inicial e o feedback recebido.", diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts index 3f86c9f4755d..6e2652ef1530 100644 --- a/packages/console/app/src/i18n/da.ts +++ b/packages/console/app/src/i18n/da.ts @@ -685,8 +685,8 @@ export const dict = { "workspace.lite.other.message": "Et andet medlem i dette workspace abonnerer allerede på OpenCode Go. Kun ét medlem pr. workspace kan abonnere.", "workspace.lite.promo.description": - "OpenCode Go starter ved {{price}}, derefter $10/måned, og giver pålidelig adgang til populære åbne kodningsmodeller med generøse brugsgrænser.", - "workspace.lite.promo.price": "$5 for den første måned", + "OpenCode Go koster {{price}} og giver pålidelig adgang til populære åbne kodningsmodeller med generøse brugsgrænser.", + "workspace.lite.promo.price": "$10/måned", "workspace.lite.promo.modelsTitle": "Hvad er inkluderet", "workspace.lite.promo.footer": "Planen er primært udviklet til internationale brugere og giver stabil adgang i hele verden. Priser og forbrugsgrænser kan ændre sig, efterhånden som vi lærer af de første brugserfaringer og tilbagemeldinger.", diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts index c06b54569474..20ae2743931b 100644 --- a/packages/console/app/src/i18n/de.ts +++ b/packages/console/app/src/i18n/de.ts @@ -687,8 +687,8 @@ export const dict = { "workspace.lite.other.message": "Ein anderes Mitglied in diesem Workspace hat OpenCode Go bereits abonniert. Nur ein Mitglied pro Workspace kann abonnieren.", "workspace.lite.promo.description": - "OpenCode Go startet bei {{price}}, danach $10/Monat, und bietet zuverlässigen Zugang zu beliebten offenen Coding-Modellen mit großzügigen Nutzungslimits.", - "workspace.lite.promo.price": "$5 im ersten Monat", + "OpenCode Go kostet {{price}} und bietet zuverlässigen Zugang zu beliebten offenen Coding-Modellen mit großzügigen Nutzungslimits.", + "workspace.lite.promo.price": "$10/Monat", "workspace.lite.promo.modelsTitle": "Was enthalten ist", "workspace.lite.promo.footer": "Der Plan richtet sich in erster Linie an internationale Nutzer und bietet stabilen weltweiten Zugriff. Preise und Nutzungslimits können sich ändern, wenn wir Erkenntnisse aus der ersten Nutzung und dem Feedback gewinnen.", diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index 19a1663ab193..b31f79a63e57 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -685,8 +685,8 @@ export const dict = { "workspace.lite.other.message": "Another member in this workspace is already subscribed to OpenCode Go. Only one member per workspace can subscribe.", "workspace.lite.promo.description": - "OpenCode Go starts at {{price}}, then $10/month, and provides reliable access to popular open coding models with generous usage limits.", - "workspace.lite.promo.price": "$5 for your first month", + "OpenCode Go costs {{price}} and provides reliable access to popular open coding models with generous usage limits.", + "workspace.lite.promo.price": "$10/month", "workspace.lite.promo.modelsTitle": "What's Included", "workspace.lite.promo.footer": "The plan is designed primarily for international users and provides stable global access. Pricing and usage limits may change as we learn from early usage and feedback.", diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts index 3e796ecde881..b76e0a5c63e0 100644 --- a/packages/console/app/src/i18n/es.ts +++ b/packages/console/app/src/i18n/es.ts @@ -690,8 +690,8 @@ export const dict = { "workspace.lite.other.message": "Otro miembro de este espacio de trabajo ya está suscrito a OpenCode Go. Solo un miembro por espacio de trabajo puede suscribirse.", "workspace.lite.promo.description": - "OpenCode Go comienza en {{price}}, luego $10/mes, y ofrece acceso confiable a modelos de codificación abiertos populares con límites de uso generosos.", - "workspace.lite.promo.price": "$5 el primer mes", + "OpenCode Go cuesta {{price}} y ofrece acceso confiable a modelos de codificación abiertos populares con límites de uso generosos.", + "workspace.lite.promo.price": "$10/mes", "workspace.lite.promo.modelsTitle": "Qué incluye", "workspace.lite.promo.footer": "El plan está diseñado principalmente para usuarios internacionales y ofrece un acceso global estable. Los precios y los límites de uso pueden cambiar a medida que aprendemos del uso inicial y de los comentarios recibidos.", diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts index 90cac740878f..171c481d7982 100644 --- a/packages/console/app/src/i18n/fr.ts +++ b/packages/console/app/src/i18n/fr.ts @@ -696,8 +696,8 @@ export const dict = { "workspace.lite.other.message": "Un autre membre de cet espace de travail est déjà abonné à OpenCode Go. Un seul membre par espace de travail peut s'abonner.", "workspace.lite.promo.description": - "OpenCode Go commence à {{price}}, puis 10 $/mois, et offre un accès fiable aux modèles de code ouverts populaires avec des limites d'utilisation généreuses.", - "workspace.lite.promo.price": "$5 le premier mois", + "OpenCode Go coûte {{price}} et offre un accès fiable aux modèles de code ouverts populaires avec des limites d'utilisation généreuses.", + "workspace.lite.promo.price": "10 $/mois", "workspace.lite.promo.modelsTitle": "Ce qui est inclus", "workspace.lite.promo.footer": "Ce forfait est principalement conçu pour les utilisateurs internationaux et offre un accès mondial stable. Les tarifs et les limites d'utilisation peuvent évoluer à mesure que nous tirons les enseignements des premières utilisations et des retours reçus.", diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts index af6b35f46fda..7906a70dcc65 100644 --- a/packages/console/app/src/i18n/it.ts +++ b/packages/console/app/src/i18n/it.ts @@ -688,8 +688,8 @@ export const dict = { "workspace.lite.other.message": "Un altro membro in questo workspace è già abbonato a OpenCode Go. Solo un membro per workspace può abbonarsi.", "workspace.lite.promo.description": - "OpenCode Go parte da {{price}}, poi $10/mese, e offre un accesso affidabile a popolari modelli di coding aperti con generosi limiti di utilizzo.", - "workspace.lite.promo.price": "$5 il primo mese", + "OpenCode Go costa {{price}} e offre un accesso affidabile a popolari modelli di coding aperti con generosi limiti di utilizzo.", + "workspace.lite.promo.price": "$10/mese", "workspace.lite.promo.modelsTitle": "Cosa è incluso", "workspace.lite.promo.footer": "Il piano è pensato principalmente per gli utenti internazionali e offre un accesso globale stabile. I prezzi e i limiti di utilizzo potrebbero cambiare in base a quanto apprenderemo dall'utilizzo iniziale e dai feedback.", diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts index a94febc6bef4..ffc97c616cf2 100644 --- a/packages/console/app/src/i18n/ja.ts +++ b/packages/console/app/src/i18n/ja.ts @@ -686,8 +686,8 @@ export const dict = { "workspace.lite.other.message": "このワークスペースの別のメンバーが既に OpenCode Go を購読しています。ワークスペースにつき1人のメンバーのみが購読できます。", "workspace.lite.promo.description": - "OpenCode Goは{{price}}で始まり、その後は$10/月で、人気の高いオープンコーディングモデルへの安定したアクセスと余裕のある利用枠を提供します。", - "workspace.lite.promo.price": "初月$5", + "OpenCode Goは{{price}}で、人気の高いオープンコーディングモデルへの安定したアクセスと余裕のある利用枠を提供します。", + "workspace.lite.promo.price": "$10/月", "workspace.lite.promo.modelsTitle": "含まれるもの", "workspace.lite.promo.footer": "このプランは主に海外のユーザー向けに設計されており、世界中から安定してご利用いただけます。料金と利用上限は、初期の利用状況やフィードバックを踏まえて変更される場合があります。", diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts index d5018d071d87..63468b24a0d0 100644 --- a/packages/console/app/src/i18n/ko.ts +++ b/packages/console/app/src/i18n/ko.ts @@ -677,8 +677,8 @@ export const dict = { "workspace.lite.other.message": "이 워크스페이스의 다른 멤버가 이미 OpenCode Go를 구독 중입니다. 워크스페이스당 한 명의 멤버만 구독할 수 있습니다.", "workspace.lite.promo.description": - "OpenCode Go는 {{price}}부터 시작하며, 이후 $10/월로 넉넉한 사용량 한도와 함께 인기 있는 오픈 코딩 모델에 대한 안정적인 액세스를 제공합니다.", - "workspace.lite.promo.price": "첫 달 $5", + "OpenCode Go는 {{price}}로 넉넉한 사용량 한도와 함께 인기 있는 오픈 코딩 모델에 대한 안정적인 액세스를 제공합니다.", + "workspace.lite.promo.price": "$10/월", "workspace.lite.promo.modelsTitle": "포함 내역", "workspace.lite.promo.footer": "이 플랜은 주로 해외 사용자를 위해 설계되었으며, 전 세계에서 안정적으로 이용할 수 있습니다. 초기 이용 현황과 피드백을 반영하는 과정에서 가격과 사용 한도가 변경될 수 있습니다.", diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts index 7137791c653a..48573864ad55 100644 --- a/packages/console/app/src/i18n/no.ts +++ b/packages/console/app/src/i18n/no.ts @@ -686,8 +686,8 @@ export const dict = { "workspace.lite.other.message": "Et annet medlem i dette arbeidsområdet abonnerer allerede på OpenCode Go. Kun ett medlem per arbeidsområde kan abonnere.", "workspace.lite.promo.description": - "OpenCode Go starter på {{price}}, deretter $10/måned, og gir pålitelig tilgang til populære åpne kodingsmodeller med sjenerøse bruksgrenser.", - "workspace.lite.promo.price": "$5 for den første måneden", + "OpenCode Go koster {{price}} og gir pålitelig tilgang til populære åpne kodingsmodeller med sjenerøse bruksgrenser.", + "workspace.lite.promo.price": "$10/måned", "workspace.lite.promo.modelsTitle": "Hva som er inkludert", "workspace.lite.promo.footer": "Planen er primært utviklet for internasjonale brukere og gir stabil global tilgang. Priser og bruksgrenser kan endres etter hvert som vi lærer av tidlig bruk og tilbakemeldinger.", diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts index 47405096238c..0e27dad306b5 100644 --- a/packages/console/app/src/i18n/pl.ts +++ b/packages/console/app/src/i18n/pl.ts @@ -687,8 +687,8 @@ export const dict = { "workspace.lite.other.message": "Inny członek tego obszaru roboczego już subskrybuje OpenCode Go. Tylko jeden członek na obszar roboczy może subskrybować.", "workspace.lite.promo.description": - "OpenCode Go zaczyna się od {{price}}, potem $10/miesiąc, i zapewnia niezawodny dostęp do popularnych otwartych modeli kodowania z hojnymi limitami użycia.", - "workspace.lite.promo.price": "$5 za pierwszy miesiąc", + "OpenCode Go kosztuje {{price}} i zapewnia niezawodny dostęp do popularnych otwartych modeli kodowania z hojnymi limitami użycia.", + "workspace.lite.promo.price": "$10/miesiąc", "workspace.lite.promo.modelsTitle": "Co zawiera", "workspace.lite.promo.footer": "Plan został opracowany przede wszystkim z myślą o użytkownikach z całego świata i zapewnia stabilny globalny dostęp. Ceny i limity użycia mogą ulec zmianie w miarę zdobywania doświadczeń na podstawie początkowego korzystania z usługi i otrzymywanych opinii.", diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts index 30678c52b7b2..e3ff8c3ff0ac 100644 --- a/packages/console/app/src/i18n/ru.ts +++ b/packages/console/app/src/i18n/ru.ts @@ -694,8 +694,8 @@ export const dict = { "workspace.lite.other.message": "Другой участник в этом рабочем пространстве уже подписан на OpenCode Go. Только один участник в рабочем пространстве может оформить подписку.", "workspace.lite.promo.description": - "OpenCode Go начинается с {{price}}, затем $10/месяц и предоставляет надежный доступ к популярным открытым моделям кодирования с щедрыми лимитами использования.", - "workspace.lite.promo.price": "$5 за первый месяц", + "OpenCode Go стоит {{price}} и предоставляет надежный доступ к популярным открытым моделям кодирования с щедрыми лимитами использования.", + "workspace.lite.promo.price": "$10/месяц", "workspace.lite.promo.modelsTitle": "Что включено", "workspace.lite.promo.footer": "План предназначен в первую очередь для пользователей по всему миру и обеспечивает стабильный глобальный доступ. Цены и лимиты использования могут меняться по мере изучения первых результатов использования и отзывов.", diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts index db8efed74eba..f1767d54090a 100644 --- a/packages/console/app/src/i18n/th.ts +++ b/packages/console/app/src/i18n/th.ts @@ -683,8 +683,8 @@ export const dict = { "workspace.lite.other.message": "สมาชิกคนอื่นใน Workspace นี้ได้สมัคร OpenCode Go แล้ว สามารถสมัครได้เพียงหนึ่งคนต่อหนึ่ง Workspace เท่านั้น", "workspace.lite.promo.description": - "OpenCode Go เริ่มต้นที่ {{price}} จากนั้น $10/เดือน และมอบการเข้าถึงโมเดลการเขียนโค้ดแบบเปิดยอดนิยมอย่างเสถียรพร้อมขีดจำกัดการใช้งานที่ให้มาอย่างเหลือเฟือ", - "workspace.lite.promo.price": "$5 สำหรับเดือนแรก", + "OpenCode Go ราคา {{price}} และมอบการเข้าถึงโมเดลการเขียนโค้ดแบบเปิดยอดนิยมอย่างเสถียรพร้อมขีดจำกัดการใช้งานที่ให้มาอย่างเหลือเฟือ", + "workspace.lite.promo.price": "$10/เดือน", "workspace.lite.promo.modelsTitle": "สิ่งที่รวมอยู่ด้วย", "workspace.lite.promo.footer": "แผนนี้ออกแบบมาสำหรับผู้ใช้งานต่างประเทศเป็นหลักและให้การเข้าถึงที่เสถียรทั่วโลก ราคาและขีดจำกัดการใช้งานอาจเปลี่ยนแปลงได้ตามสิ่งที่เราเรียนรู้จากการใช้งานและข้อเสนอแนะในช่วงแรก", diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts index dddeb94fb96a..cd1aaebb93fd 100644 --- a/packages/console/app/src/i18n/tr.ts +++ b/packages/console/app/src/i18n/tr.ts @@ -689,8 +689,8 @@ export const dict = { "workspace.lite.other.message": "Bu çalışma alanındaki başka bir üye zaten OpenCode Go abonesi. Çalışma alanı başına yalnızca bir üye abone olabilir.", "workspace.lite.promo.description": - "OpenCode Go {{price}} fiyatından başlar, sonrasında ayda 10$ olur ve cömert kullanım limitleriyle popüler açık kodlama modellerine güvenilir erişim sağlar.", - "workspace.lite.promo.price": "İlk ay $5", + "OpenCode Go {{price}} fiyatıyla cömert kullanım limitleri ve popüler açık kodlama modellerine güvenilir erişim sağlar.", + "workspace.lite.promo.price": "Ayda 10$", "workspace.lite.promo.modelsTitle": "Neler Dahil", "workspace.lite.promo.footer": "Plan öncelikle uluslararası kullanıcılar için tasarlanmıştır ve istikrarlı küresel erişim sağlar. Erken kullanım ve geri bildirimlerden öğrendiklerimiz doğrultusunda fiyatlandırma ve kullanım limitleri değişebilir.", diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts index 958cf9fcb43d..c995104569d4 100644 --- a/packages/console/app/src/i18n/uk.ts +++ b/packages/console/app/src/i18n/uk.ts @@ -682,8 +682,8 @@ export const dict = { "workspace.lite.black.message": "Ви вже підписані на OpenCode Black або в списку очікування. Спочатку скасуйте підписку, якщо хочете перейти на Go.", "workspace.lite.other.message": "Інший учасник цього робочого простору вже підписаний на OpenCode Go.", - "workspace.lite.promo.description": "OpenCode Go починається від {{price}}, потім $10/місяць, із щедрими лімітами.", - "workspace.lite.promo.price": "$5 за перший місяць", + "workspace.lite.promo.description": "OpenCode Go коштує {{price}} і має щедрі ліміти.", + "workspace.lite.promo.price": "$10/місяць", "workspace.lite.promo.modelsTitle": "Що включено", "workspace.lite.promo.footer": "План призначений насамперед для міжнародних користувачів і забезпечує стабільний глобальний доступ. Ціни та ліміти використання можуть змінюватися з урахуванням перших даних про використання та відгуків.", diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts index e55cf0715e18..8fae9a9c00d0 100644 --- a/packages/console/app/src/i18n/zh.ts +++ b/packages/console/app/src/i18n/zh.ts @@ -656,8 +656,8 @@ export const dict = { "workspace.lite.black.message": "您当前已订阅 OpenCode Black 或在候补名单中。如需切换到 Go,请先取消订阅。", "workspace.lite.other.message": "此工作区中的另一位成员已经订阅了 OpenCode Go。每个工作区只有一名成员可以订阅。", "workspace.lite.promo.description": - "OpenCode Go 起价为 {{price}},之后 $10/月,并提供对流行开放编码模型的可靠访问,同时享有充裕的使用限额。", - "workspace.lite.promo.price": "首月 $5", + "OpenCode Go 每月 {{price}},并提供对流行开放编码模型的可靠访问,同时享有充裕的使用限额。", + "workspace.lite.promo.price": "$10/月", "workspace.lite.promo.modelsTitle": "包含模型", "workspace.lite.promo.footer": "该计划主要面向国际用户,提供稳定的全球访问体验。随着我们持续了解早期使用情况并收集反馈,定价和使用限额可能会有所调整。", diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts index 0c0247edc865..d30affd99f7a 100644 --- a/packages/console/app/src/i18n/zht.ts +++ b/packages/console/app/src/i18n/zht.ts @@ -656,8 +656,8 @@ export const dict = { "workspace.lite.black.message": "您目前已訂閱 OpenCode Black 或在候補名單中。若要切換至 Go,請先取消訂閱。", "workspace.lite.other.message": "此工作區中的另一位成員已訂閱 OpenCode Go。每個工作區只能有一位成員訂閱。", "workspace.lite.promo.description": - "OpenCode Go 起價為 {{price}},之後 $10/月,並提供對熱門開放編碼模型的可靠存取,同時享有充裕的使用額度。", - "workspace.lite.promo.price": "首月 $5", + "OpenCode Go 每月 {{price}},並提供對熱門開放編碼模型的可靠存取,同時享有充裕的使用額度。", + "workspace.lite.promo.price": "$10/月", "workspace.lite.promo.modelsTitle": "包含模型", "workspace.lite.promo.footer": "此方案主要為國際使用者設計,提供穩定的全球存取服務。隨著我們從初期使用情況和回饋中持續了解需求,價格和使用額度可能會有所調整。", diff --git a/packages/console/core/src/billing.ts b/packages/console/core/src/billing.ts index 879cd8c67751..adeabd9c73c8 100644 --- a/packages/console/core/src/billing.ts +++ b/packages/console/core/src/billing.ts @@ -328,7 +328,6 @@ export namespace Billing { return LiteData.threeMonths100Coupon if (coupons.some((coupon) => coupon.type === "GOFREEMONTH" && !coupon.timeRedeemed)) return LiteData.firstMonth100Coupon - if (!coupons.some((coupon) => coupon.type === "GO1MONTH50")) return LiteData.firstMonth50Coupon return undefined })() const createSession = () => diff --git a/packages/opencode/src/session/retry.ts b/packages/opencode/src/session/retry.ts index 4bc02a9e9649..284c0f0ade41 100644 --- a/packages/opencode/src/session/retry.ts +++ b/packages/opencode/src/session/retry.ts @@ -103,7 +103,7 @@ export function retryable(error: Err, provider: string) { reason: "free_tier_limit", provider, title: "Free limit reached", - message: "Subscribe to OpenCode Go for reliable access to the best open-source models, starting at $5/month.", + message: "Subscribe to OpenCode Go for reliable access to the best open-source models for $10/month.", label: "subscribe", link: GO_UPSELL_URL, }, diff --git a/packages/opencode/test/session/retry.test.ts b/packages/opencode/test/session/retry.test.ts index 10032b8112fd..20c8678cf0a7 100644 --- a/packages/opencode/test/session/retry.test.ts +++ b/packages/opencode/test/session/retry.test.ts @@ -354,7 +354,7 @@ describe("session.retry.retryable", () => { reason: "free_tier_limit", provider: "opencode", title: "Free limit reached", - message: "Subscribe to OpenCode Go for reliable access to the best open-source models, starting at $5/month.", + message: "Subscribe to OpenCode Go for reliable access to the best open-source models for $10/month.", label: "subscribe", link: SessionRetry.GO_UPSELL_URL, }, diff --git a/packages/ui/src/i18n/am.ts b/packages/ui/src/i18n/am.ts index 12557ab24cc4..01d5cd425af1 100644 --- a/packages/ui/src/i18n/am.ts +++ b/packages/ui/src/i18n/am.ts @@ -68,7 +68,7 @@ export const dict: Record = { "ui.sessionTurn.error.freeUsageExceeded": "ነፃ አጠቃቀም ታልፏል", "ui.sessionTurn.error.addCredits": "ክሬዲት አክል", "dialog.usageExceeded.freeTier.title": "ነፃ ገደብ ላይ ደርሷል", - "dialog.usageExceeded.freeTier.description": "ለOpenCode Go ለምርጥ ክፍት ምንጭ ሞዴሎች ታማኝ መዳረሻ ለማግኘት ይመዝገቡ፣ ከ$5 በወር ጀምሮ።", + "dialog.usageExceeded.freeTier.description": "ለምርጥ ክፍት ምንጭ ሞዴሎች ታማኝ መዳረሻ ለማግኘት በወር $10 ለOpenCode Go ይመዝገቡ።", "dialog.usageExceeded.freeTier.actionLabel": "ለደንበኝነት ይመዝገቡ", "dialog.usageExceeded.accountRateLimit.title": "የሂድ ገደብ ላይ ደርሷል", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/ar.ts b/packages/ui/src/i18n/ar.ts index 8be4f840a4b0..b23c24b5bff7 100644 --- a/packages/ui/src/i18n/ar.ts +++ b/packages/ui/src/i18n/ar.ts @@ -77,7 +77,7 @@ export const dict = { "dialog.usageExceeded.freeTier.title": "تم الوصول إلى الحد المجاني", "dialog.usageExceeded.freeTier.description": - "اشترك في OpenCode Go للحصول على وصول موثوق إلى أفضل النماذج مفتوحة المصدر، ابتداءً من $5/شهر.", + "اشترك في OpenCode Go مقابل $10/شهر للحصول على وصول موثوق إلى أفضل النماذج مفتوحة المصدر.", "dialog.usageExceeded.freeTier.actionLabel": "اشترك", "dialog.usageExceeded.accountRateLimit.title": "تم الوصول إلى حد Go", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/az.ts b/packages/ui/src/i18n/az.ts index a93750645bfd..d5fa9cb250a2 100644 --- a/packages/ui/src/i18n/az.ts +++ b/packages/ui/src/i18n/az.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Kredit əlavə et", "dialog.usageExceeded.freeTier.title": "Pulsuz limitə çatdınız", "dialog.usageExceeded.freeTier.description": - "Ayda $5-dan başlayan OpenCode Go abunəliyi ilə ən yaxşı açıq mənbəli modellərə etibarlı giriş əldə edin.", + "Ayda $10 olan OpenCode Go abunəliyi ilə ən yaxşı açıq mənbəli modellərə etibarlı giriş əldə edin.", "dialog.usageExceeded.freeTier.actionLabel": "Abunə ol", "dialog.usageExceeded.accountRateLimit.title": "Go limitinə çatdınız", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/bg.ts b/packages/ui/src/i18n/bg.ts index ee4963b2db06..ea10ab598739 100644 --- a/packages/ui/src/i18n/bg.ts +++ b/packages/ui/src/i18n/bg.ts @@ -69,7 +69,7 @@ export const dict = { "ui.sessionTurn.error.addCredits": "Добавете кредити", "dialog.usageExceeded.freeTier.title": "Безплатният лимит е достигнат", "dialog.usageExceeded.freeTier.description": - "Абонирайте се за OpenCode Go за надежден достъп до най-добрите модели с отворен код, започващи от $5/месец.", + "Абонирайте се за OpenCode Go за надежден достъп до най-добрите модели с отворен код за $10/месец.", "dialog.usageExceeded.freeTier.actionLabel": "Абонирайте се", "dialog.usageExceeded.accountRateLimit.title": "Лимитът за движение е достигнат", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/bn.ts b/packages/ui/src/i18n/bn.ts index fcbf6867e77b..74a6940586f6 100644 --- a/packages/ui/src/i18n/bn.ts +++ b/packages/ui/src/i18n/bn.ts @@ -71,7 +71,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "ক্রেডিট যোগ করুন", "dialog.usageExceeded.freeTier.title": "বিনামূল্যের সীমা পৌঁছেছে", "dialog.usageExceeded.freeTier.description": - "OpenCode-এ সদস্যতা নিন $5/মাস থেকে শুরু করে সেরা ওপেন-সোর্স মডেলগুলিতে নির্ভরযোগ্য অ্যাক্সেসের জন্য যান৷", + "সেরা ওপেন-সোর্স মডেলগুলিতে নির্ভরযোগ্য অ্যাক্সেসের জন্য $10/মাসে OpenCode Go-তে সদস্যতা নিন৷", "dialog.usageExceeded.freeTier.actionLabel": "সদস্যতা", "dialog.usageExceeded.accountRateLimit.title": "যাওয়ার সীমা পৌঁছে গেছে", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/br.ts b/packages/ui/src/i18n/br.ts index 1844aaf79c97..19fc68365530 100644 --- a/packages/ui/src/i18n/br.ts +++ b/packages/ui/src/i18n/br.ts @@ -74,7 +74,7 @@ export const dict = { "dialog.usageExceeded.freeTier.title": "Limite gratuito atingido", "dialog.usageExceeded.freeTier.description": - "Assine o OpenCode Go para ter acesso confiável aos melhores modelos de código aberto, a partir de $5/mês.", + "Assine o OpenCode Go por $10/mês para ter acesso confiável aos melhores modelos de código aberto.", "dialog.usageExceeded.freeTier.actionLabel": "Assinar", "dialog.usageExceeded.accountRateLimit.title": "Limite do Go atingido", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/bs.ts b/packages/ui/src/i18n/bs.ts index bf16eceea3b0..5b33f068b4b9 100644 --- a/packages/ui/src/i18n/bs.ts +++ b/packages/ui/src/i18n/bs.ts @@ -78,7 +78,7 @@ export const dict = { "dialog.usageExceeded.freeTier.title": "Dostignut besplatan limit", "dialog.usageExceeded.freeTier.description": - "Pretplati se na OpenCode Go za pouzdan pristup najboljim modelima otvorenog koda, počevši od $5/mjesec.", + "Pretplati se na OpenCode Go za $10/mjesec i ostvari pouzdan pristup najboljim modelima otvorenog koda.", "dialog.usageExceeded.freeTier.actionLabel": "Pretplati se", "dialog.usageExceeded.accountRateLimit.title": "Dostignut Go limit", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/ca.ts b/packages/ui/src/i18n/ca.ts index ca3d49b00395..1141fa404e17 100644 --- a/packages/ui/src/i18n/ca.ts +++ b/packages/ui/src/i18n/ca.ts @@ -70,7 +70,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Afegeix crèdits", "dialog.usageExceeded.freeTier.title": "S'ha arribat al límit gratuït", "dialog.usageExceeded.freeTier.description": - "Subscriviu-vos a OpenCode Go per obtenir accés fiable als millors models de codi obert, a partir de 5 dòlars al mes.", + "Subscriviu-vos a OpenCode Go per 10 dòlars al mes i obteniu accés fiable als millors models de codi obert.", "dialog.usageExceeded.freeTier.actionLabel": "Subscriu-te", "dialog.usageExceeded.accountRateLimit.title": "S'ha assolit el límit de Go", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/cs.ts b/packages/ui/src/i18n/cs.ts index ed7f9fbf058f..58f508cd7945 100644 --- a/packages/ui/src/i18n/cs.ts +++ b/packages/ui/src/i18n/cs.ts @@ -71,7 +71,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Přidejte kredity", "dialog.usageExceeded.freeTier.title": "Dosažen limit zdarma", "dialog.usageExceeded.freeTier.description": - "Předplaťte si OpenCode Go a získejte spolehlivý přístup k nejlepším modelům s otevřeným zdrojovým kódem již od 5 USD měsíčně.", + "Předplaťte si OpenCode Go za 10 USD měsíčně a získejte spolehlivý přístup k nejlepším modelům s otevřeným zdrojovým kódem.", "dialog.usageExceeded.freeTier.actionLabel": "Přihlásit se k odběru", "dialog.usageExceeded.accountRateLimit.title": "Dosažen limit služby Go", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/da.ts b/packages/ui/src/i18n/da.ts index 7bac164eb685..a3f256c7b4ff 100644 --- a/packages/ui/src/i18n/da.ts +++ b/packages/ui/src/i18n/da.ts @@ -71,7 +71,7 @@ export const dict = { "dialog.usageExceeded.freeTier.title": "Gratis grænse nået", "dialog.usageExceeded.freeTier.description": - "Abonnér på OpenCode Go for pålidelig adgang til de bedste open source-modeller fra $5/måned.", + "Abonnér på OpenCode Go for $10/måned, og få pålidelig adgang til de bedste open source-modeller.", "dialog.usageExceeded.freeTier.actionLabel": "Abonnér", "dialog.usageExceeded.accountRateLimit.title": "Go-grænse nået", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/de.ts b/packages/ui/src/i18n/de.ts index fbe9f3cd23bf..ca86cba28ce7 100644 --- a/packages/ui/src/i18n/de.ts +++ b/packages/ui/src/i18n/de.ts @@ -78,7 +78,7 @@ export const dict = { "dialog.usageExceeded.freeTier.title": "Kostenloses Limit erreicht", "dialog.usageExceeded.freeTier.description": - "OpenCode Go abonnieren und zuverlässigen Zugriff auf die besten Open-Source-Modelle erhalten, ab 5 $ pro Monat.", + "OpenCode Go für 10 $ pro Monat abonnieren und zuverlässigen Zugriff auf die besten Open-Source-Modelle erhalten.", "dialog.usageExceeded.freeTier.actionLabel": "Abonnieren", "dialog.usageExceeded.accountRateLimit.title": "Go-Limit erreicht", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/dv.ts b/packages/ui/src/i18n/dv.ts index 6c6a7384be4b..9b7f26e8f48c 100644 --- a/packages/ui/src/i18n/dv.ts +++ b/packages/ui/src/i18n/dv.ts @@ -70,7 +70,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "ކްރެޑިޓްތައް އިތުރުކުރުން", "dialog.usageExceeded.freeTier.title": "ހިލޭ ލިމިޓަށް އާދެވިއްޖެއެވެ", "dialog.usageExceeded.freeTier.description": - "އެންމެ ރަނގަޅު އޮޕަން ސޯސް މޮޑެލްތަކަށް އިތުބާރުހުރި ގޮތެއްގައި އެކްސެސް ހޯދުމަށް OpenCode Go އަށް ސަބްސްކްރައިބް ކޮށްލައްވާ، މަހަކު 5 ޑޮލަރުން ފެށިގެންނެވެ.", + "އެންމެ ރަނގަޅު އޮޕަން ސޯސް މޮޑެލްތަކަށް އިތުބާރުހުރި ގޮތެއްގައި އެކްސެސް ހޯދުމަށް މަހަކު 10 ޑޮލަރަށް OpenCode Go އަށް ސަބްސްކްރައިބް ކޮށްލައްވާ.", "dialog.usageExceeded.freeTier.actionLabel": "ސަބްސްކްރައިބް ކޮށްލައްވާ", "dialog.usageExceeded.accountRateLimit.title": "ގޯ ލިމިޓް އާދެވުނެވެ", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/dz.ts b/packages/ui/src/i18n/dz.ts index b14d576a259c..545be671e75e 100644 --- a/packages/ui/src/i18n/dz.ts +++ b/packages/ui/src/i18n/dz.ts @@ -71,7 +71,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "སྐྱིན་འགྲུལ་ཁ་སྐོང་བརྐྱབ།", "dialog.usageExceeded.freeTier.title": "རིན་མེད་ཚད་ལུ་ལྷོད་ཡོདཔ།", "dialog.usageExceeded.freeTier.description": - "OpenCode ལུ་མཁོ་མངགས་འབད། $5/month ལས་འགོ་བཙུགས་ཏེ་ ཁ་ཕྱེ་ཡོད་པའི་ཐོན་ཁུངས་དཔེ་ཚད་དྲག་ཤོས་ཚུ་ལུ་བློ་གཏད་ཅན་གྱི་འཛུལ་སྤྱོད་ཀྱི་དོན་ལུ་འགྱོ།", + "OpenCode Go ལུ་ཟླཝ་རེར་ $10 གྱིས་མཁོ་མངགས་འབད་དེ་ ཁ་ཕྱེ་ཡོད་པའི་ཐོན་ཁུངས་དཔེ་ཚད་དྲག་ཤོས་ཚུ་ལུ་བློ་གཏད་ཅན་གྱི་འཛུལ་སྤྱོད་ཐོབ།", "dialog.usageExceeded.freeTier.actionLabel": "མཁོ་མངགས་འབད།", "dialog.usageExceeded.accountRateLimit.title": "འགྱོ་ཚད་ལུ་ལྷོད་ཡོདཔ།", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/el.ts b/packages/ui/src/i18n/el.ts index f4fc56c1a821..0c9971489b3b 100644 --- a/packages/ui/src/i18n/el.ts +++ b/packages/ui/src/i18n/el.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Προσθήκη πιστώσεων", "dialog.usageExceeded.freeTier.title": "Συμπληρώθηκε το δωρεάν όριο", "dialog.usageExceeded.freeTier.description": - "Εγγραφείτε στο OpenCode Μετάβαση για αξιόπιστη πρόσβαση στα καλύτερα μοντέλα ανοιχτού κώδικα, ξεκινώντας από 5 $/μήνα.", + "Εγγραφείτε στο OpenCode Go για 10 $/μήνα και αποκτήστε αξιόπιστη πρόσβαση στα καλύτερα μοντέλα ανοιχτού κώδικα.", "dialog.usageExceeded.freeTier.actionLabel": "Εγγραφή", "dialog.usageExceeded.accountRateLimit.title": "Συμπληρώθηκε το όριο μετάβασης", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/en.ts b/packages/ui/src/i18n/en.ts index aa0ec9c57351..54008fbc8d0b 100644 --- a/packages/ui/src/i18n/en.ts +++ b/packages/ui/src/i18n/en.ts @@ -75,7 +75,7 @@ export const dict: Record = { "dialog.usageExceeded.freeTier.title": "Free limit reached", "dialog.usageExceeded.freeTier.description": - "Subscribe to OpenCode Go for reliable access to the best open-source models, starting at $5/month.", + "Subscribe to OpenCode Go for reliable access to the best open-source models for $10/month.", "dialog.usageExceeded.freeTier.actionLabel": "Subscribe", "dialog.usageExceeded.accountRateLimit.title": "Go limit reached", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/es.ts b/packages/ui/src/i18n/es.ts index 4153680d30e5..07d3f42435d8 100644 --- a/packages/ui/src/i18n/es.ts +++ b/packages/ui/src/i18n/es.ts @@ -74,7 +74,7 @@ export const dict = { "dialog.usageExceeded.freeTier.title": "Límite gratuito alcanzado", "dialog.usageExceeded.freeTier.description": - "Suscríbete a OpenCode Go para acceder de forma fiable a los mejores modelos de código abierto desde 5 USD al mes.", + "Suscríbete a OpenCode Go por 10 USD al mes para acceder de forma fiable a los mejores modelos de código abierto.", "dialog.usageExceeded.freeTier.actionLabel": "Suscribirse", "dialog.usageExceeded.accountRateLimit.title": "Límite de Go alcanzado", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/et.ts b/packages/ui/src/i18n/et.ts index b37223e98c2e..5c548c84ec5e 100644 --- a/packages/ui/src/i18n/et.ts +++ b/packages/ui/src/i18n/et.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Lisa krediite", "dialog.usageExceeded.freeTier.title": "Tasuta limiit on täis", "dialog.usageExceeded.freeTier.description": - "Tellige OpenCode, et saada usaldusväärne juurdepääs parimatele avatud lähtekoodiga mudelitele alates 5 dollarist kuus.", + "Tellige OpenCode Go 10 dollari eest kuus, et saada usaldusväärne juurdepääs parimatele avatud lähtekoodiga mudelitele.", "dialog.usageExceeded.freeTier.actionLabel": "Telli", "dialog.usageExceeded.accountRateLimit.title": "Go limiit on täis", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/fa.ts b/packages/ui/src/i18n/fa.ts index f166bea8fbe5..54b356d10e31 100644 --- a/packages/ui/src/i18n/fa.ts +++ b/packages/ui/src/i18n/fa.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "اعتبار اضافه کنید", "dialog.usageExceeded.freeTier.title": "به حد مجاز رایگان رسیده است", "dialog.usageExceeded.freeTier.description": - "برای دسترسی مطمئن به بهترین مدل های منبع باز، از 5 دلار در ماه، در OpenCode Go مشترک شوید.", + "برای دسترسی مطمئن به بهترین مدل‌های منبع باز، با قیمت 10 دلار در ماه در OpenCode Go مشترک شوید.", "dialog.usageExceeded.freeTier.actionLabel": "مشترک شوید", "dialog.usageExceeded.accountRateLimit.title": "به حد مجاز رفتن رسید", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/fi.ts b/packages/ui/src/i18n/fi.ts index a78ba7a17232..d3a26cb439a8 100644 --- a/packages/ui/src/i18n/fi.ts +++ b/packages/ui/src/i18n/fi.ts @@ -68,7 +68,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Lisää krediittejä", "dialog.usageExceeded.freeTier.title": "Ilmainen raja saavutettu", "dialog.usageExceeded.freeTier.description": - "Tilaa OpenCode Go saadaksesi luotettavan pääsyn parhaisiin avoimen lähdekoodin malleihin alkaen 5 dollarista kuukaudessa.", + "Tilaa OpenCode Go 10 dollarilla kuukaudessa saadaksesi luotettavan pääsyn parhaisiin avoimen lähdekoodin malleihin.", "dialog.usageExceeded.freeTier.actionLabel": "Tilaa", "dialog.usageExceeded.accountRateLimit.title": "Go-raja saavutettu", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/fo.ts b/packages/ui/src/i18n/fo.ts index df45382c8285..098ea8f5b85f 100644 --- a/packages/ui/src/i18n/fo.ts +++ b/packages/ui/src/i18n/fo.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Legg stig til", "dialog.usageExceeded.freeTier.title": "Frítt mark er nátt", "dialog.usageExceeded.freeTier.description": - "Tekna teg til OpenCode Go fyri álítandi atgongd til bestu open-source modellini, frá $5 um mánaðin.", + "Tekna teg til OpenCode Go fyri $10 um mánaðin og fá álítandi atgongd til bestu open-source modellini.", "dialog.usageExceeded.freeTier.actionLabel": "Tekna teg", "dialog.usageExceeded.accountRateLimit.title": "Go-markið er rokkið", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/fr.ts b/packages/ui/src/i18n/fr.ts index 5e9a54708f31..c008c2a34fda 100644 --- a/packages/ui/src/i18n/fr.ts +++ b/packages/ui/src/i18n/fr.ts @@ -75,7 +75,7 @@ export const dict = { "dialog.usageExceeded.freeTier.title": "Limite gratuite atteinte", "dialog.usageExceeded.freeTier.description": - "Abonnez-vous à OpenCode Go pour un accès fiable aux meilleurs modèles à code source ouvert, à partir de 5 $ US par mois.", + "Abonnez-vous à OpenCode Go pour 10 $ US par mois et accédez de manière fiable aux meilleurs modèles à code source ouvert.", "dialog.usageExceeded.freeTier.actionLabel": "S'abonner", "dialog.usageExceeded.accountRateLimit.title": "Limite Go atteinte", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/hi.ts b/packages/ui/src/i18n/hi.ts index 4805dfcf4b57..6da92d275a4a 100644 --- a/packages/ui/src/i18n/hi.ts +++ b/packages/ui/src/i18n/hi.ts @@ -70,7 +70,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "क्रेडिट जोड़ें", "dialog.usageExceeded.freeTier.title": "मुफ़्त सीमा पूरी हो गई", "dialog.usageExceeded.freeTier.description": - "$5/month से शुरू होने वाली सदस्यता के साथ सर्वोत्तम ओपन-सोर्स मॉडलों तक विश्वसनीय पहुँच के लिए OpenCode Go की सदस्यता लें।", + "$10/month में सर्वोत्तम ओपन-सोर्स मॉडलों तक विश्वसनीय पहुँच के लिए OpenCode Go की सदस्यता लें।", "dialog.usageExceeded.freeTier.actionLabel": "सदस्यता लें", "dialog.usageExceeded.accountRateLimit.title": "Go सीमा पूरी हो गई", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/hr.ts b/packages/ui/src/i18n/hr.ts index 2d482e6ff0e5..4eb129c9ef44 100644 --- a/packages/ui/src/i18n/hr.ts +++ b/packages/ui/src/i18n/hr.ts @@ -71,7 +71,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Dodaj kredite", "dialog.usageExceeded.freeTier.title": "Dosegnuto je besplatno ograničenje", "dialog.usageExceeded.freeTier.description": - "Pretplatite se na OpenCode Go za pouzdan pristup najboljim modelima otvorenog koda, počevši od 5 USD mjesečno.", + "Pretplatite se na OpenCode Go za 10 USD mjesečno i ostvarite pouzdan pristup najboljim modelima otvorenog koda.", "dialog.usageExceeded.freeTier.actionLabel": "Pretplatite se", "dialog.usageExceeded.accountRateLimit.title": "Dosegnuto je ograničenje usluge Go", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/hu.ts b/packages/ui/src/i18n/hu.ts index 6039bb6edb00..b4d61b4f5e07 100644 --- a/packages/ui/src/i18n/hu.ts +++ b/packages/ui/src/i18n/hu.ts @@ -71,7 +71,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Adjon hozzá krediteket", "dialog.usageExceeded.freeTier.title": "Elérte a szabad korlátot", "dialog.usageExceeded.freeTier.description": - "Iratkozzon fel a OpenCode Go szolgáltatásra, hogy megbízható hozzáférést kaphasson a legjobb nyílt forráskódú modellekhez, havi 5 dolláros áron.", + "Iratkozzon fel az OpenCode Go szolgáltatásra havi 10 dollárért, hogy megbízható hozzáférést kapjon a legjobb nyílt forráskódú modellekhez.", "dialog.usageExceeded.freeTier.actionLabel": "Iratkozz fel", "dialog.usageExceeded.accountRateLimit.title": "Elérte a Go korlátját", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/hy.ts b/packages/ui/src/i18n/hy.ts index 968163416eb8..39f073c6e56c 100644 --- a/packages/ui/src/i18n/hy.ts +++ b/packages/ui/src/i18n/hy.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Ավելացնել միավորներ", "dialog.usageExceeded.freeTier.title": "Ազատ սահմանաչափը հասել է", "dialog.usageExceeded.freeTier.description": - "Բաժանորդագրվեք OpenCode-ին Գնացեք՝ բաց կոդով լավագույն մոդելներին հուսալի մուտք ունենալու համար՝ սկսած $5/ամսական արժեքից:", + "Բաժանորդագրվեք OpenCode Go-ին՝ բաց կոդով լավագույն մոդելներին հուսալի մուտք ունենալու համար՝ ամսական $10 արժեքով:", "dialog.usageExceeded.freeTier.actionLabel": "Բաժանորդագրվել", "dialog.usageExceeded.accountRateLimit.title": "Գնալ սահմանաչափը հասել է", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/id.ts b/packages/ui/src/i18n/id.ts index 0e2d74fb42f6..22e4d46223f6 100644 --- a/packages/ui/src/i18n/id.ts +++ b/packages/ui/src/i18n/id.ts @@ -74,7 +74,7 @@ export const dict: Record = { "dialog.usageExceeded.freeTier.title": "Batas gratis tercapai", "dialog.usageExceeded.freeTier.description": - "Berlangganan OpenCode Go untuk akses andal ke model sumber terbuka terbaik, mulai dari $5/bulan.", + "Berlangganan OpenCode Go seharga $10/bulan untuk akses andal ke model sumber terbuka terbaik.", "dialog.usageExceeded.freeTier.actionLabel": "Berlangganan", "dialog.usageExceeded.accountRateLimit.title": "Batas Go tercapai", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/is.ts b/packages/ui/src/i18n/is.ts index b9c29a9bb341..7b3bf0fb2e4c 100644 --- a/packages/ui/src/i18n/is.ts +++ b/packages/ui/src/i18n/is.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Bæta við inneign", "dialog.usageExceeded.freeTier.title": "Ókeypis hámarki náð", "dialog.usageExceeded.freeTier.description": - "Gerast áskrifandi að OpenCode Go fyrir áreiðanlegan aðgang að bestu opnum gerðum, frá $5/mánuði.", + "Gerast áskrifandi að OpenCode Go fyrir $10 á mánuði og fá áreiðanlegan aðgang að bestu opnu gerðunum.", "dialog.usageExceeded.freeTier.actionLabel": "Gerast áskrifandi", "dialog.usageExceeded.accountRateLimit.title": "Go takmörkum náð", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/it.ts b/packages/ui/src/i18n/it.ts index 73b0461ede39..9d104a677532 100644 --- a/packages/ui/src/i18n/it.ts +++ b/packages/ui/src/i18n/it.ts @@ -71,7 +71,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Aggiungi crediti", "dialog.usageExceeded.freeTier.title": "Limite gratuito raggiunto", "dialog.usageExceeded.freeTier.description": - "Abbonati a OpenCode Go per un accesso affidabile ai migliori modelli open source, a partire da 5 $ al mese.", + "Abbonati a OpenCode Go per 10 $ al mese e accedi in modo affidabile ai migliori modelli open source.", "dialog.usageExceeded.freeTier.actionLabel": "Iscriviti", "dialog.usageExceeded.accountRateLimit.title": "Limite Go raggiunto", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/ja.ts b/packages/ui/src/i18n/ja.ts index 3bbc00e8a0a1..1b32e05debc5 100644 --- a/packages/ui/src/i18n/ja.ts +++ b/packages/ui/src/i18n/ja.ts @@ -72,7 +72,7 @@ export const dict = { "dialog.usageExceeded.freeTier.title": "無料制限に達しました", "dialog.usageExceeded.freeTier.description": - "OpenCode Go にサブスクライブして、最高のオープンソースモデルに安定してアクセスできます。月額 $5 から。", + "OpenCode Go にサブスクライブして、最高のオープンソースモデルに安定してアクセスできます。月額 $10。", "dialog.usageExceeded.freeTier.actionLabel": "サブスクライブ", "dialog.usageExceeded.accountRateLimit.title": "Go の制限に達しました", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/ka.ts b/packages/ui/src/i18n/ka.ts index 02742e8405c3..68f19bc00d45 100644 --- a/packages/ui/src/i18n/ka.ts +++ b/packages/ui/src/i18n/ka.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "დაამატე კრედიტები", "dialog.usageExceeded.freeTier.title": "უფასო ლიმიტი მიღწეულია", "dialog.usageExceeded.freeTier.description": - "გამოიწერეთ OpenCode გადადით სანდო წვდომისთვის საუკეთესო ღია კოდის მოდელებზე, დაწყებული $5/თვეში.", + "გამოიწერეთ OpenCode Go საუკეთესო ღია კოდის მოდელებზე სანდო წვდომისთვის, თვეში $10-ად.", "dialog.usageExceeded.freeTier.actionLabel": "გამოწერა", "dialog.usageExceeded.accountRateLimit.title": "გადასვლის ლიმიტი მიღწეულია", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/km.ts b/packages/ui/src/i18n/km.ts index df0b6fad7cf1..b50e9c53e7bf 100644 --- a/packages/ui/src/i18n/km.ts +++ b/packages/ui/src/i18n/km.ts @@ -70,7 +70,7 @@ export const dict = { "ui.sessionTurn.error.addCredits": "បន្ថែមក្រេឌីត", "dialog.usageExceeded.freeTier.title": "បានដល់ដែនកំណត់ឥតគិតថ្លៃ", "dialog.usageExceeded.freeTier.description": - "ជាវ OpenCode Go សម្រាប់ការចូលប្រើដែលអាចទុកចិត្តបានចំពោះម៉ូដែលប្រភពបើកចំហល្អបំផុត ដោយចាប់ផ្តើមពី $5/ខែ។", + "ជាវ OpenCode Go ក្នុងតម្លៃ $10/ខែ សម្រាប់ការចូលប្រើដែលអាចទុកចិត្តបានចំពោះម៉ូដែលប្រភពបើកចំហល្អបំផុត។", "dialog.usageExceeded.freeTier.actionLabel": "ជាវ", "dialog.usageExceeded.accountRateLimit.title": "ឈានដល់កម្រិតកំណត់", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/ko.ts b/packages/ui/src/i18n/ko.ts index 6448d9c00105..942fa873dd26 100644 --- a/packages/ui/src/i18n/ko.ts +++ b/packages/ui/src/i18n/ko.ts @@ -49,7 +49,7 @@ export const dict = { "dialog.usageExceeded.freeTier.title": "무료 한도에 도달했습니다", "dialog.usageExceeded.freeTier.description": - "OpenCode Go를 구독하여 최고의 오픈 소스 모델에 안정적으로 액세스하세요. 월 $5부터 시작합니다.", + "월 $10로 OpenCode Go를 구독하여 최고의 오픈 소스 모델에 안정적으로 액세스하세요.", "dialog.usageExceeded.freeTier.actionLabel": "구독", "dialog.usageExceeded.accountRateLimit.title": "Go 한도에 도달했습니다", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/lo.ts b/packages/ui/src/i18n/lo.ts index 32ad2f721ee1..5053377f33d0 100644 --- a/packages/ui/src/i18n/lo.ts +++ b/packages/ui/src/i18n/lo.ts @@ -69,7 +69,7 @@ export const dict = { "ui.sessionTurn.error.addCredits": "ເພີ່ມເຄຣດິດ", "dialog.usageExceeded.freeTier.title": "ຮອດຂີດຈຳກັດຟຣີແລ້ວ", "dialog.usageExceeded.freeTier.description": - "ສະໝັກໃຊ້ OpenCode Go ເພື່ອເຂົ້າເຖິງຮູບແບບໂອເພນຊອດທີ່ດີທີ່ສຸດ, ເລີ່ມຕົ້ນທີ່ $5/ເດືອນ.", + "ສະໝັກໃຊ້ OpenCode Go ໃນລາຄາ $10/ເດືອນ ເພື່ອເຂົ້າເຖິງຮູບແບບໂອເພນຊອດທີ່ດີທີ່ສຸດຢ່າງໜ້າເຊື່ອຖື.", "dialog.usageExceeded.freeTier.actionLabel": "ຈອງ", "dialog.usageExceeded.accountRateLimit.title": "ໄປຮອດຂີດຈຳກັດແລ້ວ", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/lt.ts b/packages/ui/src/i18n/lt.ts index 7cec4a8d8a92..da2e30d96222 100644 --- a/packages/ui/src/i18n/lt.ts +++ b/packages/ui/src/i18n/lt.ts @@ -71,7 +71,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Pridėkite kreditų", "dialog.usageExceeded.freeTier.title": "Pasiektas nemokamas limitas", "dialog.usageExceeded.freeTier.description": - "Prenumeruokite OpenCode Go, kad gautumėte patikimą prieigą prie geriausių atvirojo kodo modelių, pradedant nuo 5 USD per mėnesį.", + "Prenumeruokite OpenCode Go už 10 USD per mėnesį ir gaukite patikimą prieigą prie geriausių atvirojo kodo modelių.", "dialog.usageExceeded.freeTier.actionLabel": "Prenumeruoti", "dialog.usageExceeded.accountRateLimit.title": "Pasiektas Go limitas", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/lv.ts b/packages/ui/src/i18n/lv.ts index 52d598f6dc96..774b1af1bce7 100644 --- a/packages/ui/src/i18n/lv.ts +++ b/packages/ui/src/i18n/lv.ts @@ -70,7 +70,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Pievienot kredītus", "dialog.usageExceeded.freeTier.title": "Sasniegts bezmaksas limits", "dialog.usageExceeded.freeTier.description": - "Abonē OpenCode Go, lai iegūtu uzticamu piekļuvi labākajiem atvērtā koda modeļiem, sākot no $5/mēn.", + "Abonē OpenCode Go par $10/mēn., lai iegūtu uzticamu piekļuvi labākajiem atvērtā koda modeļiem.", "dialog.usageExceeded.freeTier.actionLabel": "Abonēt", "dialog.usageExceeded.accountRateLimit.title": "Sasniegts Go limits", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/mk.ts b/packages/ui/src/i18n/mk.ts index c99740c6b900..d154cac1a9db 100644 --- a/packages/ui/src/i18n/mk.ts +++ b/packages/ui/src/i18n/mk.ts @@ -69,7 +69,7 @@ export const dict = { "ui.sessionTurn.error.addCredits": "Додадете кредити", "dialog.usageExceeded.freeTier.title": "Достигнато е бесплатното ограничување", "dialog.usageExceeded.freeTier.description": - "Претплатете се на OpenCode Go за сигурен пристап до најдобрите модели со отворен код, почнувајќи од 5 $/месец.", + "Претплатете се на OpenCode Go за 10 $/месец за сигурен пристап до најдобрите модели со отворен код.", "dialog.usageExceeded.freeTier.actionLabel": "Претплатете се", "dialog.usageExceeded.accountRateLimit.title": "Достигнато е ограничувањето на Go", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/mn.ts b/packages/ui/src/i18n/mn.ts index ee68ce917fbc..dafe0067da6c 100644 --- a/packages/ui/src/i18n/mn.ts +++ b/packages/ui/src/i18n/mn.ts @@ -69,7 +69,7 @@ export const dict = { "ui.sessionTurn.error.addCredits": "Кредит нэмэх", "dialog.usageExceeded.freeTier.title": "Үнэгүй хязгаарт хүрсэн", "dialog.usageExceeded.freeTier.description": - "OpenCode Go-д бүртгүүлж, сард 5 доллараас эхлэн нээлттэй эхийн шилдэг загваруудад найдвартай хандах боломжтой.", + "OpenCode Go-д сард 10 доллараар бүртгүүлж, нээлттэй эхийн шилдэг загваруудад найдвартай хандаарай.", "dialog.usageExceeded.freeTier.actionLabel": "Бүртгүүлэх", "dialog.usageExceeded.accountRateLimit.title": "Явах хязгаарт хүрсэн", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/ms.ts b/packages/ui/src/i18n/ms.ts index 75cc0290ada3..f71223f17696 100644 --- a/packages/ui/src/i18n/ms.ts +++ b/packages/ui/src/i18n/ms.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Tambah kredit", "dialog.usageExceeded.freeTier.title": "Had percuma dicapai", "dialog.usageExceeded.freeTier.description": - "Langgan OpenCode Go untuk akses yang lebih stabil kepada model sumber terbuka terbaik, bermula dari $5/bulan.", + "Langgan OpenCode Go pada harga $10/bulan untuk akses yang lebih stabil kepada model sumber terbuka terbaik.", "dialog.usageExceeded.freeTier.actionLabel": "Langgan", "dialog.usageExceeded.accountRateLimit.title": "Had Go dicapai", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/my.ts b/packages/ui/src/i18n/my.ts index ad804687dfe5..eab3b950e6ab 100644 --- a/packages/ui/src/i18n/my.ts +++ b/packages/ui/src/i18n/my.ts @@ -70,7 +70,7 @@ export const dict = { "ui.sessionTurn.error.addCredits": "ခရက်ဒစ်များထည့်ပါ။", "dialog.usageExceeded.freeTier.title": "အခမဲ့ကန့်သတ်ချက် ပြည့်သွားပါပြီ။", "dialog.usageExceeded.freeTier.description": - "တစ်လလျှင် $5 မှစတင်၍ အကောင်းဆုံးသော open-source မော်ဒယ်များသို့ ယုံကြည်စိတ်ချရသောဝင်ရောက်ခွင့်အတွက် OpenCode Go ကို စာရင်းသွင်းပါ။", + "တစ်လလျှင် $10 ဖြင့် အကောင်းဆုံးသော open-source မော်ဒယ်များသို့ ယုံကြည်စိတ်ချရသောဝင်ရောက်ခွင့်အတွက် OpenCode Go ကို စာရင်းသွင်းပါ။", "dialog.usageExceeded.freeTier.actionLabel": "စာရင်းသွင်းပါ။", "dialog.usageExceeded.accountRateLimit.title": "Go ကန့်သတ်ချက် ပြည့်သွားပါပြီ။", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/ne.ts b/packages/ui/src/i18n/ne.ts index f2bea06af9c5..bc3f8408e583 100644 --- a/packages/ui/src/i18n/ne.ts +++ b/packages/ui/src/i18n/ne.ts @@ -71,7 +71,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "क्रेडिटहरू थप्नुहोस्", "dialog.usageExceeded.freeTier.title": "नि: शुल्क सीमा पुग्यो", "dialog.usageExceeded.freeTier.description": - "OpenCode को सदस्यता लिनुहोस्, उत्कृष्ट खुला स्रोत मोडेलहरूमा भरपर्दो पहुँचको लागि जानुहोस्, $5/महिनाबाट सुरु हुँदै।", + "उत्कृष्ट खुला स्रोत मोडेलहरूमा भरपर्दो पहुँचका लागि $10/महिनामा OpenCode Go को सदस्यता लिनुहोस्।", "dialog.usageExceeded.freeTier.actionLabel": "सदस्यता लिनुहोस्", "dialog.usageExceeded.accountRateLimit.title": "जाने सीमा पुग्यो", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/nl.ts b/packages/ui/src/i18n/nl.ts index a9554c070ff4..0a5fe58e789b 100644 --- a/packages/ui/src/i18n/nl.ts +++ b/packages/ui/src/i18n/nl.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Tegoed toevoegen", "dialog.usageExceeded.freeTier.title": "Gratis limiet bereikt", "dialog.usageExceeded.freeTier.description": - "Abonneer je op OpenCode Go voor betrouwbare toegang tot de beste open-sourcemodellen, vanaf $ 5 per maand.", + "Abonneer je voor $ 10 per maand op OpenCode Go voor betrouwbare toegang tot de beste open-sourcemodellen.", "dialog.usageExceeded.freeTier.actionLabel": "Abonneer je", "dialog.usageExceeded.accountRateLimit.title": "Go-limiet bereikt", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/no.ts b/packages/ui/src/i18n/no.ts index 9d9738d59661..0cdd653908aa 100644 --- a/packages/ui/src/i18n/no.ts +++ b/packages/ui/src/i18n/no.ts @@ -52,7 +52,7 @@ export const dict: Record = { "dialog.usageExceeded.freeTier.title": "Gratisgrensen er nådd", "dialog.usageExceeded.freeTier.description": - "Abonner på OpenCode Go for pålitelig tilgang til de beste modellene med åpen kildekode, fra $5/måned.", + "Abonner på OpenCode Go for $10/måned for pålitelig tilgang til de beste modellene med åpen kildekode.", "dialog.usageExceeded.freeTier.actionLabel": "Abonner", "dialog.usageExceeded.accountRateLimit.title": "Go-grensen er nådd", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/pa.ts b/packages/ui/src/i18n/pa.ts index dbb09e8d7286..5ecb6b67b720 100644 --- a/packages/ui/src/i18n/pa.ts +++ b/packages/ui/src/i18n/pa.ts @@ -70,7 +70,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "کریڈٹ شامل کرو", "dialog.usageExceeded.freeTier.title": "مفت حد پوری ہو گئی", "dialog.usageExceeded.freeTier.description": - "$5/مہینہ توں شروع ہون والے بہترین اوپن سورس ماڈلاں تک بھروسے جوگی رسائی لئی OpenCode Go دی رکنیت لوو۔", + "$10/مہینہ وچ بہترین اوپن سورس ماڈلاں تک بھروسے جوگی رسائی لئی OpenCode Go دی رکنیت لوو۔", "dialog.usageExceeded.freeTier.actionLabel": "سبسکرائب کرو", "dialog.usageExceeded.accountRateLimit.title": "Go دی حد پوری ہو گئی", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/pl.ts b/packages/ui/src/i18n/pl.ts index 680eadf7b9f2..7181b00806bf 100644 --- a/packages/ui/src/i18n/pl.ts +++ b/packages/ui/src/i18n/pl.ts @@ -74,7 +74,7 @@ export const dict = { "dialog.usageExceeded.freeTier.title": "Osiągnięto limit darmowy", "dialog.usageExceeded.freeTier.description": - "Subskrybuj OpenCode Go, aby uzyskać niezawodny dostęp do najlepszych modeli open source, od $5/miesiąc.", + "Subskrybuj OpenCode Go za $10/miesiąc, aby uzyskać niezawodny dostęp do najlepszych modeli open source.", "dialog.usageExceeded.freeTier.actionLabel": "Subskrybuj", "dialog.usageExceeded.accountRateLimit.title": "Osiągnięto limit Go", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/ro.ts b/packages/ui/src/i18n/ro.ts index 771cf8ff63d8..6d187caf5fd8 100644 --- a/packages/ui/src/i18n/ro.ts +++ b/packages/ui/src/i18n/ro.ts @@ -70,7 +70,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Adaugă credit", "dialog.usageExceeded.freeTier.title": "Limită gratuită atinsă", "dialog.usageExceeded.freeTier.description": - "Abonează-te la OpenCode Go pentru acces fiabil la cele mai bune modele open-source, de la 5$/lună.", + "Abonează-te la OpenCode Go pentru 10$/lună și obține acces fiabil la cele mai bune modele open-source.", "dialog.usageExceeded.freeTier.actionLabel": "Abonează-te", "dialog.usageExceeded.accountRateLimit.title": "Limită Go atinsă", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/ru.ts b/packages/ui/src/i18n/ru.ts index 77bc4ef6db08..2b733166f7f4 100644 --- a/packages/ui/src/i18n/ru.ts +++ b/packages/ui/src/i18n/ru.ts @@ -74,7 +74,7 @@ export const dict = { "dialog.usageExceeded.freeTier.title": "Достигнут бесплатный лимит", "dialog.usageExceeded.freeTier.description": - "Подпишитесь на OpenCode Go для надёжного доступа к лучшим моделям с открытым исходным кодом, от $5/месяц.", + "Подпишитесь на OpenCode Go за $10/месяц для надёжного доступа к лучшим моделям с открытым исходным кодом.", "dialog.usageExceeded.freeTier.actionLabel": "Подписаться", "dialog.usageExceeded.accountRateLimit.title": "Достигнут лимит Go", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/si.ts b/packages/ui/src/i18n/si.ts index 367a9b33c7bb..3550df3aaa88 100644 --- a/packages/ui/src/i18n/si.ts +++ b/packages/ui/src/i18n/si.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "ණය එකතු කරන්න", "dialog.usageExceeded.freeTier.title": "නිදහස් සීමාව ළඟා විය", "dialog.usageExceeded.freeTier.description": - "OpenCode වෙත දායක වන්න, හොඳම විවෘත මූලාශ්‍ර ආකෘති වෙත විශ්වාසනීය ප්‍රවේශය සඳහා යන්න, මසකට $5 සිට.", + "හොඳම විවෘත මූලාශ්‍ර ආකෘති වෙත විශ්වාසනීය ප්‍රවේශය සඳහා මසකට $10 බැගින් OpenCode Go වෙත දායක වන්න.", "dialog.usageExceeded.freeTier.actionLabel": "දායක වන්න", "dialog.usageExceeded.accountRateLimit.title": "යන සීමාවට ළඟා විය", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/sk.ts b/packages/ui/src/i18n/sk.ts index 90063ced929f..a8ec929b610d 100644 --- a/packages/ui/src/i18n/sk.ts +++ b/packages/ui/src/i18n/sk.ts @@ -71,7 +71,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Pridať kredity", "dialog.usageExceeded.freeTier.title": "Dosiahnutý bezplatný limit", "dialog.usageExceeded.freeTier.description": - "Predplaťte si OpenCode Go pre spoľahlivý prístup k najlepším open-source modelom už od 5 $/mesiac.", + "Predplaťte si OpenCode Go za 10 $/mesiac a získajte spoľahlivý prístup k najlepším open-source modelom.", "dialog.usageExceeded.freeTier.actionLabel": "Predplatiť", "dialog.usageExceeded.accountRateLimit.title": "Dosiahnutý limit Go", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/sl.ts b/packages/ui/src/i18n/sl.ts index bc5a4a85761a..8d5718fc01d7 100644 --- a/packages/ui/src/i18n/sl.ts +++ b/packages/ui/src/i18n/sl.ts @@ -72,7 +72,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Dodajte kredite", "dialog.usageExceeded.freeTier.title": "Brezplačna omejitev je dosežena", "dialog.usageExceeded.freeTier.description": - "Naročite se na OpenCode Go za zanesljiv dostop do najboljših odprtokodnih modelov, že od 5 $/mesec.", + "Naročite se na OpenCode Go za zanesljiv dostop do najboljših odprtokodnih modelov za 10 $/mesec.", "dialog.usageExceeded.freeTier.actionLabel": "Naročite se", "dialog.usageExceeded.accountRateLimit.title": "Dosežena omejitev", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/sq.ts b/packages/ui/src/i18n/sq.ts index d7261b318d47..3c1cd24e9f3d 100644 --- a/packages/ui/src/i18n/sq.ts +++ b/packages/ui/src/i18n/sq.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Shto kredite", "dialog.usageExceeded.freeTier.title": "U arrit kufiri falas", "dialog.usageExceeded.freeTier.description": - "Abonohu në OpenCode Go për qasje të besueshme në modelet më të mira me burim të hapur, duke filluar nga 5 dollarë/muaj.", + "Abonohu në OpenCode Go për 10 dollarë/muaj dhe përfito qasje të besueshme në modelet më të mira me burim të hapur.", "dialog.usageExceeded.freeTier.actionLabel": "Abonohu", "dialog.usageExceeded.accountRateLimit.title": "U arrit kufiri i lëvizjes", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/sr.ts b/packages/ui/src/i18n/sr.ts index cb2379e534e1..9f090cd2e2b0 100644 --- a/packages/ui/src/i18n/sr.ts +++ b/packages/ui/src/i18n/sr.ts @@ -71,7 +71,7 @@ export const dict = { "ui.sessionTurn.error.addCredits": "Додајте кредите", "dialog.usageExceeded.freeTier.title": "Достигнуто је ограничење бесплатног", "dialog.usageExceeded.freeTier.description": - "Претплатите се на OpenCode Go за поуздан приступ најбољим моделима отвореног кода, почевши од 5 УСД месечно.", + "Претплатите се на OpenCode Go за 10 УСД месечно и остварите поуздан приступ најбољим моделима отвореног кода.", "dialog.usageExceeded.freeTier.actionLabel": "Претплатите се", "dialog.usageExceeded.accountRateLimit.title": "Достигнуто је ограничење Го", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/sv.ts b/packages/ui/src/i18n/sv.ts index 921c2a594194..3fcc6ff76532 100644 --- a/packages/ui/src/i18n/sv.ts +++ b/packages/ui/src/i18n/sv.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Lägg till krediter", "dialog.usageExceeded.freeTier.title": "Gratisgränsen nådd", "dialog.usageExceeded.freeTier.description": - "Prenumerera på OpenCode Go för pålitlig tillgång till de bästa modellerna med öppen källkod, från 5 USD/månad.", + "Prenumerera på OpenCode Go för 10 USD/månad och få pålitlig tillgång till de bästa modellerna med öppen källkod.", "dialog.usageExceeded.freeTier.actionLabel": "Prenumerera", "dialog.usageExceeded.accountRateLimit.title": "Gränsen för Go har nåtts", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/tg.ts b/packages/ui/src/i18n/tg.ts index 210662b01ff2..4c3e824c6c40 100644 --- a/packages/ui/src/i18n/tg.ts +++ b/packages/ui/src/i18n/tg.ts @@ -69,7 +69,7 @@ export const dict = { "ui.sessionTurn.error.addCredits": "Илова кардани кредитҳо", "dialog.usageExceeded.freeTier.title": "Ба ҳадди ройгон расид", "dialog.usageExceeded.freeTier.description": - "Ба OpenCode Go обуна шавед, то дастрасии боэътимод ба беҳтарин моделҳои кушодаасос аз $5 дар як моҳ оғоз шавад.", + "Ба OpenCode Go бо нархи $10 дар як моҳ обуна шавед, то ба беҳтарин моделҳои кушодаасос дастрасии боэътимод дошта бошед.", "dialog.usageExceeded.freeTier.actionLabel": "Обуна шавед", "dialog.usageExceeded.accountRateLimit.title": "Ба маҳдудияти рафтан расид", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/th.ts b/packages/ui/src/i18n/th.ts index a0aecbe7c1fa..ae0d820d4eb1 100644 --- a/packages/ui/src/i18n/th.ts +++ b/packages/ui/src/i18n/th.ts @@ -73,7 +73,7 @@ export const dict = { "dialog.usageExceeded.freeTier.title": "ถึงขีดจำกัดฟรีแล้ว", "dialog.usageExceeded.freeTier.description": - "สมัครสมาชิก OpenCode Go เพื่อการเข้าถึงโมเดลโอเพนซอร์สที่ดีที่สุดอย่างเชื่อถือได้ เริ่มต้นที่ $5/เดือน", + "สมัครสมาชิก OpenCode Go ในราคา $10/เดือน เพื่อการเข้าถึงโมเดลโอเพนซอร์สที่ดีที่สุดอย่างเชื่อถือได้", "dialog.usageExceeded.freeTier.actionLabel": "สมัครสมาชิก", "dialog.usageExceeded.accountRateLimit.title": "ถึงขีดจำกัดของ Go แล้ว", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/tk.ts b/packages/ui/src/i18n/tk.ts index e89f7d3538db..e1bf43208f91 100644 --- a/packages/ui/src/i18n/tk.ts +++ b/packages/ui/src/i18n/tk.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Karz goşuň", "dialog.usageExceeded.freeTier.title": "Mugt çäk ýetdi", "dialog.usageExceeded.freeTier.description": - "Iň oňat açyk çeşme modellerine ygtybarly girmek üçin aýda 5 $ -dan başlap, OpenCode Go-a ýazylyň.", + "Iň oňat açyk çeşme modellerine ygtybarly girmek üçin aýda 10 $ töläp, OpenCode Go-a ýazylyň.", "dialog.usageExceeded.freeTier.actionLabel": "Abuna ýazylyň", "dialog.usageExceeded.accountRateLimit.title": "Çäklendirildi", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/tr.ts b/packages/ui/src/i18n/tr.ts index 6dd2cd0e3218..e0b6fd0ccd71 100644 --- a/packages/ui/src/i18n/tr.ts +++ b/packages/ui/src/i18n/tr.ts @@ -79,7 +79,7 @@ export const dict = { "dialog.usageExceeded.freeTier.title": "Ücretsiz sınıra ulaşıldı", "dialog.usageExceeded.freeTier.description": - "En iyi açık kaynaklı modellere güvenilir erişim için OpenCode Go'ya abone olun. Aylık $5'ten başlar.", + "En iyi açık kaynaklı modellere güvenilir erişim için aylık $10 karşılığında OpenCode Go'ya abone olun.", "dialog.usageExceeded.freeTier.actionLabel": "Abone ol", "dialog.usageExceeded.accountRateLimit.title": "Go sınırına ulaşıldı", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/uk.ts b/packages/ui/src/i18n/uk.ts index e48f7c1a65a1..9643b52a944b 100644 --- a/packages/ui/src/i18n/uk.ts +++ b/packages/ui/src/i18n/uk.ts @@ -77,7 +77,7 @@ export const dict: Record = { "dialog.usageExceeded.freeTier.title": "Безкоштовний ліміт вичерпано", "dialog.usageExceeded.freeTier.description": - "Підпишіться на OpenCode Go для надійного доступу до найкращих моделей із відкритим кодом від $5 на місяць.", + "Підпишіться на OpenCode Go за $10 на місяць для надійного доступу до найкращих моделей із відкритим кодом.", "dialog.usageExceeded.freeTier.actionLabel": "Підписатися", "dialog.usageExceeded.accountRateLimit.title": "Ліміт Go вичерпано", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/ur.ts b/packages/ui/src/i18n/ur.ts index d235a0760012..b9aaa429e630 100644 --- a/packages/ui/src/i18n/ur.ts +++ b/packages/ui/src/i18n/ur.ts @@ -70,7 +70,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "کریڈٹ شامل کریں۔", "dialog.usageExceeded.freeTier.title": "مفت استعمال کی حد پوری ہو گئی", "dialog.usageExceeded.freeTier.description": - "$5/ماہ سے شروع ہونے والے بہترین اوپن سورس ماڈلز تک قابل اعتماد رسائی کے لیے OpenCode Go کو سبسکرائب کریں۔", + "$10/ماہ میں بہترین اوپن سورس ماڈلز تک قابل اعتماد رسائی کے لیے OpenCode Go کو سبسکرائب کریں۔", "dialog.usageExceeded.freeTier.actionLabel": "سبسکرائب کریں۔", "dialog.usageExceeded.accountRateLimit.title": "Go حد تک پہنچ گئی۔", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/uz.ts b/packages/ui/src/i18n/uz.ts index 8dd4eb18f0d0..c1a1e671e38b 100644 --- a/packages/ui/src/i18n/uz.ts +++ b/packages/ui/src/i18n/uz.ts @@ -71,7 +71,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Kredit qo'shing", "dialog.usageExceeded.freeTier.title": "Bepul chegaraga yetdi", "dialog.usageExceeded.freeTier.description": - "Oyiga $5 dan boshlab eng yaxshi ochiq kodli modellarga ishonchli kirish uchun OpenCode Go ga obuna bo'ling.", + "Oyiga $10 evaziga eng yaxshi ochiq kodli modellarga ishonchli kirish uchun OpenCode Go ga obuna bo'ling.", "dialog.usageExceeded.freeTier.actionLabel": "Obuna boʻling", "dialog.usageExceeded.accountRateLimit.title": "Oʻtish chegarasiga yetdi", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/vi.ts b/packages/ui/src/i18n/vi.ts index 7db5f0975e90..c37ff1a66fa9 100644 --- a/packages/ui/src/i18n/vi.ts +++ b/packages/ui/src/i18n/vi.ts @@ -69,7 +69,7 @@ export const dict: Record = { "ui.sessionTurn.error.addCredits": "Thêm số dư", "dialog.usageExceeded.freeTier.title": "Đã đạt đến giới hạn miễn phí", "dialog.usageExceeded.freeTier.description": - "Đăng ký OpenCode Go để có quyền truy cập đáng tin cậy vào các mô hình nguồn mở tốt nhất, bắt đầu từ $5/tháng.", + "Đăng ký OpenCode Go với giá $10/tháng để có quyền truy cập đáng tin cậy vào các mô hình nguồn mở tốt nhất.", "dialog.usageExceeded.freeTier.actionLabel": "Đăng ký", "dialog.usageExceeded.accountRateLimit.title": "Đã đạt giới hạn Go", "dialog.usageExceeded.accountRateLimit.description": diff --git a/packages/ui/src/i18n/zh.ts b/packages/ui/src/i18n/zh.ts index b0d75b9181f0..c5a33efef013 100644 --- a/packages/ui/src/i18n/zh.ts +++ b/packages/ui/src/i18n/zh.ts @@ -76,7 +76,7 @@ export const dict = { "ui.sessionTurn.error.addCredits": "充值", "dialog.usageExceeded.freeTier.title": "免费额度已用完", - "dialog.usageExceeded.freeTier.description": "订阅 OpenCode Go,可靠地使用最佳开源模型,每月 $5 起。", + "dialog.usageExceeded.freeTier.description": "每月 $10 订阅 OpenCode Go,可靠地使用最佳开源模型。", "dialog.usageExceeded.freeTier.actionLabel": "订阅", "dialog.usageExceeded.accountRateLimit.title": "Go 额度已用完", "dialog.usageExceeded.accountRateLimit.description": "使用额度已达上限。如需立即继续使用此模型,请启用余额付费", diff --git a/packages/ui/src/i18n/zht.ts b/packages/ui/src/i18n/zht.ts index 28ceac4f427a..736a7961b0e6 100644 --- a/packages/ui/src/i18n/zht.ts +++ b/packages/ui/src/i18n/zht.ts @@ -76,7 +76,7 @@ export const dict = { "ui.sessionTurn.error.addCredits": "新增點數", "dialog.usageExceeded.freeTier.title": "已達免費額度上限", - "dialog.usageExceeded.freeTier.description": "訂閱 OpenCode Go,可靠地使用最佳開源模型,每月 $5 起。", + "dialog.usageExceeded.freeTier.description": "每月 $10 訂閱 OpenCode Go,可靠地使用最佳開源模型。", "dialog.usageExceeded.freeTier.actionLabel": "訂閱", "dialog.usageExceeded.accountRateLimit.title": "已達 Go 額度上限", "dialog.usageExceeded.accountRateLimit.description": "已達使用額度上限。若要立即繼續使用此模型,請啟用可用餘額計費", From 754bb7e3903df6276e6ddc96e3d6daced7160902 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 24 Aug 2026 04:00:55 -0400 Subject: [PATCH 007/185] delay removing first month discount --- packages/console/core/src/billing.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/console/core/src/billing.ts b/packages/console/core/src/billing.ts index adeabd9c73c8..879cd8c67751 100644 --- a/packages/console/core/src/billing.ts +++ b/packages/console/core/src/billing.ts @@ -328,6 +328,7 @@ export namespace Billing { return LiteData.threeMonths100Coupon if (coupons.some((coupon) => coupon.type === "GOFREEMONTH" && !coupon.timeRedeemed)) return LiteData.firstMonth100Coupon + if (!coupons.some((coupon) => coupon.type === "GO1MONTH50")) return LiteData.firstMonth50Coupon return undefined })() const createSession = () => From 03521003fafdc6d340de6a36a189e3c121b07d40 Mon Sep 17 00:00:00 2001 From: Jack Date: Mon, 24 Aug 2026 16:21:37 +0800 Subject: [PATCH 008/185] docs(go): clarify DeepSeek weekend pricing (#44637) --- packages/web/src/content/docs/ar/go.mdx | 2 +- packages/web/src/content/docs/bs/go.mdx | 2 +- packages/web/src/content/docs/da/go.mdx | 2 +- packages/web/src/content/docs/de/go.mdx | 2 +- packages/web/src/content/docs/es/go.mdx | 2 +- packages/web/src/content/docs/fr/go.mdx | 2 +- packages/web/src/content/docs/go.mdx | 2 +- packages/web/src/content/docs/it/go.mdx | 2 +- packages/web/src/content/docs/ja/go.mdx | 2 +- packages/web/src/content/docs/ko/go.mdx | 2 +- packages/web/src/content/docs/nb/go.mdx | 2 +- packages/web/src/content/docs/pl/go.mdx | 2 +- packages/web/src/content/docs/pt-br/go.mdx | 2 +- packages/web/src/content/docs/ru/go.mdx | 2 +- packages/web/src/content/docs/th/go.mdx | 2 +- packages/web/src/content/docs/tr/go.mdx | 2 +- packages/web/src/content/docs/zh-cn/go.mdx | 2 +- packages/web/src/content/docs/zh-tw/go.mdx | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx index 0beba1bce1f8..0bdd1a059205 100644 --- a/packages/web/src/content/docs/ar/go.mdx +++ b/packages/web/src/content/docs/ar/go.mdx @@ -168,7 +168,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** ساعات Peak هي 01:00-04:00 و06:00-10:00 UTC؛ وجميع الساعات الأخرى Off-Peak. [اعرف المزيد](https://api-docs.deepseek.com/quick_start/pricing/). +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** ساعات Peak هي 01:00-04:00 و06:00-10:00 UTC من الاثنين إلى الجمعة؛ وجميع الساعات الأخرى، بما في ذلك عطلات نهاية الأسبوع، Off-Peak. [اعرف المزيد](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** يتم تحويل الصور إلى رموز بناءً على أبعادها، وتُحتسب كرموز إدخال إلى جانب رموز النص. [اعرف المزيد](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index ffa9ee462489..99d0edd211c2 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -178,7 +178,7 @@ Procjene se također zasnivaju na sljedećim cijenama po 1M tokena i mjesečnoj | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak sati su 01:00-04:00 i 06:00-10:00 UTC; svi ostali sati su Off-Peak. [Saznajte više](https://api-docs.deepseek.com/quick_start/pricing/). +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak sati su 01:00-04:00 i 06:00-10:00 UTC od ponedjeljka do petka; svi ostali sati, uključujući vikende, su Off-Peak. [Saznajte više](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Slike se pretvaraju u tokene na osnovu svojih dimenzija i naplaćuju kao ulazni tokeni zajedno s tekstualnim tokenima. [Saznajte više](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx index e490fd79c946..4ce8e70fb7c3 100644 --- a/packages/web/src/content/docs/da/go.mdx +++ b/packages/web/src/content/docs/da/go.mdx @@ -178,7 +178,7 @@ Estimaterne er også baseret på følgende priser pr. 1M tokens og det månedlig | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak-tiderne er 01:00-04:00 og 06:00-10:00 UTC; alle andre tider er Off-Peak. [Læs mere](https://api-docs.deepseek.com/quick_start/pricing/). +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak-tiderne er 01:00-04:00 og 06:00-10:00 UTC fra mandag til fredag; alle andre tider, herunder weekender, er Off-Peak. [Læs mere](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Billeder konverteres til tokens baseret på deres dimensioner og afregnes som inputtokens sammen med teksttokens. [Læs mere](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx index f8afac5a984a..21dda2a73bb3 100644 --- a/packages/web/src/content/docs/de/go.mdx +++ b/packages/web/src/content/docs/de/go.mdx @@ -170,7 +170,7 @@ Die Schätzungen basieren außerdem auf den folgenden Preisen pro 1M Tokens und | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Die Peak-Zeiten sind 01:00-04:00 und 06:00-10:00 UTC; alle anderen Zeiten sind Off-Peak. [Mehr erfahren](https://api-docs.deepseek.com/quick_start/pricing/). +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Die Peak-Zeiten sind montags bis freitags von 01:00-04:00 und 06:00-10:00 UTC; alle anderen Zeiten, einschließlich der Wochenenden, sind Off-Peak. [Mehr erfahren](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Bilder werden anhand ihrer Abmessungen in Tokens umgewandelt und zusammen mit Text-Tokens als Input-Tokens abgerechnet. [Mehr erfahren](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index ae1ded7f661a..ac1d07c01322 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -178,7 +178,7 @@ Las estimaciones también se basan en los siguientes precios por 1M tokens y en | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Las horas Peak son 01:00-04:00 y 06:00-10:00 UTC; todas las demás horas son Off-Peak. [Más información](https://api-docs.deepseek.com/quick_start/pricing/). +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Las horas Peak son 01:00-04:00 y 06:00-10:00 UTC, de lunes a viernes; todas las demás horas, incluidos los fines de semana, son Off-Peak. [Más información](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Las imágenes se convierten en tokens según sus dimensiones y se facturan como tokens de entrada junto con los tokens de texto. [Más información](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx index ae22a99b95e1..f487a6e944c2 100644 --- a/packages/web/src/content/docs/fr/go.mdx +++ b/packages/web/src/content/docs/fr/go.mdx @@ -168,7 +168,7 @@ Les estimations sont également basées sur les prix suivants par 1M tokens et s | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Les heures Peak sont 01:00-04:00 et 06:00-10:00 UTC ; toutes les autres heures sont Off-Peak. [En savoir plus](https://api-docs.deepseek.com/quick_start/pricing/). +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Les heures Peak sont 01:00-04:00 et 06:00-10:00 UTC, du lundi au vendredi ; toutes les autres heures, y compris le week-end, sont Off-Peak. [En savoir plus](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Les images sont converties en tokens selon leurs dimensions et facturées comme tokens d’entrée avec les tokens de texte. [En savoir plus](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index 14b59bda2e78..ffab0d7a542a 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -178,7 +178,7 @@ The estimates are also based on the following prices per 1M tokens and the month | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak hours are 01:00-04:00 and 06:00-10:00 UTC; all other hours are Off-Peak. [Learn more](https://api-docs.deepseek.com/quick_start/pricing/). +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak hours are 01:00-04:00 and 06:00-10:00 UTC, Monday through Friday; all other hours, including weekends, are Off-Peak. [Learn more](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Images are converted into tokens based on their dimensions and billed as input tokens alongside text tokens. [Learn more](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx index c9cf9a9ce520..7a0d28ad48c9 100644 --- a/packages/web/src/content/docs/it/go.mdx +++ b/packages/web/src/content/docs/it/go.mdx @@ -176,7 +176,7 @@ Le stime si basano anche sui seguenti prezzi per 1M token e sull'utilizzo mensil | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Gli orari Peak sono 01:00-04:00 e 06:00-10:00 UTC; tutti gli altri orari sono Off-Peak. [Scopri di più](https://api-docs.deepseek.com/quick_start/pricing/). +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Gli orari Peak sono 01:00-04:00 e 06:00-10:00 UTC, dal lunedì al venerdì; tutti gli altri orari, inclusi i fine settimana, sono Off-Peak. [Scopri di più](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Le immagini vengono convertite in token in base alle loro dimensioni e fatturate come token di input insieme ai token di testo. [Scopri di più](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx index dfdf981e1f39..74da619c7d48 100644 --- a/packages/web/src/content/docs/ja/go.mdx +++ b/packages/web/src/content/docs/ja/go.mdx @@ -168,7 +168,7 @@ OpenCode Goには以下の制限が含まれています: | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak時間は01:00-04:00と06:00-10:00 UTCで、それ以外の時間はすべてOff-Peakです。[詳しく見る](https://api-docs.deepseek.com/quick_start/pricing/)。 +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak時間は月曜日から金曜日の01:00-04:00と06:00-10:00 UTCで、週末を含むそれ以外の時間はすべてOff-Peakです。[詳しく見る](https://api-docs.deepseek.com/quick_start/pricing/)。 **DeepSeek V4 Flash Vision Exp:** 画像はサイズに基づいてトークンに変換され、テキストトークンと合わせて入力トークンとして課金されます。 [詳しく見る](https://api-docs.deepseek.com/quick_start/pricing/)。 diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx index 1ebb317df7ea..f2f1a614fa5f 100644 --- a/packages/web/src/content/docs/ko/go.mdx +++ b/packages/web/src/content/docs/ko/go.mdx @@ -168,7 +168,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 시간은 01:00-04:00 및 06:00-10:00 UTC이며, 그 외 모든 시간은 Off-Peak입니다. [자세히 알아보기](https://api-docs.deepseek.com/quick_start/pricing/). +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 시간은 월요일부터 금요일까지 01:00-04:00 및 06:00-10:00 UTC이며, 주말을 포함한 그 외 모든 시간은 Off-Peak입니다. [자세히 알아보기](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** 이미지는 크기에 따라 토큰으로 변환되며 텍스트 토큰과 함께 입력 토큰으로 청구됩니다. [자세히 알아보기](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx index d687cb6edeee..5c6f875cf2cb 100644 --- a/packages/web/src/content/docs/nb/go.mdx +++ b/packages/web/src/content/docs/nb/go.mdx @@ -178,7 +178,7 @@ Estimatene er også basert på følgende priser per 1M tokens og den månedlige | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak-tidene er 01:00-04:00 og 06:00-10:00 UTC; alle andre tider er Off-Peak. [Les mer](https://api-docs.deepseek.com/quick_start/pricing/). +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak-tidene er 01:00-04:00 og 06:00-10:00 UTC fra mandag til fredag; alle andre tider, inkludert helger, er Off-Peak. [Les mer](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Bilder konverteres til tokens basert på dimensjonene og faktureres som input-tokens sammen med tekst-tokens. [Les mer](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx index 3190e32ee28a..8b27bb8c6560 100644 --- a/packages/web/src/content/docs/pl/go.mdx +++ b/packages/web/src/content/docs/pl/go.mdx @@ -172,7 +172,7 @@ Szacunki opierają się również na następujących cenach za 1M tokenów oraz | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Godziny Peak to 01:00-04:00 i 06:00-10:00 UTC; wszystkie pozostałe godziny to Off-Peak. [Dowiedz się więcej](https://api-docs.deepseek.com/quick_start/pricing/). +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Godziny Peak to 01:00-04:00 i 06:00-10:00 UTC od poniedziałku do piątku; wszystkie pozostałe godziny, w tym weekendy, to Off-Peak. [Dowiedz się więcej](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Obrazy są przeliczane na tokeny na podstawie ich wymiarów i rozliczane jako tokeny wejściowe razem z tokenami tekstowymi. [Dowiedz się więcej](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index abbd2ec71eac..518656366121 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -178,7 +178,7 @@ As estimativas também se baseiam nos seguintes preços por 1M tokens e no uso m | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Os horários Peak são 01:00-04:00 e 06:00-10:00 UTC; todos os demais horários são Off-Peak. [Saiba mais](https://api-docs.deepseek.com/quick_start/pricing/). +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Os horários Peak são 01:00-04:00 e 06:00-10:00 UTC, de segunda a sexta-feira; todos os demais horários, incluindo os fins de semana, são Off-Peak. [Saiba mais](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** As imagens são convertidas em tokens com base em suas dimensões e cobradas como tokens de entrada junto com os tokens de texto. [Saiba mais](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx index 67ed83f5d4fe..5a8681c8d30f 100644 --- a/packages/web/src/content/docs/ru/go.mdx +++ b/packages/web/src/content/docs/ru/go.mdx @@ -178,7 +178,7 @@ OpenCode Go включает следующие лимиты: | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Часы Peak: 01:00-04:00 и 06:00-10:00 UTC; все остальные часы относятся к Off-Peak. [Подробнее](https://api-docs.deepseek.com/quick_start/pricing/). +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Часы Peak с понедельника по пятницу: 01:00-04:00 и 06:00-10:00 UTC; все остальные часы, включая выходные, относятся к Off-Peak. [Подробнее](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Изображения преобразуются в токены с учётом их размеров и оплачиваются как входные токены вместе с текстовыми токенами. [Подробнее](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx index e620ba09f527..30b4c28fe182 100644 --- a/packages/web/src/content/docs/th/go.mdx +++ b/packages/web/src/content/docs/th/go.mdx @@ -168,7 +168,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** ช่วงเวลา Peak คือ 01:00-04:00 และ 06:00-10:00 UTC ส่วนเวลาอื่นทั้งหมดเป็น Off-Peak [ดูข้อมูลเพิ่มเติม](https://api-docs.deepseek.com/quick_start/pricing/) +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** ช่วงเวลา Peak คือ 01:00-04:00 และ 06:00-10:00 UTC ตั้งแต่วันจันทร์ถึงวันศุกร์ ส่วนเวลาอื่นทั้งหมด รวมถึงวันหยุดสุดสัปดาห์ เป็น Off-Peak [ดูข้อมูลเพิ่มเติม](https://api-docs.deepseek.com/quick_start/pricing/) **DeepSeek V4 Flash Vision Exp:** รูปภาพจะถูกแปลงเป็น token ตามขนาด และคิดค่าบริการเป็น input token รวมกับ text token [ดูข้อมูลเพิ่มเติม](https://api-docs.deepseek.com/quick_start/pricing/) diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx index 7dab1a6ab365..82060a66bb95 100644 --- a/packages/web/src/content/docs/tr/go.mdx +++ b/packages/web/src/content/docs/tr/go.mdx @@ -168,7 +168,7 @@ Tahminler ayrıca 1M token başına aşağıdaki fiyatlara ve her modelle birlik | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak saatleri 01:00-04:00 ve 06:00-10:00 UTC'dir; diğer tüm saatler Off-Peak'tir. [Daha fazla bilgi](https://api-docs.deepseek.com/quick_start/pricing/). +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak saatleri pazartesiden cumaya 01:00-04:00 ve 06:00-10:00 UTC'dir; hafta sonları dahil diğer tüm saatler Off-Peak'tir. [Daha fazla bilgi](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Görseller boyutlarına göre token'lara dönüştürülür ve metin token'larıyla birlikte girdi token'ları olarak ücretlendirilir. [Daha fazla bilgi](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx index e61b8ee74d4d..24af3e16a3ce 100644 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ b/packages/web/src/content/docs/zh-cn/go.mdx @@ -168,7 +168,7 @@ OpenCode Go 包含以下限制: | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 时段为 01:00-04:00 和 06:00-10:00 UTC;其他所有时段均为 Off-Peak。[了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 时段为周一至周五的 01:00-04:00 和 06:00-10:00 UTC;其他所有时段(包括周末)均为 Off-Peak。[了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 **DeepSeek V4 Flash Vision Exp:** 图片会根据尺寸转换为 token,并与文本 token 一起按输入 token 计费。 [了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx index 8c76676be585..eef6371785a0 100644 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ b/packages/web/src/content/docs/zh-tw/go.mdx @@ -168,7 +168,7 @@ OpenCode Go 包含以下限制: | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Ox Alpha Free | - | - | - | - | - | -**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 時段為 01:00-04:00 和 06:00-10:00 UTC;其他所有時段均為 Off-Peak。[了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 +**DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 時段為週一至週五的 01:00-04:00 和 06:00-10:00 UTC;其他所有時段(包括週末)均為 Off-Peak。[了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 **DeepSeek V4 Flash Vision Exp:** 圖片會根據尺寸轉換為 token,並與文字 token 一起按輸入 token 計費。 [了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 From 6bb772215b08b4b7d9243c27286950d85b9f678d Mon Sep 17 00:00:00 2001 From: Jack Date: Mon, 24 Aug 2026 18:02:51 +0800 Subject: [PATCH 009/185] docs(go): add LongCat-2.0 (#44636) --- packages/console/app/src/routes/go/index.tsx | 3 ++- .../app/src/routes/workspace/[id]/go/lite-section.tsx | 1 + packages/web/src/content/docs/ar/go.mdx | 6 ++++++ packages/web/src/content/docs/bs/go.mdx | 6 ++++++ packages/web/src/content/docs/da/go.mdx | 6 ++++++ packages/web/src/content/docs/de/go.mdx | 6 ++++++ packages/web/src/content/docs/es/go.mdx | 6 ++++++ packages/web/src/content/docs/fr/go.mdx | 6 ++++++ packages/web/src/content/docs/go.mdx | 6 ++++++ packages/web/src/content/docs/it/go.mdx | 6 ++++++ packages/web/src/content/docs/ja/go.mdx | 6 ++++++ packages/web/src/content/docs/ko/go.mdx | 6 ++++++ packages/web/src/content/docs/nb/go.mdx | 6 ++++++ packages/web/src/content/docs/pl/go.mdx | 6 ++++++ packages/web/src/content/docs/pt-br/go.mdx | 6 ++++++ packages/web/src/content/docs/ru/go.mdx | 6 ++++++ packages/web/src/content/docs/th/go.mdx | 6 ++++++ packages/web/src/content/docs/tr/go.mdx | 6 ++++++ packages/web/src/content/docs/zh-cn/go.mdx | 6 ++++++ packages/web/src/content/docs/zh-tw/go.mdx | 6 ++++++ 20 files changed, 111 insertions(+), 1 deletion(-) diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index f5177ce6d0e3..d0676027f796 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -31,6 +31,7 @@ const models = [ { name: "Kimi K3", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "Kimi K2.7 Code", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "Kimi K2.6", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, + { name: "LongCat-2.0", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "MiMo-V2.5-Pro", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "MiMo-V2.5", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "Qwen3.8 Max", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, @@ -72,11 +73,11 @@ function LimitsGraph(props: { href: string }) { { id: "grok-4.5", name: "Grok 4.5", req: 120, d: "75ms" }, { id: "qwen3.8-max", name: "Qwen3.8 Max", req: 160, d: "90ms" }, { id: "glm-5.2", name: "GLM-5.2", req: 880, d: "100ms" }, - { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", req: 1050, d: "150ms" }, { id: "gpt-5.6-luna", name: "GPT 5.6 Luna", req: 2050, d: "290ms" }, { id: "minimax-m3", name: "MiniMax M3", req: 3200, d: "210ms" }, { id: "qwen3.7-plus", name: "Qwen3.7 Plus", req: 4300, d: "300ms" }, { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", req: 7600, d: "330ms" }, + { id: "longcat-2.0", name: "LongCat-2.0", req: 11400, d: "335ms" }, { id: "mimo-v2.5", name: "MiMo-V2.5", req: 30100, d: "340ms" }, { id: "hy3", name: "Hy3", req: 34400, baseReq: 4300, d: "320ms" }, { id: "muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", req: 45300, edge: true, d: "360ms" }, diff --git a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx index 8d3fd37ff2d2..11dfc6ed2ba1 100644 --- a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx @@ -347,6 +347,7 @@ export function LiteSection(props: { lite: LiteSubscription | undefined }) {
  • Kimi K3
  • Kimi K2.7 Code
  • Kimi K2.6
  • +
  • LongCat-2.0
  • MiniMax M3
  • MiniMax M2.7
  • Muse Spark 1.2 Contributor
  • diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx index 0bdd1a059205..7ddb1b7e2e1b 100644 --- a/packages/web/src/content/docs/ar/go.mdx +++ b/packages/web/src/content/docs/ar/go.mdx @@ -57,6 +57,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -98,6 +99,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -120,6 +122,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر - GPT 5.6 Luna — ‏1,000 توكن إدخال، و50,000 توكن مخزّن مؤقتًا، و220 توكن إخراج لكل طلب - Kimi K3 — ‏1,050 input، و76,500 cached، و300 output tokens لكل طلب - Kimi K2.7/K2.6 — ‏870 input، و55,000 cached، و200 output tokens لكل طلب +- LongCat-2.0 — ‏920 input، و88,900 cached، و200 output tokens لكل طلب - DeepSeek V4 Pro — ‏750 input، و82,000 cached، و290 output tokens لكل طلب - DeepSeek V4 Flash — ‏410 input، و71,300 cached، و310 output tokens لكل طلب - DeepSeek V4 Flash Vision Exp — ‏410 input، و71,300 cached، و310 output tokens لكل طلب @@ -147,6 +150,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -216,6 +220,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -258,6 +263,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | غير مستخدَمة | 0 أيام | | Kimi K2.7 Code | غير مستخدَمة | 0 أيام | | Kimi K2.6 | غير مستخدَمة | 0 أيام | +| LongCat-2.0 | غير مستخدَمة | 0 أيام | | MiMo-V2.5-Pro | غير مستخدَمة | 0 أيام | | MiMo-V2.5 | غير مستخدَمة | 0 أيام | | Qwen3.8 Max | غير مستخدَمة | 0 أيام | diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index 99d0edd211c2..6215b938b3a4 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -67,6 +67,7 @@ Trenutna lista modela uključuje: - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -108,6 +109,7 @@ Tabela ispod pruža procijenjeni broj zahtjeva na osnovu tipičnih obrazaca kori | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -130,6 +132,7 @@ Procjene se zasnivaju na zapaženim obrascima zahtjeva: - GPT 5.6 Luna — 1,000 ulaznih, 50,000 keširanih, 220 izlaznih tokena po zahtjevu - Kimi K3 — 1,050 ulaznih, 76,500 keširanih, 300 izlaznih tokena po zahtjevu - Kimi K2.7/K2.6 — 870 ulaznih, 55,000 keširanih, 200 izlaznih tokena po zahtjevu +- LongCat-2.0 — 920 ulaznih, 88,900 keširanih, 200 izlaznih tokena po zahtjevu - DeepSeek V4 Pro — 750 ulaznih, 82,000 keširanih, 290 izlaznih tokena po zahtjevu - DeepSeek V4 Flash — 410 ulaznih, 71,300 keširanih, 310 izlaznih tokena po zahtjevu - DeepSeek V4 Flash Vision Exp — 410 ulaznih, 71,300 keširanih, 310 izlaznih tokena po zahtjevu @@ -157,6 +160,7 @@ Procjene se također zasnivaju na sljedećim cijenama po 1M tokena i mjesečnoj | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -228,6 +232,7 @@ Također možete pristupiti Go modelima putem sljedećih API endpointa. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -272,6 +277,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | Ne koristi se | 0 dana | | Kimi K2.7 Code | Ne koristi se | 0 dana | | Kimi K2.6 | Ne koristi se | 0 dana | +| LongCat-2.0 | Ne koristi se | 0 dana | | MiMo-V2.5-Pro | Ne koristi se | 0 dana | | MiMo-V2.5 | Ne koristi se | 0 dana | | Qwen3.8 Max | Ne koristi se | 0 dana | diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx index 4ce8e70fb7c3..75da1bb34e7b 100644 --- a/packages/web/src/content/docs/da/go.mdx +++ b/packages/web/src/content/docs/da/go.mdx @@ -67,6 +67,7 @@ Den nuværende liste over modeller inkluderer: - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -108,6 +109,7 @@ Tabellen nedenfor giver et estimeret antal anmodninger baseret på typiske Go-fo | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -130,6 +132,7 @@ Estimaterne er baseret på observerede anmodningsmønstre: - GPT 5.6 Luna — 1.000 input, 50.000 cachelagrede, 220 output-tokens pr. anmodning - Kimi K3 — 1.050 input, 76.500 cachelagrede, 300 output-tokens pr. anmodning - Kimi K2.7/K2.6 — 870 input, 55.000 cachelagrede, 200 output-tokens pr. anmodning +- LongCat-2.0 — 920 input, 88.900 cachelagrede, 200 output-tokens pr. anmodning - DeepSeek V4 Pro — 750 input, 82.000 cachelagrede, 290 output-tokens pr. anmodning - DeepSeek V4 Flash — 410 input, 71.300 cachelagrede, 310 output-tokens pr. anmodning - DeepSeek V4 Flash Vision Exp — 410 input, 71.300 cachelagrede, 310 output-tokens pr. anmodning @@ -157,6 +160,7 @@ Estimaterne er også baseret på følgende priser pr. 1M tokens og det månedlig | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -228,6 +232,7 @@ Du kan også få adgang til Go-modeller gennem følgende API-endpoints. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -272,6 +277,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | Ikke brugt | 0 dage | | Kimi K2.7 Code | Ikke brugt | 0 dage | | Kimi K2.6 | Ikke brugt | 0 dage | +| LongCat-2.0 | Ikke brugt | 0 dage | | MiMo-V2.5-Pro | Ikke brugt | 0 dage | | MiMo-V2.5 | Ikke brugt | 0 dage | | Qwen3.8 Max | Ikke brugt | 0 dage | diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx index 21dda2a73bb3..21ba15452518 100644 --- a/packages/web/src/content/docs/de/go.mdx +++ b/packages/web/src/content/docs/de/go.mdx @@ -59,6 +59,7 @@ Die aktuelle Liste der Modelle umfasst: - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -100,6 +101,7 @@ Die folgende Tabelle zeigt eine geschätzte Anzahl von Anfragen basierend auf ty | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -122,6 +124,7 @@ Die Schätzungen basieren auf beobachteten Anfragemustern: - GPT 5.6 Luna — 1.000 Input-, 50.000 Cached-, 220 Output-Tokens pro Anfrage - Kimi K3 — 1.050 Input-, 76.500 Cached-, 300 Output-Tokens pro Anfrage - Kimi K2.7/K2.6 — 870 Input-, 55.000 Cached-, 200 Output-Tokens pro Anfrage +- LongCat-2.0 — 920 Input-, 88.900 Cached-, 200 Output-Tokens pro Anfrage - DeepSeek V4 Pro — 750 Input-, 82.000 Cached-, 290 Output-Tokens pro Anfrage - DeepSeek V4 Flash — 410 Input-, 71.300 Cached-, 310 Output-Tokens pro Anfrage - DeepSeek V4 Flash Vision Exp — 410 Input-, 71.300 Cached-, 310 Output-Tokens pro Anfrage @@ -149,6 +152,7 @@ Die Schätzungen basieren außerdem auf den folgenden Preisen pro 1M Tokens und | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -218,6 +222,7 @@ Du kannst auf die Go-Modelle auch über die folgenden API-Endpunkte zugreifen. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -260,6 +265,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | Nicht verwendet | 0 Tage | | Kimi K2.7 Code | Nicht verwendet | 0 Tage | | Kimi K2.6 | Nicht verwendet | 0 Tage | +| LongCat-2.0 | Nicht verwendet | 0 Tage | | MiMo-V2.5-Pro | Nicht verwendet | 0 Tage | | MiMo-V2.5 | Nicht verwendet | 0 Tage | | Qwen3.8 Max | Nicht verwendet | 0 Tage | diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index ac1d07c01322..4687c1897425 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -67,6 +67,7 @@ La lista actual de modelos incluye: - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -108,6 +109,7 @@ La siguiente tabla proporciona una cantidad estimada de peticiones basada en los | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -130,6 +132,7 @@ Las estimaciones se basan en los patrones de peticiones observados: - GPT 5.6 Luna — 1,000 tokens de entrada, 50,000 en caché, 220 tokens de salida por petición - Kimi K3 — 1,050 tokens de entrada, 76,500 en caché, 300 tokens de salida por petición - Kimi K2.7/K2.6 — 870 tokens de entrada, 55,000 en caché, 200 tokens de salida por petición +- LongCat-2.0 — 920 tokens de entrada, 88,900 en caché, 200 tokens de salida por petición - DeepSeek V4 Pro — 750 tokens de entrada, 82,000 en caché, 290 tokens de salida por petición - DeepSeek V4 Flash — 410 tokens de entrada, 71,300 en caché, 310 tokens de salida por petición - DeepSeek V4 Flash Vision Exp — 410 tokens de entrada, 71,300 en caché, 310 tokens de salida por petición @@ -157,6 +160,7 @@ Las estimaciones también se basan en los siguientes precios por 1M tokens y en | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -228,6 +232,7 @@ También puedes acceder a los modelos de Go a través de los siguientes endpoint | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -272,6 +277,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | No utilizado | 0 días | | Kimi K2.7 Code | No utilizado | 0 días | | Kimi K2.6 | No utilizado | 0 días | +| LongCat-2.0 | No utilizado | 0 días | | MiMo-V2.5-Pro | No utilizado | 0 días | | MiMo-V2.5 | No utilizado | 0 días | | Qwen3.8 Max | No utilizado | 0 días | diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx index f487a6e944c2..695858c56096 100644 --- a/packages/web/src/content/docs/fr/go.mdx +++ b/packages/web/src/content/docs/fr/go.mdx @@ -57,6 +57,7 @@ La liste actuelle des modèles comprend : - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -98,6 +99,7 @@ Le tableau ci-dessous fournit une estimation du nombre de requêtes basée sur d | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -120,6 +122,7 @@ Les estimations sont basées sur les schémas de requêtes observés : - GPT 5.6 Luna — 1,000 tokens en entrée, 50,000 en cache, 220 tokens en sortie par requête - Kimi K3 — 1,050 tokens en entrée, 76,500 en cache, 300 tokens en sortie par requête - Kimi K2.7/K2.6 — 870 tokens en entrée, 55,000 en cache, 200 tokens en sortie par requête +- LongCat-2.0 — 920 tokens en entrée, 88,900 en cache, 200 tokens en sortie par requête - DeepSeek V4 Pro — 750 tokens en entrée, 82,000 en cache, 290 tokens en sortie par requête - DeepSeek V4 Flash — 410 tokens en entrée, 71,300 en cache, 310 tokens en sortie par requête - DeepSeek V4 Flash Vision Exp — 410 tokens en entrée, 71,300 en cache, 310 tokens en sortie par requête @@ -147,6 +150,7 @@ Les estimations sont également basées sur les prix suivants par 1M tokens et s | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -216,6 +220,7 @@ Vous pouvez également accéder aux modèles Go via les points de terminaison d' | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -258,6 +263,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | Non utilisé | 0 jour | | Kimi K2.7 Code | Non utilisé | 0 jour | | Kimi K2.6 | Non utilisé | 0 jour | +| LongCat-2.0 | Non utilisé | 0 jour | | MiMo-V2.5-Pro | Non utilisé | 0 jour | | MiMo-V2.5 | Non utilisé | 0 jour | | Qwen3.8 Max | Non utilisé | 0 jour | diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index ffab0d7a542a..d909d215f09c 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -67,6 +67,7 @@ The current list of models includes: - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -108,6 +109,7 @@ The table below provides an estimated request count based on typical Go usage pa | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -130,6 +132,7 @@ The estimates are based on observed request patterns: - GPT 5.6 Luna — 1,000 input, 50,000 cached, 220 output tokens per request - Kimi K3 — 1,050 input, 76,500 cached, 300 output tokens per request - Kimi K2.7/K2.6 — 870 input, 55,000 cached, 200 output tokens per request +- LongCat-2.0 — 920 input, 88,900 cached, 200 output tokens per request - DeepSeek V4 Pro — 750 input, 82,000 cached, 290 output tokens per request - DeepSeek V4 Flash — 410 input, 71,300 cached, 310 output tokens per request - DeepSeek V4 Flash Vision Exp — 410 input, 71,300 cached, 310 output tokens per request @@ -157,6 +160,7 @@ The estimates are also based on the following prices per 1M tokens and the month | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -228,6 +232,7 @@ You can also access Go models through the following API endpoints. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -272,6 +277,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | Not used | 0 days | | Kimi K2.7 Code | Not used | 0 days | | Kimi K2.6 | Not used | 0 days | +| LongCat-2.0 | Not used | 0 days | | MiMo-V2.5-Pro | Not used | 0 days | | MiMo-V2.5 | Not used | 0 days | | Qwen3.8 Max | Not used | 0 days | diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx index 7a0d28ad48c9..8efc91907976 100644 --- a/packages/web/src/content/docs/it/go.mdx +++ b/packages/web/src/content/docs/it/go.mdx @@ -65,6 +65,7 @@ L'elenco attuale dei modelli include: - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -106,6 +107,7 @@ La tabella seguente fornisce una stima del conteggio delle richieste in base a p | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -128,6 +130,7 @@ Le stime si basano sui pattern di richieste osservati: - GPT 5.6 Luna — 1.000 token di input, 50.000 in cache, 220 token di output per richiesta - Kimi K3 — 1.050 di input, 76.500 in cache, 300 token di output per richiesta - Kimi K2.7/K2.6 — 870 di input, 55.000 in cache, 200 token di output per richiesta +- LongCat-2.0 — 920 di input, 88.900 in cache, 200 token di output per richiesta - DeepSeek V4 Pro — 750 di input, 82.000 in cache, 290 token di output per richiesta - DeepSeek V4 Flash — 410 di input, 71.300 in cache, 310 token di output per richiesta - DeepSeek V4 Flash Vision Exp — 410 di input, 71.300 in cache, 310 token di output per richiesta @@ -155,6 +158,7 @@ Le stime si basano anche sui seguenti prezzi per 1M token e sull'utilizzo mensil | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -226,6 +230,7 @@ Puoi anche accedere ai modelli Go tramite i seguenti endpoint API. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -270,6 +275,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | Non utilizzato | 0 giorni | | Kimi K2.7 Code | Non utilizzato | 0 giorni | | Kimi K2.6 | Non utilizzato | 0 giorni | +| LongCat-2.0 | Non utilizzato | 0 giorni | | MiMo-V2.5-Pro | Non utilizzato | 0 giorni | | MiMo-V2.5 | Non utilizzato | 0 giorni | | Qwen3.8 Max | Non utilizzato | 0 giorni | diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx index 74da619c7d48..0cbaad8b3bb2 100644 --- a/packages/web/src/content/docs/ja/go.mdx +++ b/packages/web/src/content/docs/ja/go.mdx @@ -57,6 +57,7 @@ OpenCode Goをサブスクライブできるのは、1つのワークスペー - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -98,6 +99,7 @@ OpenCode Goには以下の制限が含まれています: | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -120,6 +122,7 @@ OpenCode Goには以下の制限が含まれています: - GPT 5.6 Luna — リクエストあたり 入力 1,000トークン、キャッシュ 50,000トークン、出力 220トークン - Kimi K3 — リクエストあたり 入力 1,050トークン、キャッシュ 76,500トークン、出力 300トークン - Kimi K2.7/K2.6 — リクエストあたり 入力 870トークン、キャッシュ 55,000トークン、出力 200トークン +- LongCat-2.0 — リクエストあたり 入力 920トークン、キャッシュ 88,900トークン、出力 200トークン - DeepSeek V4 Pro — リクエストあたり 入力 750トークン、キャッシュ 82,000トークン、出力 290トークン - DeepSeek V4 Flash — リクエストあたり 入力 410トークン、キャッシュ 71,300トークン、出力 310トークン - DeepSeek V4 Flash Vision Exp — リクエストあたり 入力 410トークン、キャッシュ 71,300トークン、出力 310トークン @@ -147,6 +150,7 @@ OpenCode Goには以下の制限が含まれています: | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -216,6 +220,7 @@ Goでは月額$10を支払い、その6倍の利用枠を提供することを | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -258,6 +263,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | 使用なし | 0日 | | Kimi K2.7 Code | 使用なし | 0日 | | Kimi K2.6 | 使用なし | 0日 | +| LongCat-2.0 | 使用なし | 0日 | | MiMo-V2.5-Pro | 使用なし | 0日 | | MiMo-V2.5 | 使用なし | 0日 | | Qwen3.8 Max | 使用なし | 0日 | diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx index f2f1a614fa5f..f4d9d3ae3313 100644 --- a/packages/web/src/content/docs/ko/go.mdx +++ b/packages/web/src/content/docs/ko/go.mdx @@ -57,6 +57,7 @@ workspace당 한 명의 멤버만 OpenCode Go를 구독할 수 있습니다. - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -98,6 +99,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -120,6 +122,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. - GPT 5.6 Luna — 요청당 입력 토큰 1,000개, 캐시 토큰 50,000개, 출력 토큰 220개 - Kimi K3 — 요청당 입력 1,050, 캐시 76,500, 출력 토큰 300 - Kimi K2.7/K2.6 — 요청당 입력 870, 캐시 55,000, 출력 토큰 200 +- LongCat-2.0 — 요청당 입력 920, 캐시 88,900, 출력 토큰 200 - DeepSeek V4 Pro — 요청당 입력 750, 캐시 82,000, 출력 토큰 290 - DeepSeek V4 Flash — 요청당 입력 410, 캐시 71,300, 출력 토큰 310 - DeepSeek V4 Flash Vision Exp — 요청당 입력 410, 캐시 71,300, 출력 토큰 310 @@ -147,6 +150,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -216,6 +220,7 @@ Go에서는 월 $10를 지불하며, 저희는 그 6배의 사용량을 제공 | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -258,6 +263,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | 사용되지 않음 | 0일 | | Kimi K2.7 Code | 사용되지 않음 | 0일 | | Kimi K2.6 | 사용되지 않음 | 0일 | +| LongCat-2.0 | 사용되지 않음 | 0일 | | MiMo-V2.5-Pro | 사용되지 않음 | 0일 | | MiMo-V2.5 | 사용되지 않음 | 0일 | | Qwen3.8 Max | 사용되지 않음 | 0일 | diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx index 5c6f875cf2cb..460c2e787d0e 100644 --- a/packages/web/src/content/docs/nb/go.mdx +++ b/packages/web/src/content/docs/nb/go.mdx @@ -67,6 +67,7 @@ Den nåværende listen over modeller inkluderer: - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -108,6 +109,7 @@ Tabellen nedenfor gir et estimert antall forespørsler basert på typiske bruksm | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -130,6 +132,7 @@ Estimatene er basert på observerte forespørselsmønstre: - GPT 5.6 Luna — 1 000 input, 50 000 bufret, 220 output-tokens per forespørsel - Kimi K3 — 1 050 input, 76 500 bufret, 300 output-tokens per forespørsel - Kimi K2.7/K2.6 — 870 input, 55 000 bufret, 200 output-tokens per forespørsel +- LongCat-2.0 — 920 input, 88 900 bufret, 200 output-tokens per forespørsel - DeepSeek V4 Pro — 750 input, 82 000 bufret, 290 output-tokens per forespørsel - DeepSeek V4 Flash — 410 input, 71 300 bufret, 310 output-tokens per forespørsel - DeepSeek V4 Flash Vision Exp — 410 input, 71 300 bufret, 310 output-tokens per forespørsel @@ -157,6 +160,7 @@ Estimatene er også basert på følgende priser per 1M tokens og den månedlige | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -228,6 +232,7 @@ Du kan også få tilgang til Go-modeller gjennom følgende API-endepunkter. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -272,6 +277,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | Brukes ikke | 0 dager | | Kimi K2.7 Code | Brukes ikke | 0 dager | | Kimi K2.6 | Brukes ikke | 0 dager | +| LongCat-2.0 | Brukes ikke | 0 dager | | MiMo-V2.5-Pro | Brukes ikke | 0 dager | | MiMo-V2.5 | Brukes ikke | 0 dager | | Qwen3.8 Max | Brukes ikke | 0 dager | diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx index 8b27bb8c6560..6dfaf37953a2 100644 --- a/packages/web/src/content/docs/pl/go.mdx +++ b/packages/web/src/content/docs/pl/go.mdx @@ -61,6 +61,7 @@ Obecna lista modeli obejmuje: - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -102,6 +103,7 @@ Poniższa tabela przedstawia szacunkową liczbę żądań na podstawie typowych | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -124,6 +126,7 @@ Szacunki te opierają się na zaobserwowanych wzorcach żądań: - GPT 5.6 Luna — 1 000 tokenów wejściowych, 50 000 w pamięci podręcznej, 220 tokenów wyjściowych na żądanie - Kimi K3 — 1 050 tokenów wejściowych, 76 500 w pamięci podręcznej, 300 tokenów wyjściowych na żądanie - Kimi K2.7/K2.6 — 870 tokenów wejściowych, 55 000 w pamięci podręcznej, 200 tokenów wyjściowych na żądanie +- LongCat-2.0 — 920 tokenów wejściowych, 88 900 w pamięci podręcznej, 200 tokenów wyjściowych na żądanie - DeepSeek V4 Pro — 750 tokenów wejściowych, 82 000 w pamięci podręcznej, 290 tokenów wyjściowych na żądanie - DeepSeek V4 Flash — 410 tokenów wejściowych, 71 300 w pamięci podręcznej, 310 tokenów wyjściowych na żądanie - DeepSeek V4 Flash Vision Exp — 410 tokenów wejściowych, 71 300 w pamięci podręcznej, 310 tokenów wyjściowych na żądanie @@ -151,6 +154,7 @@ Szacunki opierają się również na następujących cenach za 1M tokenów oraz | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -220,6 +224,7 @@ Możesz również uzyskać dostęp do modeli Go za pośrednictwem następującyc | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -264,6 +269,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | Niewykorzystywane | 0 dni | | Kimi K2.7 Code | Niewykorzystywane | 0 dni | | Kimi K2.6 | Niewykorzystywane | 0 dni | +| LongCat-2.0 | Niewykorzystywane | 0 dni | | MiMo-V2.5-Pro | Niewykorzystywane | 0 dni | | MiMo-V2.5 | Niewykorzystywane | 0 dni | | Qwen3.8 Max | Niewykorzystywane | 0 dni | diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index 518656366121..14021d2ffea8 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -67,6 +67,7 @@ A lista atual de modelos inclui: - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -108,6 +109,7 @@ A tabela abaixo fornece uma contagem estimada de requisições com base nos padr | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -130,6 +132,7 @@ As estimativas se baseiam nos padrões de requisições observados: - GPT 5.6 Luna — 1.000 tokens de entrada, 50.000 em cache, 220 tokens de saída por requisição - Kimi K3 — 1.050 tokens de entrada, 76.500 em cache, 300 tokens de saída por requisição - Kimi K2.7/K2.6 — 870 tokens de entrada, 55.000 em cache, 200 tokens de saída por requisição +- LongCat-2.0 — 920 tokens de entrada, 88.900 em cache, 200 tokens de saída por requisição - DeepSeek V4 Pro — 750 tokens de entrada, 82.000 em cache, 290 tokens de saída por requisição - DeepSeek V4 Flash — 410 tokens de entrada, 71.300 em cache, 310 tokens de saída por requisição - DeepSeek V4 Flash Vision Exp — 410 tokens de entrada, 71.300 em cache, 310 tokens de saída por requisição @@ -157,6 +160,7 @@ As estimativas também se baseiam nos seguintes preços por 1M tokens e no uso m | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -228,6 +232,7 @@ Você também pode acessar os modelos do Go através dos seguintes endpoints de | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -272,6 +277,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | Não usado | 0 dias | | Kimi K2.7 Code | Não usado | 0 dias | | Kimi K2.6 | Não usado | 0 dias | +| LongCat-2.0 | Não usado | 0 dias | | MiMo-V2.5-Pro | Não usado | 0 dias | | MiMo-V2.5 | Não usado | 0 dias | | Qwen3.8 Max | Não usado | 0 dias | diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx index 5a8681c8d30f..900ddb98505d 100644 --- a/packages/web/src/content/docs/ru/go.mdx +++ b/packages/web/src/content/docs/ru/go.mdx @@ -67,6 +67,7 @@ OpenCode Go работает так же, как и любой другой пр - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -108,6 +109,7 @@ OpenCode Go включает следующие лимиты: | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -130,6 +132,7 @@ OpenCode Go включает следующие лимиты: - GPT 5.6 Luna — 1,000 входных, 50,000 кешированных, 220 выходных токенов на запрос - Kimi K3 — 1,050 входных, 76,500 кешированных, 300 выходных токенов на запрос - Kimi K2.7/K2.6 — 870 входных, 55,000 кешированных, 200 выходных токенов на запрос +- LongCat-2.0 — 920 входных, 88,900 кешированных, 200 выходных токенов на запрос - DeepSeek V4 Pro — 750 входных, 82,000 кешированных, 290 выходных токенов на запрос - DeepSeek V4 Flash — 410 входных, 71,300 кешированных, 310 выходных токенов на запрос - DeepSeek V4 Flash Vision Exp — 410 входных, 71,300 кешированных, 310 выходных токенов на запрос @@ -157,6 +160,7 @@ OpenCode Go включает следующие лимиты: | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -228,6 +232,7 @@ OpenCode Go включает следующие лимиты: | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -272,6 +277,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | Не используется | 0 дней | | Kimi K2.7 Code | Не используется | 0 дней | | Kimi K2.6 | Не используется | 0 дней | +| LongCat-2.0 | Не используется | 0 дней | | MiMo-V2.5-Pro | Не используется | 0 дней | | MiMo-V2.5 | Не используется | 0 дней | | Qwen3.8 Max | Не используется | 0 дней | diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx index 30b4c28fe182..3fd544accc74 100644 --- a/packages/web/src/content/docs/th/go.mdx +++ b/packages/web/src/content/docs/th/go.mdx @@ -57,6 +57,7 @@ OpenCode Go ทำงานเหมือนกับผู้ให้บร - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -98,6 +99,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -120,6 +122,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: - GPT 5.6 Luna — 1,000 input, 50,000 cached, 220 output tokens ต่อ request - Kimi K3 — 1,050 input, 76,500 cached, 300 output tokens ต่อ request - Kimi K2.7/K2.6 — 870 input, 55,000 cached, 200 output tokens ต่อ request +- LongCat-2.0 — 920 input, 88,900 cached, 200 output tokens ต่อ request - DeepSeek V4 Pro — 750 input, 82,000 cached, 290 output tokens ต่อ request - DeepSeek V4 Flash — 410 input, 71,300 cached, 310 output tokens ต่อ request - DeepSeek V4 Flash Vision Exp — 410 input, 71,300 cached, 310 output tokens ต่อ request @@ -147,6 +150,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -216,6 +220,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -258,6 +263,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | ไม่นำไปใช้ | 0 วัน | | Kimi K2.7 Code | ไม่นำไปใช้ | 0 วัน | | Kimi K2.6 | ไม่นำไปใช้ | 0 วัน | +| LongCat-2.0 | ไม่นำไปใช้ | 0 วัน | | MiMo-V2.5-Pro | ไม่นำไปใช้ | 0 วัน | | MiMo-V2.5 | ไม่นำไปใช้ | 0 วัน | | Qwen3.8 Max | ไม่นำไปใช้ | 0 วัน | diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx index 82060a66bb95..764cfc0d407e 100644 --- a/packages/web/src/content/docs/tr/go.mdx +++ b/packages/web/src/content/docs/tr/go.mdx @@ -57,6 +57,7 @@ Mevcut model listesi şunları içerir: - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -98,6 +99,7 @@ Aşağıdaki tablo, tipik Go kullanım modellerine dayalı tahmini bir istek say | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -120,6 +122,7 @@ Tahminler, gözlemlenen istek modellerine dayanır: - GPT 5.6 Luna — İstek başına 1.000 girdi, 50.000 önbelleğe alınmış, 220 çıktı token'ı - Kimi K3 — İstek başına 1.050 girdi, 76.500 önbelleğe alınmış, 300 çıktı token'ı - Kimi K2.7/K2.6 — İstek başına 870 girdi, 55.000 önbelleğe alınmış, 200 çıktı token'ı +- LongCat-2.0 — İstek başına 920 girdi, 88.900 önbelleğe alınmış, 200 çıktı token'ı - DeepSeek V4 Pro — İstek başına 750 girdi, 82.000 önbelleğe alınmış, 290 çıktı token'ı - DeepSeek V4 Flash — İstek başına 410 girdi, 71.300 önbelleğe alınmış, 310 çıktı token'ı - DeepSeek V4 Flash Vision Exp — İstek başına 410 girdi, 71.300 önbelleğe alınmış, 310 çıktı token'ı @@ -147,6 +150,7 @@ Tahminler ayrıca 1M token başına aşağıdaki fiyatlara ve her modelle birlik | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -216,6 +220,7 @@ Go modellerine aşağıdaki API uç noktaları aracılığıyla da erişebilirsi | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -258,6 +263,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | Kullanılmaz | 0 gün | | Kimi K2.7 Code | Kullanılmaz | 0 gün | | Kimi K2.6 | Kullanılmaz | 0 gün | +| LongCat-2.0 | Kullanılmaz | 0 gün | | MiMo-V2.5-Pro | Kullanılmaz | 0 gün | | MiMo-V2.5 | Kullanılmaz | 0 gün | | Qwen3.8 Max | Kullanılmaz | 0 gün | diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx index 24af3e16a3ce..c59d283804f9 100644 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ b/packages/web/src/content/docs/zh-cn/go.mdx @@ -57,6 +57,7 @@ OpenCode Go 的工作方式与 OpenCode 中的其他提供商一样。 - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -98,6 +99,7 @@ OpenCode Go 包含以下限制: | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -120,6 +122,7 @@ OpenCode Go 包含以下限制: - GPT 5.6 Luna — 每次请求 1,000 个输入 token,50,000 个缓存 token,220 个输出 token - Kimi K3 — 每次请求 1,050 个输入 token,76,500 个缓存 token,300 个输出 token - Kimi K2.7/K2.6 — 每次请求 870 个输入 token,55,000 个缓存 token,200 个输出 token +- LongCat-2.0 — 每次请求 920 个输入 token,88,900 个缓存 token,200 个输出 token - DeepSeek V4 Pro — 每次请求 750 个输入 token,82,000 个缓存 token,290 个输出 token - DeepSeek V4 Flash — 每次请求 410 个输入 token,71,300 个缓存 token,310 个输出 token - DeepSeek V4 Flash Vision Exp — 每次请求 410 个输入 token,71,300 个缓存 token,310 个输出 token @@ -147,6 +150,7 @@ OpenCode Go 包含以下限制: | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -216,6 +220,7 @@ OpenCode Go 包含以下限制: | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -258,6 +263,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | 不使用 | 0 天 | | Kimi K2.7 Code | 不使用 | 0 天 | | Kimi K2.6 | 不使用 | 0 天 | +| LongCat-2.0 | 不使用 | 0 天 | | MiMo-V2.5-Pro | 不使用 | 0 天 | | MiMo-V2.5 | 不使用 | 0 天 | | Qwen3.8 Max | 不使用 | 0 天 | diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx index eef6371785a0..db3d06c79356 100644 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ b/packages/web/src/content/docs/zh-tw/go.mdx @@ -57,6 +57,7 @@ OpenCode Go 的運作方式與 OpenCode 中的任何其他供應商相同。 - **Kimi K3** - **Kimi K2.7 Code** - **Kimi K2.6** +- **LongCat-2.0** - **MiMo-V2.5** - **MiMo-V2.5-Pro** - **MiniMax M3** @@ -98,6 +99,7 @@ OpenCode Go 包含以下限制: | Kimi K3 | 110 | 250 | 490 | | Kimi K2.7 Code | 1,350 | 3,380 | 6,750 | | Kimi K2.6 | 1,150 | 2,880 | 5,750 | +| LongCat-2.0 | 11,400 | 28,600 | 57,200 | | MiMo-V2.5 | 30,100 | 75,200 | 150,400 | | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | @@ -120,6 +122,7 @@ OpenCode Go 包含以下限制: - GPT 5.6 Luna — 每次請求 1,000 個輸入 token、50,000 個快取 token、220 個輸出 token - Kimi K3 — 每次請求 1,050 個輸入 token、76,500 個快取 token、300 個輸出 token - Kimi K2.7/K2.6 — 每次請求 870 個輸入 token、55,000 個快取 token、200 個輸出 token +- LongCat-2.0 — 每次請求 920 個輸入 token、88,900 個快取 token、200 個輸出 token - DeepSeek V4 Pro — 每次請求 750 個輸入 token、82,000 個快取 token、290 個輸出 token - DeepSeek V4 Flash — 每次請求 410 個輸入 token、71,300 個快取 token、310 個輸出 token - DeepSeek V4 Flash Vision Exp — 每次請求 410 個輸入 token、71,300 個快取 token、310 個輸出 token @@ -147,6 +150,7 @@ OpenCode Go 包含以下限制: | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | @@ -216,6 +220,7 @@ OpenCode Go 包含以下限制: | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| LongCat-2.0 | longcat-2.0 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | DeepSeek V4 Flash Vision Exp | deepseek-v4-flash-vision-exp | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -258,6 +263,7 @@ https://opencode.ai/zen/go/v1/models | Kimi K3 | 不使用 | 0 天 | | Kimi K2.7 Code | 不使用 | 0 天 | | Kimi K2.6 | 不使用 | 0 天 | +| LongCat-2.0 | 不使用 | 0 天 | | MiMo-V2.5-Pro | 不使用 | 0 天 | | MiMo-V2.5 | 不使用 | 0 天 | | Qwen3.8 Max | 不使用 | 0 天 | From 9fa27bd41c3dc61603553f1ac56ae4446f26faee Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Mon, 24 Aug 2026 10:04:12 +0000 Subject: [PATCH 010/185] chore: generate --- packages/web/src/content/docs/bs/go.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index 6215b938b3a4..b8841d99c29a 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -160,7 +160,7 @@ Procjene se također zasnivaju na sljedećim cijenama po 1M tokena i mjesečnoj | Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | | Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | | Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | -| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | | MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | | MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | From 105b398c2a9ff2f16eaae409836e1dbc4d37671a Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Mon, 24 Aug 2026 16:22:48 +0530 Subject: [PATCH 011/185] docs(acp): update Zed custom agent config (#44658) Co-authored-by: nexxeln <95541290+nexxeln@users.noreply.github.com> --- packages/web/src/content/docs/acp.mdx | 5 ++++- packages/web/src/content/docs/ar/acp.mdx | 5 ++++- packages/web/src/content/docs/bs/acp.mdx | 5 ++++- packages/web/src/content/docs/da/acp.mdx | 5 ++++- packages/web/src/content/docs/de/acp.mdx | 5 ++++- packages/web/src/content/docs/es/acp.mdx | 5 ++++- packages/web/src/content/docs/fr/acp.mdx | 5 ++++- packages/web/src/content/docs/it/acp.mdx | 5 ++++- packages/web/src/content/docs/ja/acp.mdx | 5 ++++- packages/web/src/content/docs/ko/acp.mdx | 5 ++++- packages/web/src/content/docs/nb/acp.mdx | 5 ++++- packages/web/src/content/docs/pl/acp.mdx | 5 ++++- packages/web/src/content/docs/pt-br/acp.mdx | 5 ++++- packages/web/src/content/docs/ru/acp.mdx | 5 ++++- packages/web/src/content/docs/th/acp.mdx | 5 ++++- packages/web/src/content/docs/tr/acp.mdx | 5 ++++- packages/web/src/content/docs/zh-cn/acp.mdx | 5 ++++- packages/web/src/content/docs/zh-tw/acp.mdx | 5 ++++- 18 files changed, 72 insertions(+), 18 deletions(-) diff --git a/packages/web/src/content/docs/acp.mdx b/packages/web/src/content/docs/acp.mdx index 43d89eae1868..09c556998687 100644 --- a/packages/web/src/content/docs/acp.mdx +++ b/packages/web/src/content/docs/acp.mdx @@ -25,12 +25,15 @@ Below are examples for popular editors that support ACP. ### Zed -Add to your [Zed](https://zed.dev) configuration (`~/.config/zed/settings.json`): +Install OpenCode from the [Zed ACP Registry](https://zed.dev/docs/ai/external-agents#registry) by running `zed: acp registry` in the Command Palette. + +To use a custom OpenCode executable instead, add it to your [Zed](https://zed.dev) configuration (`~/.config/zed/settings.json`): ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/ar/acp.mdx b/packages/web/src/content/docs/ar/acp.mdx index 1919e4268211..c10246a1fe7c 100644 --- a/packages/web/src/content/docs/ar/acp.mdx +++ b/packages/web/src/content/docs/ar/acp.mdx @@ -25,12 +25,15 @@ ACP بروتوكول مفتوح يوحّد آلية التواصل بين محر ### Zed -أضف إلى إعدادات [Zed](https://zed.dev) (`~/.config/zed/settings.json`): +ثبّت OpenCode من [سجل ACP في Zed](https://zed.dev/docs/ai/external-agents#registry) عبر تشغيل `zed: acp registry` من لوحة الأوامر. + +لاستخدام ملف OpenCode تنفيذي مخصص بدلاً من ذلك، أضفه إلى إعدادات [Zed](https://zed.dev) (`~/.config/zed/settings.json`): ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/bs/acp.mdx b/packages/web/src/content/docs/bs/acp.mdx index a2b2707c8826..b4065b926727 100644 --- a/packages/web/src/content/docs/bs/acp.mdx +++ b/packages/web/src/content/docs/bs/acp.mdx @@ -25,12 +25,15 @@ Ispod su primjeri za popularne uređivače koji podržavaju ACP. ### Zed -Dodajte u svoju [Zed](https://zed.dev) konfiguraciju (`~/.config/zed/settings.json`): +Instalirajte OpenCode iz [Zed ACP registra](https://zed.dev/docs/ai/external-agents#registry) pokretanjem naredbe `zed: acp registry` u komandnoj paleti. + +Ako umjesto toga želite koristiti prilagođenu OpenCode izvršnu datoteku, dodajte je u svoju [Zed](https://zed.dev) konfiguraciju (`~/.config/zed/settings.json`): ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/da/acp.mdx b/packages/web/src/content/docs/da/acp.mdx index 06cdc89c40c4..dee1a6f6be86 100644 --- a/packages/web/src/content/docs/da/acp.mdx +++ b/packages/web/src/content/docs/da/acp.mdx @@ -25,12 +25,15 @@ Nedenfor er eksempler på populære editorer, der understøtter ACP. ### Zed -Føj til din [Zed](https://zed.dev)-konfiguration (`~/.config/zed/settings.json`): +Installer OpenCode fra [Zeds ACP-register](https://zed.dev/docs/ai/external-agents#registry) ved at køre `zed: acp registry` i kommandopaletten. + +Hvis du i stedet vil bruge en brugerdefineret OpenCode-eksekverbar fil, skal du føje den til din [Zed](https://zed.dev)-konfiguration (`~/.config/zed/settings.json`): ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/de/acp.mdx b/packages/web/src/content/docs/de/acp.mdx index d63a13c5277f..f8d75ff8c971 100644 --- a/packages/web/src/content/docs/de/acp.mdx +++ b/packages/web/src/content/docs/de/acp.mdx @@ -25,12 +25,15 @@ Nachfolgend finden Sie Beispiele für beliebte Editoren, die ACP unterstützen. ### Zed -Fügen Sie Ihrer [Zed](https://zed.dev)-Konfiguration (`~/.config/zed/settings.json`) Folgendes hinzu: +Installieren Sie OpenCode aus der [Zed-ACP-Registry](https://zed.dev/docs/ai/external-agents#registry), indem Sie `zed: acp registry` in der Befehlspalette ausführen. + +Wenn Sie stattdessen eine benutzerdefinierte OpenCode-Programmdatei verwenden möchten, fügen Sie sie Ihrer [Zed](https://zed.dev)-Konfiguration (`~/.config/zed/settings.json`) hinzu: ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/es/acp.mdx b/packages/web/src/content/docs/es/acp.mdx index 6cc14669a984..aa9117f15a33 100644 --- a/packages/web/src/content/docs/es/acp.mdx +++ b/packages/web/src/content/docs/es/acp.mdx @@ -25,12 +25,15 @@ A continuación se muestran ejemplos de editores populares que admiten ACP. ### Zed -Agregue a su configuración [Zed](https://zed.dev) (`~/.config/zed/settings.json`): +Instale OpenCode desde el [registro ACP de Zed](https://zed.dev/docs/ai/external-agents#registry) ejecutando `zed: acp registry` en la paleta de comandos. + +Para usar un ejecutable personalizado de OpenCode, agréguelo a su configuración de [Zed](https://zed.dev) (`~/.config/zed/settings.json`): ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/fr/acp.mdx b/packages/web/src/content/docs/fr/acp.mdx index 81254d47927e..d1e4a4b2a579 100644 --- a/packages/web/src/content/docs/fr/acp.mdx +++ b/packages/web/src/content/docs/fr/acp.mdx @@ -25,12 +25,15 @@ Vous trouverez ci-dessous des exemples d'éditeurs populaires prenant en charge ### Zed -Ajoutez à votre configuration [Zed](https://zed.dev) (`~/.config/zed/settings.json`) : +Installez OpenCode depuis le [registre ACP de Zed](https://zed.dev/docs/ai/external-agents#registry) en exécutant `zed: acp registry` dans la palette de commandes. + +Pour utiliser plutôt un exécutable OpenCode personnalisé, ajoutez-le à votre configuration [Zed](https://zed.dev) (`~/.config/zed/settings.json`) : ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/it/acp.mdx b/packages/web/src/content/docs/it/acp.mdx index 046aba5f25c0..53e09545eb96 100644 --- a/packages/web/src/content/docs/it/acp.mdx +++ b/packages/web/src/content/docs/it/acp.mdx @@ -25,12 +25,15 @@ Qui sotto trovi esempi per editor popolari che supportano ACP. ### Zed -Aggiungi alla configurazione di [Zed](https://zed.dev) (`~/.config/zed/settings.json`): +Installa OpenCode dal [registro ACP di Zed](https://zed.dev/docs/ai/external-agents#registry) eseguendo `zed: acp registry` nella palette dei comandi. + +Per usare invece un eseguibile OpenCode personalizzato, aggiungilo alla configurazione di [Zed](https://zed.dev) (`~/.config/zed/settings.json`): ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/ja/acp.mdx b/packages/web/src/content/docs/ja/acp.mdx index f7b995bf39fb..ba3b04421d25 100644 --- a/packages/web/src/content/docs/ja/acp.mdx +++ b/packages/web/src/content/docs/ja/acp.mdx @@ -24,12 +24,15 @@ ACP 経由で OpenCode を使用するには、`opencode acp` コマンドを実 ### Zed -[Zed](https://zed.dev) 構成 (`~/.config/zed/settings.json`) に追加します。 +コマンドパレットで `zed: acp registry` を実行し、[Zed ACP レジストリ](https://zed.dev/docs/ai/external-agents#registry)から OpenCode をインストールします。 + +代わりにカスタムの OpenCode 実行ファイルを使用する場合は、[Zed](https://zed.dev) の設定 (`~/.config/zed/settings.json`) に追加します。 ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/ko/acp.mdx b/packages/web/src/content/docs/ko/acp.mdx index a9842f27090a..971904e7293e 100644 --- a/packages/web/src/content/docs/ko/acp.mdx +++ b/packages/web/src/content/docs/ko/acp.mdx @@ -25,12 +25,15 @@ ACP로 OpenCode를 사용하려면, 편집기에서 `opencode acp` 명령을 실 ### Zed -[Zed](https://zed.dev) config(`~/.config/zed/settings.json`)에 다음을 추가하세요. +명령 팔레트에서 `zed: acp registry`를 실행하여 [Zed ACP 레지스트리](https://zed.dev/docs/ai/external-agents#registry)에서 OpenCode를 설치하세요. + +대신 사용자 지정 OpenCode 실행 파일을 사용하려면 [Zed](https://zed.dev) 설정(`~/.config/zed/settings.json`)에 추가하세요. ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/nb/acp.mdx b/packages/web/src/content/docs/nb/acp.mdx index 23fbd06d22b1..3a2c0638387c 100644 --- a/packages/web/src/content/docs/nb/acp.mdx +++ b/packages/web/src/content/docs/nb/acp.mdx @@ -25,12 +25,15 @@ Nedenfor er eksempler på populære editorer som støtter ACP. ### Zed -Legg til i [Zed](https://zed.dev)-konfigurasjonen (`~/.config/zed/settings.json`): +Installer OpenCode fra [Zeds ACP-register](https://zed.dev/docs/ai/external-agents#registry) ved å kjøre `zed: acp registry` i kommandopaletten. + +Hvis du i stedet vil bruke en egendefinert OpenCode-kjørbar fil, legger du den til i [Zed](https://zed.dev)-konfigurasjonen (`~/.config/zed/settings.json`): ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/pl/acp.mdx b/packages/web/src/content/docs/pl/acp.mdx index 3b3c4720ecb9..c0599b73fe43 100644 --- a/packages/web/src/content/docs/pl/acp.mdx +++ b/packages/web/src/content/docs/pl/acp.mdx @@ -27,12 +27,15 @@ Poniżej znajdują się przykłady dla edytorów obsługujących ACP. ### Zed -Dodaj do konfiguracji [Zed](https://zed.dev) (`~/.config/zed/settings.json`): +Zainstaluj OpenCode z [rejestru ACP Zed](https://zed.dev/docs/ai/external-agents#registry), uruchamiając `zed: acp registry` w palecie poleceń. + +Aby zamiast tego użyć niestandardowego pliku wykonywalnego OpenCode, dodaj go do konfiguracji [Zed](https://zed.dev) (`~/.config/zed/settings.json`): ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/pt-br/acp.mdx b/packages/web/src/content/docs/pt-br/acp.mdx index 549f6cead7f3..4eb483ecdf6a 100644 --- a/packages/web/src/content/docs/pt-br/acp.mdx +++ b/packages/web/src/content/docs/pt-br/acp.mdx @@ -25,12 +25,15 @@ Abaixo estão exemplos para editores populares que suportam ACP. ### Zed -Adicione à sua configuração do [Zed](https://zed.dev) (`~/.config/zed/settings.json`): +Instale o OpenCode pelo [Registro ACP do Zed](https://zed.dev/docs/ai/external-agents#registry) executando `zed: acp registry` na Paleta de Comandos. + +Para usar um executável personalizado do OpenCode, adicione-o à configuração do [Zed](https://zed.dev) (`~/.config/zed/settings.json`): ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/ru/acp.mdx b/packages/web/src/content/docs/ru/acp.mdx index c4a6132fe5e1..a51476fbc6a9 100644 --- a/packages/web/src/content/docs/ru/acp.mdx +++ b/packages/web/src/content/docs/ru/acp.mdx @@ -25,12 +25,15 @@ ACP — это открытый протокол, который стандар ### Zed -Добавьте в конфигурацию [Zed](https://zed.dev) (`~/.config/zed/settings.json`): +Установите OpenCode из [реестра ACP Zed](https://zed.dev/docs/ai/external-agents#registry), выполнив `zed: acp registry` в палитре команд. + +Чтобы вместо этого использовать собственный исполняемый файл OpenCode, добавьте его в конфигурацию [Zed](https://zed.dev) (`~/.config/zed/settings.json`): ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/th/acp.mdx b/packages/web/src/content/docs/th/acp.mdx index f7850ed4077f..a02c8c69c256 100644 --- a/packages/web/src/content/docs/th/acp.mdx +++ b/packages/web/src/content/docs/th/acp.mdx @@ -25,12 +25,15 @@ ACP เป็นมาตรฐานเปิดสำหรับการส ### Zed -สำหรับ [Zed](https://zed.dev) (`~/.config/zed/settings.json`): +ติดตั้ง OpenCode จาก [รีจิสทรี ACP ของ Zed](https://zed.dev/docs/ai/external-agents#registry) โดยเรียกใช้ `zed: acp registry` ใน Command Palette + +หากต้องการใช้ไฟล์ปฏิบัติการ OpenCode แบบกำหนดเอง ให้เพิ่มลงในการตั้งค่า [Zed](https://zed.dev) (`~/.config/zed/settings.json`): ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/tr/acp.mdx b/packages/web/src/content/docs/tr/acp.mdx index abdfda09101e..c5020101cbed 100644 --- a/packages/web/src/content/docs/tr/acp.mdx +++ b/packages/web/src/content/docs/tr/acp.mdx @@ -25,12 +25,15 @@ Aşağıda ACP'yi destekleyen popüler düzenleyicilere ilişkin örnekler veril ### Zed -[Zed](https://zed.dev) yapılandırmanıza (`~/.config/zed/settings.json`) ekleyin: +Komut Paleti’nde `zed: acp registry` komutunu çalıştırarak OpenCode’u [Zed ACP Kayıt Defteri](https://zed.dev/docs/ai/external-agents#registry) üzerinden yükleyin. + +Bunun yerine özel bir OpenCode çalıştırılabilir dosyası kullanmak için [Zed](https://zed.dev) yapılandırmanıza (`~/.config/zed/settings.json`) ekleyin: ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/zh-cn/acp.mdx b/packages/web/src/content/docs/zh-cn/acp.mdx index b07520c5e76c..7d88084060c9 100644 --- a/packages/web/src/content/docs/zh-cn/acp.mdx +++ b/packages/web/src/content/docs/zh-cn/acp.mdx @@ -25,12 +25,15 @@ ACP 是一个开放协议,用于标准化代码编辑器与 AI 编码代理之 ### Zed -添加到你的 [Zed](https://zed.dev) 配置文件(`~/.config/zed/settings.json`)中: +在命令面板中运行 `zed: acp registry`,从 [Zed ACP 注册表](https://zed.dev/docs/ai/external-agents#registry)安装 OpenCode。 + +如果要改用自定义 OpenCode 可执行文件,请将其添加到 [Zed](https://zed.dev) 配置文件(`~/.config/zed/settings.json`)中: ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } diff --git a/packages/web/src/content/docs/zh-tw/acp.mdx b/packages/web/src/content/docs/zh-tw/acp.mdx index 4dc7baef3ef5..0d2f7ebae27d 100644 --- a/packages/web/src/content/docs/zh-tw/acp.mdx +++ b/packages/web/src/content/docs/zh-tw/acp.mdx @@ -25,12 +25,15 @@ ACP 是一個開放協議,用於標準化程式碼編輯器與 AI 編碼代理 ### Zed -新增到你的 [Zed](https://zed.dev) 設定檔(`~/.config/zed/settings.json`)中: +在命令面板中執行 `zed: acp registry`,從 [Zed ACP 登錄檔](https://zed.dev/docs/ai/external-agents#registry)安裝 OpenCode。 + +如果要改用自訂 OpenCode 執行檔,請將它新增到 [Zed](https://zed.dev) 設定檔(`~/.config/zed/settings.json`)中: ```json title="~/.config/zed/settings.json" { "agent_servers": { "OpenCode": { + "type": "custom", "command": "opencode", "args": ["acp"] } From 2a36236132b0588eafbe3a16f2d271144f5a1104 Mon Sep 17 00:00:00 2001 From: Dax Date: Mon, 24 Aug 2026 08:49:33 -0400 Subject: [PATCH 012/185] fix(opencode): normalize upgrade endpoint (#44686) --- .../routes/instance/httpapi/groups/global.ts | 11 ++-- .../instance/httpapi/handlers/global.ts | 56 +++++-------------- .../test/server/httpapi-global.test.ts | 34 +++++++++-- packages/sdk/js/src/v2/gen/sdk.gen.ts | 2 +- packages/sdk/js/src/v2/gen/types.gen.ts | 2 +- 5 files changed, 51 insertions(+), 54 deletions(-) diff --git a/packages/opencode/src/server/routes/instance/httpapi/groups/global.ts b/packages/opencode/src/server/routes/instance/httpapi/groups/global.ts index 61daefe8a2d4..5dded3acf3be 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/groups/global.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/groups/global.ts @@ -5,7 +5,8 @@ import { InstanceDisposed } from "@/server/event" import "@opencode-ai/core/account" import "@/server/event" import { Schema } from "effect" -import { HttpApi, HttpApiEndpoint, HttpApiError, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi" +import { HttpApi, HttpApiEndpoint, HttpApiError, HttpApiGroup, OpenApi } from "effect/unstable/httpapi" +import semver from "semver" import { described } from "./metadata" const GlobalHealth = Schema.Struct({ @@ -48,7 +49,9 @@ const GlobalEventSchema = Schema.Struct({ }).annotate({ identifier: "GlobalEvent" }) export const GlobalUpgradeInput = Schema.Struct({ - target: Schema.optional(Schema.String), + target: Schema.String.check( + Schema.makeFilter((value) => (semver.valid(value) === null ? "Expected a semantic version" : undefined)), + ), }) const GlobalUpgradeResult = Schema.Union([ @@ -121,14 +124,14 @@ export const GlobalApi = HttpApi.make("global").add( }), ), HttpApiEndpoint.post("upgrade", GlobalPaths.upgrade, { - payload: [HttpApiSchema.NoContent, GlobalUpgradeInput], + payload: GlobalUpgradeInput, success: described(GlobalUpgradeResult, "Upgrade result"), error: HttpApiError.BadRequest, }).annotateMerge( OpenApi.annotations({ identifier: "global.upgrade", summary: "Upgrade opencode", - description: "Upgrade opencode to the specified version or latest if not specified.", + description: "Upgrade opencode to the specified version.", }), ), ) diff --git a/packages/opencode/src/server/routes/instance/httpapi/handlers/global.ts b/packages/opencode/src/server/routes/instance/httpapi/handlers/global.ts index c1f588d5a146..ac909032f90b 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/handlers/global.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/handlers/global.ts @@ -5,9 +5,9 @@ import { EventV2 } from "@opencode-ai/core/event" import { Installation } from "@/installation" import { disposeAllInstancesAndEmitGlobalDisposed } from "@/server/global-lifecycle" import { InstallationVersion } from "@opencode-ai/core/installation/version" -import { Effect, Queue, Schema } from "effect" +import { Effect, Queue } from "effect" import * as Stream from "effect/Stream" -import { HttpServerRequest, HttpServerResponse } from "effect/unstable/http" +import { HttpServerResponse } from "effect/unstable/http" import { HttpApiBuilder } from "effect/unstable/httpapi" import * as Sse from "effect/unstable/encoding/Sse" import { RootHttpApi } from "../api" @@ -22,14 +22,6 @@ function eventData(data: unknown): Sse.Event { } } -function parseBody(body: string) { - try { - return JSON.parse(body || "{}") as unknown - } catch { - return undefined - } -} - function eventResponse() { return Effect.gen(function* () { yield* Effect.logInfo("global event connected") @@ -97,25 +89,22 @@ export const globalHandlers = HttpApiBuilder.group(RootHttpApi, "global", (handl const upgrade = Effect.fn("GlobalHttpApi.upgrade")(function* (ctx: { payload: typeof GlobalUpgradeInput.Type }) { const method = yield* installation.method() if (method === "unknown") { - return { - status: 400, - body: { success: false as const, error: "Unknown installation method" }, - } + return HttpServerResponse.jsonUnsafe( + { success: false as const, error: "Unknown installation method" }, + { status: 400 }, + ) } - const target = ctx.payload.target || (yield* installation.latest(method)) + const target = ctx.payload.target const result = yield* installation.upgrade(method, target).pipe( - Effect.as({ status: 200, body: { success: true as const, version: target } }), + Effect.as({ success: true as const, version: target }), Effect.catch((err) => Effect.succeed({ - status: 500, - body: { - success: false as const, - error: err instanceof Error ? err.message : String(err), - }, + success: false as const, + error: err instanceof Error ? err.message : String(err), }), ), ) - if (!result.body.success) return result + if (!result.success) return HttpServerResponse.jsonUnsafe(result, { status: 500 }) GlobalBus.emit("event", { directory: "global", payload: { @@ -123,26 +112,7 @@ export const globalHandlers = HttpApiBuilder.group(RootHttpApi, "global", (handl properties: { version: target }, }, }) - return result - }) - - const upgradeRaw = Effect.fn("GlobalHttpApi.upgradeRaw")(function* (ctx: { - request: HttpServerRequest.HttpServerRequest - }) { - const body = yield* Effect.orDie(ctx.request.text) - const json = parseBody(body) - if (json === undefined) { - return HttpServerResponse.jsonUnsafe({ success: false, error: "Invalid request body" }, { status: 400 }) - } - const payload = yield* Schema.decodeUnknownEffect(GlobalUpgradeInput)(json).pipe( - Effect.map((payload) => ({ valid: true as const, payload })), - Effect.catch(() => Effect.succeed({ valid: false as const })), - ) - if (!payload.valid) { - return HttpServerResponse.jsonUnsafe({ success: false, error: "Invalid request body" }, { status: 400 }) - } - const result = yield* upgrade({ payload: payload.payload }) - return HttpServerResponse.jsonUnsafe(result.body, { status: result.status }) + return HttpServerResponse.jsonUnsafe(result) }) return handlers @@ -151,6 +121,6 @@ export const globalHandlers = HttpApiBuilder.group(RootHttpApi, "global", (handl .handle("configGet", configGet) .handle("configUpdate", configUpdate) .handle("dispose", dispose) - .handleRaw("upgrade", upgradeRaw) + .handle("upgrade", upgrade) }), ) diff --git a/packages/opencode/test/server/httpapi-global.test.ts b/packages/opencode/test/server/httpapi-global.test.ts index bcbe7aecbba4..55bdcff4f59f 100644 --- a/packages/opencode/test/server/httpapi-global.test.ts +++ b/packages/opencode/test/server/httpapi-global.test.ts @@ -43,24 +43,48 @@ const apiLayer = HttpRouter.serve( const it = testEffect(apiLayer) describe("global HttpApi", () => { - it.live("upgrades to latest when the request body is omitted", () => + it.live("upgrades to the requested version", () => Effect.gen(function* () { - const response = yield* HttpClient.post(GlobalPaths.upgrade) + const response = yield* HttpClientRequest.post(GlobalPaths.upgrade).pipe( + HttpClientRequest.bodyJsonUnsafe({ target: "9.9.9" }), + HttpClient.execute, + ) expect(response.status).toBe(200) expect(yield* response.json).toEqual({ success: true, version: "9.9.9" }) }), ) - it.live("rejects malformed upgrade payloads", () => + it.live("rejects invalid upgrade payloads", () => + Effect.gen(function* () { + const response = yield* HttpClientRequest.post(GlobalPaths.upgrade).pipe( + HttpClientRequest.bodyJsonUnsafe({ target: 1 }), + HttpClient.execute, + ) + + expect(response.status).toBe(400) + }), + ) + + it.live("rejects invalid upgrade target versions", () => Effect.gen(function* () { const response = yield* HttpClientRequest.post(GlobalPaths.upgrade).pipe( - HttpClientRequest.setBody(HttpBody.text("{", "application/json")), + HttpClientRequest.bodyJsonUnsafe({ target: "latest" }), HttpClient.execute, ) expect(response.status).toBe(400) - expect(yield* response.json).toEqual({ success: false, error: "Invalid request body" }) + }), + ) + + it.live("rejects unsupported upgrade content types", () => + Effect.gen(function* () { + const response = yield* HttpClientRequest.post(GlobalPaths.upgrade).pipe( + HttpClientRequest.setBody(HttpBody.text('{"target":"1.0.0"}', "text/plain")), + HttpClient.execute, + ) + + expect(response.status).toBe(415) }), ) }) diff --git a/packages/sdk/js/src/v2/gen/sdk.gen.ts b/packages/sdk/js/src/v2/gen/sdk.gen.ts index 9ed0084aac84..a2bcd4252c6d 100644 --- a/packages/sdk/js/src/v2/gen/sdk.gen.ts +++ b/packages/sdk/js/src/v2/gen/sdk.gen.ts @@ -1355,7 +1355,7 @@ export class Global extends HeyApiClient { /** * Upgrade opencode * - * Upgrade opencode to the specified version or latest if not specified. + * Upgrade opencode to the specified version. */ public upgrade( parameters?: { diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 90c91e9158cc..72b5e6f30ace 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -7353,7 +7353,7 @@ export type GlobalDisposeResponse = GlobalDisposeResponses[keyof GlobalDisposeRe export type GlobalUpgradeData = { body?: { - target?: string + target: string } path?: never query?: never From 2a6be0a03b93a6734070e10a6c3b56863475f214 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Mon, 24 Aug 2026 12:50:53 +0000 Subject: [PATCH 013/185] chore: generate --- packages/sdk/openapi.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index afe14bb604cc..5e372b6fb6b8 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -548,7 +548,7 @@ } } }, - "description": "Upgrade opencode to the specified version or latest if not specified.", + "description": "Upgrade opencode to the specified version.", "summary": "Upgrade opencode", "requestBody": { "content": { @@ -560,6 +560,7 @@ "type": "string" } }, + "required": ["target"], "additionalProperties": false } } From 55f984126cbe26920e532d1e2b09cb16482cb451 Mon Sep 17 00:00:00 2001 From: opencode Date: Mon, 24 Aug 2026 14:37:14 +0000 Subject: [PATCH 014/185] sync release versions for v1.18.22 --- bun.lock | 56 ++++++++++----------- packages/app/package.json | 2 +- packages/cli/package.json | 2 +- packages/codemode/package.json | 2 +- packages/console/app/package.json | 2 +- packages/console/core/package.json | 2 +- packages/console/function/package.json | 2 +- packages/console/mail/package.json | 2 +- packages/console/support/package.json | 2 +- packages/core/package.json | 2 +- packages/desktop/package.json | 2 +- packages/effect-drizzle-sqlite/package.json | 2 +- packages/effect-sqlite-node/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/function/package.json | 2 +- packages/http-recorder/package.json | 2 +- packages/llm/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- packages/server/package.json | 2 +- packages/session-ui/package.json | 2 +- packages/slack/package.json | 2 +- packages/stats/app/package.json | 2 +- packages/stats/core/package.json | 2 +- packages/stats/server/package.json | 2 +- packages/tui/package.json | 2 +- packages/ui/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 30 files changed, 57 insertions(+), 57 deletions(-) diff --git a/bun.lock b/bun.lock index edc7eb6d7f34..9eb06a99b39e 100644 --- a/bun.lock +++ b/bun.lock @@ -29,7 +29,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@corvu/drawer": "catalog:", "@dnd-kit/abstract": "0.5.0", @@ -96,7 +96,7 @@ }, "packages/cli": { "name": "@opencode-ai/cli", - "version": "1.18.21", + "version": "1.18.22", "bin": { "lildax": "./bin/lildax.cjs", }, @@ -144,7 +144,7 @@ }, "packages/codemode": { "name": "@opencode-ai/codemode", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "acorn": "8.15.0", "effect": "catalog:", @@ -158,7 +158,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -194,7 +194,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -221,7 +221,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@ai-sdk/anthropic": "3.0.82", "@ai-sdk/openai": "3.0.48", @@ -243,7 +243,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -267,7 +267,7 @@ }, "packages/console/support": { "name": "@opencode-ai/console-support", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@opencode-ai/console-core": "workspace:*", @@ -287,7 +287,7 @@ }, "packages/core": { "name": "@opencode-ai/core", - "version": "1.18.21", + "version": "1.18.22", "bin": { "opencode": "./bin/opencode", }, @@ -381,7 +381,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@zip.js/zip.js": "2.7.62", "drizzle-orm": "catalog:", @@ -435,7 +435,7 @@ }, "packages/effect-drizzle-sqlite": { "name": "@opencode-ai/effect-drizzle-sqlite", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "drizzle-orm": "catalog:", "effect": "catalog:", @@ -449,7 +449,7 @@ }, "packages/effect-sqlite-node": { "name": "@opencode-ai/effect-sqlite-node", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "effect": "catalog:", }, @@ -461,7 +461,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@hono/standard-validator": "catalog:", "@opencode-ai/core": "workspace:*", @@ -493,7 +493,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -509,7 +509,7 @@ }, "packages/http-recorder": { "name": "@opencode-ai/http-recorder", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@effect/platform-node": "4.0.0-beta.83", "@effect/platform-node-shared": "4.0.0-beta.83", @@ -540,7 +540,7 @@ }, "packages/llm": { "name": "@opencode-ai/llm", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@opencode-ai/schema": "workspace:*", "@smithy/eventstream-codec": "4.2.14", @@ -559,7 +559,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.18.21", + "version": "1.18.22", "bin": { "opencode": "./bin/opencode", }, @@ -690,7 +690,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@ai-sdk/provider": "3.0.8", "@opencode-ai/sdk": "workspace:*", @@ -766,7 +766,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "cross-spawn": "catalog:", }, @@ -781,7 +781,7 @@ }, "packages/server": { "name": "@opencode-ai/server", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/protocol": "workspace:*", @@ -796,7 +796,7 @@ }, "packages/session-ui": { "name": "@opencode-ai/session-ui", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/client": "file:../app/vendor/opencode-ai-client-1.17.13-v2.tgz", @@ -836,7 +836,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -849,7 +849,7 @@ }, "packages/stats/app": { "name": "@opencode-ai/stats-app", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@ibm/plex": "6.4.1", "@kobalte/core": "catalog:", @@ -883,7 +883,7 @@ }, "packages/stats/core": { "name": "@opencode-ai/stats-core", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@aws-sdk/client-athena": "3.933.0", "@planetscale/database": "1.19.0", @@ -902,7 +902,7 @@ }, "packages/stats/server": { "name": "@opencode-ai/stats-server", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@aws-sdk/client-firehose": "3.933.0", "@effect/platform-node": "catalog:", @@ -944,7 +944,7 @@ }, "packages/tui": { "name": "@opencode-ai/tui", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/plugin": "workspace:*", @@ -971,7 +971,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@kobalte/core": "catalog:", "@pierre/diffs": "catalog:", @@ -1022,7 +1022,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/app/package.json b/packages/app/package.json index 729c16e4a2d2..cadd66a4fbf5 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.18.21", + "version": "1.18.22", "description": "", "type": "module", "exports": { diff --git a/packages/cli/package.json b/packages/cli/package.json index af75216f8d6e..12ab9e07ff0c 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/cli", - "version": "1.18.21", + "version": "1.18.22", "type": "module", "license": "MIT", "bin": { diff --git a/packages/codemode/package.json b/packages/codemode/package.json index 04130771723a..7bac797715fe 100644 --- a/packages/codemode/package.json +++ b/packages/codemode/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/codemode", - "version": "1.18.21", + "version": "1.18.22", "description": "Effect-native confined code execution over schema-described tools", "private": true, "type": "module", diff --git a/packages/console/app/package.json b/packages/console/app/package.json index 46b387dbb8fc..e5153dad38ae 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.18.21", + "version": "1.18.22", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index 61ae28be5ac8..e3acc27b4238 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/console-core", - "version": "1.18.21", + "version": "1.18.22", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index b489cf81859f..e7fd6dbd8303 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.18.21", + "version": "1.18.22", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index ff52e141f840..2b0c884999be 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.18.21", + "version": "1.18.22", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/console/support/package.json b/packages/console/support/package.json index 94340b03c8ab..4cc026ea730a 100644 --- a/packages/console/support/package.json +++ b/packages/console/support/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-support", - "version": "1.18.21", + "version": "1.18.22", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/core/package.json b/packages/core/package.json index 019f4b52a0f5..ea1471500a16 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.21", + "version": "1.18.22", "name": "@opencode-ai/core", "type": "module", "license": "MIT", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 2f8f492e407d..fe0eebd69aae 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.18.21", + "version": "1.18.22", "type": "module", "license": "MIT", "homepage": "https://opencode.ai", diff --git a/packages/effect-drizzle-sqlite/package.json b/packages/effect-drizzle-sqlite/package.json index cbcc8c17ad5a..e54c1f59468f 100644 --- a/packages/effect-drizzle-sqlite/package.json +++ b/packages/effect-drizzle-sqlite/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.21", + "version": "1.18.22", "name": "@opencode-ai/effect-drizzle-sqlite", "type": "module", "license": "MIT", diff --git a/packages/effect-sqlite-node/package.json b/packages/effect-sqlite-node/package.json index 95244c7a91dc..29c940cdf8a2 100644 --- a/packages/effect-sqlite-node/package.json +++ b/packages/effect-sqlite-node/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.21", + "version": "1.18.22", "name": "@opencode-ai/effect-sqlite-node", "type": "module", "license": "MIT", diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index 42ca50d83af6..a32c2cf714b4 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.18.21", + "version": "1.18.22", "private": true, "type": "module", "license": "MIT", diff --git a/packages/function/package.json b/packages/function/package.json index f6a6915f4c23..3f6a410942cc 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.18.21", + "version": "1.18.22", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/http-recorder/package.json b/packages/http-recorder/package.json index fa314ce8ca72..1f1269f121c5 100644 --- a/packages/http-recorder/package.json +++ b/packages/http-recorder/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.21", + "version": "1.18.22", "name": "@opencode-ai/http-recorder", "description": "Record and replay Effect HTTP client traffic with deterministic cassettes", "type": "module", diff --git a/packages/llm/package.json b/packages/llm/package.json index 82e32ae42db3..956a9e12c3b6 100644 --- a/packages/llm/package.json +++ b/packages/llm/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.21", + "version": "1.18.22", "name": "@opencode-ai/llm", "type": "module", "license": "MIT", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index be6f25f89ac8..771b05d5510a 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.21", + "version": "1.18.22", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 77ff21ccbc8b..32a081fb4963 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/plugin", - "version": "1.18.21", + "version": "1.18.22", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index 55e63e2eea1d..89aaf1895faf 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/sdk", - "version": "1.18.21", + "version": "1.18.22", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index 767cd16e16ac..a4542f2ff884 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/server", - "version": "1.18.21", + "version": "1.18.22", "private": true, "type": "module", "license": "MIT", diff --git a/packages/session-ui/package.json b/packages/session-ui/package.json index 080d3db9cbbd..a5fe78ffd269 100644 --- a/packages/session-ui/package.json +++ b/packages/session-ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/session-ui", - "version": "1.18.21", + "version": "1.18.22", "private": true, "type": "module", "license": "MIT", diff --git a/packages/slack/package.json b/packages/slack/package.json index f476ecc6b789..349f8178d4df 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.18.21", + "version": "1.18.22", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/stats/app/package.json b/packages/stats/app/package.json index f3f554bff48d..abd183860c87 100644 --- a/packages/stats/app/package.json +++ b/packages/stats/app/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-app", - "version": "1.18.21", + "version": "1.18.22", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/core/package.json b/packages/stats/core/package.json index c88fccdca422..4d434ea9c781 100644 --- a/packages/stats/core/package.json +++ b/packages/stats/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-core", - "version": "1.18.21", + "version": "1.18.22", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/server/package.json b/packages/stats/server/package.json index 8497fb04bf1d..e7a6c34a1c14 100644 --- a/packages/stats/server/package.json +++ b/packages/stats/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-server", - "version": "1.18.21", + "version": "1.18.22", "private": true, "type": "module", "license": "MIT", diff --git a/packages/tui/package.json b/packages/tui/package.json index 9eb84261ce1c..8828868e575e 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/tui", - "version": "1.18.21", + "version": "1.18.22", "private": true, "type": "module", "license": "MIT", diff --git a/packages/ui/package.json b/packages/ui/package.json index 8810528c85fe..545217d8161d 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.18.21", + "version": "1.18.22", "type": "module", "license": "MIT", "repository": { diff --git a/packages/web/package.json b/packages/web/package.json index 400171ffd3c0..f0242a302c3e 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -2,7 +2,7 @@ "name": "@opencode-ai/web", "type": "module", "license": "MIT", - "version": "1.18.21", + "version": "1.18.22", "scripts": { "dev": "astro dev", "dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev", diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index 1a78b436fdd5..e621b6db37d7 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "opencode", "displayName": "opencode", "description": "opencode for VS Code", - "version": "1.18.21", + "version": "1.18.22", "publisher": "sst-dev", "repository": { "type": "git", From be15db58618fbc6cd8d090c46cc1e24f1249b556 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 24 Aug 2026 12:07:27 -0400 Subject: [PATCH 015/185] Revert "delay removing first month discount" This reverts commit 754bb7e3903df6276e6ddc96e3d6daced7160902. --- packages/console/core/src/billing.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/console/core/src/billing.ts b/packages/console/core/src/billing.ts index 879cd8c67751..adeabd9c73c8 100644 --- a/packages/console/core/src/billing.ts +++ b/packages/console/core/src/billing.ts @@ -328,7 +328,6 @@ export namespace Billing { return LiteData.threeMonths100Coupon if (coupons.some((coupon) => coupon.type === "GOFREEMONTH" && !coupon.timeRedeemed)) return LiteData.firstMonth100Coupon - if (!coupons.some((coupon) => coupon.type === "GO1MONTH50")) return LiteData.firstMonth50Coupon return undefined })() const createSession = () => From 7cde8329bc33801248d6aafa2a4dd46dc86e5683 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 24 Aug 2026 13:19:53 -0400 Subject: [PATCH 016/185] update model parser --- .../app/src/routes/zen/util/requestBody.ts | 80 +++++++++++++++---- packages/console/app/test/requestBody.test.ts | 15 ++++ 2 files changed, 78 insertions(+), 17 deletions(-) diff --git a/packages/console/app/src/routes/zen/util/requestBody.ts b/packages/console/app/src/routes/zen/util/requestBody.ts index 458faf553e7f..a3970dedf13d 100644 --- a/packages/console/app/src/routes/zen/util/requestBody.ts +++ b/packages/console/app/src/routes/zen/util/requestBody.ts @@ -7,38 +7,84 @@ export async function prepareRequestBody(body: ReadableStream) { const decoder = new TextDecoder() let text = "" let done = false - let searchFrom = 0 let bom = 0 - let match: RegExpExecArray | null = null - const pattern = /("model"\s*:\s*")([^"]+)"/g + let index = 0 + let depth = 0 + let stringStart = -1 + let escaped = false + let phase: "key" | "colon" | "value" | "comma" = "key" + let key = "" + let found: { model: string; start: number; end: number } | undefined - while (!done && !match) { + const scan = () => { + while (index < text.length && !found) { + const char = text[index] + if (stringStart >= 0) { + if (escaped) escaped = false + else if (char === "\\") escaped = true + else if (char === '"') { + if (depth === 1 && phase === "key") { + key = JSON.parse(text.slice(stringStart, index + 1)) + phase = "colon" + } else if (depth === 1 && phase === "value") { + if (key === "model") { + const start = bom + utf8Length(text, stringStart + 1) + found = { + model: JSON.parse(text.slice(stringStart, index + 1)), + start, + end: bom + utf8Length(text, index), + } + } + phase = "comma" + } + stringStart = -1 + } + index++ + continue + } + + if (char === '"') { + stringStart = index++ + continue + } + if (char === "{" || char === "[") { + if (depth === 1 && phase === "value") phase = "comma" + depth++ + index++ + continue + } + if (char === "}" || char === "]") { + depth-- + index++ + continue + } + if (depth !== 1) { + index++ + continue + } + if (char === ":" && phase === "colon") phase = "value" + else if (char === "," && phase === "comma") phase = "key" + else if (phase === "value" && !/\s/.test(char)) phase = "comma" + index++ + } + } + + while (!done && !found) { const next = await reader.read() done = next.done if (!next.value) continue if (!chunks.length && next.value[0] === 0xef && next.value[1] === 0xbb && next.value[2] === 0xbf) bom = 3 chunks.push(next.value) text += decoder.decode(next.value, { stream: true }) - pattern.lastIndex = searchFrom - match = pattern.exec(text) - searchFrom = Math.max(0, text.length - 256) + scan() } if (done) { text += decoder.decode() - if (!match) { - pattern.lastIndex = searchFrom - match = pattern.exec(text) - } + scan() } - const found = (() => { - if (!match) return - const start = bom + utf8Length(text, match.index + match[1].length) - return { model: match[2], start, end: start + utf8Length(match[2], match[2].length) } - })() const preview = text.substring(0, 300) text = "" - match = null let used = false return { diff --git a/packages/console/app/test/requestBody.test.ts b/packages/console/app/test/requestBody.test.ts index 52d86297b4ee..db3c81b9181c 100644 --- a/packages/console/app/test/requestBody.test.ts +++ b/packages/console/app/test/requestBody.test.ts @@ -32,6 +32,21 @@ describe("Zen request body streaming", () => { }) }) + test("ignores model fields nested before the root model", async () => { + const body = new Blob([ + '{"metadata":{"model":"ox-alpha-free"},"model":"glm-5.3","messages":[],"stream":false}', + ]).stream() + const request = await prepareRequestBody(body) + + expect(request.model).toBe("glm-5.3") + expect(JSON.parse(await new Response(request.stream("provider-model", false)).text())).toEqual({ + metadata: { model: "ox-alpha-free" }, + model: "provider-model", + messages: [], + stream: false, + }) + }) + test("appends stream usage options at the end of the request", async () => { const body = new Blob(['{"model":"client-model","stream":true,"messages":[]} ']).stream() const request = await prepareRequestBody(body) From 611cc73d84839393d0d2707041955c5d466f64c5 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Mon, 24 Aug 2026 15:24:47 -0500 Subject: [PATCH 017/185] fix(opencode): send parent session header (#44752) Co-authored-by: rekram1-node --- packages/opencode/src/session/llm/request.ts | 2 +- packages/opencode/test/session/llm.test.ts | 69 ++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/session/llm/request.ts b/packages/opencode/src/session/llm/request.ts index 4f93411107df..e000d6ca49b5 100644 --- a/packages/opencode/src/session/llm/request.ts +++ b/packages/opencode/src/session/llm/request.ts @@ -196,9 +196,9 @@ export const prepare = Effect.fn("LLMRequestPrep.prepare")(function* (input: Pre : { "x-session-affinity": input.sessionID, "X-Session-Id": input.sessionID, - ...(input.parentSessionID ? { "x-parent-session-id": input.parentSessionID } : {}), "User-Agent": USER_AGENT, }), + ...(input.parentSessionID ? { "x-parent-session-id": input.parentSessionID } : {}), ...input.model.headers, ...headers, }, diff --git a/packages/opencode/test/session/llm.test.ts b/packages/opencode/test/session/llm.test.ts index 635e697517c3..fcb536f46d91 100644 --- a/packages/opencode/test/session/llm.test.ts +++ b/packages/opencode/test/session/llm.test.ts @@ -754,6 +754,75 @@ function createEventResponse(chunks: unknown[], includeDone = false) { describe("session.llm.stream", () => { const vivgridFixture = { providerID: "vivgrid", modelID: "gemini-3.1-pro-preview" } + const opencodeFixture = { providerID: "opencode-test", modelID: vivgridFixture.modelID } + + it.instance( + "sends the parent session header for opencode providers", + () => + Effect.gen(function* () { + const fixture = loadFixture(vivgridFixture.providerID, vivgridFixture.modelID) + const request = waitRequest( + "/chat/completions", + new Response(createChatStream("Hello"), { + status: 200, + headers: { "Content-Type": "text/event-stream" }, + }), + ) + const resolved = yield* Provider.use.getModel( + ProviderV2.ID.make(opencodeFixture.providerID), + ModelV2.ID.make(opencodeFixture.modelID), + ) + const sessionID = SessionID.make("session-child") + const parentSessionID = SessionID.make("session-parent") + const agent = { + name: "test", + mode: "primary", + options: {}, + permission: [{ permission: "*", pattern: "*", action: "allow" }], + } satisfies Agent.Info + const user = { + id: MessageID.make("msg_user-parent-header"), + sessionID, + role: "user", + time: { created: Date.now() }, + agent: agent.name, + model: { + providerID: ProviderV2.ID.make(opencodeFixture.providerID), + modelID: resolved.id, + }, + } satisfies SessionV1.User + + yield* drain({ + user, + sessionID, + parentSessionID, + model: resolved, + agent, + system: ["You are a helpful assistant."], + messages: [{ role: "user", content: "Hello" }], + tools: {}, + }) + + expect((yield* Effect.promise(() => request)).headers.get("x-parent-session-id")).toBe(parentSessionID) + }), + { + config: () => { + const fixture = loadFixture(vivgridFixture.providerID, vivgridFixture.modelID) + return { + enabled_providers: [opencodeFixture.providerID], + provider: { + [opencodeFixture.providerID]: { + name: "OpenCode Test", + npm: "@ai-sdk/openai-compatible", + models: { [fixture.model.id]: configModel(fixture.model) as ConfigModel }, + options: { apiKey: "test-key", baseURL: `${state.server!.url.origin}/v1` }, + }, + }, + } + }, + }, + ) + it.instance( "sends temperature, tokens, and reasoning options for openai-compatible models", () => From f8b4dd70ac26996436e259fc386917944c05f481 Mon Sep 17 00:00:00 2001 From: Charlie Gleason Date: Mon, 24 Aug 2026 16:15:26 -0500 Subject: [PATCH 018/185] fix(provider): send Anthropic's dashed native slug through the AI Gateway (#44281) Co-authored-by: Claude Sonnet 5 --- packages/opencode/src/provider/provider.ts | 7 ++++++- .../test/provider/cf-ai-gateway-e2e.test.ts | 14 +++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index dba9cbece552..32e01512fbea 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -844,7 +844,12 @@ function custom(dep: CustomDep): Record { // The passthrough wrappers inject a CF_TEMP_TOKEN sentinel that the gateway strips before // dispatch, so upstream billing stays on the gateway (Unified Billing / stored BYOK). if (modelID.startsWith("openai/")) return aigateway(createOpenAI()(modelID.slice("openai/".length))) - if (modelID.startsWith("anthropic/")) return aigateway(createAnthropic()(modelID.slice("anthropic/".length))) + // models.dev lists Anthropic ids with dotted versions (claude-haiku-4.5); Anthropic's + // Messages API expects dashed native slugs (claude-haiku-4-5), so translate before passing. + // No native Anthropic slug contains a dot, so the blanket replacement is lossless here - + // unlike OpenAI above, whose native ids (e.g. gpt-4.1) keep their dots and must not be touched. + if (modelID.startsWith("anthropic/")) + return aigateway(createAnthropic()(modelID.slice("anthropic/".length).replaceAll(".", "-"))) // Workers AI is the only first-party provider whose upstream is Cloudflare itself, so it is // the only one that should receive the Cloudflare token as its upstream Authorization header. // The Unified API addresses Workers AI both with the explicit "workers-ai/" prefix and as diff --git a/packages/opencode/test/provider/cf-ai-gateway-e2e.test.ts b/packages/opencode/test/provider/cf-ai-gateway-e2e.test.ts index cb1654006e66..97f9d4f909a8 100644 --- a/packages/opencode/test/provider/cf-ai-gateway-e2e.test.ts +++ b/packages/opencode/test/provider/cf-ai-gateway-e2e.test.ts @@ -165,7 +165,8 @@ function extractUpstreamHeaders(body: unknown): Record | undefi function gatewayModel(apiId: string, gatewayToken = "test") { const aigateway = createAiGateway({ accountId: "test", gateway: "test", apiKey: gatewayToken }) if (apiId.startsWith("openai/")) return aigateway(createOpenAI()(apiId.slice("openai/".length))) - if (apiId.startsWith("anthropic/")) return aigateway(createAnthropic()(apiId.slice("anthropic/".length))) + if (apiId.startsWith("anthropic/")) + return aigateway(createAnthropic()(apiId.slice("anthropic/".length).replaceAll(".", "-"))) const isWorkersAi = apiId.startsWith("workers-ai/") || apiId.startsWith("@cf/") const unified = createUnified(isWorkersAi ? { apiKey: gatewayToken } : {}) return aigateway(unified(apiId)) @@ -195,6 +196,17 @@ describe("cf-ai-gateway routing", () => { expect(upstream?.model).toBe("claude-sonnet-4-6") }) + test("anthropic/* with a dotted models.dev id reaches Anthropic as a dashed native slug", async () => { + // models.dev ids are dotted (claude-haiku-4.5); Anthropic's Messages API 404s unless the + // version is dashed (claude-haiku-4-5). Regression guard for the dotted-id translation. + await callThroughGateway("anthropic/claude-haiku-4.5", {}) + const step = firstStep(captured?.outerBody) + expect(step?.provider).toBe("anthropic") + expect(step?.endpoint).toBe("v1/messages") + const upstream = extractUpstreamQuery(captured?.outerBody) + expect(upstream?.model).toBe("claude-haiku-4-5") + }) + test("workers-ai models stay on the unified /compat route", async () => { await callThroughGateway("workers-ai/@cf/moonshotai/kimi-k2.6", {}) const step = firstStep(captured?.outerBody) From f4019cab3eb832108f337caaf55d51a9ab7dd860 Mon Sep 17 00:00:00 2001 From: Filip <34747899+neriousy@users.noreply.github.com> Date: Mon, 24 Aug 2026 23:23:22 +0200 Subject: [PATCH 019/185] fix(github): support immutable OIDC subjects (#44776) --- packages/function/package.json | 3 ++ packages/function/src/api.ts | 52 +++++++++---------- packages/function/src/github.ts | 14 +++++ packages/function/test/github.test.ts | 39 ++++++++++++++ .../opencode/src/cli/cmd/github.handler.ts | 17 ++++-- turbo.json | 3 ++ 6 files changed, 97 insertions(+), 31 deletions(-) create mode 100644 packages/function/src/github.ts create mode 100644 packages/function/test/github.test.ts diff --git a/packages/function/package.json b/packages/function/package.json index 3f6a410942cc..0bc1b6e6b751 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -5,6 +5,9 @@ "private": true, "type": "module", "license": "MIT", + "scripts": { + "test": "bun test" + }, "devDependencies": { "@cloudflare/workers-types": "catalog:", "@tsconfig/node22": "22.0.2", diff --git a/packages/function/src/api.ts b/packages/function/src/api.ts index 58c74fe32254..e57a567dca24 100644 --- a/packages/function/src/api.ts +++ b/packages/function/src/api.ts @@ -5,6 +5,7 @@ import { jwtVerify, createRemoteJWKSet } from "jose" import { createAppAuth } from "@octokit/auth-app" import { Octokit } from "@octokit/rest" import { Resource } from "sst" +import { parseRepositoryClaim } from "./github" type Env = { SYNC_SERVER: DurableObjectNamespace @@ -269,42 +270,41 @@ export default new Hono<{ Bindings: Env }>() // verify token const JWKS = createRemoteJWKSet(new URL(JWKS_URL)) - let owner, repo + let repository: ReturnType try { const { payload } = await jwtVerify(token, JWKS, { issuer: GITHUB_ISSUER, audience: EXPECTED_AUDIENCE, }) - const sub = payload.sub // e.g. 'repo:my-org/my-repo:ref:refs/heads/main' - const parts = sub.split(":")[1].split("/") - owner = parts[0] - repo = parts[1] + repository = parseRepositoryClaim(payload) } catch (err) { console.error("Token verification failed:", err) return c.json({ error: "Invalid or expired token" }, { status: 403 }) } - // Create app JWT token - const auth = createAppAuth({ - appId: Resource.GITHUB_APP_ID.value, - privateKey: Resource.GITHUB_APP_PRIVATE_KEY.value, - }) - const appAuth = await auth({ type: "app" }) - - // Lookup installation - const octokit = new Octokit({ auth: appAuth.token }) - const { data: installation } = await octokit.apps.getRepoInstallation({ - owner, - repo, - }) - - // Get installation token - const installationAuth = await auth({ - type: "installation", - installationId: installation.id, - }) - - return c.json({ token: installationAuth.token }) + try { + const auth = createAppAuth({ + appId: Resource.GITHUB_APP_ID.value, + privateKey: Resource.GITHUB_APP_PRIVATE_KEY.value, + }) + const appAuth = await auth({ type: "app" }) + const octokit = new Octokit({ auth: appAuth.token }) + const { data: installation } = await octokit.apps.getRepoInstallation({ + owner: repository.owner, + repo: repository.repo, + }) + const installationAuth = await auth({ + type: "installation", + installationId: installation.id, + }) + return c.json({ token: installationAuth.token }) + } catch (error) { + console.error("GitHub App token exchange failed:", error) + return c.json( + { error: `Failed to exchange GitHub App token for ${repository.owner}/${repository.repo}` }, + { status: 502 }, + ) + } }) /** * Used by the GitHub action to get GitHub installation access token given user PAT token (used when testing `opencode github run` locally) diff --git a/packages/function/src/github.ts b/packages/function/src/github.ts new file mode 100644 index 000000000000..180d377131e8 --- /dev/null +++ b/packages/function/src/github.ts @@ -0,0 +1,14 @@ +import type { JWTPayload } from "jose" + +export function parseRepositoryClaim(payload: JWTPayload) { + const claim = payload.repository + if (typeof claim !== "string") throw new Error("Repository claim is missing") + + const parts = claim.split("/") + if (parts.length !== 2 || !parts[0] || !parts[1]) throw new Error("Repository claim is invalid") + + return { + owner: parts[0], + repo: parts[1], + } +} diff --git a/packages/function/test/github.test.ts b/packages/function/test/github.test.ts new file mode 100644 index 000000000000..9f5fbac9534f --- /dev/null +++ b/packages/function/test/github.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, test } from "bun:test" +import { parseRepositoryClaim } from "../src/github" + +describe("parseRepositoryClaim", () => { + test("reads repository identity with a legacy subject", () => { + expect( + parseRepositoryClaim({ + repository: "octocat/my-repo", + sub: "repo:octocat/my-repo:ref:refs/heads/main", + }), + ).toEqual({ owner: "octocat", repo: "my-repo" }) + }) + + test("reads repository identity with an immutable subject", () => { + expect( + parseRepositoryClaim({ + repository: "octocat/my-repo", + sub: "repo:octocat@123456/my-repo@456789:ref:refs/heads/main", + }), + ).toEqual({ owner: "octocat", repo: "my-repo" }) + }) + + test("does not depend on a repository path in a customized subject", () => { + expect( + parseRepositoryClaim({ + repository: "octocat/my-repo", + sub: "repository_owner:octocat:repository_visibility:private", + }), + ).toEqual({ owner: "octocat", repo: "my-repo" }) + }) + + test("rejects a missing repository claim", () => { + expect(() => parseRepositoryClaim({})).toThrow("Repository claim is missing") + }) + + test("rejects an invalid repository claim", () => { + expect(() => parseRepositoryClaim({ repository: "octocat" })).toThrow("Repository claim is invalid") + }) +}) diff --git a/packages/opencode/src/cli/cmd/github.handler.ts b/packages/opencode/src/cli/cmd/github.handler.ts index 6511ab30ea88..fcf44279ce7f 100644 --- a/packages/opencode/src/cli/cmd/github.handler.ts +++ b/packages/opencode/src/cli/cmd/github.handler.ts @@ -437,6 +437,7 @@ export const githubRun = Effect.fn("Cli.github.run")(function* (args: { event?: let session: { id: SessionID; title: string; version: string } let shareId: string | undefined let exitCode = 0 + let githubClientReady = false type PromptFiles = Awaited>["promptFiles"] const triggerCommentId = isCommentEvent ? (payload as IssueCommentEvent | PullRequestReviewCommentEvent).comment.id @@ -485,6 +486,7 @@ export const githubRun = Effect.fn("Cli.github.run")(function* (args: { event?: octoGraph = graphql.defaults({ headers: { authorization: `token ${appToken}` }, }) + githubClientReady = true const { userPrompt, promptFiles } = await getUserPrompt() if (!useGithubToken) { @@ -639,9 +641,13 @@ export const githubRun = Effect.fn("Cli.github.run")(function* (args: { event?: } else if (e instanceof Error) { msg = e.message } - if (isUserEvent) { - await createComment(`${msg}${footer()}`) - await removeReaction(commentType) + if (isUserEvent && githubClientReady) { + try { + await createComment(`${msg}${footer()}`) + await removeReaction(commentType) + } catch (error) { + console.error("Failed to report error on GitHub:", error) + } } core.setFailed(msg) // Also output the clean error message for the action to capture @@ -1004,8 +1010,9 @@ export const githubRun = Effect.fn("Cli.github.run")(function* (args: { event?: }) if (!response.ok) { - const responseJson = (await response.json()) as { error?: string } - throw new Error(`App token exchange failed: ${response.status} ${response.statusText} - ${responseJson.error}`) + throw new Error( + `App token exchange failed: ${response.status} ${response.statusText} - ${await response.text()}`, + ) } const responseJson = (await response.json()) as { token: string } diff --git a/turbo.json b/turbo.json index 5e93640b1fad..daf89195b715 100644 --- a/turbo.json +++ b/turbo.json @@ -17,6 +17,9 @@ "dependsOn": ["^build"], "outputs": [] }, + "@opencode-ai/function#test": { + "outputs": [] + }, "@opencode-ai/app#test": { "dependsOn": ["^build"], "outputs": [] From 0561bac189fe866d46ff739ceaa914415e074254 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 24 Aug 2026 17:40:33 -0400 Subject: [PATCH 020/185] add client header replacement --- packages/console/app/src/routes/zen/util/handler.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index 16062e99c5e5..8288e203d3ec 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -222,6 +222,7 @@ export async function handler( if (v === "$session") return headers.set(k, sessionId) if (v === "$model") return headers.set(k, model) if (v === "$request") return headers.set(k, requestId) + if (v === "$client") return headers.set(k, ocClient) if (v === "$project") return headers.set(k, projectId) if (v === "$workspace") { if (authInfo?.workspaceID) headers.set(k, authInfo.workspaceID) From 18b4cb6819d7de0b37927fef60d03927e678c9dd Mon Sep 17 00:00:00 2001 From: Filip <34747899+neriousy@users.noreply.github.com> Date: Tue, 25 Aug 2026 00:29:56 +0200 Subject: [PATCH 021/185] docs(github): correct action token configuration (#44793) --- packages/web/src/content/docs/github.mdx | 32 ++++++++++++++++-------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/packages/web/src/content/docs/github.mdx b/packages/web/src/content/docs/github.mdx index e940b616b157..08cb27fff019 100644 --- a/packages/web/src/content/docs/github.mdx +++ b/packages/web/src/content/docs/github.mdx @@ -57,20 +57,19 @@ Or you can set it up manually. permissions: id-token: write steps: - - name: Checkout repository - uses: actions/checkout@v6 - with: - fetch-depth: 1 - persist-credentials: false + - name: Checkout repository + uses: actions/checkout@v6 + with: + fetch-depth: 1 + persist-credentials: false - - name: Run OpenCode + - name: Run OpenCode uses: anomalyco/opencode/github@latest env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} with: model: anthropic/claude-sonnet-4-20250514 # share: true - # github_token: xxxx ``` 3. **Store the API keys in secrets** @@ -85,19 +84,30 @@ Or you can set it up manually. - `agent`: The agent to use. Must be a primary agent. Falls back to `default_agent` from config or `"build"` if not found. - `share`: Whether to share the OpenCode session. Defaults to **true** for public repositories. - `prompt`: Optional custom prompt to override the default behavior. Use this to customize how OpenCode processes requests. -- `token`: Optional GitHub access token for performing operations such as creating comments, committing changes, and opening pull requests. By default, OpenCode uses the installation access token from the OpenCode GitHub App, so commits, comments, and pull requests appear as coming from the app. +- `mentions`: Comma-separated list of trigger phrases, case-insensitive. Defaults to `/opencode,/oc`. +- `variant`: Model variant for provider-specific reasoning effort, for example `high`, `max`, or `minimal`. +- `oidc_base_url`: Base URL for the OIDC token exchange API. Only needed when running a custom GitHub App install. Defaults to `https://api.opencode.ai`. +- `use_github_token`: Set to `true` to use a caller-provided `GITHUB_TOKEN` instead of exchanging an OIDC token for an OpenCode App installation token. Defaults to `false`. - Alternatively, you can use the GitHub Action runner's [built-in `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) without installing the OpenCode GitHub App. Just make sure to grant the required permissions in your workflow: + Use this mode to run without installing the OpenCode GitHub App. Pass the token through `env` and grant the permissions required by your workflow: ```yaml permissions: - id-token: write contents: write pull-requests: write issues: write + + steps: + - uses: anomalyco/opencode/github@latest + env: + ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + model: anthropic/claude-sonnet-4-20250514 + use_github_token: true ``` - You can also use a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) if preferred. + `id-token: write` is not required in this mode because OIDC exchange is skipped. To use a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) or another GitHub App token, store it as a secret and pass that secret as `GITHUB_TOKEN` instead. --- From 51070b6f598fc171636f5a52cb53f90f2cdccbc3 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Mon, 24 Aug 2026 22:29:36 -0400 Subject: [PATCH 022/185] docs: clarify prompt data handling (#44854) Co-authored-by: thdxr <826656+thdxr@users.noreply.github.com> Co-authored-by: Dax --- .../console/app/src/routes/legal/privacy-policy/index.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/console/app/src/routes/legal/privacy-policy/index.tsx b/packages/console/app/src/routes/legal/privacy-policy/index.tsx index 4426e0ddd08d..f7d3b1fb41f8 100644 --- a/packages/console/app/src/routes/legal/privacy-policy/index.tsx +++ b/packages/console/app/src/routes/legal/privacy-policy/index.tsx @@ -237,9 +237,8 @@ export default function PrivacyPolicy() {
      -
    • Providing, Customizing and Improving the Services
    • -
    • Marketing the Services
    • -
    • Corresponding with You
    • +
    • Passing through to upstream provider to provide services
    • +
    • Not stored
    From 3ef72fe8f6c54a31e9709e6dff82dc609df8e453 Mon Sep 17 00:00:00 2001 From: Charlie Gleason Date: Mon, 24 Aug 2026 22:01:17 -0500 Subject: [PATCH 023/185] fix(provider): route non-native Cloudflare AI Gateway providers via the REST API (#44828) Co-authored-by: Claude Opus 4.8 --- packages/opencode/src/provider/provider.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 32e01512fbea..0f8cbd23f775 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -809,6 +809,7 @@ function custom(dep: CustomDep): Record { const { createUnified } = yield* Effect.promise(() => import("ai-gateway-provider/providers/unified")) const { createOpenAI } = yield* Effect.promise(() => import("ai-gateway-provider/providers/openai")) const { createAnthropic } = yield* Effect.promise(() => import("ai-gateway-provider/providers/anthropic")) + const { createOpenAICompatible } = yield* Effect.promise(() => import("@ai-sdk/openai-compatible")) const metadata = iife(() => { if (input.options?.metadata) return input.options.metadata @@ -855,9 +856,23 @@ function custom(dep: CustomDep): Record { // The Unified API addresses Workers AI both with the explicit "workers-ai/" prefix and as // bare "@cf/..." ids. Third-party providers must not receive the token; they rely on the // gateway's stored/BYOK keys instead. + // Workers AI is Cloudflare's own upstream, so it rides the unified compat route with the + // Cloudflare token as its upstream Authorization header. const isWorkersAi = modelID.startsWith("workers-ai/") || modelID.startsWith("@cf/") - const unified = createUnified(isWorkersAi ? { apiKey: apiToken } : {}) - return aigateway(unified(modelID)) + if (isWorkersAi) return aigateway(createUnified({ apiKey: apiToken })(modelID)) + + // Every other third-party provider (google, xai, alibaba, deepseek, moonshotai, …) is only + // served by Cloudflare's catalog-aware REST API. The universal/compat gateway route rejects + // them with "Invalid provider" (the gateway's compat endpoint doesn't front those upstreams), + // so point an OpenAI-compatible client at the REST endpoint and bind it to the gateway with + // cf-aig-gateway-id — that keeps requests gateway-routed (analytics/caching/BYOK), not a + // bypass. models.dev ids (provider/model, dotted) pass through unchanged. + return createOpenAICompatible({ + name: "cloudflare-ai-gateway", + baseURL: `https://api.cloudflare.com/client/v4/accounts/${accountId}/ai/v1`, + apiKey: apiToken, + headers: { "cf-aig-gateway-id": gateway }, + })(modelID) }, options: {}, } From d0ceaef6aa44ce60b9b02a1084d6650e0decfb94 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Mon, 24 Aug 2026 23:32:44 -0400 Subject: [PATCH 024/185] docs(console): prohibit abusive multi-account use --- .../app/src/routes/legal/terms-of-service/index.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/console/app/src/routes/legal/terms-of-service/index.tsx b/packages/console/app/src/routes/legal/terms-of-service/index.tsx index 7847c44bdc83..76544fc841c9 100644 --- a/packages/console/app/src/routes/legal/terms-of-service/index.tsx +++ b/packages/console/app/src/routes/legal/terms-of-service/index.tsx @@ -21,7 +21,7 @@ export default function TermsOfService() {

    Terms of Use

    -

    Effective date: Mar 6, 2026

    +

    Effective date: Aug 15, 2026

    Welcome to OpenCode. Please read on to learn the rules and restrictions that govern your use of @@ -154,6 +154,11 @@ export default function TermsOfService() { is dangerous, harmful, fraudulent, deceptive, threatening, harassing, defamatory, obscene, or otherwise objectionable; +

  • + creates, maintains, or uses accounts in bulk, or creates, maintains, or uses multiple accounts to + circumvent usage limits, access restrictions, billing obligations, promotions, suspensions, or any + other restriction or policy applicable to the Services; +
  • automatically or programmatically extracts data or Output (defined below);
  • Represent that the Output was human-generated when it was not;
  • From 31c409a86510e80fd6f798da165c50a6a40fccba Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 25 Aug 2026 01:54:38 -0400 Subject: [PATCH 025/185] update inference headers --- packages/console/app/src/routes/zen/util/handler.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index 8288e203d3ec..c743778b39ea 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -236,10 +236,12 @@ export async function handler( }) headers.delete("host") headers.delete("content-length") - headers.delete("x-opencode-request") - if (!isNewInference) headers.delete("x-opencode-session") - headers.delete("x-opencode-project") - headers.delete("x-opencode-client") + if (!isNewInference) { + headers.delete("x-opencode-session") + headers.delete("x-opencode-project") + headers.delete("x-opencode-client") + headers.delete("x-opencode-request") + } return headers })(), body: reqBody, From 2f36ffe35d569bd0fb1ae6e22f4a859ac08177e0 Mon Sep 17 00:00:00 2001 From: opencode Date: Tue, 25 Aug 2026 06:30:46 +0000 Subject: [PATCH 026/185] sync release versions for v1.18.23 --- bun.lock | 56 ++++++++++----------- packages/app/package.json | 2 +- packages/cli/package.json | 2 +- packages/codemode/package.json | 2 +- packages/console/app/package.json | 2 +- packages/console/core/package.json | 2 +- packages/console/function/package.json | 2 +- packages/console/mail/package.json | 2 +- packages/console/support/package.json | 2 +- packages/core/package.json | 2 +- packages/desktop/package.json | 2 +- packages/effect-drizzle-sqlite/package.json | 2 +- packages/effect-sqlite-node/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/function/package.json | 2 +- packages/http-recorder/package.json | 2 +- packages/llm/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- packages/server/package.json | 2 +- packages/session-ui/package.json | 2 +- packages/slack/package.json | 2 +- packages/stats/app/package.json | 2 +- packages/stats/core/package.json | 2 +- packages/stats/server/package.json | 2 +- packages/tui/package.json | 2 +- packages/ui/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 30 files changed, 57 insertions(+), 57 deletions(-) diff --git a/bun.lock b/bun.lock index 9eb06a99b39e..7991ff65c1db 100644 --- a/bun.lock +++ b/bun.lock @@ -29,7 +29,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@corvu/drawer": "catalog:", "@dnd-kit/abstract": "0.5.0", @@ -96,7 +96,7 @@ }, "packages/cli": { "name": "@opencode-ai/cli", - "version": "1.18.22", + "version": "1.18.23", "bin": { "lildax": "./bin/lildax.cjs", }, @@ -144,7 +144,7 @@ }, "packages/codemode": { "name": "@opencode-ai/codemode", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "acorn": "8.15.0", "effect": "catalog:", @@ -158,7 +158,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -194,7 +194,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -221,7 +221,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@ai-sdk/anthropic": "3.0.82", "@ai-sdk/openai": "3.0.48", @@ -243,7 +243,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -267,7 +267,7 @@ }, "packages/console/support": { "name": "@opencode-ai/console-support", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@opencode-ai/console-core": "workspace:*", @@ -287,7 +287,7 @@ }, "packages/core": { "name": "@opencode-ai/core", - "version": "1.18.22", + "version": "1.18.23", "bin": { "opencode": "./bin/opencode", }, @@ -381,7 +381,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@zip.js/zip.js": "2.7.62", "drizzle-orm": "catalog:", @@ -435,7 +435,7 @@ }, "packages/effect-drizzle-sqlite": { "name": "@opencode-ai/effect-drizzle-sqlite", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "drizzle-orm": "catalog:", "effect": "catalog:", @@ -449,7 +449,7 @@ }, "packages/effect-sqlite-node": { "name": "@opencode-ai/effect-sqlite-node", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "effect": "catalog:", }, @@ -461,7 +461,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@hono/standard-validator": "catalog:", "@opencode-ai/core": "workspace:*", @@ -493,7 +493,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -509,7 +509,7 @@ }, "packages/http-recorder": { "name": "@opencode-ai/http-recorder", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@effect/platform-node": "4.0.0-beta.83", "@effect/platform-node-shared": "4.0.0-beta.83", @@ -540,7 +540,7 @@ }, "packages/llm": { "name": "@opencode-ai/llm", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@opencode-ai/schema": "workspace:*", "@smithy/eventstream-codec": "4.2.14", @@ -559,7 +559,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.18.22", + "version": "1.18.23", "bin": { "opencode": "./bin/opencode", }, @@ -690,7 +690,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@ai-sdk/provider": "3.0.8", "@opencode-ai/sdk": "workspace:*", @@ -766,7 +766,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "cross-spawn": "catalog:", }, @@ -781,7 +781,7 @@ }, "packages/server": { "name": "@opencode-ai/server", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/protocol": "workspace:*", @@ -796,7 +796,7 @@ }, "packages/session-ui": { "name": "@opencode-ai/session-ui", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/client": "file:../app/vendor/opencode-ai-client-1.17.13-v2.tgz", @@ -836,7 +836,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -849,7 +849,7 @@ }, "packages/stats/app": { "name": "@opencode-ai/stats-app", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@ibm/plex": "6.4.1", "@kobalte/core": "catalog:", @@ -883,7 +883,7 @@ }, "packages/stats/core": { "name": "@opencode-ai/stats-core", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@aws-sdk/client-athena": "3.933.0", "@planetscale/database": "1.19.0", @@ -902,7 +902,7 @@ }, "packages/stats/server": { "name": "@opencode-ai/stats-server", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@aws-sdk/client-firehose": "3.933.0", "@effect/platform-node": "catalog:", @@ -944,7 +944,7 @@ }, "packages/tui": { "name": "@opencode-ai/tui", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/plugin": "workspace:*", @@ -971,7 +971,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@kobalte/core": "catalog:", "@pierre/diffs": "catalog:", @@ -1022,7 +1022,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/app/package.json b/packages/app/package.json index cadd66a4fbf5..044e0cd9ebab 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.18.22", + "version": "1.18.23", "description": "", "type": "module", "exports": { diff --git a/packages/cli/package.json b/packages/cli/package.json index 12ab9e07ff0c..4c77ac3c2e7a 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/cli", - "version": "1.18.22", + "version": "1.18.23", "type": "module", "license": "MIT", "bin": { diff --git a/packages/codemode/package.json b/packages/codemode/package.json index 7bac797715fe..cbfb81c45940 100644 --- a/packages/codemode/package.json +++ b/packages/codemode/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/codemode", - "version": "1.18.22", + "version": "1.18.23", "description": "Effect-native confined code execution over schema-described tools", "private": true, "type": "module", diff --git a/packages/console/app/package.json b/packages/console/app/package.json index e5153dad38ae..ca4db3c70cff 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.18.22", + "version": "1.18.23", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index e3acc27b4238..78b0a05e300e 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/console-core", - "version": "1.18.22", + "version": "1.18.23", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index e7fd6dbd8303..739921402e74 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.18.22", + "version": "1.18.23", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index 2b0c884999be..6d81e0bbf05b 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.18.22", + "version": "1.18.23", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/console/support/package.json b/packages/console/support/package.json index 4cc026ea730a..1b12ec02843d 100644 --- a/packages/console/support/package.json +++ b/packages/console/support/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-support", - "version": "1.18.22", + "version": "1.18.23", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/core/package.json b/packages/core/package.json index ea1471500a16..ba3653df8ae1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.22", + "version": "1.18.23", "name": "@opencode-ai/core", "type": "module", "license": "MIT", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index fe0eebd69aae..b2c975f2b0bf 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.18.22", + "version": "1.18.23", "type": "module", "license": "MIT", "homepage": "https://opencode.ai", diff --git a/packages/effect-drizzle-sqlite/package.json b/packages/effect-drizzle-sqlite/package.json index e54c1f59468f..d289ec31ff42 100644 --- a/packages/effect-drizzle-sqlite/package.json +++ b/packages/effect-drizzle-sqlite/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.22", + "version": "1.18.23", "name": "@opencode-ai/effect-drizzle-sqlite", "type": "module", "license": "MIT", diff --git a/packages/effect-sqlite-node/package.json b/packages/effect-sqlite-node/package.json index 29c940cdf8a2..572b7c5e85e5 100644 --- a/packages/effect-sqlite-node/package.json +++ b/packages/effect-sqlite-node/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.22", + "version": "1.18.23", "name": "@opencode-ai/effect-sqlite-node", "type": "module", "license": "MIT", diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index a32c2cf714b4..b5fa9476fab1 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.18.22", + "version": "1.18.23", "private": true, "type": "module", "license": "MIT", diff --git a/packages/function/package.json b/packages/function/package.json index 0bc1b6e6b751..85771f63537f 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.18.22", + "version": "1.18.23", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/http-recorder/package.json b/packages/http-recorder/package.json index 1f1269f121c5..07ed4c96108f 100644 --- a/packages/http-recorder/package.json +++ b/packages/http-recorder/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.22", + "version": "1.18.23", "name": "@opencode-ai/http-recorder", "description": "Record and replay Effect HTTP client traffic with deterministic cassettes", "type": "module", diff --git a/packages/llm/package.json b/packages/llm/package.json index 956a9e12c3b6..b18e9ceae69a 100644 --- a/packages/llm/package.json +++ b/packages/llm/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.22", + "version": "1.18.23", "name": "@opencode-ai/llm", "type": "module", "license": "MIT", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 771b05d5510a..a8b4ee7a880e 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.22", + "version": "1.18.23", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 32a081fb4963..c39a8c9d8d64 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/plugin", - "version": "1.18.22", + "version": "1.18.23", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index 89aaf1895faf..64ec112cdaae 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/sdk", - "version": "1.18.22", + "version": "1.18.23", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index a4542f2ff884..c5f24b3ff753 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/server", - "version": "1.18.22", + "version": "1.18.23", "private": true, "type": "module", "license": "MIT", diff --git a/packages/session-ui/package.json b/packages/session-ui/package.json index a5fe78ffd269..341bc8272a0d 100644 --- a/packages/session-ui/package.json +++ b/packages/session-ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/session-ui", - "version": "1.18.22", + "version": "1.18.23", "private": true, "type": "module", "license": "MIT", diff --git a/packages/slack/package.json b/packages/slack/package.json index 349f8178d4df..46eac6d1f59f 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.18.22", + "version": "1.18.23", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/stats/app/package.json b/packages/stats/app/package.json index abd183860c87..1bf1f673816d 100644 --- a/packages/stats/app/package.json +++ b/packages/stats/app/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-app", - "version": "1.18.22", + "version": "1.18.23", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/core/package.json b/packages/stats/core/package.json index 4d434ea9c781..f4ab6c5ca640 100644 --- a/packages/stats/core/package.json +++ b/packages/stats/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-core", - "version": "1.18.22", + "version": "1.18.23", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/server/package.json b/packages/stats/server/package.json index e7a6c34a1c14..12da00b36e25 100644 --- a/packages/stats/server/package.json +++ b/packages/stats/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-server", - "version": "1.18.22", + "version": "1.18.23", "private": true, "type": "module", "license": "MIT", diff --git a/packages/tui/package.json b/packages/tui/package.json index 8828868e575e..08557e6368eb 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/tui", - "version": "1.18.22", + "version": "1.18.23", "private": true, "type": "module", "license": "MIT", diff --git a/packages/ui/package.json b/packages/ui/package.json index 545217d8161d..2a8dc93df72c 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.18.22", + "version": "1.18.23", "type": "module", "license": "MIT", "repository": { diff --git a/packages/web/package.json b/packages/web/package.json index f0242a302c3e..f3a3f4ab96a9 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -2,7 +2,7 @@ "name": "@opencode-ai/web", "type": "module", "license": "MIT", - "version": "1.18.22", + "version": "1.18.23", "scripts": { "dev": "astro dev", "dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev", diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index e621b6db37d7..cae6ef4272b3 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "opencode", "displayName": "opencode", "description": "opencode for VS Code", - "version": "1.18.22", + "version": "1.18.23", "publisher": "sst-dev", "repository": { "type": "git", From bdcb6be6495671006944d2b4f8035a5c1b1e0589 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 25 Aug 2026 03:14:10 -0400 Subject: [PATCH 027/185] update inference headers --- packages/console/app/src/routes/zen/util/handler.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index c743778b39ea..af3d9f02f3ce 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -234,6 +234,9 @@ export async function handler( } headers.set(k, v) }) + if (isNewInference) { + headers.set("x-opencode-model", model) + } headers.delete("host") headers.delete("content-length") if (!isNewInference) { From 6bb1a76e586c321e214bc59196ea18676eb0d3fc Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 25 Aug 2026 03:30:20 -0400 Subject: [PATCH 028/185] update inference headers --- packages/console/app/src/routes/zen/util/handler.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index af3d9f02f3ce..ca6bd0b05d05 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -244,6 +244,7 @@ export async function handler( headers.delete("x-opencode-project") headers.delete("x-opencode-client") headers.delete("x-opencode-request") + headers.delete("x-opencode-model") } return headers })(), From a57230b80be1c3bffab71ac021d11b02fb2fbe6c Mon Sep 17 00:00:00 2001 From: Nathan Thomassin Date: Tue, 25 Aug 2026 09:34:24 +0200 Subject: [PATCH 029/185] fix(app): drop archived sessions from home list right away (#44905) Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> --- .../global-sync/home-session-index.test.ts | 33 ++++++++++++++++++- .../context/global-sync/home-session-index.ts | 14 +++++++- .../pages/home/home-sessions-controller.tsx | 6 ++-- .../app/src/pages/session/session-archive.ts | 3 ++ 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/packages/app/src/context/global-sync/home-session-index.test.ts b/packages/app/src/context/global-sync/home-session-index.test.ts index 4e40cc78eaea..9b94f1de2128 100644 --- a/packages/app/src/context/global-sync/home-session-index.test.ts +++ b/packages/app/src/context/global-sync/home-session-index.test.ts @@ -1,8 +1,10 @@ import { describe, expect, test } from "bun:test" -import type { SessionV2Info } from "@opencode-ai/sdk/v2/client" +import { QueryClient } from "@tanstack/solid-query" +import type { Session, SessionV2Info } from "@opencode-ai/sdk/v2/client" import { applyHomeSessionEvent, appendHomeSessionEvent, + createHomeSessionIndexCache, HOME_V2_SESSION_PAGE_LIMIT, loadHomeSessionIndex, homeSessionIndexSessions, @@ -151,4 +153,33 @@ describe("Home V2 session index", () => { expect(homeSessionIndexRefresh("global.disposed", true).refetch).toBe(true) expect(homeSessionIndexRefresh("session.next.moved", true).refetch).toBe(true) }) + + test("removes a session from the loaded Home index", () => { + const queryClient = new QueryClient() + const cache = createHomeSessionIndexCache(queryClient, "server") + const sessions = [ + { id: "a", time: { created: 1, updated: 1 } }, + { id: "b", time: { created: 1, updated: 1 } }, + ] as Session[] + queryClient.setQueryData(cache.indexKey, { sessions, eventSequence: 0 }) + + cache.remove("a") + + const index = queryClient.getQueryData<{ sessions: Session[] }>(cache.indexKey) + expect(index?.sessions.map((item) => item.id)).toEqual(["b"]) + }) + + test("keeps the session out of the Home list when the index is not mounted", () => { + const queryClient = new QueryClient() + const cache = createHomeSessionIndexCache(queryClient, "server") + const sessions = [ + { id: "a", time: { created: 1, updated: 1 } }, + { id: "b", time: { created: 1, updated: 1 } }, + ] as Session[] + + cache.remove("a") + + expect(queryClient.getQueryData(cache.indexKey)).toBeUndefined() + expect(cache.sessions({ sessions, eventSequence: 0 }, undefined).map((item) => item.id)).toEqual(["b"]) + }) }) diff --git a/packages/app/src/context/global-sync/home-session-index.ts b/packages/app/src/context/global-sync/home-session-index.ts index 03a085e34d51..781c39c45012 100644 --- a/packages/app/src/context/global-sync/home-session-index.ts +++ b/packages/app/src/context/global-sync/home-session-index.ts @@ -85,6 +85,7 @@ export function createHomeSessionIndexCache(queryClient: QueryClient, server: st const indexKey = homeSessionIndexKey(server) const eventsKey = homeSessionEventsKey(server) let connected = false + const removed = new Set() return { indexKey, @@ -97,7 +98,8 @@ export function createHomeSessionIndexCache(queryClient: QueryClient, server: st queryClient.setQueryData(eventsKey, (current) => trimHomeSessionEvents(current, sequence)) }, sessions(index: HomeSessionIndex | undefined, events: HomeSessionEvents | undefined) { - return homeSessionIndexSessions(index, events) + const sessions = homeSessionIndexSessions(index, events) + return removed.size === 0 ? sessions : sessions.filter((session) => !removed.has(session.id)) }, apply(event: HomeSessionEvent) { if (!queryClient.getQueryState(indexKey)) return @@ -116,6 +118,16 @@ export function createHomeSessionIndexCache(queryClient: QueryClient, server: st } queryClient.setQueryData(eventsKey, { sequence: next.sequence, entries: [] }) }, + remove(sessionID: string) { + removed.add(sessionID) + if (!queryClient.getQueryState(indexKey)) return + queryClient.setQueryData(indexKey, (index) => { + if (!index) return index + const at = index.sessions.findIndex((session) => session.id === sessionID) + if (at === -1) return index + return { ...index, sessions: index.sessions.toSpliced(at, 1) } + }) + }, refresh(event: Event["type"]) { const result = homeSessionIndexRefresh(event, connected) connected = result.connected diff --git a/packages/app/src/pages/home/home-sessions-controller.tsx b/packages/app/src/pages/home/home-sessions-controller.tsx index 25d896393ca6..f306f208cc80 100644 --- a/packages/app/src/pages/home/home-sessions-controller.tsx +++ b/packages/app/src/pages/home/home-sessions-controller.tsx @@ -219,13 +219,15 @@ export function createHomeSessionsController(home: HomeController) { directory: session.directory, time: { archived: Date.now() }, }), - remove: () => + remove: () => { setStore( produce((draft) => { const match = Binary.search(draft.session, session.id, (item) => item.id) if (match.found) draft.session.splice(match.index, 1) }), - ), + ) + homeSessions().remove(session.id) + }, onError: (cause) => showToast({ title: language.t("common.requestFailed"), diff --git a/packages/app/src/pages/session/session-archive.ts b/packages/app/src/pages/session/session-archive.ts index 5e1314dbd14d..396886953954 100644 --- a/packages/app/src/pages/session/session-archive.ts +++ b/packages/app/src/pages/session/session-archive.ts @@ -3,6 +3,7 @@ import { produce } from "solid-js/store" import { notifySessionTabsRemoved } from "@/components/titlebar-session-events" import { useLanguage } from "@/context/language" import { useSDK } from "@/context/sdk" +import { useServerSync } from "@/context/server-sync" import { useSync } from "@/context/sync" import { useTabs } from "@/context/tabs" import { errorMessage } from "@/pages/layout/helpers" @@ -15,6 +16,7 @@ export function useSessionArchive() { const navigate = useNavigate() const sdk = useSDK() const sync = useSync() + const serverSync = useServerSync() const tabs = useTabs() const { params } = useSessionKey() @@ -56,6 +58,7 @@ export function useSessionArchive() { }), ) sync().session.evict(sessionID) + serverSync().homeSessions.remove(sessionID) navigateAfterRemoval(sessionID, session.parentID, nextSession?.id) notifySessionTabsRemoved({ directory: sdk().directory, sessionIDs: [sessionID] }) }) From 1e86be2bc568d4ed30311ce431e6de207c591272 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 25 Aug 2026 04:22:16 -0400 Subject: [PATCH 030/185] update inference headers --- packages/console/app/src/routes/zen/util/handler.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index ca6bd0b05d05..5dbb8bcc3636 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -235,7 +235,7 @@ export async function handler( headers.set(k, v) }) if (isNewInference) { - headers.set("x-opencode-model", model) + headers.set("x-zen-model", model) } headers.delete("host") headers.delete("content-length") @@ -244,7 +244,7 @@ export async function handler( headers.delete("x-opencode-project") headers.delete("x-opencode-client") headers.delete("x-opencode-request") - headers.delete("x-opencode-model") + headers.delete("x-zen-model") } return headers })(), From afd6f3b064bbb5d49ecd8e2d1037f5deca711d9e Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 25 Aug 2026 05:06:33 -0400 Subject: [PATCH 031/185] zen: display quota usage breakdown --- packages/console/app/src/i18n/ar.ts | 10 +- packages/console/app/src/i18n/br.ts | 10 +- packages/console/app/src/i18n/da.ts | 10 +- packages/console/app/src/i18n/de.ts | 10 +- packages/console/app/src/i18n/en.ts | 10 +- packages/console/app/src/i18n/es.ts | 10 +- packages/console/app/src/i18n/fr.ts | 10 +- packages/console/app/src/i18n/it.ts | 10 +- packages/console/app/src/i18n/ja.ts | 10 +- packages/console/app/src/i18n/ko.ts | 10 +- packages/console/app/src/i18n/no.ts | 10 +- packages/console/app/src/i18n/pl.ts | 10 +- packages/console/app/src/i18n/ru.ts | 10 +- packages/console/app/src/i18n/th.ts | 10 +- packages/console/app/src/i18n/tr.ts | 10 +- packages/console/app/src/i18n/uk.ts | 10 +- packages/console/app/src/i18n/zh.ts | 10 +- packages/console/app/src/i18n/zht.ts | 10 +- packages/console/app/src/lib/lite-usage.ts | 64 ++++ .../workspace/[id]/go/lite-section.module.css | 114 ++++++ .../routes/workspace/[id]/go/lite-section.tsx | 355 ++++++++++++++++-- .../app/src/routes/zen/util/handler.ts | 2 +- packages/console/app/test/liteUsage.test.ts | 75 ++++ .../console/core/src/schema/billing.sql.ts | 1 + 24 files changed, 743 insertions(+), 48 deletions(-) create mode 100644 packages/console/app/src/lib/lite-usage.ts create mode 100644 packages/console/app/test/liteUsage.test.ts diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts index e82395918bc0..e71b57accfe0 100644 --- a/packages/console/app/src/i18n/ar.ts +++ b/packages/console/app/src/i18n/ar.ts @@ -661,10 +661,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "بضع ثوان", "workspace.lite.subscription.message": "أنت مشترك في OpenCode Go.", "workspace.lite.subscription.manage": "إدارة الاشتراك", - "workspace.lite.subscription.rollingUsage": "الاستخدام المتجدد", + "workspace.lite.subscription.rollingUsage": "الاستخدام خلال 5 ساعات", + "workspace.lite.subscription.rollingQuota": "الحصة خلال 5 ساعات", "workspace.lite.subscription.weeklyUsage": "الاستخدام الأسبوعي", + "workspace.lite.subscription.weeklyQuota": "الحصة الأسبوعية", "workspace.lite.subscription.monthlyUsage": "الاستخدام الشهري", + "workspace.lite.subscription.monthlyQuota": "الحصة الشهرية", "workspace.lite.subscription.resetsIn": "إعادة تعيين في", + "workspace.lite.subscription.showDetails": "إظهار التفاصيل", + "workspace.lite.subscription.hideDetails": "إخفاء التفاصيل", + "workspace.lite.subscription.model": "النموذج", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "الإجمالي", "workspace.lite.subscription.useBalance": "استخدم رصيدك المتوفر بعد الوصول إلى حدود الاستخدام", "workspace.lite.subscription.selectProvider": 'اختر "OpenCode Go" كمزود في إعدادات opencode الخاصة بك لاستخدام نماذج Go.', diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts index 49c0f2aa31d5..e710fba0f486 100644 --- a/packages/console/app/src/i18n/br.ts +++ b/packages/console/app/src/i18n/br.ts @@ -673,10 +673,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "alguns segundos", "workspace.lite.subscription.message": "Você assina o OpenCode Go.", "workspace.lite.subscription.manage": "Gerenciar Assinatura", - "workspace.lite.subscription.rollingUsage": "Uso Contínuo", + "workspace.lite.subscription.rollingUsage": "Uso de 5 horas", + "workspace.lite.subscription.rollingQuota": "Cota de 5 horas", "workspace.lite.subscription.weeklyUsage": "Uso Semanal", + "workspace.lite.subscription.weeklyQuota": "Cota Semanal", "workspace.lite.subscription.monthlyUsage": "Uso Mensal", + "workspace.lite.subscription.monthlyQuota": "Cota Mensal", "workspace.lite.subscription.resetsIn": "Reinicia em", + "workspace.lite.subscription.showDetails": "Mostrar detalhes", + "workspace.lite.subscription.hideDetails": "Ocultar detalhes", + "workspace.lite.subscription.model": "Modelo", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "Total", "workspace.lite.subscription.useBalance": "Use seu saldo disponível após atingir os limites de uso", "workspace.lite.subscription.selectProvider": 'Selecione "OpenCode Go" como provedor na sua configuração do opencode para usar os modelos Go.', diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts index 6e2652ef1530..b3db8954cdd4 100644 --- a/packages/console/app/src/i18n/da.ts +++ b/packages/console/app/src/i18n/da.ts @@ -669,10 +669,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "et par sekunder", "workspace.lite.subscription.message": "Du abonnerer på OpenCode Go.", "workspace.lite.subscription.manage": "Administrer abonnement", - "workspace.lite.subscription.rollingUsage": "Løbende forbrug", + "workspace.lite.subscription.rollingUsage": "5-timers forbrug", + "workspace.lite.subscription.rollingQuota": "5-timers kvote", "workspace.lite.subscription.weeklyUsage": "Ugentligt forbrug", + "workspace.lite.subscription.weeklyQuota": "Ugentlig kvote", "workspace.lite.subscription.monthlyUsage": "Månedligt forbrug", + "workspace.lite.subscription.monthlyQuota": "Månedlig kvote", "workspace.lite.subscription.resetsIn": "Nulstiller i", + "workspace.lite.subscription.showDetails": "Vis detaljer", + "workspace.lite.subscription.hideDetails": "Skjul detaljer", + "workspace.lite.subscription.model": "Model", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "I alt", "workspace.lite.subscription.useBalance": "Brug din tilgængelige saldo, når du har nået forbrugsgrænserne", "workspace.lite.subscription.selectProvider": 'Vælg "OpenCode Go" som udbyder i din opencode-konfiguration for at bruge Go-modeller.', diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts index 20ae2743931b..13625e7bd210 100644 --- a/packages/console/app/src/i18n/de.ts +++ b/packages/console/app/src/i18n/de.ts @@ -671,10 +671,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "einige Sekunden", "workspace.lite.subscription.message": "Du hast OpenCode Go abonniert.", "workspace.lite.subscription.manage": "Abo verwalten", - "workspace.lite.subscription.rollingUsage": "Fortlaufende Nutzung", + "workspace.lite.subscription.rollingUsage": "5-Stunden-Nutzung", + "workspace.lite.subscription.rollingQuota": "5-Stunden-Kontingent", "workspace.lite.subscription.weeklyUsage": "Wöchentliche Nutzung", + "workspace.lite.subscription.weeklyQuota": "Wöchentliches Kontingent", "workspace.lite.subscription.monthlyUsage": "Monatliche Nutzung", + "workspace.lite.subscription.monthlyQuota": "Monatliches Kontingent", "workspace.lite.subscription.resetsIn": "Setzt zurück in", + "workspace.lite.subscription.showDetails": "Details anzeigen", + "workspace.lite.subscription.hideDetails": "Details ausblenden", + "workspace.lite.subscription.model": "Modell", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "Gesamt", "workspace.lite.subscription.useBalance": "Nutze dein verfügbares Guthaben, nachdem die Nutzungslimits erreicht sind", "workspace.lite.subscription.selectProvider": 'Wähle "OpenCode Go" als Anbieter in deiner opencode-Konfiguration, um Go-Modelle zu verwenden.', diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index b31f79a63e57..45f2eed8fb4d 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -669,10 +669,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "a few seconds", "workspace.lite.subscription.message": "You are subscribed to OpenCode Go.", "workspace.lite.subscription.manage": "Manage Subscription", - "workspace.lite.subscription.rollingUsage": "Rolling Usage", + "workspace.lite.subscription.rollingUsage": "5-hour Usage", + "workspace.lite.subscription.rollingQuota": "5-hour Quota", "workspace.lite.subscription.weeklyUsage": "Weekly Usage", + "workspace.lite.subscription.weeklyQuota": "Weekly Quota", "workspace.lite.subscription.monthlyUsage": "Monthly Usage", + "workspace.lite.subscription.monthlyQuota": "Monthly Quota", "workspace.lite.subscription.resetsIn": "Resets in", + "workspace.lite.subscription.showDetails": "Show details", + "workspace.lite.subscription.hideDetails": "Hide details", + "workspace.lite.subscription.model": "Model", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "Total", "workspace.lite.subscription.useBalance": "Use your available balance after reaching the usage limits", "workspace.lite.subscription.selectProvider": 'Select "OpenCode Go" as the provider in your opencode configuration to use Go models.', diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts index b76e0a5c63e0..e5f2bde97854 100644 --- a/packages/console/app/src/i18n/es.ts +++ b/packages/console/app/src/i18n/es.ts @@ -674,10 +674,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "unos pocos segundos", "workspace.lite.subscription.message": "Estás suscrito a OpenCode Go.", "workspace.lite.subscription.manage": "Gestionar Suscripción", - "workspace.lite.subscription.rollingUsage": "Uso Continuo", + "workspace.lite.subscription.rollingUsage": "Uso de 5 horas", + "workspace.lite.subscription.rollingQuota": "Cuota de 5 horas", "workspace.lite.subscription.weeklyUsage": "Uso Semanal", + "workspace.lite.subscription.weeklyQuota": "Cuota Semanal", "workspace.lite.subscription.monthlyUsage": "Uso Mensual", + "workspace.lite.subscription.monthlyQuota": "Cuota Mensual", "workspace.lite.subscription.resetsIn": "Se reinicia en", + "workspace.lite.subscription.showDetails": "Mostrar detalles", + "workspace.lite.subscription.hideDetails": "Ocultar detalles", + "workspace.lite.subscription.model": "Modelo", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "Total", "workspace.lite.subscription.useBalance": "Usa tu saldo disponible después de alcanzar los límites de uso", "workspace.lite.subscription.selectProvider": 'Selecciona "OpenCode Go" como proveedor en tu configuración de opencode para usar los modelos Go.', diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts index 171c481d7982..410c4e2da1b6 100644 --- a/packages/console/app/src/i18n/fr.ts +++ b/packages/console/app/src/i18n/fr.ts @@ -679,10 +679,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "quelques secondes", "workspace.lite.subscription.message": "Vous êtes abonné à OpenCode Go.", "workspace.lite.subscription.manage": "Gérer l'abonnement", - "workspace.lite.subscription.rollingUsage": "Utilisation glissante", + "workspace.lite.subscription.rollingUsage": "Utilisation sur 5 heures", + "workspace.lite.subscription.rollingQuota": "Quota sur 5 heures", "workspace.lite.subscription.weeklyUsage": "Utilisation hebdomadaire", + "workspace.lite.subscription.weeklyQuota": "Quota hebdomadaire", "workspace.lite.subscription.monthlyUsage": "Utilisation mensuelle", + "workspace.lite.subscription.monthlyQuota": "Quota mensuel", "workspace.lite.subscription.resetsIn": "Réinitialisation dans", + "workspace.lite.subscription.showDetails": "Afficher les détails", + "workspace.lite.subscription.hideDetails": "Masquer les détails", + "workspace.lite.subscription.model": "Modèle", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "Total", "workspace.lite.subscription.useBalance": "Utilisez votre solde disponible après avoir atteint les limites d'utilisation", "workspace.lite.subscription.selectProvider": diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts index 7906a70dcc65..a272d621f0a4 100644 --- a/packages/console/app/src/i18n/it.ts +++ b/packages/console/app/src/i18n/it.ts @@ -672,10 +672,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "pochi secondi", "workspace.lite.subscription.message": "Sei abbonato a OpenCode Go.", "workspace.lite.subscription.manage": "Gestisci Abbonamento", - "workspace.lite.subscription.rollingUsage": "Utilizzo Continuativo", + "workspace.lite.subscription.rollingUsage": "Utilizzo su 5 ore", + "workspace.lite.subscription.rollingQuota": "Quota su 5 ore", "workspace.lite.subscription.weeklyUsage": "Utilizzo Settimanale", + "workspace.lite.subscription.weeklyQuota": "Quota Settimanale", "workspace.lite.subscription.monthlyUsage": "Utilizzo Mensile", + "workspace.lite.subscription.monthlyQuota": "Quota Mensile", "workspace.lite.subscription.resetsIn": "Si resetta tra", + "workspace.lite.subscription.showDetails": "Mostra dettagli", + "workspace.lite.subscription.hideDetails": "Nascondi dettagli", + "workspace.lite.subscription.model": "Modello", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "Totale", "workspace.lite.subscription.useBalance": "Usa il tuo saldo disponibile dopo aver raggiunto i limiti di utilizzo", "workspace.lite.subscription.selectProvider": 'Seleziona "OpenCode Go" come provider nella tua configurazione opencode per utilizzare i modelli Go.', diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts index ffc97c616cf2..c2a46a06bc69 100644 --- a/packages/console/app/src/i18n/ja.ts +++ b/packages/console/app/src/i18n/ja.ts @@ -670,10 +670,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "数秒", "workspace.lite.subscription.message": "あなたは OpenCode Go を購読しています。", "workspace.lite.subscription.manage": "サブスクリプションの管理", - "workspace.lite.subscription.rollingUsage": "ローリング利用量", + "workspace.lite.subscription.rollingUsage": "5時間利用量", + "workspace.lite.subscription.rollingQuota": "5時間上限", "workspace.lite.subscription.weeklyUsage": "週間利用量", + "workspace.lite.subscription.weeklyQuota": "週間上限", "workspace.lite.subscription.monthlyUsage": "月間利用量", + "workspace.lite.subscription.monthlyQuota": "月間上限", "workspace.lite.subscription.resetsIn": "リセットまで", + "workspace.lite.subscription.showDetails": "詳細を表示", + "workspace.lite.subscription.hideDetails": "詳細を非表示", + "workspace.lite.subscription.model": "モデル", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "合計", "workspace.lite.subscription.useBalance": "利用限度額に達したら利用可能な残高を使用する", "workspace.lite.subscription.selectProvider": "Go モデルを使用するには、opencode の設定で「OpenCode Go」をプロバイダーとして選択してください。", diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts index 63468b24a0d0..156a82c6c8be 100644 --- a/packages/console/app/src/i18n/ko.ts +++ b/packages/console/app/src/i18n/ko.ts @@ -661,10 +661,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "몇 초", "workspace.lite.subscription.message": "현재 OpenCode Go를 구독 중입니다.", "workspace.lite.subscription.manage": "구독 관리", - "workspace.lite.subscription.rollingUsage": "롤링 사용량", + "workspace.lite.subscription.rollingUsage": "5시간 사용량", + "workspace.lite.subscription.rollingQuota": "5시간 할당량", "workspace.lite.subscription.weeklyUsage": "주간 사용량", + "workspace.lite.subscription.weeklyQuota": "주간 할당량", "workspace.lite.subscription.monthlyUsage": "월간 사용량", + "workspace.lite.subscription.monthlyQuota": "월간 할당량", "workspace.lite.subscription.resetsIn": "초기화까지 남은 시간:", + "workspace.lite.subscription.showDetails": "상세 정보 보기", + "workspace.lite.subscription.hideDetails": "상세 정보 숨기기", + "workspace.lite.subscription.model": "모델", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "합계", "workspace.lite.subscription.useBalance": "사용 한도 도달 후에는 보유 잔액 사용", "workspace.lite.subscription.selectProvider": 'Go 모델을 사용하려면 opencode 설정에서 "OpenCode Go"를 공급자로 선택하세요.', diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts index 48573864ad55..93d1a92b1147 100644 --- a/packages/console/app/src/i18n/no.ts +++ b/packages/console/app/src/i18n/no.ts @@ -670,10 +670,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "noen få sekunder", "workspace.lite.subscription.message": "Du abonnerer på OpenCode Go.", "workspace.lite.subscription.manage": "Administrer abonnement", - "workspace.lite.subscription.rollingUsage": "Løpende bruk", + "workspace.lite.subscription.rollingUsage": "5-timers bruk", + "workspace.lite.subscription.rollingQuota": "5-timers kvote", "workspace.lite.subscription.weeklyUsage": "Ukentlig bruk", + "workspace.lite.subscription.weeklyQuota": "Ukentlig kvote", "workspace.lite.subscription.monthlyUsage": "Månedlig bruk", + "workspace.lite.subscription.monthlyQuota": "Månedlig kvote", "workspace.lite.subscription.resetsIn": "Nullstilles om", + "workspace.lite.subscription.showDetails": "Vis detaljer", + "workspace.lite.subscription.hideDetails": "Skjul detaljer", + "workspace.lite.subscription.model": "Modell", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "Totalt", "workspace.lite.subscription.useBalance": "Bruk din tilgjengelige saldo etter å ha nådd bruksgrensene", "workspace.lite.subscription.selectProvider": 'Velg "OpenCode Go" som leverandør i opencode-konfigurasjonen din for å bruke Go-modeller.', diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts index 0e27dad306b5..cc4626ef5ca9 100644 --- a/packages/console/app/src/i18n/pl.ts +++ b/packages/console/app/src/i18n/pl.ts @@ -671,10 +671,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "kilka sekund", "workspace.lite.subscription.message": "Subskrybujesz OpenCode Go.", "workspace.lite.subscription.manage": "Zarządzaj subskrypcją", - "workspace.lite.subscription.rollingUsage": "Użycie kroczące", + "workspace.lite.subscription.rollingUsage": "Użycie w ciągu 5 godzin", + "workspace.lite.subscription.rollingQuota": "Limit 5-godzinny", "workspace.lite.subscription.weeklyUsage": "Użycie tygodniowe", + "workspace.lite.subscription.weeklyQuota": "Limit tygodniowy", "workspace.lite.subscription.monthlyUsage": "Użycie miesięczne", + "workspace.lite.subscription.monthlyQuota": "Limit miesięczny", "workspace.lite.subscription.resetsIn": "Resetuje się za", + "workspace.lite.subscription.showDetails": "Pokaż szczegóły", + "workspace.lite.subscription.hideDetails": "Ukryj szczegóły", + "workspace.lite.subscription.model": "Model", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "Łącznie", "workspace.lite.subscription.useBalance": "Użyj dostępnego salda po osiągnięciu limitów użycia", "workspace.lite.subscription.selectProvider": 'Wybierz "OpenCode Go" jako dostawcę w konfiguracji opencode, aby używać modeli Go.', diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts index e3ff8c3ff0ac..b92730405448 100644 --- a/packages/console/app/src/i18n/ru.ts +++ b/packages/console/app/src/i18n/ru.ts @@ -678,10 +678,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "несколько секунд", "workspace.lite.subscription.message": "Вы подписаны на OpenCode Go.", "workspace.lite.subscription.manage": "Управление подпиской", - "workspace.lite.subscription.rollingUsage": "Скользящее использование", + "workspace.lite.subscription.rollingUsage": "Использование за 5 часов", + "workspace.lite.subscription.rollingQuota": "Квота на 5 часов", "workspace.lite.subscription.weeklyUsage": "Недельное использование", + "workspace.lite.subscription.weeklyQuota": "Недельная квота", "workspace.lite.subscription.monthlyUsage": "Ежемесячное использование", + "workspace.lite.subscription.monthlyQuota": "Ежемесячная квота", "workspace.lite.subscription.resetsIn": "Сброс через", + "workspace.lite.subscription.showDetails": "Показать подробности", + "workspace.lite.subscription.hideDetails": "Скрыть подробности", + "workspace.lite.subscription.model": "Модель", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "Итого", "workspace.lite.subscription.useBalance": "Использовать доступный баланс после достижения лимитов", "workspace.lite.subscription.selectProvider": 'Выберите "OpenCode Go" в качестве провайдера в настройках opencode для использования моделей Go.', diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts index f1767d54090a..10e715e60736 100644 --- a/packages/console/app/src/i18n/th.ts +++ b/packages/console/app/src/i18n/th.ts @@ -667,10 +667,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "ไม่กี่วินาที", "workspace.lite.subscription.message": "คุณได้สมัครสมาชิก OpenCode Go แล้ว", "workspace.lite.subscription.manage": "จัดการการสมัครสมาชิก", - "workspace.lite.subscription.rollingUsage": "การใช้งานแบบหมุนเวียน", + "workspace.lite.subscription.rollingUsage": "การใช้งานใน 5 ชั่วโมง", + "workspace.lite.subscription.rollingQuota": "โควตา 5 ชั่วโมง", "workspace.lite.subscription.weeklyUsage": "การใช้งานรายสัปดาห์", + "workspace.lite.subscription.weeklyQuota": "โควตารายสัปดาห์", "workspace.lite.subscription.monthlyUsage": "การใช้งานรายเดือน", + "workspace.lite.subscription.monthlyQuota": "โควตารายเดือน", "workspace.lite.subscription.resetsIn": "รีเซ็ตใน", + "workspace.lite.subscription.showDetails": "แสดงรายละเอียด", + "workspace.lite.subscription.hideDetails": "ซ่อนรายละเอียด", + "workspace.lite.subscription.model": "โมเดล", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "รวม", "workspace.lite.subscription.useBalance": "ใช้ยอดคงเหลือของคุณหลังจากถึงขีดจำกัดการใช้งาน", "workspace.lite.subscription.selectProvider": 'เลือก "OpenCode Go" เป็นผู้ให้บริการในการตั้งค่า opencode ของคุณเพื่อใช้โมเดล Go', diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts index cd1aaebb93fd..2a058e5d82fd 100644 --- a/packages/console/app/src/i18n/tr.ts +++ b/packages/console/app/src/i18n/tr.ts @@ -673,10 +673,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "birkaç saniye", "workspace.lite.subscription.message": "OpenCode Go abonesisiniz.", "workspace.lite.subscription.manage": "Aboneliği Yönet", - "workspace.lite.subscription.rollingUsage": "Devam Eden Kullanım", + "workspace.lite.subscription.rollingUsage": "5 Saatlik Kullanım", + "workspace.lite.subscription.rollingQuota": "5 Saatlik Kota", "workspace.lite.subscription.weeklyUsage": "Haftalık Kullanım", + "workspace.lite.subscription.weeklyQuota": "Haftalık Kota", "workspace.lite.subscription.monthlyUsage": "Aylık Kullanım", + "workspace.lite.subscription.monthlyQuota": "Aylık Kota", "workspace.lite.subscription.resetsIn": "Sıfırlama süresi", + "workspace.lite.subscription.showDetails": "Ayrıntıları göster", + "workspace.lite.subscription.hideDetails": "Ayrıntıları gizle", + "workspace.lite.subscription.model": "Model", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "Toplam", "workspace.lite.subscription.useBalance": "Kullanım limitlerine ulaştıktan sonra mevcut bakiyenizi kullanın", "workspace.lite.subscription.selectProvider": 'Go modellerini kullanmak için opencode yapılandırmanızda "OpenCode Go"\'yu sağlayıcı olarak seçin.', diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts index c995104569d4..93aea4702746 100644 --- a/packages/console/app/src/i18n/uk.ts +++ b/packages/console/app/src/i18n/uk.ts @@ -669,10 +669,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "кілька секунд", "workspace.lite.subscription.message": "Ви підписані на OpenCode Go.", "workspace.lite.subscription.manage": "Керувати підпискою", - "workspace.lite.subscription.rollingUsage": "Ковзне використання", + "workspace.lite.subscription.rollingUsage": "Використання за 5 годин", + "workspace.lite.subscription.rollingQuota": "Квота на 5 годин", "workspace.lite.subscription.weeklyUsage": "Тижневе використання", + "workspace.lite.subscription.weeklyQuota": "Тижнева квота", "workspace.lite.subscription.monthlyUsage": "Місячне використання", + "workspace.lite.subscription.monthlyQuota": "Місячна квота", "workspace.lite.subscription.resetsIn": "Скидається через", + "workspace.lite.subscription.showDetails": "Показати подробиці", + "workspace.lite.subscription.hideDetails": "Приховати подробиці", + "workspace.lite.subscription.model": "Модель", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "Усього", "workspace.lite.subscription.useBalance": "Використовуйте доступний баланс після досягнення лімітів", "workspace.lite.subscription.selectProvider": 'Виберіть "OpenCode Go" як провайдера в конфігурації opencode.', "workspace.lite.providers.title": "Провайдери", diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts index 8fae9a9c00d0..03c278a71b38 100644 --- a/packages/console/app/src/i18n/zh.ts +++ b/packages/console/app/src/i18n/zh.ts @@ -642,10 +642,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "几秒钟", "workspace.lite.subscription.message": "您已订阅 OpenCode Go。", "workspace.lite.subscription.manage": "管理订阅", - "workspace.lite.subscription.rollingUsage": "滚动用量", + "workspace.lite.subscription.rollingUsage": "5 小时用量", + "workspace.lite.subscription.rollingQuota": "5 小时配额", "workspace.lite.subscription.weeklyUsage": "每周用量", + "workspace.lite.subscription.weeklyQuota": "每周配额", "workspace.lite.subscription.monthlyUsage": "每月用量", + "workspace.lite.subscription.monthlyQuota": "每月配额", "workspace.lite.subscription.resetsIn": "重置于", + "workspace.lite.subscription.showDetails": "显示详情", + "workspace.lite.subscription.hideDetails": "隐藏详情", + "workspace.lite.subscription.model": "模型", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "总计", "workspace.lite.subscription.useBalance": "达到使用限额后使用您的可用余额", "workspace.lite.subscription.selectProvider": "在你的 opencode 配置中选择「OpenCode Go」作为提供商,即可使用 Go 模型。", diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts index d30affd99f7a..3da3c462558a 100644 --- a/packages/console/app/src/i18n/zht.ts +++ b/packages/console/app/src/i18n/zht.ts @@ -642,10 +642,18 @@ export const dict = { "workspace.lite.time.fewSeconds": "幾秒", "workspace.lite.subscription.message": "您已訂閱 OpenCode Go。", "workspace.lite.subscription.manage": "管理訂閱", - "workspace.lite.subscription.rollingUsage": "滾動使用量", + "workspace.lite.subscription.rollingUsage": "5 小時使用量", + "workspace.lite.subscription.rollingQuota": "5 小時配額", "workspace.lite.subscription.weeklyUsage": "每週使用量", + "workspace.lite.subscription.weeklyQuota": "每週配額", "workspace.lite.subscription.monthlyUsage": "每月使用量", + "workspace.lite.subscription.monthlyQuota": "每月配額", "workspace.lite.subscription.resetsIn": "重置時間:", + "workspace.lite.subscription.showDetails": "顯示詳情", + "workspace.lite.subscription.hideDetails": "隱藏詳情", + "workspace.lite.subscription.model": "模型", + "workspace.lite.subscription.contribution": "%", + "workspace.lite.subscription.total": "總計", "workspace.lite.subscription.useBalance": "達到使用限制後使用您的可用餘額", "workspace.lite.subscription.selectProvider": "在您的 opencode 設定中選擇「OpenCode Go」作為提供商,即可使用 Go 模型。", diff --git a/packages/console/app/src/lib/lite-usage.ts b/packages/console/app/src/lib/lite-usage.ts new file mode 100644 index 000000000000..f253eb988126 --- /dev/null +++ b/packages/console/app/src/lib/lite-usage.ts @@ -0,0 +1,64 @@ +export type LiteUsageBreakdownSource = { + model: string + name: string + cost: number + quotaCost: number + multiplier?: number + estimated: boolean +} + +export type LiteUsageBreakdownItem = { + model: string + name: string + cost?: number + multiplier?: number + quotaCost: number + contributionPercent: number + estimated: boolean +} + +export function buildLiteUsageBreakdown(input: { + usage: number + limit: number + sources: LiteUsageBreakdownSource[] +}) { + const rows: LiteUsageBreakdownItem[] = input.sources + .filter((item) => item.cost !== 0 || item.quotaCost !== 0) + .sort((a, b) => b.quotaCost - a.quotaCost) + .map((item) => ({ + ...item, + contributionPercent: 0, + })) + + const usagePercent = getUsagePercent(input.usage, input.limit) + const target = Math.max(0, Math.round(usagePercent * 10)) + const totalQuota = rows.reduce((total, item) => total + Math.max(0, item.quotaCost), 0) + const units = rows.map((item) => { + const exact = totalQuota === 0 ? 0 : (Math.max(0, item.quotaCost) / totalQuota) * target + const value = Math.floor(exact) + return { item, exact, value } + }) + const remaining = target - units.reduce((total, item) => total + item.value, 0) + const ranked = units.toSorted((a, b) => b.exact - b.value - (a.exact - a.value)) + Array.from({ length: ranked.length === 0 ? 0 : remaining }).forEach((_, index) => { + ranked[index % ranked.length].value += 1 + }) + units.forEach((unit) => (unit.item.contributionPercent = unit.value / 10)) + + return { + usage: input.usage, + limit: input.limit, + usagePercent, + rows, + } +} + +export function getModelQuotaLimit(limit: number, multiplier?: number) { + if (multiplier === undefined || multiplier <= 0) return + return limit / multiplier +} + +export function getUsagePercent(amount: number, limit: number) { + if (limit === 0) return 0 + return Math.round((amount / limit) * 1000) / 10 +} diff --git a/packages/console/app/src/routes/workspace/[id]/go/lite-section.module.css b/packages/console/app/src/routes/workspace/[id]/go/lite-section.module.css index f19e0e46cf19..77556d946297 100644 --- a/packages/console/app/src/routes/workspace/[id]/go/lite-section.module.css +++ b/packages/console/app/src/routes/workspace/[id]/go/lite-section.module.css @@ -19,6 +19,7 @@ [data-slot="usage-item"] { flex: 1; + min-width: 0; display: flex; flex-direction: column; gap: var(--space-2); @@ -60,6 +61,119 @@ color: var(--color-text-muted); } + [data-slot="usage-details"] { + margin-top: var(--space-1); + } + + [data-slot="usage-details-trigger"] { + display: inline-flex; + align-items: center; + gap: var(--space-2); + width: fit-content; + padding: 0; + border: 0; + background-color: transparent; + color: var(--color-text-secondary); + font-size: var(--font-size-sm); + cursor: pointer; + + &:hover:not(:disabled) { + background-color: transparent; + border-color: transparent; + } + + svg { + transition: transform 0.2s ease; + } + + &[aria-expanded="true"] svg { + transform: rotate(180deg); + } + + [data-slot="hide-details"] { + display: none; + } + + &[aria-expanded="true"] [data-slot="show-details"] { + display: none; + } + + &[aria-expanded="true"] [data-slot="hide-details"] { + display: inline; + } + } + + [data-slot="usage-details-content"] { + width: 100%; + margin-top: var(--space-3); + } + + [data-slot="usage-details-loading"] { + width: 100%; + margin-top: var(--space-3); + color: var(--color-text-muted); + font-size: var(--font-size-sm); + } + + [data-slot="usage-details-empty"] { + margin: 0; + color: var(--color-text-muted); + font-size: var(--font-size-sm); + } + + [data-slot="usage-details-table"] { + overflow-x: auto; + border: 1px solid var(--color-border-muted); + border-radius: var(--border-radius-sm); + + table { + width: 100%; + min-width: 28rem; + table-layout: fixed; + border-collapse: collapse; + font-size: var(--font-size-sm); + white-space: nowrap; + } + + th, + td { + width: 25%; + padding: var(--space-2) var(--space-3); + border-bottom: 1px solid var(--color-border-muted); + text-align: end; + font-variant-numeric: tabular-nums; + } + + th { + color: var(--color-text-muted); + font-size: var(--font-size-xs); + font-weight: 500; + text-transform: uppercase; + } + + th:first-child, + td:first-child { + text-align: start; + } + + td:first-child { + max-width: 13rem; + overflow: hidden; + color: var(--color-text); + text-overflow: ellipsis; + } + + tbody tr:last-child td { + border-bottom: 0; + } + + [data-slot="usage-total"] td { + border-top: 1px solid var(--color-border); + color: var(--color-text); + font-weight: 600; + } + } + [data-slot="setting-row"] { display: flex; align-items: center; diff --git a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx index 11dfc6ed2ba1..ae36df19a396 100644 --- a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx @@ -1,15 +1,19 @@ import { action, useParams, useAction, useSubmission, json, query, createAsync } from "@solidjs/router" import { createStore } from "solid-js/store" -import { createMemo, For, Show } from "solid-js" +import { createMemo, createSignal, For, Show } from "solid-js" import { Modal } from "~/component/modal" import { Billing } from "@opencode-ai/console-core/billing.js" -import { Database, eq, and, isNull } from "@opencode-ai/console-core/drizzle/index.js" -import { BillingTable, LiteTable } from "@opencode-ai/console-core/schema/billing.sql.js" +import { Database, eq, and, gte, isNull, sql } from "@opencode-ai/console-core/drizzle/index.js" +import { BillingTable, LiteTable, UsageTable } from "@opencode-ai/console-core/schema/billing.sql.js" +import { KeyTable } from "@opencode-ai/console-core/schema/key.sql.js" import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" import { Actor } from "@opencode-ai/console-core/actor.js" import { Workspace } from "@opencode-ai/console-core/workspace.js" import { Subscription } from "@opencode-ai/console-core/subscription.js" import { LiteData } from "@opencode-ai/console-core/lite.js" +import { ZenData } from "@opencode-ai/console-core/model.js" +import { getMonthlyBounds, getWeekBounds } from "@opencode-ai/console-core/util/date.js" +import { centsToMicroCents } from "@opencode-ai/console-core/util/price.js" import { withActor } from "~/context/auth.withActor" import { queryBillingInfo } from "../../common" import styles from "./lite-section.module.css" @@ -21,7 +25,10 @@ import { createReferralFromCookie } from "~/lib/referral-invite" import { getRequestEvent } from "solid-js/web" import { countryFromRequest } from "~/lib/request-country" -import { IconAlipay, IconUpi } from "~/component/icon" +import { IconAlipay, IconChevron, IconUpi } from "~/component/icon" +import { buildLiteUsageBreakdown, getModelQuotaLimit, getUsagePercent } from "~/lib/lite-usage" + +type LiteUsageWindow = "rolling" | "weekly" | "monthly" export const queryLiteSubscription = query(async (workspaceID: string) => { "use server" @@ -51,6 +58,33 @@ export const queryLiteSubscription = query(async (workspaceID: string) => { const limits = LiteData.getLimits() const mine = row.userID === Actor.userID() + const now = new Date() + const rollingCutoff = new Date(now.getTime() - limits.rollingWindow * 3600 * 1000) + const week = getWeekBounds(now) + const month = getMonthlyBounds(now, row.timeCreated) + const rollingActive = !!row.timeRollingUpdated && row.timeRollingUpdated >= rollingCutoff + const weeklyActive = !!row.timeWeeklyUpdated && row.timeWeeklyUpdated >= week.start + const monthlyActive = !!row.timeMonthlyUpdated && row.timeMonthlyUpdated >= month.start + const rollingLimit = centsToMicroCents(limits.rollingLimit * 100) + const weeklyLimit = centsToMicroCents(limits.weeklyLimit * 100) + const monthlyLimit = centsToMicroCents(limits.monthlyLimit * 100) + const rollingUsage = Subscription.analyzeRollingUsage({ + limit: limits.rollingLimit, + window: limits.rollingWindow, + usage: row.rollingUsage ?? 0, + timeUpdated: row.timeRollingUpdated ?? now, + }) + const weeklyUsage = Subscription.analyzeWeeklyUsage({ + limit: limits.weeklyLimit, + usage: row.weeklyUsage ?? 0, + timeUpdated: row.timeWeeklyUpdated ?? now, + }) + const monthlyUsage = Subscription.analyzeMonthlyUsage({ + limit: limits.monthlyLimit, + usage: row.monthlyUsage ?? 0, + timeUpdated: row.timeMonthlyUpdated ?? now, + timeSubscribed: row.timeCreated, + }) return { mine, @@ -58,27 +92,124 @@ export const queryLiteSubscription = query(async (workspaceID: string) => { allowTraining: row.allowTraining ?? false, region: row.region ?? (await Workspace.setDefaultRegion({ country: countryFromRequest(getRequestEvent()?.request) })), - rollingUsage: Subscription.analyzeRollingUsage({ - limit: limits.rollingLimit, - window: limits.rollingWindow, - usage: row.rollingUsage ?? 0, - timeUpdated: row.timeRollingUpdated ?? new Date(), - }), - weeklyUsage: Subscription.analyzeWeeklyUsage({ - limit: limits.weeklyLimit, - usage: row.weeklyUsage ?? 0, - timeUpdated: row.timeWeeklyUpdated ?? new Date(), - }), - monthlyUsage: Subscription.analyzeMonthlyUsage({ - limit: limits.monthlyLimit, - usage: row.monthlyUsage ?? 0, - timeUpdated: row.timeMonthlyUpdated ?? new Date(), - timeSubscribed: row.timeCreated, - }), + rollingUsage: { + ...rollingUsage, + usage: rollingActive ? (row.rollingUsage ?? 0) : 0, + limit: rollingLimit, + usagePercent: getUsagePercent(rollingActive ? (row.rollingUsage ?? 0) : 0, rollingLimit), + }, + weeklyUsage: { + ...weeklyUsage, + usage: weeklyActive ? (row.weeklyUsage ?? 0) : 0, + limit: weeklyLimit, + usagePercent: getUsagePercent(weeklyActive ? (row.weeklyUsage ?? 0) : 0, weeklyLimit), + }, + monthlyUsage: { + ...monthlyUsage, + usage: monthlyActive ? (row.monthlyUsage ?? 0) : 0, + limit: monthlyLimit, + usagePercent: getUsagePercent(monthlyActive ? (row.monthlyUsage ?? 0) : 0, monthlyLimit), + }, } }, workspaceID) }, "lite.subscription.get") +export const queryLiteUsageDetails = query(async (workspaceID: string, window: LiteUsageWindow) => { + "use server" + return withActor(async () => { + if (window !== "rolling" && window !== "weekly" && window !== "monthly") return null + const row = await Database.use((tx) => + tx + .select({ + userID: LiteTable.userID, + rollingUsage: LiteTable.rollingUsage, + weeklyUsage: LiteTable.weeklyUsage, + monthlyUsage: LiteTable.monthlyUsage, + timeRollingUpdated: LiteTable.timeRollingUpdated, + timeWeeklyUpdated: LiteTable.timeWeeklyUpdated, + timeMonthlyUpdated: LiteTable.timeMonthlyUpdated, + timeCreated: LiteTable.timeCreated, + }) + .from(LiteTable) + .where(and(eq(LiteTable.workspaceID, Actor.workspace()), isNull(LiteTable.timeDeleted))) + .then((result) => result[0]), + ) + if (!row || row.userID !== Actor.userID()) return null + + const limits = LiteData.getLimits() + const now = new Date() + const detail = (() => { + if (window === "rolling") { + const active = !!row.timeRollingUpdated && row.timeRollingUpdated >= new Date(now.getTime() - limits.rollingWindow * 3600 * 1000) + return { + start: active ? row.timeRollingUpdated! : now, + usage: active ? (row.rollingUsage ?? 0) : 0, + limit: centsToMicroCents(limits.rollingLimit * 100), + } + } + if (window === "weekly") { + const start = getWeekBounds(now).start + return { + start, + usage: row.timeWeeklyUpdated && row.timeWeeklyUpdated >= start ? (row.weeklyUsage ?? 0) : 0, + limit: centsToMicroCents(limits.weeklyLimit * 100), + } + } + const start = getMonthlyBounds(now, row.timeCreated).start + return { + start, + usage: row.timeMonthlyUpdated && row.timeMonthlyUpdated >= start ? (row.monthlyUsage ?? 0) : 0, + limit: centsToMicroCents(limits.monthlyLimit * 100), + } + })() + const modelData = Object.fromEntries( + Object.entries(ZenData.list("lite").models).map(([id, value]) => { + const models = Array.isArray(value) ? value : [value] + const multipliers = new Set(models.map((model) => model.costMultiplier)) + return [id, { name: models[0].name, multiplier: multipliers.size === 1 ? models[0].costMultiplier : undefined }] + }), + ) + const usageRows = await Database.use((tx) => + tx + .select({ + model: UsageTable.model, + multiplier: sql`JSON_UNQUOTE(JSON_EXTRACT(${UsageTable.enrichment}, '$.costMultiplier'))`, + cost: sql`SUM(${UsageTable.cost})`, + quotaCost: sql`SUM(CASE WHEN JSON_EXTRACT(${UsageTable.enrichment}, '$.costMultiplier') IS NOT NULL THEN ROUND(${UsageTable.cost} * CAST(JSON_UNQUOTE(JSON_EXTRACT(${UsageTable.enrichment}, '$.costMultiplier')) AS DECIMAL(20, 8))) ELSE 0 END)`, + }) + .from(UsageTable) + .innerJoin(KeyTable, and(eq(KeyTable.id, UsageTable.keyID), eq(KeyTable.workspaceID, UsageTable.workspaceID))) + .where( + and( + eq(UsageTable.workspaceID, Actor.workspace()), + eq(KeyTable.userID, row.userID), + gte(UsageTable.timeCreated, detail.start), + sql`JSON_UNQUOTE(JSON_EXTRACT(${UsageTable.enrichment}, '$.plan')) = 'lite'`, + ), + ) + .groupBy(UsageTable.model, sql`JSON_UNQUOTE(JSON_EXTRACT(${UsageTable.enrichment}, '$.costMultiplier'))`), + ) + + return buildLiteUsageBreakdown({ + usage: detail.usage, + limit: detail.limit, + sources: usageRows.map((usage) => { + const cost = Number(usage.cost) + const info = modelData[usage.model] + const multiplier = usage.multiplier === null ? info?.multiplier : Number(usage.multiplier) + return { + model: usage.model, + name: info?.name ?? usage.model, + cost, + quotaCost: usage.multiplier === null ? Math.round(cost * (multiplier ?? 1)) : Number(usage.quotaCost), + multiplier, + estimated: usage.multiplier === null, + } + }), + }) + }, workspaceID) +}, "lite.subscription.usage") + type LiteSubscription = Awaited> const createLiteCheckoutUrl = action( @@ -174,7 +305,16 @@ const setGoAllowTraining = action(async (form: FormData) => { ) }, "go.allowTraining.set") -function LiteUsageItem(props: { label: string; usage: { usagePercent: number; resetInSec: number } }) { +type LiteUsage = NonNullable["rollingUsage"] +type LiteUsageDetailsData = NonNullable>> + +function LiteUsageItem(props: { + id: LiteUsageWindow + label: string + usage: LiteUsage + open: boolean + onToggle: () => void +}) { const i18n = useI18n() return ( @@ -183,17 +323,178 @@ function LiteUsageItem(props: { label: string; usage: { usagePercent: number; re {props.label} {props.usage.usagePercent}% -
    -
    +
    +
    {i18n.t("workspace.lite.subscription.resetsIn")}{" "} {formatResetTime(props.usage.resetInSec, i18n, liteResetTimeKeys)} + 0}> +
    + +
    +
    ) } +function LiteUsageDetails(props: { id: LiteUsageWindow; label: string; quotaLabel: string; usage: LiteUsageDetailsData }) { + const i18n = useI18n() + const language = useLanguage() + const money = (amount: number) => + new Intl.NumberFormat(language.tag(language.locale()), { + style: "currency", + currency: "USD", + minimumFractionDigits: 2, + maximumFractionDigits: 4, + }).format(amount / 100_000_000) + const totalPercentage = () => + Number(props.usage.rows.reduce((total, row) => total + row.contributionPercent, 0).toFixed(1)) + + return ( +
    +
    + + + + + + + + + + + + {(row) => { + const quota = getModelQuotaLimit(props.usage.limit, row.multiplier) + return ( + + + + + + + ) + }} + + + + + + +
    {i18n.t("workspace.lite.subscription.model")}{props.label}{props.quotaLabel}{i18n.t("workspace.lite.subscription.contribution")}
    + {row.name} + {row.cost === undefined ? "-" : money(row.cost)}{quota === undefined ? "-" : money(quota)}{row.contributionPercent}%
    {i18n.t("workspace.lite.subscription.total")}{totalPercentage()}%
    +
    +
    + ) +} + +function LiteUsageGroup(props: { lite: NonNullable }) { + const params = useParams() + const i18n = useI18n() + const [open, setOpen] = createSignal() + const [store, setStore] = createStore({ + details: {} as Partial>, + loading: undefined as LiteUsageWindow | undefined, + }) + const items = () => + [ + { + id: "rolling", + label: i18n.t("workspace.lite.subscription.rollingUsage"), + quotaLabel: i18n.t("workspace.lite.subscription.rollingQuota"), + usage: props.lite.rollingUsage, + }, + { + id: "weekly", + label: i18n.t("workspace.lite.subscription.weeklyUsage"), + quotaLabel: i18n.t("workspace.lite.subscription.weeklyQuota"), + usage: props.lite.weeklyUsage, + }, + { + id: "monthly", + label: i18n.t("workspace.lite.subscription.monthlyUsage"), + quotaLabel: i18n.t("workspace.lite.subscription.monthlyQuota"), + usage: props.lite.monthlyUsage, + }, + ] as const + const selected = createMemo(() => items().find((item) => item.id === open())) + + async function toggle(id: LiteUsageWindow) { + if (open() === id) { + setOpen() + return + } + setOpen(id) + if (store.details[id] !== undefined) return + setStore("loading", id) + const details = await queryLiteUsageDetails(params.id!, id).catch(() => null) + setStore("details", id, details) + setStore("loading", (current) => (current === id ? undefined : current)) + } + + return ( + <> +
    + + {(item) => ( + toggle(item.id)} + /> + )} + +
    + + {(item) => { + const details = () => store.details[item().id] + return ( + +
    {i18n.t("workspace.lite.loading")}
    +
    + } + > + {(usage) => ( + + )} +
    + ) + }} + + + ) +} + export function LiteSection(props: { lite: LiteSubscription | undefined }) { const params = useParams() const i18n = useI18n() @@ -261,11 +562,7 @@ export function LiteSection(props: { lite: LiteSubscription | undefined }) { .
    -
    - - - -
    +

    {i18n.t("workspace.lite.subscription.useBalance")}

    diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index 5dbb8bcc3636..ae129018b7a9 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -1114,7 +1114,7 @@ export async function handler( enrichment: (() => { if (billingSource === "subscription") return { plan: "sub" } if (billingSource === "byok") return { plan: "byok" } - if (billingSource === "lite") return { plan: "lite" } + if (billingSource === "lite") return { plan: "lite", costMultiplier: modelInfo.costMultiplier } return undefined })(), }), diff --git a/packages/console/app/test/liteUsage.test.ts b/packages/console/app/test/liteUsage.test.ts new file mode 100644 index 000000000000..00a0d962f22e --- /dev/null +++ b/packages/console/app/test/liteUsage.test.ts @@ -0,0 +1,75 @@ +import { describe, expect, test } from "bun:test" +import { buildLiteUsageBreakdown, getModelQuotaLimit } from "../src/lib/lite-usage" + +describe("Go usage breakdown", () => { + test("derives the model quota from the window limit and multiplier", () => { + expect(getModelQuotaLimit(30, 1)).toBe(30) + expect(getModelQuotaLimit(30, 2)).toBe(15) + expect(getModelQuotaLimit(30, 4)).toBe(7.5) + }) + + test("groups model quota usage into the percentage of the limit", () => { + const result = buildLiteUsageBreakdown({ + usage: 416, + limit: 1_200, + sources: [ + { model: "glm", name: "GLM", cost: 200, quotaCost: 300, multiplier: 1.5, estimated: false }, + { model: "kimi", name: "Kimi", cost: 116, quotaCost: 116, multiplier: 1, estimated: false }, + ], + }) + + expect(result.usagePercent).toBe(34.7) + expect(result.rows[0]).toMatchObject({ name: "GLM", multiplier: 1.5, contributionPercent: 25 }) + expect(result.rows.reduce((total, row) => total + row.contributionPercent, 0)).toBeCloseTo(result.usagePercent) + }) + + test("distributes credits across the model contributions", () => { + const result = buildLiteUsageBreakdown({ + usage: 366, + limit: 1_200, + sources: [ + { model: "glm", name: "GLM", cost: 200, quotaCost: 300, multiplier: 1.5, estimated: false }, + { model: "kimi", name: "Kimi", cost: 116, quotaCost: 116, multiplier: 1, estimated: true }, + ], + }) + + expect(result.rows).toHaveLength(2) + expect(result.rows.every((row) => row.contributionPercent >= 0)).toBe(true) + expect(result.rows.reduce((total, row) => total + row.contributionPercent, 0)).toBeCloseTo(result.usagePercent) + }) + + test("does not synthesize a row when request history is unavailable", () => { + const result = buildLiteUsageBreakdown({ usage: 120, limit: 1_200, sources: [] }) + + expect(result.rows).toEqual([]) + }) + + test("allocates rounded percentages without making positive rows negative", () => { + const sources = Array.from({ length: 20 }, (_, index) => ({ + model: `model-${index}`, + name: `Model ${index}`, + cost: 4, + quotaCost: 4, + multiplier: 1, + estimated: false, + })) + const result = buildLiteUsageBreakdown({ usage: 80, limit: 10_000, sources }) + + expect(result.rows.every((row) => row.contributionPercent >= 0)).toBe(true) + expect(result.rows.reduce((total, row) => total + row.contributionPercent, 0)).toBeCloseTo(result.usagePercent) + }) + + test("keeps multiplier changes for the same model as separate rows", () => { + const result = buildLiteUsageBreakdown({ + usage: 500, + limit: 1_000, + sources: [ + { model: "glm", name: "GLM", cost: 100, quotaCost: 100, multiplier: 1, estimated: false }, + { model: "glm", name: "GLM", cost: 200, quotaCost: 400, multiplier: 2, estimated: false }, + ], + }) + + expect(result.rows.map((row) => row.multiplier)).toEqual([2, 1]) + expect(result.rows.map((row) => row.contributionPercent)).toEqual([40, 10]) + }) +}) diff --git a/packages/console/core/src/schema/billing.sql.ts b/packages/console/core/src/schema/billing.sql.ts index b177858f363f..c788b6a53439 100644 --- a/packages/console/core/src/schema/billing.sql.ts +++ b/packages/console/core/src/schema/billing.sql.ts @@ -129,6 +129,7 @@ export const UsageTable = mysqlTable( sessionID: varchar("session_id", { length: 30 }), enrichment: json("enrichment").$type<{ plan: "sub" | "byok" | "lite" + costMultiplier?: number }>(), }, (table) => [...workspaceIndexes(table), index("usage_time_created").on(table.workspaceID, table.timeCreated)], From 322e2b9dd5c339b09909cd0c8a67d9709fb821de Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Tue, 25 Aug 2026 09:07:56 +0000 Subject: [PATCH 032/185] chore: generate --- packages/console/app/src/lib/lite-usage.ts | 6 +----- .../routes/workspace/[id]/go/lite-section.tsx | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/packages/console/app/src/lib/lite-usage.ts b/packages/console/app/src/lib/lite-usage.ts index f253eb988126..e82483aa3986 100644 --- a/packages/console/app/src/lib/lite-usage.ts +++ b/packages/console/app/src/lib/lite-usage.ts @@ -17,11 +17,7 @@ export type LiteUsageBreakdownItem = { estimated: boolean } -export function buildLiteUsageBreakdown(input: { - usage: number - limit: number - sources: LiteUsageBreakdownSource[] -}) { +export function buildLiteUsageBreakdown(input: { usage: number; limit: number; sources: LiteUsageBreakdownSource[] }) { const rows: LiteUsageBreakdownItem[] = input.sources .filter((item) => item.cost !== 0 || item.quotaCost !== 0) .sort((a, b) => b.quotaCost - a.quotaCost) diff --git a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx index ae36df19a396..6c7d739c0e99 100644 --- a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx @@ -140,7 +140,9 @@ export const queryLiteUsageDetails = query(async (workspaceID: string, window: L const now = new Date() const detail = (() => { if (window === "rolling") { - const active = !!row.timeRollingUpdated && row.timeRollingUpdated >= new Date(now.getTime() - limits.rollingWindow * 3600 * 1000) + const active = + !!row.timeRollingUpdated && + row.timeRollingUpdated >= new Date(now.getTime() - limits.rollingWindow * 3600 * 1000) return { start: active ? row.timeRollingUpdated! : now, usage: active ? (row.rollingUsage ?? 0) : 0, @@ -356,7 +358,12 @@ function LiteUsageItem(props: { ) } -function LiteUsageDetails(props: { id: LiteUsageWindow; label: string; quotaLabel: string; usage: LiteUsageDetailsData }) { +function LiteUsageDetails(props: { + id: LiteUsageWindow + label: string + quotaLabel: string + usage: LiteUsageDetailsData +}) { const i18n = useI18n() const language = useLanguage() const money = (amount: number) => @@ -480,12 +487,7 @@ function LiteUsageGroup(props: { lite: NonNullable }) { } > {(usage) => ( - + )} ) From 69aaa22793bcbe0b016ad9cfad22616906766df0 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 25 Aug 2026 05:26:31 -0400 Subject: [PATCH 033/185] zen: void invoice of cancelled subscription --- packages/console/app/src/routes/stripe/webhook.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/console/app/src/routes/stripe/webhook.ts b/packages/console/app/src/routes/stripe/webhook.ts index e1e4e6cbd39f..05f40e4fd21a 100644 --- a/packages/console/app/src/routes/stripe/webhook.ts +++ b/packages/console/app/src/routes/stripe/webhook.ts @@ -205,6 +205,13 @@ export async function POST(input: APIEvent) { } else if (productID === BlackData.productID()) { await Billing.unsubscribeBlack({ subscriptionID }) } + + const latestInvoice = body.data.object.latest_invoice + const invoiceID = typeof latestInvoice === "string" ? latestInvoice : latestInvoice?.id + if (invoiceID) { + const invoice = await Billing.stripe().invoices.retrieve(invoiceID) + if (invoice.status === "open") await Billing.stripe().invoices.voidInvoice(invoiceID) + } } if (body.type === "invoice.payment_succeeded") { if ( From a7444bf944c219b9eaba2f794847b3001237795f Mon Sep 17 00:00:00 2001 From: OpeOginni <107570612+OpeOginni@users.noreply.github.com> Date: Tue, 25 Aug 2026 13:05:49 +0200 Subject: [PATCH 034/185] fix(ui): restore focus in stacked dialogs (#44928) Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> --- packages/ui/src/context/dialog.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/context/dialog.tsx b/packages/ui/src/context/dialog.tsx index 39ef8ea1c736..c40203079528 100644 --- a/packages/ui/src/context/dialog.tsx +++ b/packages/ui/src/context/dialog.tsx @@ -88,10 +88,10 @@ function init() { setClosing = setClosingSignal return ( { - if (open) return + if (open || stack().at(-1)?.id !== id) return close(id) }} > From 8615731d46153dd29b89e205fb55b2cc16205cb0 Mon Sep 17 00:00:00 2001 From: Dax Date: Tue, 25 Aug 2026 11:25:59 -0400 Subject: [PATCH 035/185] fix(console): rate limit checkout session creation (#45007) --- .../console/app/src/routes/black/index.tsx | 3 - .../app/src/routes/black/subscribe/[plan].tsx | 489 ------------------ .../routes/workspace/[id]/go/lite-section.tsx | 2 + .../app/src/routes/workspace/common.tsx | 4 +- .../console/app/src/routes/zen/util/redis.ts | 8 + 5 files changed, 13 insertions(+), 493 deletions(-) delete mode 100644 packages/console/app/src/routes/black/subscribe/[plan].tsx diff --git a/packages/console/app/src/routes/black/index.tsx b/packages/console/app/src/routes/black/index.tsx index 8bce3cd464f7..b8f01842d0c2 100644 --- a/packages/console/app/src/routes/black/index.tsx +++ b/packages/console/app/src/routes/black/index.tsx @@ -103,9 +103,6 @@ export default function Black() { - - {i18n.t("black.action.continue")} -
    diff --git a/packages/console/app/src/routes/black/subscribe/[plan].tsx b/packages/console/app/src/routes/black/subscribe/[plan].tsx deleted file mode 100644 index c29c5fac80a9..000000000000 --- a/packages/console/app/src/routes/black/subscribe/[plan].tsx +++ /dev/null @@ -1,489 +0,0 @@ -import { A, createAsync, query, redirect, useParams } from "@solidjs/router" -import { Title } from "@solidjs/meta" -import { createEffect, createSignal, For, Match, Show, Switch } from "solid-js" -import { type Stripe, type PaymentMethod, loadStripe } from "@stripe/stripe-js" -import { Elements, PaymentElement, useStripe, useElements, AddressElement } from "solid-stripe" -import { PlanID, plans } from "../common" -import { getActor, useAuthSession } from "~/context/auth" -import { withActor } from "~/context/auth.withActor" -import { Actor } from "@opencode-ai/console-core/actor.js" -import { and, Database, eq, isNull } from "@opencode-ai/console-core/drizzle/index.js" -import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" -import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" -import { createList } from "solid-list" -import { Modal } from "~/component/modal" -import { BillingTable } from "@opencode-ai/console-core/schema/billing.sql.js" -import { Billing } from "@opencode-ai/console-core/billing.js" -import { useI18n } from "~/context/i18n" -import { useLanguage } from "~/context/language" -import { formError } from "~/lib/form-error" -import { Resource } from "@opencode-ai/console-resource" - -const getEnabled = query(async () => { - "use server" - return Resource.App.stage !== "production" -}, "black.subscribe.enabled") - -const plansMap = Object.fromEntries(plans.map((p) => [p.id, p])) as Record -const stripePromise = loadStripe(import.meta.env.VITE_STRIPE_PUBLISHABLE_KEY!) - -const getWorkspaces = query(async (plan: string) => { - "use server" - const actor = await getActor() - if (actor.type === "public") throw redirect("/auth/authorize?continue=/black/subscribe/" + plan) - return withActor(async () => { - return Database.use((tx) => - tx - .select({ - id: WorkspaceTable.id, - name: WorkspaceTable.name, - slug: WorkspaceTable.slug, - billing: { - customerID: BillingTable.customerID, - paymentMethodID: BillingTable.paymentMethodID, - paymentMethodType: BillingTable.paymentMethodType, - paymentMethodLast4: BillingTable.paymentMethodLast4, - subscriptionID: BillingTable.subscriptionID, - timeSubscriptionBooked: BillingTable.timeSubscriptionBooked, - }, - }) - .from(UserTable) - .innerJoin(WorkspaceTable, eq(UserTable.workspaceID, WorkspaceTable.id)) - .innerJoin(BillingTable, eq(WorkspaceTable.id, BillingTable.workspaceID)) - .where( - and( - eq(UserTable.accountID, Actor.account()), - isNull(WorkspaceTable.timeDeleted), - isNull(UserTable.timeDeleted), - ), - ), - ) - }) -}, "black.subscribe.workspaces") - -const createSetupIntent = async (input: { plan: string; workspaceID: string }) => { - "use server" - const { plan, workspaceID } = input - - if (!plan || !["20", "100", "200"].includes(plan)) return { error: formError.invalidPlan } - if (!workspaceID) return { error: formError.workspaceRequired } - - return withActor(async () => { - const session = await useAuthSession() - const account = session.data.account?.[session.data.current ?? ""] - const email = account?.email - - const customer = await Database.use((tx) => - tx - .select({ - customerID: BillingTable.customerID, - subscriptionID: BillingTable.subscriptionID, - }) - .from(BillingTable) - .where(eq(BillingTable.workspaceID, workspaceID)) - .then((rows) => rows[0]), - ) - if (customer?.subscriptionID) { - return { error: formError.alreadySubscribed } - } - - let customerID = customer?.customerID - if (!customerID) { - const customer = await Billing.stripe().customers.create({ - email, - metadata: { - workspaceID, - }, - }) - customerID = customer.id - await Database.use((tx) => - tx - .update(BillingTable) - .set({ - customerID, - }) - .where(eq(BillingTable.workspaceID, workspaceID)), - ) - } - - const intent = await Billing.stripe().setupIntents.create({ - customer: customerID, - payment_method_types: ["card"], - metadata: { - workspaceID, - }, - }) - - return { clientSecret: intent.client_secret ?? undefined } - }, workspaceID) -} - -const bookSubscription = async (input: { - workspaceID: string - plan: PlanID - paymentMethodID: string - paymentMethodType: string - paymentMethodLast4?: string -}) => { - "use server" - return withActor( - () => - Database.use((tx) => - tx - .update(BillingTable) - .set({ - paymentMethodID: input.paymentMethodID, - paymentMethodType: input.paymentMethodType, - paymentMethodLast4: input.paymentMethodLast4, - subscriptionPlan: input.plan, - timeSubscriptionBooked: new Date(), - }) - .where(eq(BillingTable.workspaceID, input.workspaceID)), - ), - input.workspaceID, - ) -} - -interface SuccessData { - plan: string - paymentMethodType: string - paymentMethodLast4?: string -} - -function Failure(props: { message: string }) { - const i18n = useI18n() - - return ( -
    -

    - {i18n.t("black.subscribe.failurePrefix")} {props.message} -

    -
    - ) -} - -function Success(props: SuccessData) { - const i18n = useI18n() - - return ( -
    -

    {i18n.t("black.subscribe.success.title")}

    -
    -
    -
    {i18n.t("black.subscribe.success.subscriptionPlan")}
    -
    {i18n.t("black.subscribe.success.planName", { plan: props.plan })}
    -
    -
    -
    {i18n.t("black.subscribe.success.amount")}
    -
    {i18n.t("black.subscribe.success.amountValue", { plan: props.plan })}
    -
    -
    -
    {i18n.t("black.subscribe.success.paymentMethod")}
    -
    - {props.paymentMethodType}}> - - {props.paymentMethodType} - {props.paymentMethodLast4} - - -
    -
    -
    -
    {i18n.t("black.subscribe.success.dateJoined")}
    -
    {new Date().toLocaleDateString(undefined, { month: "short", day: "numeric", year: "numeric" })}
    -
    -
    -

    {i18n.t("black.subscribe.success.chargeNotice")}

    -
    - ) -} - -function IntentForm(props: { plan: PlanID; workspaceID: string; onSuccess: (data: SuccessData) => void }) { - const i18n = useI18n() - const stripe = useStripe() - const elements = useElements() - const [error, setError] = createSignal(undefined) - const [loading, setLoading] = createSignal(false) - - const handleSubmit = async (e: Event) => { - e.preventDefault() - if (!stripe() || !elements()) return - - setLoading(true) - setError(undefined) - - const result = await elements()!.submit() - if (result.error) { - setError(result.error.message ?? i18n.t("black.subscribe.error.generic")) - setLoading(false) - return - } - - const { error: confirmError, setupIntent } = await stripe()!.confirmSetup({ - elements: elements()!, - confirmParams: { - expand: ["payment_method"], - payment_method_data: { - allow_redisplay: "always", - }, - }, - redirect: "if_required", - }) - - if (confirmError) { - setError(confirmError.message ?? i18n.t("black.subscribe.error.generic")) - setLoading(false) - return - } - - if (setupIntent?.status === "succeeded") { - const pm = setupIntent.payment_method as PaymentMethod - - await bookSubscription({ - workspaceID: props.workspaceID, - plan: props.plan, - paymentMethodID: pm.id, - paymentMethodType: pm.type, - paymentMethodLast4: pm.card?.last4, - }) - - props.onSuccess({ - plan: props.plan, - paymentMethodType: pm.type, - paymentMethodLast4: pm.card?.last4, - }) - } - - setLoading(false) - } - - return ( - - - - -

    {error()}

    -
    - -

    {i18n.t("black.subscribe.form.chargeNotice")}

    - - ) -} - -export default function BlackSubscribe() { - const params = useParams() - const i18n = useI18n() - const language = useLanguage() - const enabled = createAsync(() => getEnabled()) - const planData = plansMap[(params.plan as PlanID) ?? "20"] ?? plansMap["20"] - const plan = planData.id - - const workspaces = createAsync(() => getWorkspaces(plan)) - const [selectedWorkspace, setSelectedWorkspace] = createSignal(undefined) - const [success, setSuccess] = createSignal(undefined) - const [failure, setFailure] = createSignal(undefined) - const [clientSecret, setClientSecret] = createSignal(undefined) - const [stripe, setStripe] = createSignal(undefined) - - const formatError = (error: string) => { - if (error === formError.invalidPlan) return i18n.t("black.subscribe.error.invalidPlan") - if (error === formError.workspaceRequired) return i18n.t("black.subscribe.error.workspaceRequired") - if (error === formError.alreadySubscribed) return i18n.t("black.subscribe.error.alreadySubscribed") - if (error === "Invalid plan") return i18n.t("black.subscribe.error.invalidPlan") - if (error === "Workspace ID is required") return i18n.t("black.subscribe.error.workspaceRequired") - if (error === "This workspace already has a subscription") return i18n.t("black.subscribe.error.alreadySubscribed") - return error - } - - // Resolve stripe promise once - createEffect(() => { - void stripePromise.then((s) => { - if (s) setStripe(s) - }) - }) - - // Auto-select if only one workspace - createEffect(() => { - const ws = workspaces() - if (ws?.length === 1 && !selectedWorkspace()) { - setSelectedWorkspace(ws[0].id) - } - }) - - // Fetch setup intent when workspace is selected (unless workspace already has payment method) - createEffect(async () => { - const id = selectedWorkspace() - if (!id) return - - const ws = workspaces()?.find((w) => w.id === id) - if (ws?.billing?.subscriptionID) { - setFailure(i18n.t("black.subscribe.error.alreadySubscribed")) - return - } - if (ws?.billing?.paymentMethodID) { - if (!ws?.billing?.timeSubscriptionBooked) { - await bookSubscription({ - workspaceID: id, - plan: planData.id, - paymentMethodID: ws.billing.paymentMethodID!, - paymentMethodType: ws.billing.paymentMethodType!, - paymentMethodLast4: ws.billing.paymentMethodLast4 ?? undefined, - }) - } - setSuccess({ - plan: planData.id, - paymentMethodType: ws.billing.paymentMethodType!, - paymentMethodLast4: ws.billing.paymentMethodLast4 ?? undefined, - }) - return - } - - const result = await createSetupIntent({ plan, workspaceID: id }) - if (result.error) { - setFailure(formatError(result.error)) - } else if ("clientSecret" in result) { - setClientSecret(result.clientSecret) - } - }) - - // Keyboard navigation for workspace picker - const { active, setActive, onKeyDown } = createList({ - items: () => workspaces()?.map((w) => w.id) ?? [], - initialActive: null, - }) - - const handleSelectWorkspace = (id: string) => { - setSelectedWorkspace(id) - } - - let listRef: HTMLUListElement | undefined - - // Show workspace picker if multiple workspaces and none selected - const showWorkspacePicker = () => { - const ws = workspaces() - return ws && ws.length > 1 && !selectedWorkspace() - } - - return ( - - {i18n.t("black.subscribe.title")} -
    -
    - - {(data) => } - {(data) => } - - <> -
    -

    {i18n.t("black.subscribe.title")}

    -

    - ${planData.id}{" "} - {i18n.t("black.price.perMonth")} - - {(multiplier) => {i18n.t(multiplier())}} - -

    -
    -
    -

    {i18n.t("black.subscribe.paymentMethod")}

    - - -

    - {selectedWorkspace() - ? i18n.t("black.subscribe.loadingPaymentForm") - : i18n.t("black.subscribe.selectWorkspaceToContinue")} -

    -
    - } - > - - - - - -
    -
    -
    - - {/* Workspace picker modal */} - {}} - title={i18n.t("black.workspace.selectPlan")} - variant="black" - > -
    -
      { - if (e.key === "Enter" && active()) { - handleSelectWorkspace(active()!) - } else { - onKeyDown(e) - } - }} - > - - {(workspace) => ( -
    • setActive(workspace.id)} - onClick={() => handleSelectWorkspace(workspace.id)} - > - [*] - {workspace.name || workspace.slug} -
    • - )} -
      -
    -
    -
    -

    - {i18n.t("black.finePrint.beforeTerms")} ·{" "} - {i18n.t("black.finePrint.terms")} -

    -
    -
    - ) -} diff --git a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx index 6c7d739c0e99..b52028814ba2 100644 --- a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx @@ -24,6 +24,7 @@ import { formatResetTime, liteResetTimeKeys } from "~/lib/format-reset-time" import { createReferralFromCookie } from "~/lib/referral-invite" import { getRequestEvent } from "solid-js/web" import { countryFromRequest } from "~/lib/request-country" +import { checkCheckoutRateLimit } from "~/routes/zen/util/redis" import { IconAlipay, IconChevron, IconUpi } from "~/component/icon" import { buildLiteUsageBreakdown, getModelQuotaLimit, getUsagePercent } from "~/lib/lite-usage" @@ -219,6 +220,7 @@ const createLiteCheckoutUrl = action( "use server" return json( await withActor(async () => { + await checkCheckoutRateLimit(Actor.account()) const data = await Billing.generateLiteCheckoutUrl({ successUrl, cancelUrl, method }) await createReferralFromCookie() return { error: undefined, data } diff --git a/packages/console/app/src/routes/workspace/common.tsx b/packages/console/app/src/routes/workspace/common.tsx index d41793dd92b2..fb315eefd54e 100644 --- a/packages/console/app/src/routes/workspace/common.tsx +++ b/packages/console/app/src/routes/workspace/common.tsx @@ -6,6 +6,7 @@ import { Billing } from "@opencode-ai/console-core/billing.js" import { and, Database, desc, eq, isNull } from "@opencode-ai/console-core/drizzle/index.js" import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" +import { checkCheckoutRateLimit } from "~/routes/zen/util/redis" export function formatDateForTable(date: Date) { const options: Intl.DateTimeFormatOptions = { @@ -77,7 +78,8 @@ export const createCheckoutUrl = action( return json( await withActor( () => - Billing.generateCheckoutUrl({ amount, successUrl, cancelUrl }) + checkCheckoutRateLimit(Actor.account()) + .then(() => Billing.generateCheckoutUrl({ amount, successUrl, cancelUrl })) .then((data) => ({ error: undefined, data })) .catch((e) => ({ error: e.message as string, diff --git a/packages/console/app/src/routes/zen/util/redis.ts b/packages/console/app/src/routes/zen/util/redis.ts index 512523298a85..ef4934bd829e 100644 --- a/packages/console/app/src/routes/zen/util/redis.ts +++ b/packages/console/app/src/routes/zen/util/redis.ts @@ -16,3 +16,11 @@ export function getRedis() { export function buildRateLimitKey(kind: string, identifier: string, interval?: string) { return `${Resource.App.stage}:ratelimit:${kind}:${identifier}${interval ? `:${interval}` : ""}` } + +export async function checkCheckoutRateLimit(accountID: string) { + const redis = getRedis() + const key = buildRateLimitKey("checkout", accountID) + const count = await redis.incr(key) + if (count === 1) await redis.expire(key, 60 * 60) + if (count > 5) throw new Error("Too many payment attempts. Please try again later.") +} From ac1c048e6420eb4c728fd3e343a1ba7b076cba92 Mon Sep 17 00:00:00 2001 From: Jack Date: Wed, 26 Aug 2026 01:27:48 +0800 Subject: [PATCH 036/185] docs(go): add Grok 4.6 (#45042) --- packages/console/app/src/routes/go/index.tsx | 6 +++--- .../src/routes/workspace/[id]/go/lite-section.tsx | 2 +- packages/web/src/content/docs/ar/go.mdx | 15 ++++++++------- packages/web/src/content/docs/bs/go.mdx | 15 ++++++++------- packages/web/src/content/docs/da/go.mdx | 15 ++++++++------- packages/web/src/content/docs/de/go.mdx | 15 ++++++++------- packages/web/src/content/docs/es/go.mdx | 15 ++++++++------- packages/web/src/content/docs/fr/go.mdx | 15 ++++++++------- packages/web/src/content/docs/go.mdx | 15 ++++++++------- packages/web/src/content/docs/it/go.mdx | 15 ++++++++------- packages/web/src/content/docs/ja/go.mdx | 15 ++++++++------- packages/web/src/content/docs/ko/go.mdx | 15 ++++++++------- packages/web/src/content/docs/nb/go.mdx | 15 ++++++++------- packages/web/src/content/docs/pl/go.mdx | 15 ++++++++------- packages/web/src/content/docs/pt-br/go.mdx | 15 ++++++++------- packages/web/src/content/docs/ru/go.mdx | 15 ++++++++------- packages/web/src/content/docs/th/go.mdx | 15 ++++++++------- packages/web/src/content/docs/tr/go.mdx | 15 ++++++++------- packages/web/src/content/docs/zh-cn/go.mdx | 15 ++++++++------- packages/web/src/content/docs/zh-tw/go.mdx | 15 ++++++++------- 20 files changed, 148 insertions(+), 130 deletions(-) diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index d0676027f796..e101012b98d4 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -23,7 +23,7 @@ const checkLoggedIn = query(async () => { }, "checkLoggedIn.get") const models = [ - { name: "Grok 4.5", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention30" }, + { name: "Grok 4.6", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention30" }, { name: "GPT 5.6 Luna", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention30" }, { name: "GLM-5.3", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "GLM-5.2", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, @@ -70,8 +70,8 @@ function LimitsGraph(props: { href: string }) { const baseline = 100 const graph = [ { id: "kimi-k3", name: "Kimi K3", req: 110, d: "50ms" }, - { id: "grok-4.5", name: "Grok 4.5", req: 120, d: "75ms" }, { id: "qwen3.8-max", name: "Qwen3.8 Max", req: 160, d: "90ms" }, + { id: "grok-4.6", name: "Grok 4.6", req: 169, d: "75ms" }, { id: "glm-5.2", name: "GLM-5.2", req: 880, d: "100ms" }, { id: "gpt-5.6-luna", name: "GPT 5.6 Luna", req: 2050, d: "290ms" }, { id: "minimax-m3", name: "MiniMax M3", req: 3200, d: "210ms" }, @@ -511,7 +511,7 @@ export default function Home() {

    - Grok 4.5: {i18n.t("go.faq.a5.grokRetention")}{" "} + Grok 4.6: {i18n.t("go.faq.a5.grokRetention")}{" "} {i18n.t("go.faq.a5.learnMore")} diff --git a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx index b52028814ba2..b72d38c4cf85 100644 --- a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx @@ -640,7 +640,7 @@ export function LiteSection(props: { lite: LiteSubscription | undefined }) {

    {i18n.t("workspace.lite.promo.modelsTitle")}

      -
    • Grok 4.5
    • +
    • Grok 4.6
    • GPT 5.6 Luna
    • GLM-5.3
    • GLM-5.2
    • diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx index 7ddb1b7e2e1b..fd47f5bfc295 100644 --- a/packages/web/src/content/docs/ar/go.mdx +++ b/packages/web/src/content/docs/ar/go.mdx @@ -49,7 +49,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر تشمل قائمة النماذج الحالية: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -91,7 +91,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | Model | الطلبات لكل 5 ساعات | الطلبات في الأسبوع | الطلبات في الشهر | | ---------------------------- | ------------------- | ------------------ | ---------------- | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -117,7 +117,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر تستند التقديرات إلى أنماط الطلبات المرصودة: -- Grok 4.5 — ‏1,100 input، و71,500 cached، و220 output tokens لكل طلب +- Grok 4.6 — ‏390 input، و32,500 cached، و120 output tokens لكل طلب - GLM-5.3/5.2/5.1 — ‏700 input، و52,000 cached، و150 output tokens لكل طلب - GPT 5.6 Luna — ‏1,000 توكن إدخال، و50,000 توكن مخزّن مؤقتًا، و220 توكن إخراج لكل طلب - Kimi K3 — ‏1,050 input، و76,500 cached، و300 output tokens لكل طلب @@ -141,7 +141,8 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | النموذج | الإدخال | الإخراج | القراءة المخزنة | الكتابة المخزنة | الاستخدام | | --------------------------------------- | ------- | ------- | --------------- | --------------- | --------- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -212,7 +213,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | Model | Model ID | Endpoint | AI SDK Package | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -255,7 +256,7 @@ https://opencode.ai/zen/go/v1/models | النموذج | تدريب النموذج | الاحتفاظ بالبيانات | | ---------------------------- | ------------- | ------------------ | -| Grok 4.5 | غير مستخدَمة | 30 يومًا | +| Grok 4.6 | غير مستخدَمة | 30 يومًا | | GPT 5.6 Luna | غير مستخدَمة | 30 يومًا | | GLM-5.3 | غير مستخدَمة | 0 أيام | | GLM-5.2 | غير مستخدَمة | 0 أيام | @@ -279,7 +280,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | غير مستخدَمة | 0 أيام | | Ox Alpha Free | غير مستخدَمة | 0 أيام | -- **Grok 4.5:** تعطّل ZDR ميزات API مهمة تعتمد على البيانات المخزنة، بما في ذلك Responses API ذات الحالة، وFiles and Collections، وBatch API. [اعرف المزيد](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). +- **Grok 4.6:** تعطّل ZDR ميزات API مهمة تعتمد على البيانات المخزنة، بما في ذلك Responses API ذات الحالة، وFiles and Collections، وBatch API. [اعرف المزيد](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** تُنشأ سجلات مراقبة إساءة الاستخدام لكل استخدام لميزات API، ويُحتفظ بها لمدة تصل إلى 30 يومًا. [اعرف المزيد](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). - **Muse Spark 1.2 Contributor:** أسعار توكنات مخفّضة للغاية مقابل منح الإذن باستخدام مطالباتك وإكمالات النموذج لتدريب نماذج Meta المستقبلية. يقتصر التوفر على المناطق التي تسمح بها [سياسة الاستخدام الجغرافي](https://ai.developer.meta.com/legal/geographic-use-policy) الخاصة بـ Meta. [اعرف المزيد](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** تُجدَّد اتفاقية ZDR شهريًا. الاتفاقية الحالية سارية حتى 31 أغسطس 2026. diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index b8841d99c29a..ca0a3d1a7157 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -59,7 +59,7 @@ Samo jedan član po radnom prostoru (workspace) može se pretplatiti na OpenCode Trenutna lista modela uključuje: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -101,7 +101,7 @@ Tabela ispod pruža procijenjeni broj zahtjeva na osnovu tipičnih obrazaca kori | Model | zahtjeva na 5 sati | zahtjeva sedmično | zahtjeva mjesečno | | ---------------------------- | ------------------ | ----------------- | ----------------- | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -127,7 +127,7 @@ Tabela ispod pruža procijenjeni broj zahtjeva na osnovu tipičnih obrazaca kori Procjene se zasnivaju na zapaženim obrascima zahtjeva: -- Grok 4.5 — 1,100 ulaznih, 71,500 keširanih, 220 izlaznih tokena po zahtjevu +- Grok 4.6 — 390 ulaznih, 32,500 keširanih, 120 izlaznih tokena po zahtjevu - GLM-5.3/5.2/5.1 — 700 ulaznih (input), 52,000 keširanih, 150 izlaznih (output) tokena po zahtjevu - GPT 5.6 Luna — 1,000 ulaznih, 50,000 keširanih, 220 izlaznih tokena po zahtjevu - Kimi K3 — 1,050 ulaznih, 76,500 keširanih, 300 izlaznih tokena po zahtjevu @@ -151,7 +151,8 @@ Procjene se također zasnivaju na sljedećim cijenama po 1M tokena i mjesečnoj | Model | Input | Output | Cached Read | Cached Write | Potrošnja | | --------------------------------------- | ------ | ------ | ----------- | ------------ | --------- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -224,7 +225,7 @@ Također možete pristupiti Go modelima putem sljedećih API endpointa. | Model | Model ID | Endpoint | AI SDK Paket | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -269,7 +270,7 @@ https://opencode.ai/zen/go/v1/models | Model | Treniranje modela | Zadržavanje podataka | | ---------------------------- | ----------------- | -------------------- | -| Grok 4.5 | Ne koristi se | 30 dana | +| Grok 4.6 | Ne koristi se | 30 dana | | GPT 5.6 Luna | Ne koristi se | 30 dana | | GLM-5.3 | Ne koristi se | 0 dana | | GLM-5.2 | Ne koristi se | 0 dana | @@ -293,7 +294,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | Ne koristi se | 0 dana | | Ox Alpha Free | Ne koristi se | 0 dana | -- **Grok 4.5:** ZDR onemogućava važne API funkcije koje zavise od pohranjenih podataka, uključujući Responses API s očuvanjem stanja, Files and Collections i Batch API. [Saznajte više](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). +- **Grok 4.6:** ZDR onemogućava važne API funkcije koje zavise od pohranjenih podataka, uključujući Responses API s očuvanjem stanja, Files and Collections i Batch API. [Saznajte više](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Zapisi o nadzoru zloupotrebe generišu se za svako korištenje API funkcija i čuvaju do 30 dana. [Saznajte više](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). - **Muse Spark 1.2 Contributor:** Znatno snižene cijene tokena u zamjenu za dopuštenje da se vaši promptovi i odgovori modela koriste za treniranje budućih Meta modela. Dostupnost je ograničena na regije dopuštene [Pravilima geografskog korištenja](https://ai.developer.meta.com/legal/geographic-use-policy) kompanije Meta. [Saznajte više](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** ZDR sporazum obnavlja se mjesečno. Trenutni sporazum važi do 31. augusta 2026. diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx index 75da1bb34e7b..16a944f68c52 100644 --- a/packages/web/src/content/docs/da/go.mdx +++ b/packages/web/src/content/docs/da/go.mdx @@ -59,7 +59,7 @@ Kun ét medlem per arbejdsområde kan abonnere på OpenCode Go. Den nuværende liste over modeller inkluderer: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -101,7 +101,7 @@ Tabellen nedenfor giver et estimeret antal anmodninger baseret på typiske Go-fo | Model | anmodninger pr. 5 timer | anmodninger pr. uge | anmodninger pr. måned | | ---------------------------- | ----------------------- | ------------------- | --------------------- | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -127,7 +127,7 @@ Tabellen nedenfor giver et estimeret antal anmodninger baseret på typiske Go-fo Estimaterne er baseret på observerede anmodningsmønstre: -- Grok 4.5 — 1.100 input, 71.500 cachelagrede, 220 output-tokens pr. anmodning +- Grok 4.6 — 390 input, 32.500 cachelagrede, 120 output-tokens pr. anmodning - GLM-5.3/5.2/5.1 — 700 input, 52.000 cachelagrede, 150 output-tokens pr. anmodning - GPT 5.6 Luna — 1.000 input, 50.000 cachelagrede, 220 output-tokens pr. anmodning - Kimi K3 — 1.050 input, 76.500 cachelagrede, 300 output-tokens pr. anmodning @@ -151,7 +151,8 @@ Estimaterne er også baseret på følgende priser pr. 1M tokens og det månedlig | Model | Input | Output | Cached Read | Cached Write | Forbrug | | --------------------------------------- | ------ | ------ | ----------- | ------------ | ------- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -224,7 +225,7 @@ Du kan også få adgang til Go-modeller gennem følgende API-endpoints. | Model | Model ID | Endpoint | AI SDK Package | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -269,7 +270,7 @@ https://opencode.ai/zen/go/v1/models | Model | Modeltræning | Dataopbevaring | | ---------------------------- | ------------ | -------------- | -| Grok 4.5 | Ikke brugt | 30 dage | +| Grok 4.6 | Ikke brugt | 30 dage | | GPT 5.6 Luna | Ikke brugt | 30 dage | | GLM-5.3 | Ikke brugt | 0 dage | | GLM-5.2 | Ikke brugt | 0 dage | @@ -293,7 +294,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | Ikke brugt | 0 dage | | Ox Alpha Free | Ikke brugt | 0 dage | -- **Grok 4.5:** ZDR deaktiverer vigtige API-funktioner, der afhænger af lagrede data, herunder den tilstandsbevarende Responses API, Files and Collections og Batch API. [Læs mere](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). +- **Grok 4.6:** ZDR deaktiverer vigtige API-funktioner, der afhænger af lagrede data, herunder den tilstandsbevarende Responses API, Files and Collections og Batch API. [Læs mere](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Logfiler til overvågning af misbrug genereres ved al brug af API-funktioner og opbevares i op til 30 dage. [Læs mere](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). - **Muse Spark 1.2 Contributor:** Kraftigt nedsatte tokenpriser til gengæld for tilladelse til at bruge dine prompts og modelsvar til at træne fremtidige Meta-modeller. Tilgængeligheden er begrænset til regioner, der er tilladt i henhold til [politikken for geografisk brug](https://ai.developer.meta.com/legal/geographic-use-policy) fra Meta. [Læs mere](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** ZDR-aftalen fornyes månedligt. Den nuværende aftale er gyldig til og med 31. august 2026. diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx index 21ba15452518..a4d7484c80ca 100644 --- a/packages/web/src/content/docs/de/go.mdx +++ b/packages/web/src/content/docs/de/go.mdx @@ -51,7 +51,7 @@ Nur ein Mitglied pro Workspace kann OpenCode Go abonnieren. Die aktuelle Liste der Modelle umfasst: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -93,7 +93,7 @@ Die folgende Tabelle zeigt eine geschätzte Anzahl von Anfragen basierend auf ty | Model | Anfragen pro 5 Stunden | Anfragen pro Woche | Anfragen pro Monat | | ---------------------------- | ---------------------- | ------------------ | ------------------ | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -119,7 +119,7 @@ Die folgende Tabelle zeigt eine geschätzte Anzahl von Anfragen basierend auf ty Die Schätzungen basieren auf beobachteten Anfragemustern: -- Grok 4.5 — 1.100 Input-, 71.500 Cached-, 220 Output-Tokens pro Anfrage +- Grok 4.6 — 390 Input-, 32.500 Cached-, 120 Output-Tokens pro Anfrage - GLM-5.3/5.2/5.1 — 700 Input-, 52.000 Cached-, 150 Output-Tokens pro Anfrage - GPT 5.6 Luna — 1.000 Input-, 50.000 Cached-, 220 Output-Tokens pro Anfrage - Kimi K3 — 1.050 Input-, 76.500 Cached-, 300 Output-Tokens pro Anfrage @@ -143,7 +143,8 @@ Die Schätzungen basieren außerdem auf den folgenden Preisen pro 1M Tokens und | Model | Input | Output | Cached Read | Cached Write | Nutzung | | --------------------------------------- | ------ | ------ | ----------- | ------------ | ------- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -214,7 +215,7 @@ Du kannst auf die Go-Modelle auch über die folgenden API-Endpunkte zugreifen. | Modell | Modell-ID | Endpunkt | AI SDK Package | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -257,7 +258,7 @@ https://opencode.ai/zen/go/v1/models | Modell | Modelltraining | Datenaufbewahrung | | ---------------------------- | --------------- | ----------------- | -| Grok 4.5 | Nicht verwendet | 30 Tage | +| Grok 4.6 | Nicht verwendet | 30 Tage | | GPT 5.6 Luna | Nicht verwendet | 30 Tage | | GLM-5.3 | Nicht verwendet | 0 Tage | | GLM-5.2 | Nicht verwendet | 0 Tage | @@ -281,7 +282,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | Nicht verwendet | 0 Tage | | Ox Alpha Free | Nicht verwendet | 0 Tage | -- **Grok 4.5:** ZDR deaktiviert wichtige API-Funktionen, die von gespeicherten Daten abhängen, einschließlich der zustandsbehafteten Responses API, Files and Collections und der Batch API. [Mehr erfahren](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). +- **Grok 4.6:** ZDR deaktiviert wichtige API-Funktionen, die von gespeicherten Daten abhängen, einschließlich der zustandsbehafteten Responses API, Files and Collections und der Batch API. [Mehr erfahren](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Für die Nutzung aller API-Funktionen werden Protokolle zur Missbrauchsüberwachung erstellt und bis zu 30 Tage lang aufbewahrt. [Mehr erfahren](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). - **Muse Spark 1.2 Contributor:** Stark vergünstigte Tokenpreise im Gegenzug für die Erlaubnis, deine Prompts und Vervollständigungen zum Trainieren zukünftiger Meta-Modelle zu verwenden. Die Verfügbarkeit ist auf Regionen beschränkt, die gemäß der [Richtlinie zur geografischen Nutzung](https://ai.developer.meta.com/legal/geographic-use-policy) von Meta zulässig sind. [Mehr erfahren](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** Die ZDR-Vereinbarung wird monatlich erneuert. Die aktuelle Vereinbarung gilt bis einschließlich 31. August 2026. diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index 4687c1897425..ca1bb08a28ad 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -59,7 +59,7 @@ Solo un miembro por espacio de trabajo puede suscribirse a OpenCode Go. La lista actual de modelos incluye: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -101,7 +101,7 @@ La siguiente tabla proporciona una cantidad estimada de peticiones basada en los | Model | peticiones por 5 horas | peticiones por semana | peticiones por mes | | ---------------------------- | ---------------------- | --------------------- | ------------------ | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -127,7 +127,7 @@ La siguiente tabla proporciona una cantidad estimada de peticiones basada en los Las estimaciones se basan en los patrones de peticiones observados: -- Grok 4.5 — 1,100 tokens de entrada, 71,500 en caché, 220 tokens de salida por petición +- Grok 4.6 — 390 tokens de entrada, 32,500 en caché, 120 tokens de salida por petición - GLM-5.3/5.2/5.1 — 700 tokens de entrada, 52,000 en caché, 150 tokens de salida por petición - GPT 5.6 Luna — 1,000 tokens de entrada, 50,000 en caché, 220 tokens de salida por petición - Kimi K3 — 1,050 tokens de entrada, 76,500 en caché, 300 tokens de salida por petición @@ -151,7 +151,8 @@ Las estimaciones también se basan en los siguientes precios por 1M tokens y en | Modelo | Entrada | Salida | Lectura en caché | Escritura en caché | Uso | | --------------------------------------- | ------- | ------ | ---------------- | ------------------ | --- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -224,7 +225,7 @@ También puedes acceder a los modelos de Go a través de los siguientes endpoint | Modelo | ID del modelo | Endpoint | Paquete de AI SDK | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -269,7 +270,7 @@ https://opencode.ai/zen/go/v1/models | Modelo | Entrenamiento del modelo | Retención de datos | | ---------------------------- | ------------------------ | ------------------ | -| Grok 4.5 | No utilizado | 30 días | +| Grok 4.6 | No utilizado | 30 días | | GPT 5.6 Luna | No utilizado | 30 días | | GLM-5.3 | No utilizado | 0 días | | GLM-5.2 | No utilizado | 0 días | @@ -293,7 +294,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | No utilizado | 0 días | | Ox Alpha Free | No utilizado | 0 días | -- **Grok 4.5:** ZDR deshabilita funciones importantes de la API que dependen de datos almacenados, incluidas la Responses API con estado, Files and Collections y la Batch API. [Más información](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). +- **Grok 4.6:** ZDR deshabilita funciones importantes de la API que dependen de datos almacenados, incluidas la Responses API con estado, Files and Collections y la Batch API. [Más información](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Se generan registros de supervisión de abusos para todo el uso de funciones de la API y se conservan durante un máximo de 30 días. [Más información](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). - **Muse Spark 1.2 Contributor:** Precios de tokens muy reducidos a cambio de permitir que tus prompts y las respuestas generadas se utilicen para entrenar futuros modelos de Meta. La disponibilidad está limitada a las regiones permitidas por la [Política de uso geográfico](https://ai.developer.meta.com/legal/geographic-use-policy) de Meta. [Más información](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** El acuerdo de ZDR se renueva mensualmente. El acuerdo actual es válido hasta el 31 de agosto de 2026. diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx index 695858c56096..6e906c648371 100644 --- a/packages/web/src/content/docs/fr/go.mdx +++ b/packages/web/src/content/docs/fr/go.mdx @@ -49,7 +49,7 @@ Un seul membre par espace de travail peut s'abonner à OpenCode Go. La liste actuelle des modèles comprend : -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -91,7 +91,7 @@ Le tableau ci-dessous fournit une estimation du nombre de requêtes basée sur d | Model | requêtes par 5 heures | requêtes par semaine | requêtes par mois | | ---------------------------- | --------------------- | -------------------- | ----------------- | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -117,7 +117,7 @@ Le tableau ci-dessous fournit une estimation du nombre de requêtes basée sur d Les estimations sont basées sur les schémas de requêtes observés : -- Grok 4.5 — 1,100 tokens en entrée, 71,500 en cache, 220 tokens en sortie par requête +- Grok 4.6 — 390 tokens en entrée, 32,500 en cache, 120 tokens en sortie par requête - GLM-5.3/5.2/5.1 — 700 tokens en entrée, 52,000 en cache, 150 tokens en sortie par requête - GPT 5.6 Luna — 1,000 tokens en entrée, 50,000 en cache, 220 tokens en sortie par requête - Kimi K3 — 1,050 tokens en entrée, 76,500 en cache, 300 tokens en sortie par requête @@ -141,7 +141,8 @@ Les estimations sont également basées sur les prix suivants par 1M tokens et s | Modèle | Input | Output | Cached Read | Cached Write | Utilisation | | --------------------------------------- | ------ | ------ | ----------- | ------------ | ----------- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -212,7 +213,7 @@ Vous pouvez également accéder aux modèles Go via les points de terminaison d' | Modèle | ID de modèle | Point de terminaison | Package AI SDK | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -255,7 +256,7 @@ https://opencode.ai/zen/go/v1/models | Modèle | Entraînement des modèles | Conservation des données | | ---------------------------- | ------------------------ | ------------------------ | -| Grok 4.5 | Non utilisé | 30 jours | +| Grok 4.6 | Non utilisé | 30 jours | | GPT 5.6 Luna | Non utilisé | 30 jours | | GLM-5.3 | Non utilisé | 0 jour | | GLM-5.2 | Non utilisé | 0 jour | @@ -279,7 +280,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | Non utilisé | 0 jour | | Ox Alpha Free | Non utilisé | 0 jour | -- **Grok 4.5:** Le ZDR désactive d’importantes fonctionnalités API qui dépendent des données stockées, notamment Responses API avec état, Files and Collections et Batch API. [En savoir plus](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). +- **Grok 4.6:** Le ZDR désactive d’importantes fonctionnalités API qui dépendent des données stockées, notamment Responses API avec état, Files and Collections et Batch API. [En savoir plus](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Des journaux de surveillance des abus sont générés pour toute utilisation des fonctionnalités API et conservés pendant un maximum de 30 jours. [En savoir plus](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). - **Muse Spark 1.2 Contributor:** Des tarifs de tokens fortement réduits en échange de l’autorisation d’utiliser vos prompts et vos complétions pour entraîner de futurs modèles Meta. La disponibilité est limitée aux régions autorisées par la [Politique d’utilisation géographique](https://ai.developer.meta.com/legal/geographic-use-policy) de Meta. [En savoir plus](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** L’accord ZDR est renouvelé chaque mois. L’accord actuel est valable jusqu’au 31 août 2026. diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index d909d215f09c..b5f6bde71915 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -59,7 +59,7 @@ Only one member per workspace can subscribe to OpenCode Go. The current list of models includes: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -101,7 +101,7 @@ The table below provides an estimated request count based on typical Go usage pa | Model | requests per 5 hour | requests per week | requests per month | | ---------------------------- | ------------------- | ----------------- | ------------------ | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -127,7 +127,7 @@ The table below provides an estimated request count based on typical Go usage pa The estimates are based on observed request patterns: -- Grok 4.5 — 1,100 input, 71,500 cached, 220 output tokens per request +- Grok 4.6 — 390 input, 32,500 cached, 120 output tokens per request - GLM-5.3/5.2/5.1 — 700 input, 52,000 cached, 150 output tokens per request - GPT 5.6 Luna — 1,000 input, 50,000 cached, 220 output tokens per request - Kimi K3 — 1,050 input, 76,500 cached, 300 output tokens per request @@ -151,7 +151,8 @@ The estimates are also based on the following prices per 1M tokens and the month | Model | Input | Output | Cached Read | Cached Write | Usage | | --------------------------------------- | ------ | ------ | ----------- | ------------ | ----- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -224,7 +225,7 @@ You can also access Go models through the following API endpoints. | Model | Model ID | Endpoint | AI SDK Package | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -269,7 +270,7 @@ https://opencode.ai/zen/go/v1/models | Model | Model training | Data retention | | ---------------------------- | -------------- | -------------- | -| Grok 4.5 | Not used | 30 days | +| Grok 4.6 | Not used | 30 days | | GPT 5.6 Luna | Not used | 30 days | | GLM-5.3 | Not used | 0 days | | GLM-5.2 | Not used | 0 days | @@ -293,7 +294,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | Not used | 0 days | | Ox Alpha Free | Not used | 0 days | -- **Grok 4.5:** ZDR disables important API features that depend on stored data, including the stateful Responses API, Files and Collections, and the Batch API. [Learn more](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). +- **Grok 4.6:** ZDR disables important API features that depend on stored data, including the stateful Responses API, Files and Collections, and the Batch API. [Learn more](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Abuse monitoring logs are generated for all API feature usage and retained for up to 30 days. [Learn more](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). - **Muse Spark 1.2 Contributor:** Heavily discounted token pricing in exchange for permission to use your prompts and completions to train future Meta models. Availability is limited to regions permitted by Meta's [Geographic Use Policy](https://ai.developer.meta.com/legal/geographic-use-policy). [Learn more](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek:** ZDR agreement is renewed monthly. The current agreement is valid through August 31, 2026. diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx index 8efc91907976..2c8c09eb9e6d 100644 --- a/packages/web/src/content/docs/it/go.mdx +++ b/packages/web/src/content/docs/it/go.mdx @@ -57,7 +57,7 @@ Solo un membro per workspace può abbonarsi a OpenCode Go. L'elenco attuale dei modelli include: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -99,7 +99,7 @@ La tabella seguente fornisce una stima del conteggio delle richieste in base a p | Model | richieste ogni 5 ore | richieste a settimana | richieste al mese | | ---------------------------- | -------------------- | --------------------- | ----------------- | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -125,7 +125,7 @@ La tabella seguente fornisce una stima del conteggio delle richieste in base a p Le stime si basano sui pattern di richieste osservati: -- Grok 4.5 — 1.100 di input, 71.500 in cache, 220 token di output per richiesta +- Grok 4.6 — 390 di input, 32.500 in cache, 120 token di output per richiesta - GLM-5.3/5.2/5.1 — 700 di input, 52.000 in cache, 150 token di output per richiesta - GPT 5.6 Luna — 1.000 token di input, 50.000 in cache, 220 token di output per richiesta - Kimi K3 — 1.050 di input, 76.500 in cache, 300 token di output per richiesta @@ -149,7 +149,8 @@ Le stime si basano anche sui seguenti prezzi per 1M token e sull'utilizzo mensil | Modello | Input | Output | Cached Read | Cached Write | Utilizzo | | --------------------------------------- | ------ | ------ | ----------- | ------------ | -------- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -222,7 +223,7 @@ Puoi anche accedere ai modelli Go tramite i seguenti endpoint API. | Modello | ID Modello | Endpoint | Pacchetto AI SDK | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -267,7 +268,7 @@ https://opencode.ai/zen/go/v1/models | Modello | Addestramento del modello | Conservazione dei dati | | ---------------------------- | ------------------------- | ---------------------- | -| Grok 4.5 | Non utilizzato | 30 giorni | +| Grok 4.6 | Non utilizzato | 30 giorni | | GPT 5.6 Luna | Non utilizzato | 30 giorni | | GLM-5.3 | Non utilizzato | 0 giorni | | GLM-5.2 | Non utilizzato | 0 giorni | @@ -291,7 +292,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | Non utilizzato | 0 giorni | | Ox Alpha Free | Non utilizzato | 0 giorni | -- **Grok 4.5:** ZDR disabilita importanti funzionalità API che dipendono dai dati archiviati, tra cui la Responses API con stato, Files and Collections e Batch API. [Scopri di più](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). +- **Grok 4.6:** ZDR disabilita importanti funzionalità API che dipendono dai dati archiviati, tra cui la Responses API con stato, Files and Collections e Batch API. [Scopri di più](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** I log di monitoraggio degli abusi vengono generati per l'utilizzo di tutte le funzionalità API e conservati per un massimo di 30 giorni. [Scopri di più](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). - **Muse Spark 1.2 Contributor:** Prezzi dei token fortemente scontati in cambio dell'autorizzazione a utilizzare i tuoi prompt e completamenti per addestrare futuri modelli Meta. La disponibilità è limitata alle regioni consentite dalla [Politica sull'uso geografico](https://ai.developer.meta.com/legal/geographic-use-policy) di Meta. [Scopri di più](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** L'accordo ZDR viene rinnovato mensilmente. L'accordo attuale è valido fino al 31 agosto 2026. diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx index 0cbaad8b3bb2..2eb7571491b4 100644 --- a/packages/web/src/content/docs/ja/go.mdx +++ b/packages/web/src/content/docs/ja/go.mdx @@ -49,7 +49,7 @@ OpenCode Goをサブスクライブできるのは、1つのワークスペー 現在のモデルリストには以下が含まれます: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -91,7 +91,7 @@ OpenCode Goには以下の制限が含まれています: | Model | 5時間あたりのリクエスト数 | 週間リクエスト数 | 月間リクエスト数 | | ---------------------------- | ------------------------- | ---------------- | ---------------- | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -117,7 +117,7 @@ OpenCode Goには以下の制限が含まれています: 推定値は、観測されたリクエストパターンに基づいています: -- Grok 4.5 — リクエストあたり 入力 1,100トークン、キャッシュ 71,500トークン、出力 220トークン +- Grok 4.6 — リクエストあたり 入力 390トークン、キャッシュ 32,500トークン、出力 120トークン - GLM-5.3/5.2/5.1 — リクエストあたり 入力 700トークン、キャッシュ 52,000トークン、出力 150トークン - GPT 5.6 Luna — リクエストあたり 入力 1,000トークン、キャッシュ 50,000トークン、出力 220トークン - Kimi K3 — リクエストあたり 入力 1,050トークン、キャッシュ 76,500トークン、出力 300トークン @@ -141,7 +141,8 @@ OpenCode Goには以下の制限が含まれています: | Model | Input | Output | Cached Read | Cached Write | Usage | | --------------------------------------- | ------ | ------ | ----------- | ------------ | ----- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -212,7 +213,7 @@ Goでは月額$10を支払い、その6倍の利用枠を提供することを | Model | Model ID | Endpoint | AI SDK Package | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -255,7 +256,7 @@ https://opencode.ai/zen/go/v1/models | モデル | モデルのトレーニング | データ保持 | | ---------------------------- | -------------------- | ----------- | -| Grok 4.5 | 使用なし | 30日 | +| Grok 4.6 | 使用なし | 30日 | | GPT 5.6 Luna | 使用なし | 30日 | | GLM-5.3 | 使用なし | 0日 | | GLM-5.2 | 使用なし | 0日 | @@ -279,7 +280,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | 使用なし | 0日 | | Ox Alpha Free | 使用なし | 0日 | -- **Grok 4.5:** ZDRでは、保存データに依存する重要なAPI機能(ステートフルなResponses API、Files and Collections、Batch APIなど)が無効になります。[詳しく見る](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 +- **Grok 4.6:** ZDRでは、保存データに依存する重要なAPI機能(ステートフルなResponses API、Files and Collections、Batch APIなど)が無効になります。[詳しく見る](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 - **GPT 5.6 Luna:** 不正使用監視ログはすべてのAPI機能の使用時に生成され、最大30日間保持されます。[詳しく見る](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring)。 - **Muse Spark 1.2 Contributor:** 将来のMetaモデルのトレーニングにプロンプトと生成結果を使用する許可と引き換えに、トークン料金が大幅に割引されます。利用できるのは、Metaの[地域別利用ポリシー](https://ai.developer.meta.com/legal/geographic-use-policy)で許可されている地域に限られます。[詳しく見る](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 - **DeepSeek V4 Flash:** ZDR契約は毎月更新されます。現在の契約は2026年8月31日まで有効です。 diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx index f4d9d3ae3313..dfe73049ad81 100644 --- a/packages/web/src/content/docs/ko/go.mdx +++ b/packages/web/src/content/docs/ko/go.mdx @@ -49,7 +49,7 @@ workspace당 한 명의 멤버만 OpenCode Go를 구독할 수 있습니다. 현재 모델 목록에는 다음이 포함됩니다. -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -91,7 +91,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | Model | 5시간당 요청 횟수 | 주간 요청 횟수 | 월간 요청 횟수 | | ---------------------------- | ----------------- | -------------- | -------------- | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -117,7 +117,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. 이 예상치는 관찰된 요청 패턴을 기준으로 합니다. -- Grok 4.5 — 요청당 입력 1,100, 캐시 71,500, 출력 토큰 220 +- Grok 4.6 — 요청당 입력 390, 캐시 32,500, 출력 토큰 120 - GLM-5.3/5.2/5.1 — 요청당 입력 700, 캐시 52,000, 출력 토큰 150 - GPT 5.6 Luna — 요청당 입력 토큰 1,000개, 캐시 토큰 50,000개, 출력 토큰 220개 - Kimi K3 — 요청당 입력 1,050, 캐시 76,500, 출력 토큰 300 @@ -141,7 +141,8 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | Model | Input | Output | Cached Read | Cached Write | Usage | | --------------------------------------- | ------ | ------ | ----------- | ------------ | ----- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -212,7 +213,7 @@ Go에서는 월 $10를 지불하며, 저희는 그 6배의 사용량을 제공 | 모델 | 모델 ID | 엔드포인트 | AI SDK 패키지 | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -255,7 +256,7 @@ https://opencode.ai/zen/go/v1/models | 모델 | 모델 학습 | 데이터 보존 | | ---------------------------- | ------------- | ----------- | -| Grok 4.5 | 사용되지 않음 | 30일 | +| Grok 4.6 | 사용되지 않음 | 30일 | | GPT 5.6 Luna | 사용되지 않음 | 30일 | | GLM-5.3 | 사용되지 않음 | 0일 | | GLM-5.2 | 사용되지 않음 | 0일 | @@ -279,7 +280,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | 사용되지 않음 | 0일 | | Ox Alpha Free | 사용되지 않음 | 0일 | -- **Grok 4.5:** ZDR은 저장된 데이터에 의존하는 중요한 API 기능(상태 저장형 Responses API, Files and Collections, Batch API 포함)을 비활성화합니다. [자세히 알아보기](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). +- **Grok 4.6:** ZDR은 저장된 데이터에 의존하는 중요한 API 기능(상태 저장형 Responses API, Files and Collections, Batch API 포함)을 비활성화합니다. [자세히 알아보기](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** 모든 API 기능 사용에 대해 악용 모니터링 로그가 생성되며 최대 30일 동안 보존됩니다. [자세히 알아보기](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). - **Muse Spark 1.2 Contributor:** 향후 Meta 모델 학습에 사용자의 프롬프트와 생성 결과를 사용할 수 있도록 허용하는 대신 토큰 가격이 대폭 할인됩니다. Meta의 [지역별 사용 정책](https://ai.developer.meta.com/legal/geographic-use-policy)에서 허용하는 지역에서만 이용할 수 있습니다. [자세히 알아보기](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** ZDR 계약은 매월 갱신됩니다. 현재 계약은 2026년 8월 31일까지 유효합니다. diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx index 460c2e787d0e..93c8dd691259 100644 --- a/packages/web/src/content/docs/nb/go.mdx +++ b/packages/web/src/content/docs/nb/go.mdx @@ -59,7 +59,7 @@ Kun ett medlem per arbeidsområde kan abonnere på OpenCode Go. Den nåværende listen over modeller inkluderer: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -101,7 +101,7 @@ Tabellen nedenfor gir et estimert antall forespørsler basert på typiske bruksm | Model | forespørsler per 5 timer | forespørsler per uke | forespørsler per måned | | ---------------------------- | ------------------------ | -------------------- | ---------------------- | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -127,7 +127,7 @@ Tabellen nedenfor gir et estimert antall forespørsler basert på typiske bruksm Estimatene er basert på observerte forespørselsmønstre: -- Grok 4.5 — 1 100 input, 71 500 bufret, 220 output-tokens per forespørsel +- Grok 4.6 — 390 input, 32 500 bufret, 120 output-tokens per forespørsel - GLM-5.3/5.2/5.1 — 700 input, 52 000 bufret, 150 output-tokens per forespørsel - GPT 5.6 Luna — 1 000 input, 50 000 bufret, 220 output-tokens per forespørsel - Kimi K3 — 1 050 input, 76 500 bufret, 300 output-tokens per forespørsel @@ -151,7 +151,8 @@ Estimatene er også basert på følgende priser per 1M tokens og den månedlige | Model | Input | Output | Cached Read | Cached Write | Bruk | | --------------------------------------- | ------ | ------ | ----------- | ------------ | ---- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -224,7 +225,7 @@ Du kan også få tilgang til Go-modeller gjennom følgende API-endepunkter. | Modell | Modell-ID | Endepunkt | AI SDK Package | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -269,7 +270,7 @@ https://opencode.ai/zen/go/v1/models | Modell | Modelltrening | Dataoppbevaring | | ---------------------------- | ------------- | --------------- | -| Grok 4.5 | Brukes ikke | 30 dager | +| Grok 4.6 | Brukes ikke | 30 dager | | GPT 5.6 Luna | Brukes ikke | 30 dager | | GLM-5.3 | Brukes ikke | 0 dager | | GLM-5.2 | Brukes ikke | 0 dager | @@ -293,7 +294,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | Brukes ikke | 0 dager | | Ox Alpha Free | Brukes ikke | 0 dager | -- **Grok 4.5:** ZDR deaktiverer viktige API-funksjoner som er avhengige av lagrede data, inkludert den tilstandsbaserte Responses API, Files and Collections og Batch API. [Les mer](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). +- **Grok 4.6:** ZDR deaktiverer viktige API-funksjoner som er avhengige av lagrede data, inkludert den tilstandsbaserte Responses API, Files and Collections og Batch API. [Les mer](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Logger for overvåking av misbruk genereres for all bruk av API-funksjoner og oppbevares i opptil 30 dager. [Les mer](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). - **Muse Spark 1.2 Contributor:** Kraftig rabatterte tokenpriser i bytte mot tillatelse til å bruke ledetekstene og fullføringene dine til å trene fremtidige Meta-modeller. Tilgjengeligheten er begrenset til regioner som er tillatt i henhold til [retningslinjene for geografisk bruk](https://ai.developer.meta.com/legal/geographic-use-policy) fra Meta. [Les mer](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** ZDR-avtalen fornyes månedlig. Den gjeldende avtalen er gyldig til og med 31. august 2026. diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx index 6dfaf37953a2..2c4a896416f5 100644 --- a/packages/web/src/content/docs/pl/go.mdx +++ b/packages/web/src/content/docs/pl/go.mdx @@ -53,7 +53,7 @@ Tylko jeden członek na obszar roboczy (workspace) może zasubskrybować OpenCod Obecna lista modeli obejmuje: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -95,7 +95,7 @@ Poniższa tabela przedstawia szacunkową liczbę żądań na podstawie typowych | Model | żądania na 5 godzin | żądania na tydzień | żądania na miesiąc | | ---------------------------- | ------------------- | ------------------ | ------------------ | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -121,7 +121,7 @@ Poniższa tabela przedstawia szacunkową liczbę żądań na podstawie typowych Szacunki te opierają się na zaobserwowanych wzorcach żądań: -- Grok 4.5 — 1 100 tokenów wejściowych, 71 500 w pamięci podręcznej, 220 tokenów wyjściowych na żądanie +- Grok 4.6 — 390 tokenów wejściowych, 32 500 w pamięci podręcznej, 120 tokenów wyjściowych na żądanie - GLM-5.3/5.2/5.1 — 700 tokenów wejściowych, 52 000 w pamięci podręcznej, 150 tokenów wyjściowych na żądanie - GPT 5.6 Luna — 1 000 tokenów wejściowych, 50 000 w pamięci podręcznej, 220 tokenów wyjściowych na żądanie - Kimi K3 — 1 050 tokenów wejściowych, 76 500 w pamięci podręcznej, 300 tokenów wyjściowych na żądanie @@ -145,7 +145,8 @@ Szacunki opierają się również na następujących cenach za 1M tokenów oraz | Model | Wejście | Wyjście | Odczyt z cache | Zapis do cache | Użycie | | --------------------------------------- | ------- | ------- | -------------- | -------------- | ------ | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -216,7 +217,7 @@ Możesz również uzyskać dostęp do modeli Go za pośrednictwem następującyc | Model | ID modelu | Punkt końcowy | Pakiet AI SDK | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -261,7 +262,7 @@ https://opencode.ai/zen/go/v1/models | Model | Trenowanie modelu | Retencja danych | | ---------------------------- | ----------------- | --------------- | -| Grok 4.5 | Niewykorzystywane | 30 dni | +| Grok 4.6 | Niewykorzystywane | 30 dni | | GPT 5.6 Luna | Niewykorzystywane | 30 dni | | GLM-5.3 | Niewykorzystywane | 0 dni | | GLM-5.2 | Niewykorzystywane | 0 dni | @@ -285,7 +286,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | Niewykorzystywane | 0 dni | | Ox Alpha Free | Niewykorzystywane | 0 dni | -- **Grok 4.5:** ZDR wyłącza ważne funkcje API zależne od przechowywanych danych, w tym stanowy Responses API, Files and Collections oraz Batch API. [Dowiedz się więcej](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). +- **Grok 4.6:** ZDR wyłącza ważne funkcje API zależne od przechowywanych danych, w tym stanowy Responses API, Files and Collections oraz Batch API. [Dowiedz się więcej](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Dzienniki monitorowania nadużyć są generowane dla każdego użycia funkcji API i przechowywane przez maksymalnie 30 dni. [Dowiedz się więcej](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). - **Muse Spark 1.2 Contributor:** Znacznie obniżone ceny tokenów w zamian za zgodę na wykorzystanie Twoich promptów i odpowiedzi do trenowania przyszłych modeli Meta. Dostępność jest ograniczona do regionów dozwolonych przez [Zasady korzystania w poszczególnych regionach geograficznych](https://ai.developer.meta.com/legal/geographic-use-policy) firmy Meta. [Dowiedz się więcej](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** Umowa ZDR jest odnawiana co miesiąc. Obecna umowa obowiązuje do 31 sierpnia 2026 r. diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index 14021d2ffea8..75487e15f87c 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -59,7 +59,7 @@ Apenas um membro por workspace pode assinar o OpenCode Go. A lista atual de modelos inclui: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -101,7 +101,7 @@ A tabela abaixo fornece uma contagem estimada de requisições com base nos padr | Model | requisições por 5 horas | requisições por semana | requisições por mês | | ---------------------------- | ----------------------- | ---------------------- | ------------------- | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -127,7 +127,7 @@ A tabela abaixo fornece uma contagem estimada de requisições com base nos padr As estimativas se baseiam nos padrões de requisições observados: -- Grok 4.5 — 1.100 tokens de entrada, 71.500 em cache, 220 tokens de saída por requisição +- Grok 4.6 — 390 tokens de entrada, 32.500 em cache, 120 tokens de saída por requisição - GLM-5.3/5.2/5.1 — 700 tokens de entrada, 52.000 em cache, 150 tokens de saída por requisição - GPT 5.6 Luna — 1.000 tokens de entrada, 50.000 em cache, 220 tokens de saída por requisição - Kimi K3 — 1.050 tokens de entrada, 76.500 em cache, 300 tokens de saída por requisição @@ -151,7 +151,8 @@ As estimativas também se baseiam nos seguintes preços por 1M tokens e no uso m | Modelo | Entrada | Saída | Leitura em cache | Escrita em cache | Uso | | --------------------------------------- | ------- | ------ | ---------------- | ---------------- | --- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -224,7 +225,7 @@ Você também pode acessar os modelos do Go através dos seguintes endpoints de | Modelo | ID do Modelo | Endpoint | Pacote do AI SDK | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -269,7 +270,7 @@ https://opencode.ai/zen/go/v1/models | Modelo | Treinamento de modelos | Retenção de dados | | ---------------------------- | ---------------------- | ----------------- | -| Grok 4.5 | Não usado | 30 dias | +| Grok 4.6 | Não usado | 30 dias | | GPT 5.6 Luna | Não usado | 30 dias | | GLM-5.3 | Não usado | 0 dias | | GLM-5.2 | Não usado | 0 dias | @@ -293,7 +294,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | Não usado | 0 dias | | Ox Alpha Free | Não usado | 0 dias | -- **Grok 4.5:** O ZDR desativa recursos importantes da API que dependem de dados armazenados, incluindo a Responses API com estado, Files and Collections e a Batch API. [Saiba mais](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). +- **Grok 4.6:** O ZDR desativa recursos importantes da API que dependem de dados armazenados, incluindo a Responses API com estado, Files and Collections e a Batch API. [Saiba mais](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Logs de monitoramento de abuso são gerados para todo uso de recursos da API e retidos por até 30 dias. [Saiba mais](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). - **Muse Spark 1.2 Contributor:** Preços de tokens com grandes descontos em troca da permissão para usar seus prompts e respostas geradas para treinar futuros modelos da Meta. A disponibilidade é limitada às regiões permitidas pela [Política de Uso Geográfico](https://ai.developer.meta.com/legal/geographic-use-policy) da Meta. [Saiba mais](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** O acordo de ZDR é renovado mensalmente. O acordo atual é válido até 31 de agosto de 2026. diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx index 900ddb98505d..d96d18ae5917 100644 --- a/packages/web/src/content/docs/ru/go.mdx +++ b/packages/web/src/content/docs/ru/go.mdx @@ -59,7 +59,7 @@ OpenCode Go работает так же, как и любой другой пр Текущий список моделей включает: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -101,7 +101,7 @@ OpenCode Go включает следующие лимиты: | Model | запросов за 5 часов | запросов в неделю | запросов в месяц | | ---------------------------- | ------------------- | ----------------- | ---------------- | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -127,7 +127,7 @@ OpenCode Go включает следующие лимиты: Эти оценки основаны на наблюдаемых показателях запросов: -- Grok 4.5 — 1,100 входных, 71,500 кешированных, 220 выходных токенов на запрос +- Grok 4.6 — 390 входных, 32,500 кешированных, 120 выходных токенов на запрос - GLM-5.3/5.2/5.1 — 700 входных, 52,000 кешированных, 150 выходных токенов на запрос - GPT 5.6 Luna — 1,000 входных, 50,000 кешированных, 220 выходных токенов на запрос - Kimi K3 — 1,050 входных, 76,500 кешированных, 300 выходных токенов на запрос @@ -151,7 +151,8 @@ OpenCode Go включает следующие лимиты: | Model | Input | Output | Cached Read | Cached Write | Использование | | --------------------------------------- | ------ | ------ | ----------- | ------------ | ------------- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -224,7 +225,7 @@ OpenCode Go включает следующие лимиты: | Модель | ID модели | Эндпоинт | Пакет AI SDK | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -269,7 +270,7 @@ https://opencode.ai/zen/go/v1/models | Модель | Обучение моделей | Хранение данных | | ---------------------------- | ---------------- | --------------- | -| Grok 4.5 | Не используется | 30 дней | +| Grok 4.6 | Не используется | 30 дней | | GPT 5.6 Luna | Не используется | 30 дней | | GLM-5.3 | Не используется | 0 дней | | GLM-5.2 | Не используется | 0 дней | @@ -293,7 +294,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | Не используется | 0 дней | | Ox Alpha Free | Не используется | 0 дней | -- **Grok 4.5:** ZDR отключает важные функции API, зависящие от сохраненных данных, включая Responses API с сохранением состояния, Files and Collections и Batch API. [Подробнее](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). +- **Grok 4.6:** ZDR отключает важные функции API, зависящие от сохраненных данных, включая Responses API с сохранением состояния, Files and Collections и Batch API. [Подробнее](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Журналы мониторинга злоупотреблений создаются при любом использовании функций API и хранятся до 30 дней. [Подробнее](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). - **Muse Spark 1.2 Contributor:** Значительно сниженная стоимость токенов в обмен на разрешение использовать ваши промпты и ответы для обучения будущих моделей Meta. Доступность ограничена регионами, разрешёнными [Политикой географического использования](https://ai.developer.meta.com/legal/geographic-use-policy) компании Meta. [Подробнее](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** Соглашение ZDR продлевается ежемесячно. Текущее соглашение действует до 31 августа 2026 года. diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx index 3fd544accc74..5fb203921442 100644 --- a/packages/web/src/content/docs/th/go.mdx +++ b/packages/web/src/content/docs/th/go.mdx @@ -49,7 +49,7 @@ OpenCode Go ทำงานเหมือนกับผู้ให้บร รายชื่อโมเดลในปัจจุบันประกอบด้วย: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -91,7 +91,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | Model | requests ต่อ 5 ชั่วโมง | requests ต่อสัปดาห์ | requests ต่อเดือน | | ---------------------------- | ---------------------- | ------------------- | ----------------- | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -117,7 +117,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: การประมาณการนี้อ้างอิงจากรูปแบบการใช้งาน request ที่สังเกตพบ: -- Grok 4.5 — 1,100 input, 71,500 cached, 220 output tokens ต่อ request +- Grok 4.6 — 390 input, 32,500 cached, 120 output tokens ต่อ request - GLM-5.3/5.2/5.1 — 700 input, 52,000 cached, 150 output tokens ต่อ request - GPT 5.6 Luna — 1,000 input, 50,000 cached, 220 output tokens ต่อ request - Kimi K3 — 1,050 input, 76,500 cached, 300 output tokens ต่อ request @@ -141,7 +141,8 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | Model | Input | Output | Cached Read | Cached Write | Usage | | --------------------------------------- | ------ | ------ | ----------- | ------------ | ----- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -212,7 +213,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | Model | Model ID | Endpoint | AI SDK Package | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -255,7 +256,7 @@ https://opencode.ai/zen/go/v1/models | โมเดล | การฝึกโมเดล | การเก็บรักษาข้อมูล | | ---------------------------- | ----------- | ------------------ | -| Grok 4.5 | ไม่นำไปใช้ | 30 วัน | +| Grok 4.6 | ไม่นำไปใช้ | 30 วัน | | GPT 5.6 Luna | ไม่นำไปใช้ | 30 วัน | | GLM-5.3 | ไม่นำไปใช้ | 0 วัน | | GLM-5.2 | ไม่นำไปใช้ | 0 วัน | @@ -279,7 +280,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | ไม่นำไปใช้ | 0 วัน | | Ox Alpha Free | ไม่นำไปใช้ | 0 วัน | -- **Grok 4.5:** ZDR ปิดใช้งานฟีเจอร์ API สำคัญที่ต้องอาศัยข้อมูลที่จัดเก็บไว้ ซึ่งรวมถึง Responses API แบบมีสถานะ, Files and Collections และ Batch API [ดูข้อมูลเพิ่มเติม](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr) +- **Grok 4.6:** ZDR ปิดใช้งานฟีเจอร์ API สำคัญที่ต้องอาศัยข้อมูลที่จัดเก็บไว้ ซึ่งรวมถึง Responses API แบบมีสถานะ, Files and Collections และ Batch API [ดูข้อมูลเพิ่มเติม](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr) - **GPT 5.6 Luna:** ระบบจะสร้างบันทึกการตรวจสอบการใช้งานในทางที่ผิดสำหรับการใช้งานฟีเจอร์ API ทั้งหมด และเก็บรักษาไว้นานสูงสุด 30 วัน [ดูข้อมูลเพิ่มเติม](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring) - **Muse Spark 1.2 Contributor:** ราคาของ token ลดลงอย่างมาก โดยแลกกับการอนุญาตให้นำพรอมต์และผลลัพธ์ที่สร้างขึ้นของคุณไปใช้ฝึกโมเดล Meta ในอนาคต การให้บริการจำกัดเฉพาะภูมิภาคที่ได้รับอนุญาตตาม[นโยบายการใช้งานตามพื้นที่ทางภูมิศาสตร์](https://ai.developer.meta.com/legal/geographic-use-policy)ของ Meta [ดูข้อมูลเพิ่มเติม](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier) - **DeepSeek V4 Flash:** ข้อตกลง ZDR จะต่ออายุทุกเดือน ข้อตกลงปัจจุบันมีผลใช้ถึงวันที่ 31 สิงหาคม 2026 diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx index 764cfc0d407e..85f228285f52 100644 --- a/packages/web/src/content/docs/tr/go.mdx +++ b/packages/web/src/content/docs/tr/go.mdx @@ -49,7 +49,7 @@ Her çalışma alanından yalnızca bir üye OpenCode Go'ya abone olabilir. Mevcut model listesi şunları içerir: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -91,7 +91,7 @@ Aşağıdaki tablo, tipik Go kullanım modellerine dayalı tahmini bir istek say | Model | 5 saatte bir istek | haftalık istek | aylık istek | | ---------------------------- | ------------------ | -------------- | ----------- | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -117,7 +117,7 @@ Aşağıdaki tablo, tipik Go kullanım modellerine dayalı tahmini bir istek say Tahminler, gözlemlenen istek modellerine dayanır: -- Grok 4.5 — İstek başına 1.100 girdi, 71.500 önbelleğe alınmış, 220 çıktı token'ı +- Grok 4.6 — İstek başına 390 girdi, 32.500 önbelleğe alınmış, 120 çıktı token'ı - GLM-5.3/5.2/5.1 — İstek başına 700 girdi, 52.000 önbelleğe alınmış, 150 çıktı token'ı - GPT 5.6 Luna — İstek başına 1.000 girdi, 50.000 önbelleğe alınmış, 220 çıktı token'ı - Kimi K3 — İstek başına 1.050 girdi, 76.500 önbelleğe alınmış, 300 çıktı token'ı @@ -141,7 +141,8 @@ Tahminler ayrıca 1M token başına aşağıdaki fiyatlara ve her modelle birlik | Model | Input | Output | Cached Read | Cached Write | Kullanım | | --------------------------------------- | ------ | ------ | ----------- | ------------ | -------- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -212,7 +213,7 @@ Go modellerine aşağıdaki API uç noktaları aracılığıyla da erişebilirsi | Model | Model ID | Uç Nokta | AI SDK Paketi | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -255,7 +256,7 @@ https://opencode.ai/zen/go/v1/models | Model | Model eğitimi | Veri saklama | | ---------------------------- | ------------- | ------------ | -| Grok 4.5 | Kullanılmaz | 30 gün | +| Grok 4.6 | Kullanılmaz | 30 gün | | GPT 5.6 Luna | Kullanılmaz | 30 gün | | GLM-5.3 | Kullanılmaz | 0 gün | | GLM-5.2 | Kullanılmaz | 0 gün | @@ -279,7 +280,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | Kullanılmaz | 0 gün | | Ox Alpha Free | Kullanılmaz | 0 gün | -- **Grok 4.5:** ZDR, durum bilgisi tutan Responses API, Files and Collections ve Batch API dahil olmak üzere saklanan verilere bağlı önemli API özelliklerini devre dışı bırakır. [Daha fazla bilgi](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). +- **Grok 4.6:** ZDR, durum bilgisi tutan Responses API, Files and Collections ve Batch API dahil olmak üzere saklanan verilere bağlı önemli API özelliklerini devre dışı bırakır. [Daha fazla bilgi](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Tüm API özelliklerinin kullanımı için kötüye kullanım izleme günlükleri oluşturulur ve 30 güne kadar saklanır. [Daha fazla bilgi](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). - **Muse Spark 1.2 Contributor:** İstemlerinizi ve tamamlamalarınızı gelecekteki Meta modellerini eğitmek için kullanma izni karşılığında büyük ölçüde indirimli token fiyatları. Kullanılabilirlik, Meta'nın [Coğrafi Kullanım Politikası](https://ai.developer.meta.com/legal/geographic-use-policy) kapsamında izin verilen bölgelerle sınırlıdır. [Daha fazla bilgi](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** ZDR anlaşması aylık olarak yenilenir. Mevcut anlaşma 31 Ağustos 2026 tarihine kadar geçerlidir. diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx index c59d283804f9..4efd9c1c2204 100644 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ b/packages/web/src/content/docs/zh-cn/go.mdx @@ -49,7 +49,7 @@ OpenCode Go 的工作方式与 OpenCode 中的其他提供商一样。 当前支持的模型列表包括: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -91,7 +91,7 @@ OpenCode Go 包含以下限制: | Model | 每 5 小时请求数 | 每周请求数 | 每月请求数 | | ---------------------------- | --------------- | ---------- | ---------- | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -117,7 +117,7 @@ OpenCode Go 包含以下限制: 预估值基于观察到的请求模式: -- Grok 4.5 — 每次请求 1,100 个输入 token,71,500 个缓存 token,220 个输出 token +- Grok 4.6 — 每次请求 390 个输入 token,32,500 个缓存 token,120 个输出 token - GLM-5.3/5.2/5.1 — 每次请求 700 个输入 token,52,000 个缓存 token,150 个输出 token - GPT 5.6 Luna — 每次请求 1,000 个输入 token,50,000 个缓存 token,220 个输出 token - Kimi K3 — 每次请求 1,050 个输入 token,76,500 个缓存 token,300 个输出 token @@ -141,7 +141,8 @@ OpenCode Go 包含以下限制: | 模型 | 输入 | 输出 | 缓存读取 | 缓存写入 | 使用额度 | | --------------------------------------- | ------ | ------ | --------- | -------- | -------- | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -212,7 +213,7 @@ OpenCode Go 包含以下限制: | 模型 | 模型 ID | 端点 | AI SDK 包 | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -255,7 +256,7 @@ https://opencode.ai/zen/go/v1/models | 模型 | 模型训练 | 数据留存 | | ---------------------------- | -------- | -------- | -| Grok 4.5 | 不使用 | 30 天 | +| Grok 4.6 | 不使用 | 30 天 | | GPT 5.6 Luna | 不使用 | 30 天 | | GLM-5.3 | 不使用 | 0 天 | | GLM-5.2 | 不使用 | 0 天 | @@ -279,7 +280,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | 不使用 | 0 天 | | Ox Alpha Free | 不使用 | 0 天 | -- **Grok 4.5:** ZDR 会禁用依赖所存储数据的重要 API 功能,包括有状态的 Responses API、Files and Collections 和 Batch API。[了解更多](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 +- **Grok 4.6:** ZDR 会禁用依赖所存储数据的重要 API 功能,包括有状态的 Responses API、Files and Collections 和 Batch API。[了解更多](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 - **GPT 5.6 Luna:** 所有 API 功能的使用都会生成滥用监控日志,并最多保留 30 天。[了解更多](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring)。 - **Muse Spark 1.2 Contributor:** 以允许使用你的提示词和补全结果训练未来的 Meta 模型为交换,token 价格可获得大幅折扣。仅在 Meta 的[地理使用政策](https://ai.developer.meta.com/legal/geographic-use-policy)允许的地区提供。[了解更多](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 - **DeepSeek V4 Flash:** ZDR 协议每月续签。当前协议有效期至 2026 年 8 月 31 日。 diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx index db3d06c79356..630b4e9be76c 100644 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ b/packages/web/src/content/docs/zh-tw/go.mdx @@ -49,7 +49,7 @@ OpenCode Go 的運作方式與 OpenCode 中的任何其他供應商相同。 目前的模型清單包括: -- **Grok 4.5** +- **Grok 4.6** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -91,7 +91,7 @@ OpenCode Go 包含以下限制: | Model | 每 5 小時請求數 | 每週請求數 | 每月請求數 | | ---------------------------- | --------------- | ---------- | ---------- | -| Grok 4.5 | 120 | 300 | 600 | +| Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | @@ -117,7 +117,7 @@ OpenCode Go 包含以下限制: 這些預估值是基於觀察到的請求模式: -- Grok 4.5 — 每次請求 1,100 個輸入 token、71,500 個快取 token、220 個輸出 token +- Grok 4.6 — 每次請求 390 個輸入 token、32,500 個快取 token、120 個輸出 token - GLM-5.3/5.2/5.1 — 每次請求 700 個輸入 token、52,000 個快取 token、150 個輸出 token - GPT 5.6 Luna — 每次請求 1,000 個輸入 token、50,000 個快取 token、220 個輸出 token - Kimi K3 — 每次請求 1,050 個輸入 token、76,500 個快取 token、300 個輸出 token @@ -141,7 +141,8 @@ OpenCode Go 包含以下限制: | 模型 | 輸入 | 輸出 | 快取讀取 | 快取寫入 | 使用量 | | --------------------------------------- | ------ | ------ | --------- | -------- | ------ | -| Grok 4.5 | $2.00 | $6.00 | $0.30 | - | $15 | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | @@ -212,7 +213,7 @@ OpenCode Go 包含以下限制: | 模型 | 模型 ID | 端點 | AI SDK 套件 | | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | -| Grok 4.5 | grok-4.5 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -255,7 +256,7 @@ https://opencode.ai/zen/go/v1/models | 模型 | 模型訓練 | 資料保留 | | ---------------------------- | -------- | -------- | -| Grok 4.5 | 不使用 | 30 天 | +| Grok 4.6 | 不使用 | 30 天 | | GPT 5.6 Luna | 不使用 | 30 天 | | GLM-5.3 | 不使用 | 0 天 | | GLM-5.2 | 不使用 | 0 天 | @@ -279,7 +280,7 @@ https://opencode.ai/zen/go/v1/models | Hy3 | 不使用 | 0 天 | | Ox Alpha Free | 不使用 | 0 天 | -- **Grok 4.5:** ZDR 會停用依賴儲存資料的重要 API 功能,包括具狀態的 Responses API、Files and Collections 與 Batch API。[了解更多](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 +- **Grok 4.6:** ZDR 會停用依賴儲存資料的重要 API 功能,包括具狀態的 Responses API、Files and Collections 與 Batch API。[了解更多](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 - **GPT 5.6 Luna:** 所有 API 功能的使用都會產生濫用監控日誌,並保留最多 30 天。[了解更多](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring)。 - **Muse Spark 1.2 Contributor:** 以允許使用您的提示詞和生成結果來訓練未來的 Meta 模型為交換,token 價格可享大幅折扣。僅在 Meta 的[地理使用政策](https://ai.developer.meta.com/legal/geographic-use-policy)允許的地區提供。[了解更多](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 - **DeepSeek V4 Flash:** ZDR 協議每月續簽。目前的協議有效至 2026 年 8 月 31 日。 From b72b50006b24666da9f2088dbce907d6b24b6901 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 21:58:35 +0200 Subject: [PATCH 037/185] fix(core): recover legacy database migration history (#45061) Co-authored-by: neriousy <34747899+neriousy@users.noreply.github.com> --- packages/core/src/database/migration.ts | 39 ++++++++++-- .../20260410174513_workspace-name.ts | 5 +- packages/core/test/database-migration.test.ts | 63 +++++++++++++++++++ 3 files changed, 100 insertions(+), 7 deletions(-) diff --git a/packages/core/src/database/migration.ts b/packages/core/src/database/migration.ts index 90dee8acbf3b..644b22ab7a26 100644 --- a/packages/core/src/database/migration.ts +++ b/packages/core/src/database/migration.ts @@ -54,12 +54,39 @@ export function applyOnly(db: Database, input: Migration[]) { if ( yield* db.get(sql`SELECT name FROM sqlite_master WHERE type = 'table' AND name = ${"__drizzle_migrations"}`) ) { - yield* db.run(sql` - INSERT OR IGNORE INTO ${sql.identifier("migration")} (id, time_completed) - SELECT name, ${Date.now()} - FROM ${sql.identifier("__drizzle_migrations")} - WHERE name IS NOT NULL - `) + const named = (yield* db.all<{ name: string }>( + sql`SELECT name FROM pragma_table_info('__drizzle_migrations')`, + )).some((column) => column.name === "name") + + if (named) { + yield* db.run(sql` + INSERT OR IGNORE INTO ${sql.identifier("migration")} (id, time_completed) + SELECT name, ${Date.now()} + FROM ${sql.identifier("__drizzle_migrations")} + WHERE name IS NOT NULL + `) + } + + if (!named) { + const entries = yield* db.all<{ created_at: number; prefix: string | null }>(sql` + SELECT created_at, strftime('%Y%m%d%H%M%S', created_at / 1000, 'unixepoch') AS prefix + FROM ${sql.identifier("__drizzle_migrations")} + WHERE created_at IS NOT NULL + `) + + for (const entry of entries) { + const migration = input.find((item) => item.id.startsWith(`${entry.prefix}_`)) + if (!migration) { + return yield* Effect.die( + new Error(`Legacy migration timestamp ${entry.created_at} does not match any known migration`), + ) + } + yield* db.run(sql` + INSERT OR IGNORE INTO ${sql.identifier("migration")} (id, time_completed) + VALUES (${migration.id}, ${Date.now()}) + `) + } + } completed = new Set( (yield* db.all<{ id: string }>(sql`SELECT id FROM ${sql.identifier("migration")}`)).map((row) => row.id), ) diff --git a/packages/core/src/database/migration/20260410174513_workspace-name.ts b/packages/core/src/database/migration/20260410174513_workspace-name.ts index 18483e1cf089..8a8557ec7aa1 100644 --- a/packages/core/src/database/migration/20260410174513_workspace-name.ts +++ b/packages/core/src/database/migration/20260410174513_workspace-name.ts @@ -5,6 +5,9 @@ export default { id: "20260410174513_workspace-name", up(tx) { return Effect.gen(function* () { + const columns = yield* tx.all<{ name: string }>(`PRAGMA table_info(\`workspace\`)`) + const name = columns.some((column) => column.name === "name") ? "`name`" : "''" + yield* tx.run(`PRAGMA foreign_keys=OFF;`) yield* tx.run(` CREATE TABLE \`__new_workspace\` ( @@ -19,7 +22,7 @@ export default { ); `) yield* tx.run( - `INSERT INTO \`__new_workspace\`(\`id\`, \`type\`, \`branch\`, \`name\`, \`directory\`, \`extra\`, \`project_id\`) SELECT \`id\`, \`type\`, \`branch\`, \`name\`, \`directory\`, \`extra\`, \`project_id\` FROM \`workspace\`;`, + `INSERT INTO \`__new_workspace\`(\`id\`, \`type\`, \`branch\`, \`name\`, \`directory\`, \`extra\`, \`project_id\`) SELECT \`id\`, \`type\`, \`branch\`, ${name}, \`directory\`, \`extra\`, \`project_id\` FROM \`workspace\`;`, ) yield* tx.run(`DROP TABLE \`workspace\`;`) yield* tx.run(`ALTER TABLE \`__new_workspace\` RENAME TO \`workspace\`;`) diff --git a/packages/core/test/database-migration.test.ts b/packages/core/test/database-migration.test.ts index b381cc7418a3..464ce2695a76 100644 --- a/packages/core/test/database-migration.test.ts +++ b/packages/core/test/database-migration.test.ts @@ -8,6 +8,7 @@ import { Effect, Layer } from "effect" import { eq, inArray, sql } from "drizzle-orm" import { DatabaseMigration } from "@opencode-ai/core/database/migration" import { migrations } from "@opencode-ai/core/database/migration.gen" +import workspaceNameMigration from "@opencode-ai/core/database/migration/20260410174513_workspace-name" import sessionUsageMigration from "@opencode-ai/core/database/migration/20260510033149_session_usage" import normalizeStoragePathsMigration from "@opencode-ai/core/database/migration/20260601010001_normalize_storage_paths" import sessionMessageProjectionOrderMigration from "@opencode-ai/core/database/migration/20260603040000_session_message_projection_order" @@ -38,6 +39,68 @@ const run = (effect: Effect.Effect) => const makeDb = EffectDrizzleSqlite.makeWithDefaults() describe("DatabaseMigration", () => { + test("defaults missing workspace names while preserving legacy workspace data", async () => { + await run( + Effect.gen(function* () { + const db = yield* makeDb + yield* db.run(sql` + CREATE TABLE workspace ( + id text PRIMARY KEY, + type text NOT NULL, + branch text, + directory text, + extra text, + project_id text NOT NULL + ) + `) + yield* db.run(sql` + INSERT INTO workspace (id, type, branch, directory, extra, project_id) + VALUES ('wrk_legacy', 'remote', 'main', '/repo', '{}', 'proj_legacy') + `) + + yield* DatabaseMigration.applyOnly(db, [workspaceNameMigration]) + + expect(yield* db.get(sql`SELECT id, name, branch, directory, extra FROM workspace`)).toEqual({ + id: "wrk_legacy", + name: "", + branch: "main", + directory: "/repo", + extra: "{}", + }) + }), + ) + }) + + test("imports unnamed legacy Drizzle journal entries by their actual migration timestamps", async () => { + await run( + Effect.gen(function* () { + const db = yield* makeDb + yield* db.run(sql`CREATE TABLE __drizzle_migrations (id integer PRIMARY KEY, hash text, created_at integer)`) + yield* db.run(sql` + INSERT INTO __drizzle_migrations (hash, created_at) + VALUES ('', ${Date.UTC(2026, 3, 10, 17, 45, 13)}) + `) + + yield* DatabaseMigration.applyOnly(db, [workspaceNameMigration]) + + expect(yield* db.all(sql`SELECT id FROM migration`)).toEqual([{ id: "20260410174513_workspace-name" }]) + }), + ) + }) + + test("rejects unknown legacy Drizzle journal timestamps instead of guessing completed migrations", async () => { + await expect( + run( + Effect.gen(function* () { + const db = yield* makeDb + yield* db.run(sql`CREATE TABLE __drizzle_migrations (id integer PRIMARY KEY, hash text, created_at integer)`) + yield* db.run(sql`INSERT INTO __drizzle_migrations (hash, created_at) VALUES ('', 1234567890000)`) + yield* DatabaseMigration.applyOnly(db, [workspaceNameMigration]) + }), + ), + ).rejects.toThrow("does not match any known migration") + }) + test("serializes concurrent embedded initialization for one database path", async () => { await using tmp = await tmpdir() const filename = path.join(tmp.path, "embedded.sqlite") From fd9bd448a2e68990e7aed3495e5590cecb934bfb Mon Sep 17 00:00:00 2001 From: Ravitez Dondeti Date: Tue, 25 Aug 2026 19:57:17 -0500 Subject: [PATCH 038/185] docs: mention Exa and Parallel as web search backends (#38395) --- packages/web/src/content/docs/cli.mdx | 1 + packages/web/src/content/docs/tools.mdx | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/web/src/content/docs/cli.mdx b/packages/web/src/content/docs/cli.mdx index 94d9ba3c75d4..4e4fea2b46ac 100644 --- a/packages/web/src/content/docs/cli.mdx +++ b/packages/web/src/content/docs/cli.mdx @@ -701,6 +701,7 @@ OpenCode can be configured using environment variables. | `OPENCODE_FAKE_VCS` | string | Fake VCS provider for testing purposes | | `OPENCODE_CLIENT` | string | Client identifier (defaults to `cli`) | | `OPENCODE_ENABLE_EXA` | boolean | Enable Exa web search tools | +| `OPENCODE_ENABLE_PARALLEL` | boolean | Enable Parallel web search tools | | `OPENCODE_SERVER_PASSWORD` | string | Enable basic auth for `serve`/`web` | | `OPENCODE_SERVER_USERNAME` | string | Override basic auth username (default `opencode`) | | `OPENCODE_MODELS_URL` | string | Custom URL for fetching models configuration | diff --git a/packages/web/src/content/docs/tools.mdx b/packages/web/src/content/docs/tools.mdx index 9989b4675646..0f1085b053f4 100644 --- a/packages/web/src/content/docs/tools.mdx +++ b/packages/web/src/content/docs/tools.mdx @@ -257,12 +257,14 @@ Allows the LLM to fetch and read web pages. Useful for looking up documentation Search the web for information. :::note -This tool is only available when using the OpenCode or OpenCode Go provider, or when the `OPENCODE_ENABLE_EXA` environment variable is set to any truthy value (e.g., `true` or `1`). +This tool is only available when using the OpenCode or OpenCode Go provider, or when either the `OPENCODE_ENABLE_EXA` or `OPENCODE_ENABLE_PARALLEL` environment variable is set to any truthy value (e.g., `true` or `1`). To enable when launching OpenCode: ```bash OPENCODE_ENABLE_EXA=1 opencode +# or +OPENCODE_ENABLE_PARALLEL=1 opencode ``` ::: @@ -276,9 +278,9 @@ OPENCODE_ENABLE_EXA=1 opencode } ``` -Performs web searches using Exa AI to find relevant information online. Useful for researching topics, finding current events, or gathering information beyond the training data cutoff. +Performs web searches using Exa or Parallel to find relevant information online. Useful for researching topics, finding current events, or gathering information beyond the training data cutoff. -No API key is required — the tool connects directly to Exa AI's hosted MCP service without authentication. +No API key is required — the tool connects directly to the backend's hosted MCP service without authentication. :::tip Use `websearch` when you need to find information (discovery), and `webfetch` when you need to retrieve content from a specific URL (retrieval). From 2564a4f17251b825f0fe3cd80274f03bd7f0d23a Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 26 Aug 2026 02:31:32 -0400 Subject: [PATCH 039/185] remove map --- packages/stats/app/src/i18n.ts | 3 +- packages/stats/app/src/i18n/ar.ts | 1 - packages/stats/app/src/i18n/br.ts | 1 - packages/stats/app/src/i18n/da.ts | 1 - packages/stats/app/src/i18n/de.ts | 1 - packages/stats/app/src/i18n/es.ts | 1 - packages/stats/app/src/i18n/fr.ts | 1 - packages/stats/app/src/i18n/it.ts | 1 - packages/stats/app/src/i18n/ja.ts | 1 - packages/stats/app/src/i18n/ko.ts | 1 - packages/stats/app/src/i18n/no.ts | 1 - packages/stats/app/src/i18n/pl.ts | 1 - packages/stats/app/src/i18n/ru.ts | 1 - packages/stats/app/src/i18n/th.ts | 1 - packages/stats/app/src/i18n/tr.ts | 1 - packages/stats/app/src/i18n/uk.ts | 1 - packages/stats/app/src/i18n/zh.ts | 1 - packages/stats/app/src/i18n/zht.ts | 1 - packages/stats/app/src/routes/index.tsx | 124 +----------------- .../stats/app/src/routes/section-heading.tsx | 14 +- 20 files changed, 13 insertions(+), 145 deletions(-) diff --git a/packages/stats/app/src/i18n.ts b/packages/stats/app/src/i18n.ts index 1ba4f0298a68..b8e5d7335a77 100644 --- a/packages/stats/app/src/i18n.ts +++ b/packages/stats/app/src/i18n.ts @@ -126,8 +126,7 @@ const en = { "home.noMarketDescription": "No model rows matched this range.", "home.marketChart": "Market share by model author", "home.noData": "No data", - "home.geoTitle": "Geo Breakdown", - "home.geoDescription": "Tokens used by country.", + "home.geoTitle": "Geographic Breakdown", "home.noGeoTitle": "No geo data", "home.noGeoDescription": "No geo rows matched this range.", "home.worldMap": "World map of token usage by country", diff --git a/packages/stats/app/src/i18n/ar.ts b/packages/stats/app/src/i18n/ar.ts index de9bd48f327c..733a789bf538 100644 --- a/packages/stats/app/src/i18n/ar.ts +++ b/packages/stats/app/src/i18n/ar.ts @@ -108,7 +108,6 @@ export const dict = { "home.marketChart": "حصة السوق حسب مؤلف النموذج", "home.noData": "لا توجد بيانات", "home.geoTitle": "التوزيع الجغرافي", - "home.geoDescription": "الرموز المستخدمة حسب البلد.", "home.noGeoTitle": "لا توجد بيانات جغرافية", "home.noGeoDescription": "لم تطابق أي صفوف جغرافية هذا النطاق.", "home.worldMap": "خريطة عالمية لاستخدام الرموز حسب البلد", diff --git a/packages/stats/app/src/i18n/br.ts b/packages/stats/app/src/i18n/br.ts index d129f45578cb..7c0dec74f88b 100644 --- a/packages/stats/app/src/i18n/br.ts +++ b/packages/stats/app/src/i18n/br.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Participação de mercado por autor do modelo", "home.noData": "Sem dados", "home.geoTitle": "Distribuição geográfica", - "home.geoDescription": "Tokens usados por país.", "home.noGeoTitle": "Sem dados geográficos", "home.noGeoDescription": "Nenhuma linha geográfica correspondeu a este intervalo.", "home.worldMap": "Mapa-múndi do uso de tokens por país", diff --git a/packages/stats/app/src/i18n/da.ts b/packages/stats/app/src/i18n/da.ts index 58298bbb2a84..c564ae33b20d 100644 --- a/packages/stats/app/src/i18n/da.ts +++ b/packages/stats/app/src/i18n/da.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Markedsandel efter modelforfatter", "home.noData": "Ingen data", "home.geoTitle": "Geografisk opdeling", - "home.geoDescription": "Tokens brugt efter land.", "home.noGeoTitle": "Ingen geodata", "home.noGeoDescription": "Ingen georækker matchede dette interval.", "home.worldMap": "Verdenskort over tokenbrug efter land", diff --git a/packages/stats/app/src/i18n/de.ts b/packages/stats/app/src/i18n/de.ts index 44e83026c3b5..71d79a4c2635 100644 --- a/packages/stats/app/src/i18n/de.ts +++ b/packages/stats/app/src/i18n/de.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Marktanteil nach Modellautor", "home.noData": "Keine Daten", "home.geoTitle": "Geografische Aufschlüsselung", - "home.geoDescription": "Nach Land verwendete Tokens.", "home.noGeoTitle": "Keine Geodaten", "home.noGeoDescription": "Keine Geozeilen passten zu diesem Zeitraum.", "home.worldMap": "Weltkarte der Tokennutzung nach Land", diff --git a/packages/stats/app/src/i18n/es.ts b/packages/stats/app/src/i18n/es.ts index 09d90d79acca..a26d83e23229 100644 --- a/packages/stats/app/src/i18n/es.ts +++ b/packages/stats/app/src/i18n/es.ts @@ -108,7 +108,6 @@ export const dict = { "home.marketChart": "Cuota de mercado por autor del modelo", "home.noData": "Sin datos", "home.geoTitle": "Desglose geográfico", - "home.geoDescription": "Tokens usados por país.", "home.noGeoTitle": "Sin datos geográficos", "home.noGeoDescription": "Ninguna fila geográfica coincidió con este rango.", "home.worldMap": "Mapa mundial del uso de tokens por país", diff --git a/packages/stats/app/src/i18n/fr.ts b/packages/stats/app/src/i18n/fr.ts index bb87d056644a..64b0d561f26b 100644 --- a/packages/stats/app/src/i18n/fr.ts +++ b/packages/stats/app/src/i18n/fr.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Part de marché par auteur de modèle", "home.noData": "Aucune donnée", "home.geoTitle": "Répartition géographique", - "home.geoDescription": "Tokens utilisés par pays.", "home.noGeoTitle": "Aucune donnée géographique", "home.noGeoDescription": "Aucune ligne géographique ne correspondait à cette période.", "home.worldMap": "Carte mondiale de l'utilisation des tokens par pays", diff --git a/packages/stats/app/src/i18n/it.ts b/packages/stats/app/src/i18n/it.ts index b815f1681bfb..dc9a25c66b29 100644 --- a/packages/stats/app/src/i18n/it.ts +++ b/packages/stats/app/src/i18n/it.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Quota di mercato per autore del modello", "home.noData": "Nessun dato", "home.geoTitle": "Ripartizione geografica", - "home.geoDescription": "Token usati per paese.", "home.noGeoTitle": "Nessun dato geografico", "home.noGeoDescription": "Nessuna riga geografica corrispondeva a questo intervallo.", "home.worldMap": "Mappa mondiale dell'utilizzo dei token per paese", diff --git a/packages/stats/app/src/i18n/ja.ts b/packages/stats/app/src/i18n/ja.ts index 57db5511abf3..707cdea91bff 100644 --- a/packages/stats/app/src/i18n/ja.ts +++ b/packages/stats/app/src/i18n/ja.ts @@ -111,7 +111,6 @@ export const dict = { "home.marketChart": "モデル作者別マーケットシェア", "home.noData": "データなし", "home.geoTitle": "地域別内訳", - "home.geoDescription": "国別のトークン使用量。", "home.noGeoTitle": "地域データがありません", "home.noGeoDescription": "この期間に一致する地域行はありません。", "home.worldMap": "国別トークン使用量の世界地図", diff --git a/packages/stats/app/src/i18n/ko.ts b/packages/stats/app/src/i18n/ko.ts index 92003e0221db..693123fd88c5 100644 --- a/packages/stats/app/src/i18n/ko.ts +++ b/packages/stats/app/src/i18n/ko.ts @@ -111,7 +111,6 @@ export const dict = { "home.marketChart": "모델 작성자별 시장 점유율", "home.noData": "데이터 없음", "home.geoTitle": "지역별 분포", - "home.geoDescription": "국가별 사용 토큰입니다.", "home.noGeoTitle": "지역 데이터 없음", "home.noGeoDescription": "이 범위에 맞는 지역 행이 없습니다.", "home.worldMap": "국가별 토큰 사용량 세계 지도", diff --git a/packages/stats/app/src/i18n/no.ts b/packages/stats/app/src/i18n/no.ts index bdc3d80e347a..54595422f948 100644 --- a/packages/stats/app/src/i18n/no.ts +++ b/packages/stats/app/src/i18n/no.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Markedsandel etter modellforfatter", "home.noData": "Ingen data", "home.geoTitle": "Geografisk fordeling", - "home.geoDescription": "Tokens brukt etter land.", "home.noGeoTitle": "Ingen geodata", "home.noGeoDescription": "Ingen georader matchet dette intervallet.", "home.worldMap": "Verdenskart over tokenbruk etter land", diff --git a/packages/stats/app/src/i18n/pl.ts b/packages/stats/app/src/i18n/pl.ts index 5bf944bcd43f..bd1e486b00a6 100644 --- a/packages/stats/app/src/i18n/pl.ts +++ b/packages/stats/app/src/i18n/pl.ts @@ -108,7 +108,6 @@ export const dict = { "home.marketChart": "Udział w rynku według autora modelu", "home.noData": "Brak danych", "home.geoTitle": "Podział geograficzny", - "home.geoDescription": "Tokeny użyte według kraju.", "home.noGeoTitle": "Brak danych geograficznych", "home.noGeoDescription": "Żadne wiersze geograficzne nie pasowały do tego zakresu.", "home.worldMap": "Mapa świata użycia tokenów według kraju", diff --git a/packages/stats/app/src/i18n/ru.ts b/packages/stats/app/src/i18n/ru.ts index a1422c8f7476..984cd36f2b53 100644 --- a/packages/stats/app/src/i18n/ru.ts +++ b/packages/stats/app/src/i18n/ru.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Доля рынка по автору модели", "home.noData": "Нет данных", "home.geoTitle": "Географический разрез", - "home.geoDescription": "Токены, использованные по странам.", "home.noGeoTitle": "Нет геоданных", "home.noGeoDescription": "Нет географических строк для этого диапазона.", "home.worldMap": "Карта мира использования токенов по странам", diff --git a/packages/stats/app/src/i18n/th.ts b/packages/stats/app/src/i18n/th.ts index bfa93338487f..00efb26c6129 100644 --- a/packages/stats/app/src/i18n/th.ts +++ b/packages/stats/app/src/i18n/th.ts @@ -110,7 +110,6 @@ export const dict = { "home.marketChart": "ส่วนแบ่งตลาดตามผู้สร้างโมเดล", "home.noData": "ไม่มีข้อมูล", "home.geoTitle": "แยกตามภูมิศาสตร์", - "home.geoDescription": "token ที่ใช้แยกตามประเทศ", "home.noGeoTitle": "ไม่มีข้อมูลภูมิศาสตร์", "home.noGeoDescription": "ไม่มีแถวภูมิศาสตร์ที่ตรงกับช่วงเวลานี้", "home.worldMap": "แผนที่โลกของการใช้ token แยกตามประเทศ", diff --git a/packages/stats/app/src/i18n/tr.ts b/packages/stats/app/src/i18n/tr.ts index baa992f23397..e4f8d34c1748 100644 --- a/packages/stats/app/src/i18n/tr.ts +++ b/packages/stats/app/src/i18n/tr.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Model yazarına göre pazar payı", "home.noData": "Veri yok", "home.geoTitle": "Coğrafi Dağılım", - "home.geoDescription": "Ülkeye göre kullanılan tokenlar.", "home.noGeoTitle": "Coğrafi veri yok", "home.noGeoDescription": "Bu aralıkla eşleşen coğrafi satır yok.", "home.worldMap": "Ülkeye göre token kullanımının dünya haritası", diff --git a/packages/stats/app/src/i18n/uk.ts b/packages/stats/app/src/i18n/uk.ts index 5a6eb1c67777..e35dd34a945a 100644 --- a/packages/stats/app/src/i18n/uk.ts +++ b/packages/stats/app/src/i18n/uk.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Частка ринку за автором моделі", "home.noData": "Немає даних", "home.geoTitle": "Географічний розріз", - "home.geoDescription": "Токени, використані за країнами.", "home.noGeoTitle": "Немає геоданих", "home.noGeoDescription": "Жодні географічні рядки не відповідали цьому діапазону.", "home.worldMap": "Карта світу використання токенів за країнами", diff --git a/packages/stats/app/src/i18n/zh.ts b/packages/stats/app/src/i18n/zh.ts index 628a4b31bf98..4d2f3768bd2b 100644 --- a/packages/stats/app/src/i18n/zh.ts +++ b/packages/stats/app/src/i18n/zh.ts @@ -110,7 +110,6 @@ export const dict = { "home.marketChart": "按模型作者显示的市场份额", "home.noData": "无数据", "home.geoTitle": "地理分布", - "home.geoDescription": "按国家/地区统计的 token 使用量。", "home.noGeoTitle": "无地理数据", "home.noGeoDescription": "没有符合该时间范围的地理行。", "home.worldMap": "按国家/地区显示 token 使用量的世界地图", diff --git a/packages/stats/app/src/i18n/zht.ts b/packages/stats/app/src/i18n/zht.ts index b8de598c72e1..9545748b69a7 100644 --- a/packages/stats/app/src/i18n/zht.ts +++ b/packages/stats/app/src/i18n/zht.ts @@ -110,7 +110,6 @@ export const dict = { "home.marketChart": "按模型作者顯示的市場佔有率", "home.noData": "無數據", "home.geoTitle": "地理分布", - "home.geoDescription": "按國家/地區統計的 token 使用量。", "home.noGeoTitle": "無地理數據", "home.noGeoDescription": "沒有符合該時間範圍的地理列。", "home.worldMap": "按國家/地區顯示 token 使用量的世界地圖", diff --git a/packages/stats/app/src/routes/index.tsx b/packages/stats/app/src/routes/index.tsx index f984cb7397ce..30491c898332 100644 --- a/packages/stats/app/src/routes/index.tsx +++ b/packages/stats/app/src/routes/index.tsx @@ -21,7 +21,6 @@ import { useI18n } from "../context/i18n" import { useLanguage } from "../context/language" import { localizedUrl } from "../lib/language" import { findModelCatalogEntry, loadModelCatalog, type ModelCatalog } from "./model-catalog" -import { geoMapHeight, geoMapWidth, worldBorderPath, worldCountryMarkers, worldCountryPaths } from "./geo-map" import { SectionHeading } from "./section-heading" import { setStatsPageCacheHeaders } from "./stats-cache" import { ComparisonCardsSection, uniqueComparisonPairs, type ComparisonModelRef } from "./compare-cards" @@ -317,7 +316,7 @@ function ChartSection(props: { ) } -function SectionTitle(props: { id: string; title: string; description: string }) { +function SectionTitle(props: { id: string; title: string; description?: string }) { return } @@ -1074,20 +1073,9 @@ function MarketShareList(props: { function GeoBreakdownSection(props: { data: CountryEntry[] }) { const i18n = useI18n() - const language = useLanguage() const [activeCountry, setActiveCountry] = createSignal() - const countryById = createMemo( - () => - new Map( - props.data.flatMap((country) => { - const id = countryNumericId(country.country) - return id ? [[id, country] as const] : [] - }), - ), - ) const maxTokens = createMemo(() => Math.max(0, ...props.data.map((country) => country.tokens)) || 1) const topCountries = createMemo(() => props.data.slice(0, 15)) - const active = createMemo(() => props.data.find((country) => country.country === activeCountry()) ?? props.data[0]) return (
      - + 0} fallback={} >
      -
      - - - {(country) => ( -
      - #{String(country().rank).padStart(2, "0")} - - {formatCountryName(country().country, language.tag(language.locale()), i18n.t("home.unknown"))} - -

      - {formatGeoTokens(country().tokens)} - {formatGeoShare(country().share)} -

      -
      - )} -
      -
      - activeCountry: string | undefined - maxTokens: number - onActiveCountryChange: (country: string | undefined) => void -}) { - const i18n = useI18n() - const opacityScale = createMemo(() => scaleSqrt().domain([0, props.maxTokens]).range([0.26, 0.96]).clamp(true)) - const countryOpacity = (country: CountryEntry | undefined) => { - if (!country || country.tokens <= 0) return 0 - const opacity = opacityScale()(country.tokens) - if (props.activeCountry === country.country) return 1 - if (!props.activeCountry) return opacity - return Math.max(0.18, opacity * 0.36) - } - - return ( - - {i18n.t("home.geoMapTitle")} - - - {(country) => { - const entry = () => props.countryById.get(country.id) - return ( - - - - - {(country) => { - const entry = () => props.countryById.get(country.id) - return ( - - - ) - }} - - - - - ) -} - function GeoCountryList(props: { data: CountryEntry[] activeCountry: string | undefined diff --git a/packages/stats/app/src/routes/section-heading.tsx b/packages/stats/app/src/routes/section-heading.tsx index ea6f80c79a60..75f4b7aa33dd 100644 --- a/packages/stats/app/src/routes/section-heading.tsx +++ b/packages/stats/app/src/routes/section-heading.tsx @@ -1,7 +1,7 @@ export function SectionHeading(props: { href: string title: string - description: string + description?: string as?: "h2" | "p" slot?: string }) { @@ -12,10 +12,16 @@ export function SectionHeading(props: { - {props.title}. + {props.title} + {props.description ? "." : ""} - {" "} - {props.description} + + {props.description && ( + <> + {" "} + {props.description} + + )} ) From 3f31551fad2b04391ea2a1cc383c8788382fc2b0 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 26 Aug 2026 03:31:48 -0400 Subject: [PATCH 040/185] fix map inaccuracy --- bun.lock | 23 ---- packages/stats/app/package.json | 9 +- packages/stats/app/src/i18n.ts | 3 - packages/stats/app/src/i18n/ar.ts | 3 - packages/stats/app/src/i18n/br.ts | 3 - packages/stats/app/src/i18n/da.ts | 3 - packages/stats/app/src/i18n/de.ts | 3 - packages/stats/app/src/i18n/es.ts | 3 - packages/stats/app/src/i18n/fr.ts | 3 - packages/stats/app/src/i18n/it.ts | 3 - packages/stats/app/src/i18n/ja.ts | 3 - packages/stats/app/src/i18n/ko.ts | 3 - packages/stats/app/src/i18n/no.ts | 3 - packages/stats/app/src/i18n/pl.ts | 3 - packages/stats/app/src/i18n/ru.ts | 3 - packages/stats/app/src/i18n/th.ts | 3 - packages/stats/app/src/i18n/tr.ts | 3 - packages/stats/app/src/i18n/uk.ts | 3 - packages/stats/app/src/i18n/zh.ts | 3 - packages/stats/app/src/i18n/zht.ts | 3 - .../stats/app/src/routes/[lab]/[model].tsx | 118 ----------------- packages/stats/app/src/routes/geo-map.ts | 120 ----------------- packages/stats/app/src/routes/index.css | 122 ------------------ 23 files changed, 1 insertion(+), 445 deletions(-) delete mode 100644 packages/stats/app/src/routes/geo-map.ts diff --git a/bun.lock b/bun.lock index 7991ff65c1db..6a066555bb66 100644 --- a/bun.lock +++ b/bun.lock @@ -858,25 +858,18 @@ "@solidjs/meta": "catalog:", "@solidjs/router": "catalog:", "@solidjs/start": "catalog:", - "d3-geo": "3.1.1", "d3-scale": "4.0.2", "effect": "catalog:", "i18n-iso-countries": "7.14.0", "nitro": "3.0.1-alpha.1", "solid-js": "catalog:", "sst": "catalog:", - "topojson-client": "3.1.0", "vite": "catalog:", - "world-atlas": "2.0.2", }, "devDependencies": { "@cloudflare/workers-types": "catalog:", "@types/bun": "catalog:", - "@types/d3-geo": "3.1.0", "@types/d3-scale": "4.0.9", - "@types/geojson": "7946.0.16", - "@types/topojson-client": "3.1.5", - "@types/topojson-specification": "1.0.5", "@typescript/native-preview": "catalog:", "typescript": "catalog:", }, @@ -2843,8 +2836,6 @@ "@types/cross-spawn": ["@types/cross-spawn@6.0.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA=="], - "@types/d3-geo": ["@types/d3-geo@3.1.0", "", { "dependencies": { "@types/geojson": "*" } }, "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ=="], - "@types/d3-scale": ["@types/d3-scale@4.0.9", "", { "dependencies": { "@types/d3-time": "*" } }, "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw=="], "@types/d3-time": ["@types/d3-time@3.0.4", "", {}, "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g=="], @@ -2865,8 +2856,6 @@ "@types/fs-extra": ["@types/fs-extra@9.0.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA=="], - "@types/geojson": ["@types/geojson@7946.0.16", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="], - "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], "@types/http-cache-semantics": ["@types/http-cache-semantics@4.2.0", "", {}, "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q=="], @@ -2945,10 +2934,6 @@ "@types/ssri": ["@types/ssri@7.1.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-odD/56S3B51liILSk5aXJlnYt99S6Rt9EFDDqGtJM26rKHApHcwyU/UoYHrzKkdkHMAIquGWCuHtQTbes+FRQw=="], - "@types/topojson-client": ["@types/topojson-client@3.1.5", "", { "dependencies": { "@types/geojson": "*", "@types/topojson-specification": "*" } }, "sha512-C79rySTyPxnQNNguTZNI1Ct4D7IXgvyAs3p9HPecnl6mNrJ5+UhvGNYcZfpROYV2lMHI48kJPxwR+F9C6c7nmw=="], - - "@types/topojson-specification": ["@types/topojson-specification@1.0.5", "", { "dependencies": { "@types/geojson": "*" } }, "sha512-C7KvcQh+C2nr6Y2Ub4YfgvWvWCgP2nOQMtfhlnwsRL4pYmmwzBS7HclGiS87eQfDOU/DLQpX6GEscviaz4yLIQ=="], - "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], "@types/tsscmp": ["@types/tsscmp@1.0.2", "", {}, "sha512-cy7BRSU8GYYgxjcx0Py+8lo5MthuDhlyu076KUcYzVNXL23luYgRHkMG2fIFEc6neckeh/ntP82mw+U4QjZq+g=="], @@ -3437,8 +3422,6 @@ "d3-format": ["d3-format@3.1.2", "", {}, "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg=="], - "d3-geo": ["d3-geo@3.1.1", "", { "dependencies": { "d3-array": "2.5.0 - 3" } }, "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q=="], - "d3-interpolate": ["d3-interpolate@3.0.1", "", { "dependencies": { "d3-color": "1 - 3" } }, "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g=="], "d3-scale": ["d3-scale@4.0.2", "", { "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", "d3-interpolate": "1.2.0 - 3", "d3-time": "2.1.1 - 3", "d3-time-format": "2 - 4" } }, "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ=="], @@ -5317,8 +5300,6 @@ "toolbeam-docs-theme": ["toolbeam-docs-theme@0.4.8", "", { "peerDependencies": { "@astrojs/starlight": "^0.34.3", "astro": "^5.7.13" } }, "sha512-b+5ynEFp4Woe5a22hzNQm42lD23t13ZMihVxHbzjA50zdcM9aOSJTIjdJ0PDSd4/50HbBXcpHiQsz6rM4N88ww=="], - "topojson-client": ["topojson-client@3.1.0", "", { "dependencies": { "commander": "2" }, "bin": { "topo2geo": "bin/topo2geo", "topomerge": "bin/topomerge", "topoquantize": "bin/topoquantize" } }, "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw=="], - "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], "traverse": ["traverse@0.3.9", "", {}, "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ=="], @@ -5561,8 +5542,6 @@ "workerd": ["workerd@1.20251118.0", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20251118.0", "@cloudflare/workerd-darwin-arm64": "1.20251118.0", "@cloudflare/workerd-linux-64": "1.20251118.0", "@cloudflare/workerd-linux-arm64": "1.20251118.0", "@cloudflare/workerd-windows-64": "1.20251118.0" }, "bin": { "workerd": "bin/workerd" } }, "sha512-Om5ns0Lyx/LKtYI04IV0bjIrkBgoFNg0p6urzr2asekJlfP18RqFzyqMFZKf0i9Gnjtz/JfAS/Ol6tjCe5JJsQ=="], - "world-atlas": ["world-atlas@2.0.2", "", {}, "sha512-IXfV0qwlKXpckz1FhwXVwKRjiIhOnWttOskm5CtxMsjgE/MXAYRHWJqgXOpM8IkcPBoXnyTU5lFHcYa5ChG0LQ=="], - "wrangler": ["wrangler@4.50.0", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.0", "@cloudflare/unenv-preset": "2.7.11", "blake3-wasm": "2.1.5", "esbuild": "0.25.4", "miniflare": "4.20251118.1", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.24", "workerd": "1.20251118.0" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20251118.0" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-+nuZuHZxDdKmAyXOSrHlciGshCoAPiy5dM+t6mEohWm7HpXvTHmWQGUf/na9jjWlWJHCJYOWzkA1P5HBJqrIEA=="], "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], @@ -6515,8 +6494,6 @@ "tiny-async-pool/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "topojson-client/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], - "tree-sitter-bash/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="], "tw-to-css/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], diff --git a/packages/stats/app/package.json b/packages/stats/app/package.json index 1bf1f673816d..472999056493 100644 --- a/packages/stats/app/package.json +++ b/packages/stats/app/package.json @@ -19,25 +19,18 @@ "@solidjs/meta": "catalog:", "@solidjs/router": "catalog:", "@solidjs/start": "catalog:", - "d3-geo": "3.1.1", "d3-scale": "4.0.2", "effect": "catalog:", "i18n-iso-countries": "7.14.0", "nitro": "3.0.1-alpha.1", "solid-js": "catalog:", "sst": "catalog:", - "topojson-client": "3.1.0", - "vite": "catalog:", - "world-atlas": "2.0.2" + "vite": "catalog:" }, "devDependencies": { "@cloudflare/workers-types": "catalog:", "@types/bun": "catalog:", - "@types/d3-geo": "3.1.0", "@types/d3-scale": "4.0.9", - "@types/geojson": "7946.0.16", - "@types/topojson-client": "3.1.5", - "@types/topojson-specification": "1.0.5", "@typescript/native-preview": "catalog:", "typescript": "catalog:" }, diff --git a/packages/stats/app/src/i18n.ts b/packages/stats/app/src/i18n.ts index b8e5d7335a77..e846ce5089be 100644 --- a/packages/stats/app/src/i18n.ts +++ b/packages/stats/app/src/i18n.ts @@ -129,8 +129,6 @@ const en = { "home.geoTitle": "Geographic Breakdown", "home.noGeoTitle": "No geo data", "home.noGeoDescription": "No geo rows matched this range.", - "home.worldMap": "World map of token usage by country", - "home.geoMapTitle": "Geo Breakdown map", "home.unknown": "Unknown", "home.tokenCostTitle": "Token Cost", "home.tokenCostDescription": "Price per 1M tokens.", @@ -238,7 +236,6 @@ const en = { "model.geoDescription": "OpenCode model tokens used by country.", "model.noGeoTitle": "No geo data", "model.noGeoDescription": "No OpenCode geo rows matched this model.", - "model.worldMap": "World map of model token usage by country", "model.peersDescription": "Nearby models by recent OpenCode token volume.", "model.noPeersTitle": "No peers", "model.noPeersDescription": "Peer rankings appear after usage lands.", diff --git a/packages/stats/app/src/i18n/ar.ts b/packages/stats/app/src/i18n/ar.ts index 733a789bf538..1fb489117378 100644 --- a/packages/stats/app/src/i18n/ar.ts +++ b/packages/stats/app/src/i18n/ar.ts @@ -110,8 +110,6 @@ export const dict = { "home.geoTitle": "التوزيع الجغرافي", "home.noGeoTitle": "لا توجد بيانات جغرافية", "home.noGeoDescription": "لم تطابق أي صفوف جغرافية هذا النطاق.", - "home.worldMap": "خريطة عالمية لاستخدام الرموز حسب البلد", - "home.geoMapTitle": "خريطة التوزيع الجغرافي", "home.unknown": "غير معروف", "home.tokenCostTitle": "تكلفة الرموز", "home.tokenCostDescription": "السعر لكل مليون رمز.", @@ -218,7 +216,6 @@ export const dict = { "model.geoDescription": "رموز نموذج OpenCode المستخدمة حسب البلد.", "model.noGeoTitle": "لا توجد بيانات جغرافية", "model.noGeoDescription": "لم تطابق أي صفوف جغرافية في OpenCode هذا النموذج.", - "model.worldMap": "خريطة عالمية لاستخدام رموز النموذج حسب البلد", "model.peersDescription": "نماذج قريبة حسب حجم رموز OpenCode الأخير.", "model.noPeersTitle": "لا توجد نماذج مشابهة", "model.noPeersDescription": "تظهر ترتيبات النماذج المشابهة بعد وصول الاستخدام.", diff --git a/packages/stats/app/src/i18n/br.ts b/packages/stats/app/src/i18n/br.ts index 7c0dec74f88b..4ef584ce63ef 100644 --- a/packages/stats/app/src/i18n/br.ts +++ b/packages/stats/app/src/i18n/br.ts @@ -111,8 +111,6 @@ export const dict = { "home.geoTitle": "Distribuição geográfica", "home.noGeoTitle": "Sem dados geográficos", "home.noGeoDescription": "Nenhuma linha geográfica correspondeu a este intervalo.", - "home.worldMap": "Mapa-múndi do uso de tokens por país", - "home.geoMapTitle": "Mapa da distribuição geográfica", "home.unknown": "Desconhecido", "home.tokenCostTitle": "Custo de tokens", "home.tokenCostDescription": "Preço por 1 milhão de tokens.", @@ -221,7 +219,6 @@ export const dict = { "model.geoDescription": "Tokens do modelo OpenCode usados por país.", "model.noGeoTitle": "Sem dados geográficos", "model.noGeoDescription": "Nenhuma linha geográfica do OpenCode correspondeu a este modelo.", - "model.worldMap": "Mapa-múndi do uso de tokens do modelo por país", "model.peersDescription": "Modelos próximos por volume recente de tokens do OpenCode.", "model.noPeersTitle": "Sem pares", "model.noPeersDescription": "Os rankings de pares aparecem depois que o uso chega.", diff --git a/packages/stats/app/src/i18n/da.ts b/packages/stats/app/src/i18n/da.ts index c564ae33b20d..1da9eb733bbd 100644 --- a/packages/stats/app/src/i18n/da.ts +++ b/packages/stats/app/src/i18n/da.ts @@ -111,8 +111,6 @@ export const dict = { "home.geoTitle": "Geografisk opdeling", "home.noGeoTitle": "Ingen geodata", "home.noGeoDescription": "Ingen georækker matchede dette interval.", - "home.worldMap": "Verdenskort over tokenbrug efter land", - "home.geoMapTitle": "Kort over geografisk opdeling", "home.unknown": "Ukendt", "home.tokenCostTitle": "Tokenomkostning", "home.tokenCostDescription": "Pris pr. 1 mio. tokens.", @@ -219,7 +217,6 @@ export const dict = { "model.geoDescription": "OpenCode-modeltokens brugt efter land.", "model.noGeoTitle": "Ingen geodata", "model.noGeoDescription": "Ingen OpenCode-georækker matchede denne model.", - "model.worldMap": "Verdenskort over modeltokenbrug efter land", "model.peersDescription": "Nærliggende modeller efter seneste OpenCode-tokenvolumen.", "model.noPeersTitle": "Ingen lignende modeller", "model.noPeersDescription": "Ranglister over lignende modeller vises, når brug lander.", diff --git a/packages/stats/app/src/i18n/de.ts b/packages/stats/app/src/i18n/de.ts index 71d79a4c2635..21d131cade53 100644 --- a/packages/stats/app/src/i18n/de.ts +++ b/packages/stats/app/src/i18n/de.ts @@ -111,8 +111,6 @@ export const dict = { "home.geoTitle": "Geografische Aufschlüsselung", "home.noGeoTitle": "Keine Geodaten", "home.noGeoDescription": "Keine Geozeilen passten zu diesem Zeitraum.", - "home.worldMap": "Weltkarte der Tokennutzung nach Land", - "home.geoMapTitle": "Karte der geografischen Aufschlüsselung", "home.unknown": "Unbekannt", "home.tokenCostTitle": "Tokenkosten", "home.tokenCostDescription": "Preis pro 1 Mio. Tokens.", @@ -221,7 +219,6 @@ export const dict = { "model.geoDescription": "OpenCode-Modelltokens nach Land.", "model.noGeoTitle": "Keine Geodaten", "model.noGeoDescription": "Keine OpenCode-Geozeilen passten zu diesem Modell.", - "model.worldMap": "Weltkarte der Modelltokennutzung nach Land", "model.peersDescription": "Nahe Modelle nach aktuellem OpenCode-Tokenvolumen.", "model.noPeersTitle": "Keine Vergleichsmodelle", "model.noPeersDescription": "Vergleichsrankings erscheinen, nachdem Nutzung eingegangen ist.", diff --git a/packages/stats/app/src/i18n/es.ts b/packages/stats/app/src/i18n/es.ts index a26d83e23229..92988954bbf4 100644 --- a/packages/stats/app/src/i18n/es.ts +++ b/packages/stats/app/src/i18n/es.ts @@ -110,8 +110,6 @@ export const dict = { "home.geoTitle": "Desglose geográfico", "home.noGeoTitle": "Sin datos geográficos", "home.noGeoDescription": "Ninguna fila geográfica coincidió con este rango.", - "home.worldMap": "Mapa mundial del uso de tokens por país", - "home.geoMapTitle": "Mapa de desglose geográfico", "home.unknown": "Desconocido", "home.tokenCostTitle": "Coste de tokens", "home.tokenCostDescription": "Precio por 1 M de tokens.", @@ -220,7 +218,6 @@ export const dict = { "model.geoDescription": "Tokens del modelo de OpenCode usados por país.", "model.noGeoTitle": "Sin datos geográficos", "model.noGeoDescription": "Ninguna fila geográfica de OpenCode coincidió con este modelo.", - "model.worldMap": "Mapa mundial del uso de tokens del modelo por país", "model.peersDescription": "Modelos cercanos por volumen reciente de tokens de OpenCode.", "model.noPeersTitle": "Sin modelos similares", "model.noPeersDescription": "Las clasificaciones de modelos similares aparecen después de que llegue uso.", diff --git a/packages/stats/app/src/i18n/fr.ts b/packages/stats/app/src/i18n/fr.ts index 64b0d561f26b..3bd3256808be 100644 --- a/packages/stats/app/src/i18n/fr.ts +++ b/packages/stats/app/src/i18n/fr.ts @@ -111,8 +111,6 @@ export const dict = { "home.geoTitle": "Répartition géographique", "home.noGeoTitle": "Aucune donnée géographique", "home.noGeoDescription": "Aucune ligne géographique ne correspondait à cette période.", - "home.worldMap": "Carte mondiale de l'utilisation des tokens par pays", - "home.geoMapTitle": "Carte de répartition géographique", "home.unknown": "Inconnu", "home.tokenCostTitle": "Coût des tokens", "home.tokenCostDescription": "Prix par million de tokens.", @@ -222,7 +220,6 @@ export const dict = { "model.geoDescription": "Tokens du modèle OpenCode utilisés par pays.", "model.noGeoTitle": "Aucune donnée géographique", "model.noGeoDescription": "Aucune ligne géographique OpenCode ne correspondait à ce modèle.", - "model.worldMap": "Carte mondiale de l'utilisation des tokens du modèle par pays", "model.peersDescription": "Modèles proches par volume récent de tokens OpenCode.", "model.noPeersTitle": "Aucun modèle proche", "model.noPeersDescription": "Les classements de modèles proches apparaissent après l'arrivée de l'utilisation.", diff --git a/packages/stats/app/src/i18n/it.ts b/packages/stats/app/src/i18n/it.ts index dc9a25c66b29..f0ccde5013e1 100644 --- a/packages/stats/app/src/i18n/it.ts +++ b/packages/stats/app/src/i18n/it.ts @@ -111,8 +111,6 @@ export const dict = { "home.geoTitle": "Ripartizione geografica", "home.noGeoTitle": "Nessun dato geografico", "home.noGeoDescription": "Nessuna riga geografica corrispondeva a questo intervallo.", - "home.worldMap": "Mappa mondiale dell'utilizzo dei token per paese", - "home.geoMapTitle": "Mappa della ripartizione geografica", "home.unknown": "Sconosciuto", "home.tokenCostTitle": "Costo token", "home.tokenCostDescription": "Prezzo per 1 M di token.", @@ -221,7 +219,6 @@ export const dict = { "model.geoDescription": "Token del modello OpenCode usati per paese.", "model.noGeoTitle": "Nessun dato geografico", "model.noGeoDescription": "Nessuna riga geografica OpenCode corrispondeva a questo modello.", - "model.worldMap": "Mappa mondiale dell'utilizzo dei token del modello per paese", "model.peersDescription": "Modelli vicini per volume recente di token OpenCode.", "model.noPeersTitle": "Nessun modello simile", "model.noPeersDescription": "Le classifiche dei modelli simili appaiono dopo l'arrivo dell'utilizzo.", diff --git a/packages/stats/app/src/i18n/ja.ts b/packages/stats/app/src/i18n/ja.ts index 707cdea91bff..beac7cabc97f 100644 --- a/packages/stats/app/src/i18n/ja.ts +++ b/packages/stats/app/src/i18n/ja.ts @@ -113,8 +113,6 @@ export const dict = { "home.geoTitle": "地域別内訳", "home.noGeoTitle": "地域データがありません", "home.noGeoDescription": "この期間に一致する地域行はありません。", - "home.worldMap": "国別トークン使用量の世界地図", - "home.geoMapTitle": "地域別内訳マップ", "home.unknown": "不明", "home.tokenCostTitle": "トークンコスト", "home.tokenCostDescription": "100万トークンあたりの価格。", @@ -222,7 +220,6 @@ export const dict = { "model.geoDescription": "国別のOpenCodeモデルのトークン使用量。", "model.noGeoTitle": "地域データがありません", "model.noGeoDescription": "このモデルに一致するOpenCode地域行はありません。", - "model.worldMap": "国別モデル別トークン使用量の世界地図", "model.peersDescription": "最近のOpenCodeトークン量が近いモデル。", "model.noPeersTitle": "類似モデルがありません", "model.noPeersDescription": "使用量が届くと類似モデルのランキングが表示されます。", diff --git a/packages/stats/app/src/i18n/ko.ts b/packages/stats/app/src/i18n/ko.ts index 693123fd88c5..ac5293125d40 100644 --- a/packages/stats/app/src/i18n/ko.ts +++ b/packages/stats/app/src/i18n/ko.ts @@ -113,8 +113,6 @@ export const dict = { "home.geoTitle": "지역별 분포", "home.noGeoTitle": "지역 데이터 없음", "home.noGeoDescription": "이 범위에 맞는 지역 행이 없습니다.", - "home.worldMap": "국가별 토큰 사용량 세계 지도", - "home.geoMapTitle": "지역별 분포 지도", "home.unknown": "알 수 없음", "home.tokenCostTitle": "토큰 비용", "home.tokenCostDescription": "100만 토큰당 가격입니다.", @@ -221,7 +219,6 @@ export const dict = { "model.geoDescription": "국가별 OpenCode 모델 토큰 사용량입니다.", "model.noGeoTitle": "지역 데이터 없음", "model.noGeoDescription": "이 모델과 일치하는 OpenCode 지역 행이 없습니다.", - "model.worldMap": "국가별 모델 토큰 사용량 세계 지도", "model.peersDescription": "최근 OpenCode 토큰 볼륨이 가까운 모델입니다.", "model.noPeersTitle": "비슷한 모델 없음", "model.noPeersDescription": "사용량이 들어오면 비슷한 모델 순위가 표시됩니다.", diff --git a/packages/stats/app/src/i18n/no.ts b/packages/stats/app/src/i18n/no.ts index 54595422f948..e64617e40150 100644 --- a/packages/stats/app/src/i18n/no.ts +++ b/packages/stats/app/src/i18n/no.ts @@ -111,8 +111,6 @@ export const dict = { "home.geoTitle": "Geografisk fordeling", "home.noGeoTitle": "Ingen geodata", "home.noGeoDescription": "Ingen georader matchet dette intervallet.", - "home.worldMap": "Verdenskart over tokenbruk etter land", - "home.geoMapTitle": "Kart over geografisk fordeling", "home.unknown": "Ukjent", "home.tokenCostTitle": "Tokenkostnad", "home.tokenCostDescription": "Pris per 1 mill. tokens.", @@ -220,7 +218,6 @@ export const dict = { "model.geoDescription": "OpenCode-modelltokens brukt etter land.", "model.noGeoTitle": "Ingen geodata", "model.noGeoDescription": "Ingen OpenCode-georader matchet denne modellen.", - "model.worldMap": "Verdenskart over modelltokenbruk etter land", "model.peersDescription": "Nærliggende modeller etter nylig OpenCode-tokenvolum.", "model.noPeersTitle": "Ingen lignende modeller", "model.noPeersDescription": "Rangeringer for lignende modeller vises etter at bruk lander.", diff --git a/packages/stats/app/src/i18n/pl.ts b/packages/stats/app/src/i18n/pl.ts index bd1e486b00a6..dc15861421d5 100644 --- a/packages/stats/app/src/i18n/pl.ts +++ b/packages/stats/app/src/i18n/pl.ts @@ -110,8 +110,6 @@ export const dict = { "home.geoTitle": "Podział geograficzny", "home.noGeoTitle": "Brak danych geograficznych", "home.noGeoDescription": "Żadne wiersze geograficzne nie pasowały do tego zakresu.", - "home.worldMap": "Mapa świata użycia tokenów według kraju", - "home.geoMapTitle": "Mapa podziału geograficznego", "home.unknown": "Nieznane", "home.tokenCostTitle": "Koszt tokenów", "home.tokenCostDescription": "Cena za 1 mln tokenów.", @@ -219,7 +217,6 @@ export const dict = { "model.geoDescription": "Tokeny modelu OpenCode użyte według kraju.", "model.noGeoTitle": "Brak danych geograficznych", "model.noGeoDescription": "Żadne wiersze geograficzne OpenCode nie pasowały do tego modelu.", - "model.worldMap": "Mapa świata użycia tokenów modelu według kraju", "model.peersDescription": "Pobliskie modele według ostatniego wolumenu tokenów OpenCode.", "model.noPeersTitle": "Brak podobnych modeli", "model.noPeersDescription": "Rankingi podobnych modeli pojawią się po nadejściu użycia.", diff --git a/packages/stats/app/src/i18n/ru.ts b/packages/stats/app/src/i18n/ru.ts index 984cd36f2b53..3515b4a097ae 100644 --- a/packages/stats/app/src/i18n/ru.ts +++ b/packages/stats/app/src/i18n/ru.ts @@ -111,8 +111,6 @@ export const dict = { "home.geoTitle": "Географический разрез", "home.noGeoTitle": "Нет геоданных", "home.noGeoDescription": "Нет географических строк для этого диапазона.", - "home.worldMap": "Карта мира использования токенов по странам", - "home.geoMapTitle": "Карта географического разреза", "home.unknown": "Неизвестно", "home.tokenCostTitle": "Стоимость токенов", "home.tokenCostDescription": "Цена за 1 млн токенов.", @@ -221,7 +219,6 @@ export const dict = { "model.geoDescription": "Токены модели OpenCode, использованные по странам.", "model.noGeoTitle": "Нет геоданных", "model.noGeoDescription": "Нет географических строк OpenCode для этой модели.", - "model.worldMap": "Карта мира использования токенов модели по странам", "model.peersDescription": "Близкие модели по недавнему объему токенов OpenCode.", "model.noPeersTitle": "Нет похожих моделей", "model.noPeersDescription": "Рейтинги похожих моделей появятся после использования.", diff --git a/packages/stats/app/src/i18n/th.ts b/packages/stats/app/src/i18n/th.ts index 00efb26c6129..e16996635edf 100644 --- a/packages/stats/app/src/i18n/th.ts +++ b/packages/stats/app/src/i18n/th.ts @@ -112,8 +112,6 @@ export const dict = { "home.geoTitle": "แยกตามภูมิศาสตร์", "home.noGeoTitle": "ไม่มีข้อมูลภูมิศาสตร์", "home.noGeoDescription": "ไม่มีแถวภูมิศาสตร์ที่ตรงกับช่วงเวลานี้", - "home.worldMap": "แผนที่โลกของการใช้ token แยกตามประเทศ", - "home.geoMapTitle": "แผนที่แยกตามภูมิศาสตร์", "home.unknown": "ไม่ทราบ", "home.tokenCostTitle": "ต้นทุน Token", "home.tokenCostDescription": "ราคาต่อ 1 ล้าน token", @@ -221,7 +219,6 @@ export const dict = { "model.geoDescription": "token ของโมเดล OpenCode ที่ใช้แยกตามประเทศ", "model.noGeoTitle": "ไม่มีข้อมูลภูมิศาสตร์", "model.noGeoDescription": "ไม่มีแถวภูมิศาสตร์ของ OpenCode ที่ตรงกับโมเดลนี้", - "model.worldMap": "แผนที่โลกของการใช้ token ของโมเดลแยกตามประเทศ", "model.peersDescription": "โมเดลใกล้เคียงตามปริมาณ token ล่าสุดของ OpenCode", "model.noPeersTitle": "ไม่มีโมเดลใกล้เคียง", "model.noPeersDescription": "อันดับโมเดลใกล้เคียงจะแสดงหลังจากมีการใช้งานเข้ามา", diff --git a/packages/stats/app/src/i18n/tr.ts b/packages/stats/app/src/i18n/tr.ts index e4f8d34c1748..1935a0ebc76f 100644 --- a/packages/stats/app/src/i18n/tr.ts +++ b/packages/stats/app/src/i18n/tr.ts @@ -111,8 +111,6 @@ export const dict = { "home.geoTitle": "Coğrafi Dağılım", "home.noGeoTitle": "Coğrafi veri yok", "home.noGeoDescription": "Bu aralıkla eşleşen coğrafi satır yok.", - "home.worldMap": "Ülkeye göre token kullanımının dünya haritası", - "home.geoMapTitle": "Coğrafi Dağılım haritası", "home.unknown": "Bilinmiyor", "home.tokenCostTitle": "Token Maliyeti", "home.tokenCostDescription": "1 milyon token başına fiyat.", @@ -221,7 +219,6 @@ export const dict = { "model.geoDescription": "Ülkeye göre kullanılan OpenCode model tokenları.", "model.noGeoTitle": "Coğrafi veri yok", "model.noGeoDescription": "Bu modelle eşleşen OpenCode coğrafi satırı yok.", - "model.worldMap": "Ülkeye göre model token kullanımının dünya haritası", "model.peersDescription": "Son OpenCode token hacmine göre yakındaki modeller.", "model.noPeersTitle": "Benzer yok", "model.noPeersDescription": "Benzer model sıralamaları kullanım geldikten sonra görünür.", diff --git a/packages/stats/app/src/i18n/uk.ts b/packages/stats/app/src/i18n/uk.ts index e35dd34a945a..78d113fa0b29 100644 --- a/packages/stats/app/src/i18n/uk.ts +++ b/packages/stats/app/src/i18n/uk.ts @@ -111,8 +111,6 @@ export const dict = { "home.geoTitle": "Географічний розріз", "home.noGeoTitle": "Немає геоданих", "home.noGeoDescription": "Жодні географічні рядки не відповідали цьому діапазону.", - "home.worldMap": "Карта світу використання токенів за країнами", - "home.geoMapTitle": "Карта географічного розрізу", "home.unknown": "Невідомо", "home.tokenCostTitle": "Вартість токенів", "home.tokenCostDescription": "Ціна за 1 млн токенів.", @@ -221,7 +219,6 @@ export const dict = { "model.geoDescription": "Токени моделі OpenCode, використані за країнами.", "model.noGeoTitle": "Немає геоданих", "model.noGeoDescription": "Жодні географічні рядки OpenCode не відповідали цій моделі.", - "model.worldMap": "Карта світу використання токенів моделі за країнами", "model.peersDescription": "Близькі моделі за нещодавнім обсягом токенів OpenCode.", "model.noPeersTitle": "Немає схожих моделей", "model.noPeersDescription": "Рейтинги схожих моделей з'являться після використання.", diff --git a/packages/stats/app/src/i18n/zh.ts b/packages/stats/app/src/i18n/zh.ts index 4d2f3768bd2b..06081f701e08 100644 --- a/packages/stats/app/src/i18n/zh.ts +++ b/packages/stats/app/src/i18n/zh.ts @@ -112,8 +112,6 @@ export const dict = { "home.geoTitle": "地理分布", "home.noGeoTitle": "无地理数据", "home.noGeoDescription": "没有符合该时间范围的地理行。", - "home.worldMap": "按国家/地区显示 token 使用量的世界地图", - "home.geoMapTitle": "地理分布地图", "home.unknown": "未知", "home.tokenCostTitle": "Token 成本", "home.tokenCostDescription": "每 100 万 token 的价格。", @@ -220,7 +218,6 @@ export const dict = { "model.geoDescription": "按国家/地区统计的 OpenCode 模型 token 使用量。", "model.noGeoTitle": "无地理数据", "model.noGeoDescription": "没有符合此模型的 OpenCode 地理行。", - "model.worldMap": "按国家/地区显示模型 token 使用量的世界地图", "model.peersDescription": "按近期 OpenCode token 用量排列的相近模型。", "model.noPeersTitle": "无同类模型", "model.noPeersDescription": "使用量到达后会显示同类模型排名。", diff --git a/packages/stats/app/src/i18n/zht.ts b/packages/stats/app/src/i18n/zht.ts index 9545748b69a7..d6d7ed10117f 100644 --- a/packages/stats/app/src/i18n/zht.ts +++ b/packages/stats/app/src/i18n/zht.ts @@ -112,8 +112,6 @@ export const dict = { "home.geoTitle": "地理分布", "home.noGeoTitle": "無地理數據", "home.noGeoDescription": "沒有符合該時間範圍的地理列。", - "home.worldMap": "按國家/地區顯示 token 使用量的世界地圖", - "home.geoMapTitle": "地理分布地圖", "home.unknown": "未知", "home.tokenCostTitle": "Token 成本", "home.tokenCostDescription": "每 100 萬 token 的價格。", @@ -220,7 +218,6 @@ export const dict = { "model.geoDescription": "按國家/地區統計的 OpenCode 模型 token 使用量。", "model.noGeoTitle": "無地理數據", "model.noGeoDescription": "沒有符合此模型的 OpenCode 地理列。", - "model.worldMap": "按國家/地區顯示模型 token 使用量的世界地圖", "model.peersDescription": "按近期 OpenCode token 用量排列的相近模型。", "model.noPeersTitle": "無同類模型", "model.noPeersDescription": "使用量到達後會顯示同類模型排名。", diff --git a/packages/stats/app/src/routes/[lab]/[model].tsx b/packages/stats/app/src/routes/[lab]/[model].tsx index ad931aab1c23..e5ff838ae87f 100644 --- a/packages/stats/app/src/routes/[lab]/[model].tsx +++ b/packages/stats/app/src/routes/[lab]/[model].tsx @@ -17,7 +17,6 @@ import { useI18n } from "../../context/i18n" import { useLanguage } from "../../context/language" import { localizedUrl } from "../../lib/language" import { findModelCatalogEntry, formatCatalogLabName, loadModelCatalog, type ModelCatalogEntry } from "../model-catalog" -import { geoMapHeight, geoMapWidth, worldBorderPath, worldCountryMarkers, worldCountryPaths } from "../geo-map" import { SectionHeading } from "../section-heading" import { runStatsEffect } from "../../stats-runtime" import { setStatsPageCacheHeaders } from "../stats-cache" @@ -892,21 +891,10 @@ function ModelEfficiencySection(props: { data: StatsModelPageData | null; catalo function ModelGeoBreakdownSection(props: { data: CountryEntry[] }) { const i18n = useI18n() - const language = useLanguage() const [activeCountry, setActiveCountry] = createSignal() const data = createMemo(() => props.data) - const countryById = createMemo( - () => - new Map( - data().flatMap((country) => { - const id = countryNumericId(country.country) - return id ? [[id, country] as const] : [] - }), - ), - ) const maxTokens = createMemo(() => Math.max(0, ...data().map((country) => country.tokens)) || 1) const topCountries = createMemo(() => data().slice(0, 15)) - const active = createMemo(() => data().find((country) => country.country === activeCountry()) ?? data()[0]) return (
      } >
      -
      - - - {(country) => ( -
      - #{String(country().rank).padStart(2, "0")} - {formatCountryName(country().country, language.tag(language.locale()), i18n)} -

      - {formatGeoTokens(country().tokens)} - {formatGeoShare(country().share)} -

      -
      - )} -
      -
      - activeCountry: string | undefined - maxTokens: number - onActiveCountryChange: (country: string | undefined) => void -}) { - const i18n = useI18n() - const opacityScale = createMemo(() => scaleSqrt().domain([0, props.maxTokens]).range([0.26, 0.96]).clamp(true)) - const countryOpacity = (country: CountryEntry | undefined) => { - if (!country || country.tokens <= 0) return 0 - const opacity = opacityScale()(country.tokens) - if (props.activeCountry === country.country) return 1 - if (!props.activeCountry) return opacity - return Math.max(0.18, opacity * 0.36) - } - - return ( - - {i18n.t("home.geoMapTitle")} - - - {(country) => { - const entry = () => props.countryById.get(country.id) - return ( - - - - - {(country) => { - const entry = () => props.countryById.get(country.id) - return ( - - - ) - }} - - - - - ) -} - function GeoCountryList(props: { data: CountryEntry[] activeCountry: string | undefined diff --git a/packages/stats/app/src/routes/geo-map.ts b/packages/stats/app/src/routes/geo-map.ts deleted file mode 100644 index 53a82eb87fa5..000000000000 --- a/packages/stats/app/src/routes/geo-map.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { geoEquirectangular, geoPath } from "d3-geo" -import { feature, mesh } from "topojson-client" -import countriesTopologySource from "world-atlas/countries-110m.json?raw" -import type { FeatureCollection, GeometryObject, GeoJsonProperties } from "geojson" -import type { GeometryCollection, Topology } from "topojson-specification" - -export const geoMapWidth = 960 -export const geoMapHeight = 430 - -type WorldCountryProperties = GeoJsonProperties & { name?: string } -type WorldTopology = Topology<{ countries: GeometryCollection }> - -const worldTopology = JSON.parse(countriesTopologySource) as WorldTopology -const worldCountryGeometries: GeometryCollection = { - ...worldTopology.objects.countries, - geometries: worldTopology.objects.countries.geometries.filter((country) => String(country.id ?? "") !== "010"), -} -const worldCountries = feature(worldTopology, worldCountryGeometries) as FeatureCollection< - GeometryObject, - WorldCountryProperties -> -const worldProjection = geoEquirectangular().fitExtent( - [ - [10, 12], - [geoMapWidth - 10, geoMapHeight - 12], - ], - worldCountries, -) -const worldPath = geoPath(worldProjection) - -export const worldCountryPaths = worldCountries.features.map((country) => ({ - id: String(country.id ?? "").padStart(3, "0"), - path: worldPath(country) ?? "", -})) - -export const worldBorderPath = worldPath(mesh(worldTopology, worldCountryGeometries, (a, b) => a !== b)) ?? "" - -function geoCountryMarker(country: (typeof worldCountries.features)[number]) { - const bounds = worldPath.bounds(country) - const [x, y] = worldPath.centroid(country) - if (!Number.isFinite(x) || !Number.isFinite(y)) return undefined - if (bounds[1][0] - bounds[0][0] >= 3 && bounds[1][1] - bounds[0][1] >= 3) return undefined - return { x, y } -} - -// The 110m topology omits small regions. Geographic centroids keep those countries interactive without shipping 50m paths. -const fallbackCountryMarkerCoordinates = [ - ["016", -170.7179, -14.3046], - ["020", 1.5606, 42.542], - ["028", -61.7945, 17.2762], - ["048", 50.5425, 26.0417], - ["052", -59.5602, 13.1811], - ["060", -64.7558, 32.3131], - ["086", 72.4453, -7.3312], - ["092", -64.4704, 18.5276], - ["132", -23.9576, 15.9551], - ["136", -80.9129, 19.43], - ["174", 43.6844, -11.879], - ["184", -159.7871, -21.2195], - ["212", -61.3576, 15.4394], - ["234", -6.8808, 62.0527], - ["239", -36.4863, -54.4641], - ["248", 19.9528, 60.2153], - ["258", -144.8045, -14.7283], - ["296", -167.9217, 0.893], - ["308", -61.6818, 12.1174], - ["316", 144.767, 13.4406], - ["334", 73.52, -53.0872], - ["336", 12.4343, 41.9021], - ["344", 114.1143, 22.3983], - ["438", 9.5357, 47.1367], - ["446", 113.509, 22.2231], - ["462", 73.4573, 3.7316], - ["470", 14.405, 35.9215], - ["480", 57.5714, -20.2779], - ["492", 7.4073, 43.7526], - ["500", -62.1856, 16.7404], - ["520", 166.9326, -0.5189], - ["531", -68.9721, 12.1957], - ["533", -69.9827, 12.521], - ["534", -63.0572, 18.0509], - ["570", -169.8704, -19.0489], - ["574", 167.9497, -29.0516], - ["580", 145.6193, 15.8288], - ["583", 153.2966, 7.5361], - ["584", 170.3313, 7.015], - ["585", 134.4056, 7.286], - ["612", -128.3167, -24.3649], - ["652", -62.841, 17.8988], - ["654", -9.7009, -12.3548], - ["659", -62.6873, 17.2647], - ["660", -63.066, 18.2243], - ["662", -60.9696, 13.8946], - ["663", -63.0599, 18.0888], - ["666", -56.3037, 46.9187], - ["670", -61.2008, 13.2251], - ["674", 12.4594, 43.9415], - ["678", 6.7235, 0.4434], - ["690", 55.476, -4.6601], - ["702", 103.817, 1.359], - ["776", -174.7998, -20.4161], - ["796", -71.9734, 21.8312], - ["831", -2.5726, 49.4678], - ["832", -2.1272, 49.2181], - ["833", -4.5388, 54.224], - ["850", -64.8028, 17.9555], - ["876", -177.3469, -13.8898], - ["882", -172.1649, -13.7536], -] as const - -export const worldCountryMarkers = [ - ...worldCountries.features.flatMap((country) => { - const marker = geoCountryMarker(country) - return marker ? [{ id: String(country.id ?? "").padStart(3, "0"), marker }] : [] - }), - ...fallbackCountryMarkerCoordinates.flatMap(([id, longitude, latitude]) => { - const marker = worldProjection([longitude, latitude]) - return marker ? [{ id, marker: { x: marker[0], y: marker[1] } }] : [] - }), -] diff --git a/packages/stats/app/src/routes/index.css b/packages/stats/app/src/routes/index.css index edbdd048311a..e37fef9b48b8 100644 --- a/packages/stats/app/src/routes/index.css +++ b/packages/stats/app/src/routes/index.css @@ -2264,121 +2264,6 @@ body { align-items: start; } -[data-page="stats"] [data-slot="geo-map-panel"] { - position: relative; - min-width: 0; - overflow: hidden; - background: var(--stats-layer); - border: 1px solid var(--stats-line); -} - -[data-page="stats"] [data-component="geo-world-map"] { - display: block; - width: 100%; - height: auto; -} - -[data-page="stats"] [data-slot="geo-countries"] path { - fill: var(--stats-layer-2); - stroke: var(--stats-bg); - stroke-width: 0.45px; - transition: - fill 140ms ease, - opacity 140ms ease; -} - -[data-page="stats"] [data-slot="geo-countries"] path[data-has-data="true"] { - fill: var(--stats-accent); - opacity: var(--geo-country-opacity); - cursor: pointer; -} - -[data-page="stats"] [data-slot="geo-countries"] path[data-active="true"] { - fill: color-mix(in srgb, var(--stats-accent) 70%, var(--stats-text)); - opacity: var(--geo-country-opacity); -} - -[data-page="stats"] [data-slot="geo-country-markers"] circle { - fill: var(--stats-accent); - stroke: var(--stats-bg); - stroke-width: 1.1px; - opacity: var(--geo-country-opacity); - cursor: pointer; - transition: - fill 140ms ease, - opacity 140ms ease, - r 140ms ease; -} - -[data-page="stats"] [data-slot="geo-country-markers"] circle[data-active="true"] { - fill: color-mix(in srgb, var(--stats-accent) 70%, var(--stats-text)); - opacity: var(--geo-country-opacity); -} - -[data-page="stats"] [data-slot="geo-borders"] { - fill: none; - stroke: var(--stats-line-strong); - stroke-linejoin: round; - stroke-width: 0.6px; - pointer-events: none; -} - -[data-page="stats"] [data-slot="geo-active-country"] { - position: absolute; - bottom: 16px; - left: 16px; - display: grid; - gap: 8px; - min-width: 168px; - max-width: calc(100% - 32px); - box-sizing: border-box; - padding: 12px; - background: color-mix(in srgb, var(--stats-bg) 92%, transparent); - box-shadow: - 0 0 0 0.5px var(--stats-line-strong), - 0 6px 16px #0000000d, - 0 2px 6px #0000000f; -} - -[data-page="stats"] [data-slot="geo-active-country"] span, -[data-page="stats"] [data-slot="geo-active-country"] em { - color: var(--stats-faint); - font-style: normal; -} - -[data-page="stats"] [data-slot="geo-active-country"] span { - font-size: 10px; - font-weight: 600; - line-height: 1; -} - -[data-page="stats"] [data-slot="geo-active-country"] strong { - min-width: 0; - overflow: hidden; - color: var(--stats-text); - font-size: 16px; - font-weight: 600; - line-height: 1.2; - text-overflow: ellipsis; - white-space: nowrap; -} - -[data-page="stats"] [data-slot="geo-active-country"] p { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; - color: var(--stats-muted); - font-size: 11px; - font-weight: 500; - line-height: 1; -} - -[data-page="stats"] [data-slot="geo-active-country"] b { - color: var(--stats-accent-text); - font-weight: 600; -} - [data-page="stats"] [data-component="geo-country-list"] { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 212px), 1fr)); @@ -8386,13 +8271,6 @@ body { height: 400px; } - [data-page="stats"] [data-slot="geo-active-country"] { - position: static; - min-width: 0; - max-width: none; - margin: 0 12px 12px; - } - [data-page="stats"] [data-component="geo-country-list"] button { grid-template-columns: 26px 8px minmax(0, 1fr) auto; } From ae2ea3c7237ef9e21fd4eba253b9e763c7f1475d Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 26 Aug 2026 03:40:35 -0400 Subject: [PATCH 041/185] fix map inaccuracy --- packages/stats/app/src/i18n.ts | 1 - packages/stats/app/src/i18n/ar.ts | 1 - packages/stats/app/src/i18n/br.ts | 1 - packages/stats/app/src/i18n/da.ts | 1 - packages/stats/app/src/i18n/de.ts | 1 - packages/stats/app/src/i18n/es.ts | 1 - packages/stats/app/src/i18n/fr.ts | 1 - packages/stats/app/src/i18n/it.ts | 1 - packages/stats/app/src/i18n/ja.ts | 1 - packages/stats/app/src/i18n/ko.ts | 1 - packages/stats/app/src/i18n/no.ts | 1 - packages/stats/app/src/i18n/pl.ts | 1 - packages/stats/app/src/i18n/ru.ts | 1 - packages/stats/app/src/i18n/th.ts | 1 - packages/stats/app/src/i18n/tr.ts | 1 - packages/stats/app/src/i18n/uk.ts | 1 - packages/stats/app/src/i18n/zh.ts | 1 - packages/stats/app/src/i18n/zht.ts | 1 - packages/stats/app/src/routes/[lab]/[model].tsx | 8 ++------ 19 files changed, 2 insertions(+), 24 deletions(-) diff --git a/packages/stats/app/src/i18n.ts b/packages/stats/app/src/i18n.ts index e846ce5089be..0b8053694ead 100644 --- a/packages/stats/app/src/i18n.ts +++ b/packages/stats/app/src/i18n.ts @@ -233,7 +233,6 @@ const en = { "model.averageTokensSession": "Average tokens / session", "model.cacheRatio": "Cache Ratio", "model.inputTokens": "input tokens", - "model.geoDescription": "OpenCode model tokens used by country.", "model.noGeoTitle": "No geo data", "model.noGeoDescription": "No OpenCode geo rows matched this model.", "model.peersDescription": "Nearby models by recent OpenCode token volume.", diff --git a/packages/stats/app/src/i18n/ar.ts b/packages/stats/app/src/i18n/ar.ts index 1fb489117378..b24304310272 100644 --- a/packages/stats/app/src/i18n/ar.ts +++ b/packages/stats/app/src/i18n/ar.ts @@ -213,7 +213,6 @@ export const dict = { "model.tokensSession": "الرموز / الجلسة", "model.cacheRatio": "نسبة التخزين المؤقت", "model.inputTokens": "رموز الإدخال", - "model.geoDescription": "رموز نموذج OpenCode المستخدمة حسب البلد.", "model.noGeoTitle": "لا توجد بيانات جغرافية", "model.noGeoDescription": "لم تطابق أي صفوف جغرافية في OpenCode هذا النموذج.", "model.peersDescription": "نماذج قريبة حسب حجم رموز OpenCode الأخير.", diff --git a/packages/stats/app/src/i18n/br.ts b/packages/stats/app/src/i18n/br.ts index 4ef584ce63ef..5bf9e44dc7e6 100644 --- a/packages/stats/app/src/i18n/br.ts +++ b/packages/stats/app/src/i18n/br.ts @@ -216,7 +216,6 @@ export const dict = { "model.tokensSession": "Tokens / sessão", "model.cacheRatio": "Taxa de cache", "model.inputTokens": "tokens de entrada", - "model.geoDescription": "Tokens do modelo OpenCode usados por país.", "model.noGeoTitle": "Sem dados geográficos", "model.noGeoDescription": "Nenhuma linha geográfica do OpenCode correspondeu a este modelo.", "model.peersDescription": "Modelos próximos por volume recente de tokens do OpenCode.", diff --git a/packages/stats/app/src/i18n/da.ts b/packages/stats/app/src/i18n/da.ts index 1da9eb733bbd..5fdf2841e7ba 100644 --- a/packages/stats/app/src/i18n/da.ts +++ b/packages/stats/app/src/i18n/da.ts @@ -214,7 +214,6 @@ export const dict = { "model.tokensSession": "Tokens / session", "model.cacheRatio": "Cacheandel", "model.inputTokens": "inputtokens", - "model.geoDescription": "OpenCode-modeltokens brugt efter land.", "model.noGeoTitle": "Ingen geodata", "model.noGeoDescription": "Ingen OpenCode-georækker matchede denne model.", "model.peersDescription": "Nærliggende modeller efter seneste OpenCode-tokenvolumen.", diff --git a/packages/stats/app/src/i18n/de.ts b/packages/stats/app/src/i18n/de.ts index 21d131cade53..95a2f06fa7d8 100644 --- a/packages/stats/app/src/i18n/de.ts +++ b/packages/stats/app/src/i18n/de.ts @@ -216,7 +216,6 @@ export const dict = { "model.tokensSession": "Tokens / Sitzung", "model.cacheRatio": "Cache-Anteil", "model.inputTokens": "Eingabetokens", - "model.geoDescription": "OpenCode-Modelltokens nach Land.", "model.noGeoTitle": "Keine Geodaten", "model.noGeoDescription": "Keine OpenCode-Geozeilen passten zu diesem Modell.", "model.peersDescription": "Nahe Modelle nach aktuellem OpenCode-Tokenvolumen.", diff --git a/packages/stats/app/src/i18n/es.ts b/packages/stats/app/src/i18n/es.ts index 92988954bbf4..78d2e61c24a9 100644 --- a/packages/stats/app/src/i18n/es.ts +++ b/packages/stats/app/src/i18n/es.ts @@ -215,7 +215,6 @@ export const dict = { "model.tokensSession": "Tokens / sesión", "model.cacheRatio": "Ratio de caché", "model.inputTokens": "tokens de entrada", - "model.geoDescription": "Tokens del modelo de OpenCode usados por país.", "model.noGeoTitle": "Sin datos geográficos", "model.noGeoDescription": "Ninguna fila geográfica de OpenCode coincidió con este modelo.", "model.peersDescription": "Modelos cercanos por volumen reciente de tokens de OpenCode.", diff --git a/packages/stats/app/src/i18n/fr.ts b/packages/stats/app/src/i18n/fr.ts index 3bd3256808be..bbc1d5cca718 100644 --- a/packages/stats/app/src/i18n/fr.ts +++ b/packages/stats/app/src/i18n/fr.ts @@ -217,7 +217,6 @@ export const dict = { "model.tokensSession": "Tokens / session", "model.cacheRatio": "Taux de cache", "model.inputTokens": "tokens d'entrée", - "model.geoDescription": "Tokens du modèle OpenCode utilisés par pays.", "model.noGeoTitle": "Aucune donnée géographique", "model.noGeoDescription": "Aucune ligne géographique OpenCode ne correspondait à ce modèle.", "model.peersDescription": "Modèles proches par volume récent de tokens OpenCode.", diff --git a/packages/stats/app/src/i18n/it.ts b/packages/stats/app/src/i18n/it.ts index f0ccde5013e1..e4a4b12969fc 100644 --- a/packages/stats/app/src/i18n/it.ts +++ b/packages/stats/app/src/i18n/it.ts @@ -216,7 +216,6 @@ export const dict = { "model.tokensSession": "Token / sessione", "model.cacheRatio": "Rapporto cache", "model.inputTokens": "token di input", - "model.geoDescription": "Token del modello OpenCode usati per paese.", "model.noGeoTitle": "Nessun dato geografico", "model.noGeoDescription": "Nessuna riga geografica OpenCode corrispondeva a questo modello.", "model.peersDescription": "Modelli vicini per volume recente di token OpenCode.", diff --git a/packages/stats/app/src/i18n/ja.ts b/packages/stats/app/src/i18n/ja.ts index beac7cabc97f..1826329523aa 100644 --- a/packages/stats/app/src/i18n/ja.ts +++ b/packages/stats/app/src/i18n/ja.ts @@ -217,7 +217,6 @@ export const dict = { "model.tokensSession": "トークン / セッション", "model.cacheRatio": "キャッシュ比率", "model.inputTokens": "入力トークン", - "model.geoDescription": "国別のOpenCodeモデルのトークン使用量。", "model.noGeoTitle": "地域データがありません", "model.noGeoDescription": "このモデルに一致するOpenCode地域行はありません。", "model.peersDescription": "最近のOpenCodeトークン量が近いモデル。", diff --git a/packages/stats/app/src/i18n/ko.ts b/packages/stats/app/src/i18n/ko.ts index ac5293125d40..d55ba5a606d5 100644 --- a/packages/stats/app/src/i18n/ko.ts +++ b/packages/stats/app/src/i18n/ko.ts @@ -216,7 +216,6 @@ export const dict = { "model.tokensSession": "토큰 / 세션", "model.cacheRatio": "캐시 비율", "model.inputTokens": "입력 토큰", - "model.geoDescription": "국가별 OpenCode 모델 토큰 사용량입니다.", "model.noGeoTitle": "지역 데이터 없음", "model.noGeoDescription": "이 모델과 일치하는 OpenCode 지역 행이 없습니다.", "model.peersDescription": "최근 OpenCode 토큰 볼륨이 가까운 모델입니다.", diff --git a/packages/stats/app/src/i18n/no.ts b/packages/stats/app/src/i18n/no.ts index e64617e40150..26ec3e80bfb1 100644 --- a/packages/stats/app/src/i18n/no.ts +++ b/packages/stats/app/src/i18n/no.ts @@ -215,7 +215,6 @@ export const dict = { "model.tokensSession": "Tokens / økt", "model.cacheRatio": "Cacheandel", "model.inputTokens": "inndata-tokens", - "model.geoDescription": "OpenCode-modelltokens brukt etter land.", "model.noGeoTitle": "Ingen geodata", "model.noGeoDescription": "Ingen OpenCode-georader matchet denne modellen.", "model.peersDescription": "Nærliggende modeller etter nylig OpenCode-tokenvolum.", diff --git a/packages/stats/app/src/i18n/pl.ts b/packages/stats/app/src/i18n/pl.ts index dc15861421d5..e82ddeff0b9a 100644 --- a/packages/stats/app/src/i18n/pl.ts +++ b/packages/stats/app/src/i18n/pl.ts @@ -214,7 +214,6 @@ export const dict = { "model.tokensSession": "Tokeny / sesja", "model.cacheRatio": "Współczynnik cache", "model.inputTokens": "tokeny wejściowe", - "model.geoDescription": "Tokeny modelu OpenCode użyte według kraju.", "model.noGeoTitle": "Brak danych geograficznych", "model.noGeoDescription": "Żadne wiersze geograficzne OpenCode nie pasowały do tego modelu.", "model.peersDescription": "Pobliskie modele według ostatniego wolumenu tokenów OpenCode.", diff --git a/packages/stats/app/src/i18n/ru.ts b/packages/stats/app/src/i18n/ru.ts index 3515b4a097ae..fe850a3094e7 100644 --- a/packages/stats/app/src/i18n/ru.ts +++ b/packages/stats/app/src/i18n/ru.ts @@ -216,7 +216,6 @@ export const dict = { "model.tokensSession": "Токены / сеанс", "model.cacheRatio": "Доля кэша", "model.inputTokens": "входные токены", - "model.geoDescription": "Токены модели OpenCode, использованные по странам.", "model.noGeoTitle": "Нет геоданных", "model.noGeoDescription": "Нет географических строк OpenCode для этой модели.", "model.peersDescription": "Близкие модели по недавнему объему токенов OpenCode.", diff --git a/packages/stats/app/src/i18n/th.ts b/packages/stats/app/src/i18n/th.ts index e16996635edf..84f79a21f7f6 100644 --- a/packages/stats/app/src/i18n/th.ts +++ b/packages/stats/app/src/i18n/th.ts @@ -216,7 +216,6 @@ export const dict = { "model.tokensSession": "Token / เซสชัน", "model.cacheRatio": "อัตราแคช", "model.inputTokens": "input token", - "model.geoDescription": "token ของโมเดล OpenCode ที่ใช้แยกตามประเทศ", "model.noGeoTitle": "ไม่มีข้อมูลภูมิศาสตร์", "model.noGeoDescription": "ไม่มีแถวภูมิศาสตร์ของ OpenCode ที่ตรงกับโมเดลนี้", "model.peersDescription": "โมเดลใกล้เคียงตามปริมาณ token ล่าสุดของ OpenCode", diff --git a/packages/stats/app/src/i18n/tr.ts b/packages/stats/app/src/i18n/tr.ts index 1935a0ebc76f..27926c9d548f 100644 --- a/packages/stats/app/src/i18n/tr.ts +++ b/packages/stats/app/src/i18n/tr.ts @@ -216,7 +216,6 @@ export const dict = { "model.tokensSession": "Token / Oturum", "model.cacheRatio": "Önbellek Oranı", "model.inputTokens": "giriş tokenları", - "model.geoDescription": "Ülkeye göre kullanılan OpenCode model tokenları.", "model.noGeoTitle": "Coğrafi veri yok", "model.noGeoDescription": "Bu modelle eşleşen OpenCode coğrafi satırı yok.", "model.peersDescription": "Son OpenCode token hacmine göre yakındaki modeller.", diff --git a/packages/stats/app/src/i18n/uk.ts b/packages/stats/app/src/i18n/uk.ts index 78d113fa0b29..eb43f81aa819 100644 --- a/packages/stats/app/src/i18n/uk.ts +++ b/packages/stats/app/src/i18n/uk.ts @@ -216,7 +216,6 @@ export const dict = { "model.tokensSession": "Токени / сеанс", "model.cacheRatio": "Частка кешу", "model.inputTokens": "вхідні токени", - "model.geoDescription": "Токени моделі OpenCode, використані за країнами.", "model.noGeoTitle": "Немає геоданих", "model.noGeoDescription": "Жодні географічні рядки OpenCode не відповідали цій моделі.", "model.peersDescription": "Близькі моделі за нещодавнім обсягом токенів OpenCode.", diff --git a/packages/stats/app/src/i18n/zh.ts b/packages/stats/app/src/i18n/zh.ts index 06081f701e08..f41222bf82aa 100644 --- a/packages/stats/app/src/i18n/zh.ts +++ b/packages/stats/app/src/i18n/zh.ts @@ -215,7 +215,6 @@ export const dict = { "model.tokensSession": "Token / 会话", "model.cacheRatio": "缓存比例", "model.inputTokens": "输入 token", - "model.geoDescription": "按国家/地区统计的 OpenCode 模型 token 使用量。", "model.noGeoTitle": "无地理数据", "model.noGeoDescription": "没有符合此模型的 OpenCode 地理行。", "model.peersDescription": "按近期 OpenCode token 用量排列的相近模型。", diff --git a/packages/stats/app/src/i18n/zht.ts b/packages/stats/app/src/i18n/zht.ts index d6d7ed10117f..9f603436726a 100644 --- a/packages/stats/app/src/i18n/zht.ts +++ b/packages/stats/app/src/i18n/zht.ts @@ -215,7 +215,6 @@ export const dict = { "model.tokensSession": "Token / 工作階段", "model.cacheRatio": "快取比例", "model.inputTokens": "輸入 token", - "model.geoDescription": "按國家/地區統計的 OpenCode 模型 token 使用量。", "model.noGeoTitle": "無地理數據", "model.noGeoDescription": "沒有符合此模型的 OpenCode 地理列。", "model.peersDescription": "按近期 OpenCode token 用量排列的相近模型。", diff --git a/packages/stats/app/src/routes/[lab]/[model].tsx b/packages/stats/app/src/routes/[lab]/[model].tsx index e5ff838ae87f..e0560957ac27 100644 --- a/packages/stats/app/src/routes/[lab]/[model].tsx +++ b/packages/stats/app/src/routes/[lab]/[model].tsx @@ -905,11 +905,7 @@ function ModelGeoBreakdownSection(props: { data: CountryEntry[] }) { setActiveCountry(undefined) }} > - + 0} fallback={} @@ -1019,7 +1015,7 @@ function PeerRow(props: { peer: ModelPeerEntry; active: boolean }) { ) } -function SectionTitle(props: { href: string; title: string; description: string }) { +function SectionTitle(props: { href: string; title: string; description?: string }) { return } From 1cc53890dc0d902e6c85eca5b7e27cbf0a04541a Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Wed, 26 Aug 2026 07:47:41 +0000 Subject: [PATCH 042/185] chore: update nix node_modules hashes --- nix/hashes.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nix/hashes.json b/nix/hashes.json index acc1a09e0aaa..05c0eecd0a62 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,8 +1,8 @@ { "nodeModules": { - "x86_64-linux": "sha256-Be1I6OG6UitofhcGu2BeNzevmoQXc4Or5r/NPzwtft4=", - "aarch64-linux": "sha256-O+d+26CQIjZ08Rn8Qm3IytdDqIMbPdhzaGOZeUKAvIU=", - "aarch64-darwin": "sha256-ObS50y/oy6fM9wSGUL/wx6O0+fTWHC04mXJNd7w/2Z0=", - "x86_64-darwin": "sha256-eoR7ZSyH62Fq2ZaW2b2QqU2FC97rYxTMeEe+djT0nto=" + "x86_64-linux": "sha256-aYQMkCn/SKUqnFHRDQvdTff+4Amp3IjyRV5gK6V15FY=", + "aarch64-linux": "sha256-/IAyMSXf3MZI8REGEC4Se8dlb6+djyYnOfa01hin1Qc=", + "aarch64-darwin": "sha256-6cvEAL4PxMX0l33at55+wALkdnMcU7V8QsPd8vlXzx8=", + "x86_64-darwin": "sha256-jaWCHPlxqT0m9Lt7rZkrUrb4HVY4/L+sgD9F95z6xqw=" } } From ba4d0ea8bf46e7228766575e62a06506f8c43eee Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 26 Aug 2026 05:41:23 -0500 Subject: [PATCH 043/185] fix(console): validate auth redirects (#45027) --- bun.lock | 1 + packages/console/function/package.json | 1 + .../console/function/src/auth-redirect.test.ts | 18 ++++++++++++++++++ packages/console/function/src/auth-redirect.ts | 18 ++++++++++++++++++ packages/console/function/src/auth.ts | 13 +++++++++++++ packages/console/function/tsconfig.json | 2 +- 6 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 packages/console/function/src/auth-redirect.test.ts create mode 100644 packages/console/function/src/auth-redirect.ts diff --git a/bun.lock b/bun.lock index 6a066555bb66..740abb79909b 100644 --- a/bun.lock +++ b/bun.lock @@ -235,6 +235,7 @@ "devDependencies": { "@cloudflare/workers-types": "catalog:", "@tsconfig/node22": "22.0.2", + "@types/bun": "catalog:", "@types/node": "catalog:", "@typescript/native-preview": "catalog:", "openai": "5.11.0", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 739921402e74..2848ac685b5e 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -11,6 +11,7 @@ "devDependencies": { "@cloudflare/workers-types": "catalog:", "@tsconfig/node22": "22.0.2", + "@types/bun": "catalog:", "@types/node": "catalog:", "openai": "5.11.0", "typescript": "catalog:", diff --git a/packages/console/function/src/auth-redirect.test.ts b/packages/console/function/src/auth-redirect.test.ts new file mode 100644 index 000000000000..b3919dbfacb1 --- /dev/null +++ b/packages/console/function/src/auth-redirect.test.ts @@ -0,0 +1,18 @@ +import { describe, expect, test } from "bun:test" +import { isAllowedAuthorizationRedirect } from "./auth-redirect" + +describe("authorization redirect validation", () => { + test("allows registered OpenCode callbacks", () => { + expect(isAllowedAuthorizationRedirect("app", "https://opencode.ai/auth/callback")).toBe(true) + expect(isAllowedAuthorizationRedirect("app", "https://dev.opencode.ai/auth/callback")).toBe(true) + expect(isAllowedAuthorizationRedirect("app", "http://localhost:3000/auth/callback")).toBe(true) + expect(isAllowedAuthorizationRedirect("app", "http://127.0.0.1:3000/auth/callback")).toBe(true) + }) + + test("rejects unregistered clients and external redirects", () => { + expect(isAllowedAuthorizationRedirect("other", "https://opencode.ai/auth/callback")).toBe(false) + expect(isAllowedAuthorizationRedirect("app", "https://evil.example/callback")).toBe(false) + expect(isAllowedAuthorizationRedirect("app", "https://opencode.ai.evil.example/callback")).toBe(false) + expect(isAllowedAuthorizationRedirect("app", "javascript:alert(1)")).toBe(false) + }) +}) diff --git a/packages/console/function/src/auth-redirect.ts b/packages/console/function/src/auth-redirect.ts new file mode 100644 index 000000000000..71203f930d53 --- /dev/null +++ b/packages/console/function/src/auth-redirect.ts @@ -0,0 +1,18 @@ +export const isAllowedAuthorizationRedirect = (clientID: string, redirectURI: string) => { + if (clientID !== "app") return false + const redirect = (() => { + try { + return new URL(redirectURI) + } catch { + return undefined + } + })() + if (redirect === undefined) return false + if (redirect.hostname === "localhost" || redirect.hostname === "127.0.0.1") { + return redirect.protocol === "http:" || redirect.protocol === "https:" + } + return ( + redirect.protocol === "https:" && + (redirect.hostname === "opencode.ai" || redirect.hostname.endsWith(".opencode.ai")) + ) +} diff --git a/packages/console/function/src/auth.ts b/packages/console/function/src/auth.ts index 6d56b9670605..457ccc571d52 100644 --- a/packages/console/function/src/auth.ts +++ b/packages/console/function/src/auth.ts @@ -17,6 +17,7 @@ import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.j import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" import { AuthTable } from "@opencode-ai/console-core/schema/auth.sql.js" import { Identifier } from "@opencode-ai/console-core/identifier.js" +import { isAllowedAuthorizationRedirect } from "./auth-redirect.js" type Env = { AuthStorage: KVNamespace @@ -41,6 +42,17 @@ const MY_THEME: Theme = { export default { async fetch(request: Request, env: Env, ctx: ExecutionContext) { + const requestURL = new URL(request.url) + if (requestURL.pathname === "/authorize") { + const redirectURI = requestURL.searchParams.get("redirect_uri") + if ( + redirectURI !== null && + !isAllowedAuthorizationRedirect(requestURL.searchParams.get("client_id") ?? "", redirectURI) + ) { + return new Response("Unauthorized client", { status: 400 }) + } + } + const result = await issuer({ theme: MY_THEME, providers: { @@ -102,6 +114,7 @@ export default { namespace: env.AuthStorage, }), subjects, + allow: ({ clientID, redirectURI }) => Promise.resolve(isAllowedAuthorizationRedirect(clientID, redirectURI)), async success(ctx, response) { console.log(response) diff --git a/packages/console/function/tsconfig.json b/packages/console/function/tsconfig.json index 3218dd7e3efb..cf99b89bdd60 100644 --- a/packages/console/function/tsconfig.json +++ b/packages/console/function/tsconfig.json @@ -6,6 +6,6 @@ "moduleResolution": "bundler", "jsx": "preserve", "jsxImportSource": "react", - "types": ["@cloudflare/workers-types", "node"] + "types": ["@cloudflare/workers-types", "bun", "node"] } } From c7134cbb01bcba6c695c504df180cbf9cdcd4d49 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Wed, 26 Aug 2026 10:55:43 +0000 Subject: [PATCH 044/185] chore: update nix node_modules hashes --- nix/hashes.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nix/hashes.json b/nix/hashes.json index 05c0eecd0a62..8279470428b0 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,8 +1,8 @@ { "nodeModules": { - "x86_64-linux": "sha256-aYQMkCn/SKUqnFHRDQvdTff+4Amp3IjyRV5gK6V15FY=", - "aarch64-linux": "sha256-/IAyMSXf3MZI8REGEC4Se8dlb6+djyYnOfa01hin1Qc=", - "aarch64-darwin": "sha256-6cvEAL4PxMX0l33at55+wALkdnMcU7V8QsPd8vlXzx8=", - "x86_64-darwin": "sha256-jaWCHPlxqT0m9Lt7rZkrUrb4HVY4/L+sgD9F95z6xqw=" + "x86_64-linux": "sha256-fJ72uEK9rSoFL6eJk0Lwkc2TIMLZyQ7Iz83WrZE2duA=", + "aarch64-linux": "sha256-ElEwz5spFa8XFYSBiGjKlTKRFQCju/ZYDlb6h1FaKoI=", + "aarch64-darwin": "sha256-RmbrAlggOqxNFdhW+qj2tjRCpRf2NDLe68TikbGtCeA=", + "x86_64-darwin": "sha256-ZgYE0J+Dkz/kALK3kZ1jdFIZ5/BEkEaw0mXCqPon0iY=" } } From ec25388937666a71fcf8715020fe4be678843a2b Mon Sep 17 00:00:00 2001 From: Jack Date: Wed, 26 Aug 2026 19:19:12 +0800 Subject: [PATCH 045/185] docs: remove Ox Alpha Free (#45221) --- packages/console/app/src/i18n/ar.ts | 1 - packages/console/app/src/i18n/br.ts | 1 - packages/console/app/src/i18n/da.ts | 1 - packages/console/app/src/i18n/de.ts | 1 - packages/console/app/src/i18n/en.ts | 1 - packages/console/app/src/i18n/es.ts | 1 - packages/console/app/src/i18n/fr.ts | 1 - packages/console/app/src/i18n/it.ts | 1 - packages/console/app/src/i18n/ja.ts | 1 - packages/console/app/src/i18n/ko.ts | 1 - packages/console/app/src/i18n/no.ts | 1 - packages/console/app/src/i18n/pl.ts | 1 - packages/console/app/src/i18n/ru.ts | 1 - packages/console/app/src/i18n/th.ts | 1 - packages/console/app/src/i18n/tr.ts | 1 - packages/console/app/src/i18n/uk.ts | 1 - packages/console/app/src/i18n/zh.ts | 1 - packages/console/app/src/i18n/zht.ts | 1 - packages/console/app/src/routes/go/index.css | 31 ------------------- packages/console/app/src/routes/go/index.tsx | 7 ----- .../routes/workspace/[id]/go/lite-section.tsx | 1 - packages/web/src/content/docs/ar/go.mdx | 6 ---- packages/web/src/content/docs/ar/zen.mdx | 3 -- packages/web/src/content/docs/bs/go.mdx | 6 ---- packages/web/src/content/docs/bs/zen.mdx | 3 -- packages/web/src/content/docs/da/go.mdx | 6 ---- packages/web/src/content/docs/da/zen.mdx | 3 -- packages/web/src/content/docs/de/go.mdx | 6 ---- packages/web/src/content/docs/de/zen.mdx | 3 -- packages/web/src/content/docs/es/go.mdx | 6 ---- packages/web/src/content/docs/es/zen.mdx | 3 -- packages/web/src/content/docs/fr/go.mdx | 6 ---- packages/web/src/content/docs/fr/zen.mdx | 3 -- packages/web/src/content/docs/go.mdx | 6 ---- packages/web/src/content/docs/it/go.mdx | 6 ---- packages/web/src/content/docs/it/zen.mdx | 3 -- packages/web/src/content/docs/ja/go.mdx | 6 ---- packages/web/src/content/docs/ja/zen.mdx | 3 -- packages/web/src/content/docs/ko/go.mdx | 6 ---- packages/web/src/content/docs/ko/zen.mdx | 3 -- packages/web/src/content/docs/nb/go.mdx | 6 ---- packages/web/src/content/docs/nb/zen.mdx | 3 -- packages/web/src/content/docs/pl/go.mdx | 6 ---- packages/web/src/content/docs/pl/zen.mdx | 3 -- packages/web/src/content/docs/pt-br/go.mdx | 6 ---- packages/web/src/content/docs/pt-br/zen.mdx | 3 -- packages/web/src/content/docs/ru/go.mdx | 6 ---- packages/web/src/content/docs/ru/zen.mdx | 3 -- packages/web/src/content/docs/th/go.mdx | 6 ---- packages/web/src/content/docs/th/zen.mdx | 3 -- packages/web/src/content/docs/tr/go.mdx | 6 ---- packages/web/src/content/docs/tr/zen.mdx | 3 -- packages/web/src/content/docs/zen.mdx | 3 -- packages/web/src/content/docs/zh-cn/go.mdx | 6 ---- packages/web/src/content/docs/zh-cn/zen.mdx | 3 -- packages/web/src/content/docs/zh-tw/go.mdx | 6 ---- packages/web/src/content/docs/zh-tw/zen.mdx | 3 -- 57 files changed, 219 deletions(-) diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts index e71b57accfe0..e22c9a0a7912 100644 --- a/packages/console/app/src/i18n/ar.ts +++ b/packages/console/app/src/i18n/ar.ts @@ -252,7 +252,6 @@ export const dict = { "zen.privacy.exceptionsLink": "الاستثناءات التالية", "go.title": "OpenCode Go | نماذج برمجة منخفضة التكلفة للجميع", - "go.banner.text": "Ox Alpha Free متاح على Go لفترة محدودة", "go.meta.description": "يبلغ سعر Go ‏$10/شهر، مع حدود استخدام سخية ووصول موثوق إلى نماذج البرمجة الرائدة.", "go.hero.title": "نماذج برمجة منخفضة التكلفة للجميع", "go.hero.body": diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts index e710fba0f486..0120f36f8b4e 100644 --- a/packages/console/app/src/i18n/br.ts +++ b/packages/console/app/src/i18n/br.ts @@ -256,7 +256,6 @@ export const dict = { "zen.privacy.exceptionsLink": "seguintes exceções", "go.title": "OpenCode Go | Modelos de codificação de baixo custo para todos", - "go.banner.text": "Ox Alpha Free está disponível no Go por tempo limitado", "go.meta.description": "O Go custa $10/mês, com limites generosos de uso e acesso confiável aos principais modelos de codificação.", "go.hero.title": "Modelos de codificação de baixo custo para todos", diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts index b3db8954cdd4..64ab93855c80 100644 --- a/packages/console/app/src/i18n/da.ts +++ b/packages/console/app/src/i18n/da.ts @@ -254,7 +254,6 @@ export const dict = { "zen.privacy.exceptionsLink": "følgende undtagelser", "go.title": "OpenCode Go | Kodningsmodeller til lav pris for alle", - "go.banner.text": "Ox Alpha Free er tilgængelig på Go i en begrænset periode", "go.meta.description": "Go koster $10/måned, med generøse brugsgrænser og pålidelig adgang til førende kodningsmodeller.", "go.hero.title": "Kodningsmodeller til lav pris for alle", diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts index 13625e7bd210..fc5635228b72 100644 --- a/packages/console/app/src/i18n/de.ts +++ b/packages/console/app/src/i18n/de.ts @@ -256,7 +256,6 @@ export const dict = { "zen.privacy.exceptionsLink": "folgenden Ausnahmen", "go.title": "OpenCode Go | Kostengünstige Coding-Modelle für alle", - "go.banner.text": "Ox Alpha Free ist für begrenzte Zeit auf Go verfügbar", "go.meta.description": "Go kostet $10/Monat, mit großzügigen Nutzungslimits und zuverlässigem Zugang zu führenden Coding-Modellen.", "go.hero.title": "Kostengünstige Coding-Modelle für alle", diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index 45f2eed8fb4d..46a466b1f80e 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -253,7 +253,6 @@ export const dict = { "zen.privacy.exceptionsLink": "following exceptions", "go.title": "OpenCode Go | Low cost coding models for everyone", - "go.banner.text": "Ox Alpha Free is available on Go for a limited time", "go.meta.description": "Go costs $10/month, with generous usage limits and reliable access to leading coding models.", "go.hero.title": "Low cost coding models for everyone", "go.hero.body": diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts index e5f2bde97854..502eae5aa53f 100644 --- a/packages/console/app/src/i18n/es.ts +++ b/packages/console/app/src/i18n/es.ts @@ -257,7 +257,6 @@ export const dict = { "zen.privacy.exceptionsLink": "siguientes excepciones", "go.title": "OpenCode Go | Modelos de programación de bajo coste para todos", - "go.banner.text": "Ox Alpha Free está disponible en Go por tiempo limitado", "go.meta.description": "Go cuesta 10 $/mes, con límites de uso generosos y acceso fiable a modelos de programación líderes.", "go.hero.title": "Modelos de programación de bajo coste para todos", diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts index 410c4e2da1b6..250ac50aa450 100644 --- a/packages/console/app/src/i18n/fr.ts +++ b/packages/console/app/src/i18n/fr.ts @@ -258,7 +258,6 @@ export const dict = { "zen.privacy.exceptionsLink": "exceptions suivantes", "go.title": "OpenCode Go | Modèles de code à faible coût pour tous", - "go.banner.text": "Ox Alpha Free est disponible sur Go pour une durée limitée", "go.meta.description": "Go coûte 10 $/mois, avec des limites d'utilisation généreuses et un accès fiable aux principaux modèles de codage.", "go.hero.title": "Modèles de code à faible coût pour tous", diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts index a272d621f0a4..2922105b6e55 100644 --- a/packages/console/app/src/i18n/it.ts +++ b/packages/console/app/src/i18n/it.ts @@ -254,7 +254,6 @@ export const dict = { "zen.privacy.exceptionsLink": "seguenti eccezioni", "go.title": "OpenCode Go | Modelli di coding a basso costo per tutti", - "go.banner.text": "Ox Alpha Free è disponibile su Go per un periodo limitato", "go.meta.description": "Go costa $10/mese, con limiti di utilizzo generosi e un accesso affidabile ai principali modelli di coding.", "go.hero.title": "Modelli di coding a basso costo per tutti", diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts index c2a46a06bc69..45bff6611ea8 100644 --- a/packages/console/app/src/i18n/ja.ts +++ b/packages/console/app/src/i18n/ja.ts @@ -253,7 +253,6 @@ export const dict = { "zen.privacy.exceptionsLink": "以下の例外", "go.title": "OpenCode Go | すべての人のための低価格なコーディングモデル", - "go.banner.text": "Ox Alpha Freeは期間限定でGoで利用できます", "go.meta.description": "Goは月額$10で、主要なコーディングモデルへのゆとりある利用上限と安定したアクセスを提供します。", "go.hero.title": "すべての人のための低価格なコーディングモデル", diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts index 156a82c6c8be..bf5eb8e6bdeb 100644 --- a/packages/console/app/src/i18n/ko.ts +++ b/packages/console/app/src/i18n/ko.ts @@ -250,7 +250,6 @@ export const dict = { "zen.privacy.exceptionsLink": "다음 예외", "go.title": "OpenCode Go | 모두를 위한 저비용 코딩 모델", - "go.banner.text": "Ox Alpha Free가 한정된 기간 동안 Go에서 제공됩니다", "go.meta.description": "Go는 월 $10이며, 넉넉한 사용 한도와 주요 코딩 모델에 대한 안정적인 액세스를 제공합니다.", "go.hero.title": "모두를 위한 저비용 코딩 모델", "go.hero.body": diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts index 93d1a92b1147..d6dd001552c5 100644 --- a/packages/console/app/src/i18n/no.ts +++ b/packages/console/app/src/i18n/no.ts @@ -254,7 +254,6 @@ export const dict = { "zen.privacy.exceptionsLink": "følgende unntak", "go.title": "OpenCode Go | Rimelige kodemodeller for alle", - "go.banner.text": "Ox Alpha Free er tilgjengelig på Go i en begrenset periode", "go.meta.description": "Go koster $10/måned, med sjenerøse bruksgrenser og pålitelig tilgang til ledende kodemodeller.", "go.hero.title": "Rimelige kodemodeller for alle", diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts index cc4626ef5ca9..d423a5cda0df 100644 --- a/packages/console/app/src/i18n/pl.ts +++ b/packages/console/app/src/i18n/pl.ts @@ -255,7 +255,6 @@ export const dict = { "zen.privacy.exceptionsLink": "następującymi wyjątkami", "go.title": "OpenCode Go | Niskokosztowe modele do kodowania dla każdego", - "go.banner.text": "Ox Alpha Free jest dostępny w Go przez ograniczony czas", "go.meta.description": "Go kosztuje $10/miesiąc, oferując hojne limity użycia i niezawodny dostęp do wiodących modeli do kodowania.", "go.hero.title": "Niskokosztowe modele do kodowania dla każdego", diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts index b92730405448..92cb225588dc 100644 --- a/packages/console/app/src/i18n/ru.ts +++ b/packages/console/app/src/i18n/ru.ts @@ -258,7 +258,6 @@ export const dict = { "zen.privacy.exceptionsLink": "следующими исключениями", "go.title": "OpenCode Go | Недорогие модели для кодинга для всех", - "go.banner.text": "Ox Alpha Free доступна в Go в течение ограниченного времени", "go.meta.description": "Go стоит $10/месяц и предлагает щедрые лимиты использования и надежный доступ к ведущим моделям для кодинга.", "go.hero.title": "Недорогие модели для кодинга для всех", diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts index 10e715e60736..c3766f5b473a 100644 --- a/packages/console/app/src/i18n/th.ts +++ b/packages/console/app/src/i18n/th.ts @@ -253,7 +253,6 @@ export const dict = { "zen.privacy.exceptionsLink": "ข้อยกเว้นดังนี้", "go.title": "OpenCode Go | โมเดลเขียนโค้ดราคาประหยัดสำหรับทุกคน", - "go.banner.text": "Ox Alpha Free พร้อมใช้งานบน Go ในช่วงเวลาจำกัด", "go.meta.description": "Go มีราคา $10/เดือน พร้อมขีดจำกัดการใช้งานที่เอื้อเฟื้อและการเข้าถึงโมเดลเขียนโค้ดชั้นนำอย่างเชื่อถือได้", "go.hero.title": "โมเดลเขียนโค้ดราคาประหยัดสำหรับทุกคน", diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts index 2a058e5d82fd..118d56204503 100644 --- a/packages/console/app/src/i18n/tr.ts +++ b/packages/console/app/src/i18n/tr.ts @@ -256,7 +256,6 @@ export const dict = { "zen.privacy.exceptionsLink": "aşağıdaki istisnalar", "go.title": "OpenCode Go | Herkes için düşük maliyetli kodlama modelleri", - "go.banner.text": "Ox Alpha Free sınırlı bir süre için Go'da kullanılabilir", "go.meta.description": "Go ayda 10$'dır; cömert kullanım limitleri ve önde gelen kodlama modellerine güvenilir erişim sunar.", "go.hero.title": "Herkes için düşük maliyetli kodlama modelleri", diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts index 93aea4702746..688d61236123 100644 --- a/packages/console/app/src/i18n/uk.ts +++ b/packages/console/app/src/i18n/uk.ts @@ -255,7 +255,6 @@ export const dict = { "zen.privacy.exceptionsLink": "такими винятками", "go.title": "OpenCode Go | Недорогі моделі кодування для всіх", - "go.banner.text": "Ox Alpha Free доступна в Go протягом обмеженого часу", "go.meta.description": "Go коштує $10/місяць, зі щедрими лімітами використання та надійним доступом до провідних моделей для кодування.", "go.hero.title": "Недорогі моделі кодування для всіх", diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts index 03c278a71b38..f852bc084bee 100644 --- a/packages/console/app/src/i18n/zh.ts +++ b/packages/console/app/src/i18n/zh.ts @@ -244,7 +244,6 @@ export const dict = { "zen.privacy.exceptionsLink": "以下例外情况除外", "go.title": "OpenCode Go | 人人可用的低成本编程模型", - "go.banner.text": "Ox Alpha Free 限时加入 Go", "go.meta.description": "Go 每月 $10,提供充裕的使用限额,并可可靠访问领先的编程模型。", "go.hero.title": "人人可用的低成本编程模型", "go.hero.body": diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts index 3da3c462558a..b83e75f779ee 100644 --- a/packages/console/app/src/i18n/zht.ts +++ b/packages/console/app/src/i18n/zht.ts @@ -244,7 +244,6 @@ export const dict = { "zen.privacy.exceptionsLink": "以下例外情況", "go.title": "OpenCode Go | 低成本全民編碼模型", - "go.banner.text": "Ox Alpha Free 限時加入 Go", "go.meta.description": "Go 每月 $10,提供充裕的使用限額,並可穩定存取領先的編碼模型。", "go.hero.title": "低成本全民編碼模型", "go.hero.body": diff --git a/packages/console/app/src/routes/go/index.css b/packages/console/app/src/routes/go/index.css index a329e2981efb..8e715e363b55 100644 --- a/packages/console/app/src/routes/go/index.css +++ b/packages/console/app/src/routes/go/index.css @@ -327,37 +327,6 @@ body { } } - [data-component="desktop-app-banner"] { - display: flex; - align-items: center; - gap: 12px; - margin-bottom: 32px; - - [data-slot="badge"] { - background: var(--color-background-strong); - color: var(--color-text-inverted); - font-weight: 500; - padding: 4px 8px; - line-height: 1; - flex-shrink: 0; - } - - [data-slot="content"] { - display: flex; - align-items: center; - gap: 1ch; - } - - [data-slot="text"] { - color: var(--color-text-strong); - line-height: 1.4; - - @media (max-width: 30.625rem) { - display: none; - } - } - } - [data-slot="hero-copy"] { img { margin-bottom: 24px; diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index e101012b98d4..e36e10af8a87 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -81,7 +81,6 @@ function LimitsGraph(props: { href: string }) { { id: "mimo-v2.5", name: "MiMo-V2.5", req: 30100, d: "340ms" }, { id: "hy3", name: "Hy3", req: 34400, baseReq: 4300, d: "320ms" }, { id: "muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", req: 45300, edge: true, d: "360ms" }, - { id: "ox-alpha-free", name: "Ox Alpha Free", req: Infinity, infinite: true, edge: true, d: "400ms" }, ] const w = 1040 @@ -270,12 +269,6 @@ export default function Home() {
      -
      - {i18n.t("home.banner.badge")} -
      - {i18n.t("go.banner.text")} -
      -
      diff --git a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx index b72d38c4cf85..7e535ae8a765 100644 --- a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx @@ -662,7 +662,6 @@ export function LiteSection(props: { lite: LiteSubscription | undefined }) {
    • MiMo-V2.5
    • MiMo-V2.5-Pro
    • Hy3
    • -
    • Ox Alpha Free

    {i18n.t("workspace.lite.promo.footer")}

    diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx index fd47f5bfc295..5ea9b1453feb 100644 --- a/packages/web/src/content/docs/ar/go.mdx +++ b/packages/web/src/content/docs/ar/go.mdx @@ -71,7 +71,6 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (لفترة محدودة) قد تتغير قائمة النماذج مع استمرارنا في اختبار نماذج جديدة وإضافتها. @@ -113,7 +112,6 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | تستند التقديرات إلى أنماط الطلبات المرصودة: @@ -171,13 +169,11 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** ساعات Peak هي 01:00-04:00 و06:00-10:00 UTC من الاثنين إلى الجمعة؛ وجميع الساعات الأخرى، بما في ذلك عطلات نهاية الأسبوع، Off-Peak. [اعرف المزيد](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** يتم تحويل الصور إلى رموز بناءً على أبعادها، وتُحتسب كرموز إدخال إلى جانب رموز النص. [اعرف المزيد](https://api-docs.deepseek.com/quick_start/pricing/). -**Ox Alpha Free:** مجاني لفترة محدودة. يمكنك تتبّع استخدامك الحالي في **console**. @@ -236,7 +232,6 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | يستخدم [model id](/docs/config/#models) في إعدادات OpenCode لديك التنسيق `opencode-go/`. على سبيل المثال، بالنسبة إلى Kimi K3، ستستخدم `opencode-go/kimi-k3` في إعداداتك. @@ -278,7 +273,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | غير مستخدَمة | 0 أيام | | DeepSeek V4 Flash Vision Exp | غير مستخدَمة | 0 أيام | | Hy3 | غير مستخدَمة | 0 أيام | -| Ox Alpha Free | غير مستخدَمة | 0 أيام | - **Grok 4.6:** تعطّل ZDR ميزات API مهمة تعتمد على البيانات المخزنة، بما في ذلك Responses API ذات الحالة، وFiles and Collections، وBatch API. [اعرف المزيد](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** تُنشأ سجلات مراقبة إساءة الاستخدام لكل استخدام لميزات API، ويُحتفظ بها لمدة تصل إلى 30 يومًا. [اعرف المزيد](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/ar/zen.mdx b/packages/web/src/content/docs/ar/zen.mdx index c4e7e8dd92a4..7609c0b6f8fb 100644 --- a/packages/web/src/content/docs/ar/zen.mdx +++ b/packages/web/src/content/docs/ar/zen.mdx @@ -112,7 +112,6 @@ OpenCode Zen هي بوابة AI تتيح لك الوصول إلى هذه الن | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -140,7 +139,6 @@ https://opencode.ai/zen/v1/models | النموذج | الإدخال | الإخراج | القراءة المخزنة | الكتابة المخزنة | | --------------------------------- | ------- | ------- | --------------- | --------------- | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -231,7 +229,6 @@ https://opencode.ai/zen/v1/models - Nemotron 3 Ultra Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. - Nemotron 3.5 Lightning Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. - Big Pickle نموذج خفي ومتاح مجانا على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. -- Ox Alpha Free نموذج خفي ومتاح مجانا على OpenCode لفترة محدودة. يتبع مزوده سياسة عدم الاحتفاظ بالبيانات ولا يستخدم بياناتك لتدريب النماذج. - Muse Spark 1.2 Contributor Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. تواصل معنا إذا كانت لديك أي أسئلة. diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index ca0a3d1a7157..ea5204858943 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -81,7 +81,6 @@ Trenutna lista modela uključuje: - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (ograničeno vrijeme) Lista modela se može mijenjati dok testiramo i dodajemo nove. @@ -123,7 +122,6 @@ Tabela ispod pruža procijenjeni broj zahtjeva na osnovu tipičnih obrazaca kori | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | Procjene se zasnivaju na zapaženim obrascima zahtjeva: @@ -181,13 +179,11 @@ Procjene se također zasnivaju na sljedećim cijenama po 1M tokena i mjesečnoj | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak sati su 01:00-04:00 i 06:00-10:00 UTC od ponedjeljka do petka; svi ostali sati, uključujući vikende, su Off-Peak. [Saznajte više](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Slike se pretvaraju u tokene na osnovu svojih dimenzija i naplaćuju kao ulazni tokeni zajedno s tekstualnim tokenima. [Saznajte više](https://api-docs.deepseek.com/quick_start/pricing/). -**Ox Alpha Free:** Besplatan ograničeno vrijeme. Svoju trenutnu potrošnju možete pratiti u **konzoli**. @@ -248,7 +244,6 @@ Također možete pristupiti Go modelima putem sljedećih API endpointa. | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [Model id](/docs/config/#models) u vašoj OpenCode konfiguraciji koristi format `opencode-go/`. Na primjer, za Kimi K3, koristili biste @@ -292,7 +287,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | Ne koristi se | 0 dana | | DeepSeek V4 Flash Vision Exp | Ne koristi se | 0 dana | | Hy3 | Ne koristi se | 0 dana | -| Ox Alpha Free | Ne koristi se | 0 dana | - **Grok 4.6:** ZDR onemogućava važne API funkcije koje zavise od pohranjenih podataka, uključujući Responses API s očuvanjem stanja, Files and Collections i Batch API. [Saznajte više](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Zapisi o nadzoru zloupotrebe generišu se za svako korištenje API funkcija i čuvaju do 30 dana. [Saznajte više](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/bs/zen.mdx b/packages/web/src/content/docs/bs/zen.mdx index 0b99b4a1c650..4cb932343d6f 100644 --- a/packages/web/src/content/docs/bs/zen.mdx +++ b/packages/web/src/content/docs/bs/zen.mdx @@ -117,7 +117,6 @@ Našim modelima možete pristupiti i preko sljedećih API endpointa. | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -147,7 +146,6 @@ Podržavamo pay-as-you-go model. Ispod su cijene **po 1M tokena**. | Model | Input | Output | Cached Read | Cached Write | | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -238,7 +236,6 @@ Besplatni modeli: - Nemotron 3 Ultra Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. - Nemotron 3.5 Lightning Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. - Big Pickle je stealth model koji je besplatan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. -- Ox Alpha Free je stealth model koji je besplatan na OpenCode ograničeno vrijeme. Pružalac usluge slijedi politiku nultog zadržavanja i ne koristi vaše podatke za treniranje modela. - Muse Spark 1.2 Contributor Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. Kontaktirajte nas ako imate bilo kakvih pitanja. diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx index 16a944f68c52..042823363dba 100644 --- a/packages/web/src/content/docs/da/go.mdx +++ b/packages/web/src/content/docs/da/go.mdx @@ -81,7 +81,6 @@ Den nuværende liste over modeller inkluderer: - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (i en begrænset periode) Listen over modeller kan ændre sig, efterhånden som vi tester og tilføjer nye. @@ -123,7 +122,6 @@ Tabellen nedenfor giver et estimeret antal anmodninger baseret på typiske Go-fo | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | Estimaterne er baseret på observerede anmodningsmønstre: @@ -181,13 +179,11 @@ Estimaterne er også baseret på følgende priser pr. 1M tokens og det månedlig | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak-tiderne er 01:00-04:00 og 06:00-10:00 UTC fra mandag til fredag; alle andre tider, herunder weekender, er Off-Peak. [Læs mere](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Billeder konverteres til tokens baseret på deres dimensioner og afregnes som inputtokens sammen med teksttokens. [Læs mere](https://api-docs.deepseek.com/quick_start/pricing/). -**Ox Alpha Free:** Gratis i en begrænset periode. Du kan spore dit nuværende forbrug i **konsollen**. @@ -248,7 +244,6 @@ Du kan også få adgang til Go-modeller gennem følgende API-endpoints. | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | Dit [model id](/docs/config/#models) i din OpenCode config bruger formatet `opencode-go/`. For eksempel for Kimi K3, vil du @@ -292,7 +287,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | Ikke brugt | 0 dage | | DeepSeek V4 Flash Vision Exp | Ikke brugt | 0 dage | | Hy3 | Ikke brugt | 0 dage | -| Ox Alpha Free | Ikke brugt | 0 dage | - **Grok 4.6:** ZDR deaktiverer vigtige API-funktioner, der afhænger af lagrede data, herunder den tilstandsbevarende Responses API, Files and Collections og Batch API. [Læs mere](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Logfiler til overvågning af misbrug genereres ved al brug af API-funktioner og opbevares i op til 30 dage. [Læs mere](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/da/zen.mdx b/packages/web/src/content/docs/da/zen.mdx index 7ff136aaadf0..5a8fee3ea87e 100644 --- a/packages/web/src/content/docs/da/zen.mdx +++ b/packages/web/src/content/docs/da/zen.mdx @@ -117,7 +117,6 @@ Du kan også få adgang til vores modeller gennem følgende API-endpoints. | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -147,7 +146,6 @@ Vi understøtter en pay-as-you-go-model. Nedenfor er priserne **pr. 1M tokens**. | Model | Input | Output | Cached Read | Cached Write | | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -238,7 +236,6 @@ De gratis modeller: - Nemotron 3 Ultra Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. - Nemotron 3.5 Lightning Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. - Big Pickle er en stealth-model, som er gratis på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. -- Ox Alpha Free er en stealth-model, som er gratis på OpenCode i en begrænset periode. Udbyderen følger en nul-opbevaringspolitik og bruger ikke dine data til at træne modeller. - Muse Spark 1.2 Contributor Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. Kontakt os, hvis du har spørgsmål. diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx index a4d7484c80ca..39c1800f016d 100644 --- a/packages/web/src/content/docs/de/go.mdx +++ b/packages/web/src/content/docs/de/go.mdx @@ -73,7 +73,6 @@ Die aktuelle Liste der Modelle umfasst: - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (für begrenzte Zeit) Die Liste der Modelle kann sich ändern, während wir neue testen und hinzufügen. @@ -115,7 +114,6 @@ Die folgende Tabelle zeigt eine geschätzte Anzahl von Anfragen basierend auf ty | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | Die Schätzungen basieren auf beobachteten Anfragemustern: @@ -173,13 +171,11 @@ Die Schätzungen basieren außerdem auf den folgenden Preisen pro 1M Tokens und | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Die Peak-Zeiten sind montags bis freitags von 01:00-04:00 und 06:00-10:00 UTC; alle anderen Zeiten, einschließlich der Wochenenden, sind Off-Peak. [Mehr erfahren](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Bilder werden anhand ihrer Abmessungen in Tokens umgewandelt und zusammen mit Text-Tokens als Input-Tokens abgerechnet. [Mehr erfahren](https://api-docs.deepseek.com/quick_start/pricing/). -**Ox Alpha Free:** Für begrenzte Zeit kostenlos. Du kannst deine aktuelle Nutzung in der **Console** verfolgen. @@ -238,7 +234,6 @@ Du kannst auf die Go-Modelle auch über die folgenden API-Endpunkte zugreifen. | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | Die [Modell-ID](/docs/config/#models) in deiner OpenCode Config verwendet das Format `opencode-go/`. Für Kimi K3 würdest du beispielsweise `opencode-go/kimi-k3` in deiner Config verwenden. @@ -280,7 +275,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | Nicht verwendet | 0 Tage | | DeepSeek V4 Flash Vision Exp | Nicht verwendet | 0 Tage | | Hy3 | Nicht verwendet | 0 Tage | -| Ox Alpha Free | Nicht verwendet | 0 Tage | - **Grok 4.6:** ZDR deaktiviert wichtige API-Funktionen, die von gespeicherten Daten abhängen, einschließlich der zustandsbehafteten Responses API, Files and Collections und der Batch API. [Mehr erfahren](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Für die Nutzung aller API-Funktionen werden Protokolle zur Missbrauchsüberwachung erstellt und bis zu 30 Tage lang aufbewahrt. [Mehr erfahren](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/de/zen.mdx b/packages/web/src/content/docs/de/zen.mdx index 4084fa9cec6b..c1061c2d7e1d 100644 --- a/packages/web/src/content/docs/de/zen.mdx +++ b/packages/web/src/content/docs/de/zen.mdx @@ -108,7 +108,6 @@ Du kannst auch über die folgenden API-Endpunkte auf unsere Modelle zugreifen. | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -136,7 +135,6 @@ Wir unterstützen ein Pay-as-you-go-Modell. Unten findest du die Preise **pro 1M | Model | Input | Output | Cached Read | Cached Write | | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -227,7 +225,6 @@ Die kostenlosen Modelle: - Nemotron 3 Ultra Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. - Nemotron 3.5 Lightning Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. - Big Pickle ist ein Stealth-Modell, das für begrenzte Zeit kostenlos auf OpenCode verfügbar ist. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. -- Ox Alpha Free ist ein Stealth-Modell, das für begrenzte Zeit kostenlos auf OpenCode verfügbar ist. Der Anbieter befolgt eine Zero-Retention-Richtlinie und verwendet deine Daten nicht zum Trainieren von Modellen. - Muse Spark 1.2 Contributor Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. Kontaktiere uns, wenn du Fragen hast. diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index ca1bb08a28ad..79416ed45d25 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -81,7 +81,6 @@ La lista actual de modelos incluye: - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (por tiempo limitado) La lista de modelos puede cambiar a medida que probamos y agregamos otros nuevos. @@ -123,7 +122,6 @@ La siguiente tabla proporciona una cantidad estimada de peticiones basada en los | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | Las estimaciones se basan en los patrones de peticiones observados: @@ -181,13 +179,11 @@ Las estimaciones también se basan en los siguientes precios por 1M tokens y en | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Las horas Peak son 01:00-04:00 y 06:00-10:00 UTC, de lunes a viernes; todas las demás horas, incluidos los fines de semana, son Off-Peak. [Más información](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Las imágenes se convierten en tokens según sus dimensiones y se facturan como tokens de entrada junto con los tokens de texto. [Más información](https://api-docs.deepseek.com/quick_start/pricing/). -**Ox Alpha Free:** Gratis por tiempo limitado. Puedes realizar un seguimiento de tu uso actual en la **consola**. @@ -248,7 +244,6 @@ También puedes acceder a los modelos de Go a través de los siguientes endpoint | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | El [ID del modelo](/docs/config/#models) en tu configuración de OpenCode usa el formato `opencode-go/`. Por ejemplo, para Kimi K3, usarías @@ -292,7 +287,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | No utilizado | 0 días | | DeepSeek V4 Flash Vision Exp | No utilizado | 0 días | | Hy3 | No utilizado | 0 días | -| Ox Alpha Free | No utilizado | 0 días | - **Grok 4.6:** ZDR deshabilita funciones importantes de la API que dependen de datos almacenados, incluidas la Responses API con estado, Files and Collections y la Batch API. [Más información](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Se generan registros de supervisión de abusos para todo el uso de funciones de la API y se conservan durante un máximo de 30 días. [Más información](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/es/zen.mdx b/packages/web/src/content/docs/es/zen.mdx index 4fbd7048a411..eed117a8d962 100644 --- a/packages/web/src/content/docs/es/zen.mdx +++ b/packages/web/src/content/docs/es/zen.mdx @@ -117,7 +117,6 @@ También puedes acceder a nuestros modelos a través de los siguientes endpoints | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -147,7 +146,6 @@ Admitimos un modelo de pago por uso. A continuación se muestran los precios **p | Modelo | Entrada | Salida | Lectura en caché | Escritura en caché | | --------------------------------- | ------- | ------- | ---------------- | ------------------ | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -238,7 +236,6 @@ Los modelos gratuitos: - Nemotron 3 Ultra Free está disponible en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. - Nemotron 3.5 Lightning Free está disponible en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. - Big Pickle es un modelo stealth que es gratuito en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. -- Ox Alpha Free es un modelo stealth que es gratuito en OpenCode por tiempo limitado. Su proveedor sigue una política de retención cero y no utiliza tus datos para entrenar modelos. - Muse Spark 1.2 Contributor Free está disponible en OpenCode por tiempo limitado. El equipo está aprovechando este período para recopilar comentarios y mejorar el modelo. Contáctanos si tienes alguna pregunta. diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx index 6e906c648371..17460a9492d6 100644 --- a/packages/web/src/content/docs/fr/go.mdx +++ b/packages/web/src/content/docs/fr/go.mdx @@ -71,7 +71,6 @@ La liste actuelle des modèles comprend : - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (pour une durée limitée) La liste des modèles peut changer au fur et à mesure que nous en testons et en ajoutons de nouveaux. @@ -113,7 +112,6 @@ Le tableau ci-dessous fournit une estimation du nombre de requêtes basée sur d | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | Les estimations sont basées sur les schémas de requêtes observés : @@ -171,13 +169,11 @@ Les estimations sont également basées sur les prix suivants par 1M tokens et s | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Les heures Peak sont 01:00-04:00 et 06:00-10:00 UTC, du lundi au vendredi ; toutes les autres heures, y compris le week-end, sont Off-Peak. [En savoir plus](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Les images sont converties en tokens selon leurs dimensions et facturées comme tokens d’entrée avec les tokens de texte. [En savoir plus](https://api-docs.deepseek.com/quick_start/pricing/). -**Ox Alpha Free:** Gratuit pour une durée limitée. Vous pouvez suivre votre utilisation actuelle dans la **console**. @@ -236,7 +232,6 @@ Vous pouvez également accéder aux modèles Go via les points de terminaison d' | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | L'[ID de modèle](/docs/config/#models) dans votre configuration OpenCode utilise le format `opencode-go/`. Par exemple, pour Kimi K3, vous utiliseriez `opencode-go/kimi-k3` dans votre configuration. @@ -278,7 +273,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | Non utilisé | 0 jour | | DeepSeek V4 Flash Vision Exp | Non utilisé | 0 jour | | Hy3 | Non utilisé | 0 jour | -| Ox Alpha Free | Non utilisé | 0 jour | - **Grok 4.6:** Le ZDR désactive d’importantes fonctionnalités API qui dépendent des données stockées, notamment Responses API avec état, Files and Collections et Batch API. [En savoir plus](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Des journaux de surveillance des abus sont générés pour toute utilisation des fonctionnalités API et conservés pendant un maximum de 30 jours. [En savoir plus](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/fr/zen.mdx b/packages/web/src/content/docs/fr/zen.mdx index f16a748c1d3d..8061a2ced0d2 100644 --- a/packages/web/src/content/docs/fr/zen.mdx +++ b/packages/web/src/content/docs/fr/zen.mdx @@ -108,7 +108,6 @@ Vous pouvez également accéder à nos modèles via les points de terminaison AP | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -136,7 +135,6 @@ Nous prenons en charge un modèle de paiement à l'utilisation. Vous trouverez c | Modèle | Input | Output | Cached Read | Cached Write | | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -227,7 +225,6 @@ Les modèles gratuits : - Nemotron 3 Ultra Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. - Nemotron 3.5 Lightning Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. - Big Pickle est un modèle stealth gratuit sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. -- Ox Alpha Free est un modèle stealth gratuit sur OpenCode pour une durée limitée. Son fournisseur applique une politique de conservation nulle et n'utilise pas vos données pour entraîner des modèles. - Muse Spark 1.2 Contributor Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. Contactez-nous si vous avez des questions. diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index b5f6bde71915..8ed9fe567fe2 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -81,7 +81,6 @@ The current list of models includes: - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (limited time) The list of models may change as we test and add new ones. @@ -123,7 +122,6 @@ The table below provides an estimated request count based on typical Go usage pa | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | The estimates are based on observed request patterns: @@ -181,13 +179,11 @@ The estimates are also based on the following prices per 1M tokens and the month | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak hours are 01:00-04:00 and 06:00-10:00 UTC, Monday through Friday; all other hours, including weekends, are Off-Peak. [Learn more](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Images are converted into tokens based on their dimensions and billed as input tokens alongside text tokens. [Learn more](https://api-docs.deepseek.com/quick_start/pricing/). -**Ox Alpha Free:** Free for a limited time. You can track your current usage in the **console**. @@ -248,7 +244,6 @@ You can also access Go models through the following API endpoints. | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | The [model id](/docs/config/#models) in your OpenCode config uses the format `opencode-go/`. For example, for Kimi K3, you would @@ -292,7 +287,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | Not used | 0 days\* | | DeepSeek V4 Flash Vision Exp | Not used | 0 days\* | | Hy3 | Not used | 0 days | -| Ox Alpha Free | Not used | 0 days | - **Grok 4.6:** ZDR disables important API features that depend on stored data, including the stateful Responses API, Files and Collections, and the Batch API. [Learn more](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Abuse monitoring logs are generated for all API feature usage and retained for up to 30 days. [Learn more](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx index 2c8c09eb9e6d..e16b42101e52 100644 --- a/packages/web/src/content/docs/it/go.mdx +++ b/packages/web/src/content/docs/it/go.mdx @@ -79,7 +79,6 @@ L'elenco attuale dei modelli include: - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (per un periodo limitato) L'elenco dei modelli potrebbe cambiare man mano che ne testiamo e aggiungiamo di nuovi. @@ -121,7 +120,6 @@ La tabella seguente fornisce una stima del conteggio delle richieste in base a p | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | Le stime si basano sui pattern di richieste osservati: @@ -179,13 +177,11 @@ Le stime si basano anche sui seguenti prezzi per 1M token e sull'utilizzo mensil | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Gli orari Peak sono 01:00-04:00 e 06:00-10:00 UTC, dal lunedì al venerdì; tutti gli altri orari, inclusi i fine settimana, sono Off-Peak. [Scopri di più](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Le immagini vengono convertite in token in base alle loro dimensioni e fatturate come token di input insieme ai token di testo. [Scopri di più](https://api-docs.deepseek.com/quick_start/pricing/). -**Ox Alpha Free:** Gratis per un periodo limitato. Puoi monitorare il tuo utilizzo attuale nella **console**. @@ -246,7 +242,6 @@ Puoi anche accedere ai modelli Go tramite i seguenti endpoint API. | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | Il [model id](/docs/config/#models) nella tua OpenCode config utilizza il formato `opencode-go/`. Ad esempio, per Kimi K3, useresti @@ -290,7 +285,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | Non utilizzato | 0 giorni | | DeepSeek V4 Flash Vision Exp | Non utilizzato | 0 giorni | | Hy3 | Non utilizzato | 0 giorni | -| Ox Alpha Free | Non utilizzato | 0 giorni | - **Grok 4.6:** ZDR disabilita importanti funzionalità API che dipendono dai dati archiviati, tra cui la Responses API con stato, Files and Collections e Batch API. [Scopri di più](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** I log di monitoraggio degli abusi vengono generati per l'utilizzo di tutte le funzionalità API e conservati per un massimo di 30 giorni. [Scopri di più](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/it/zen.mdx b/packages/web/src/content/docs/it/zen.mdx index 917bf3a3075f..ab6c944725f8 100644 --- a/packages/web/src/content/docs/it/zen.mdx +++ b/packages/web/src/content/docs/it/zen.mdx @@ -117,7 +117,6 @@ Puoi anche accedere ai nostri modelli tramite i seguenti endpoint API. | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -147,7 +146,6 @@ Supportiamo un modello pay-as-you-go. Qui sotto trovi i prezzi **per 1M token**. | Modello | Input | Output | Cached Read | Cached Write | | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -238,7 +236,6 @@ I modelli gratuiti: - Nemotron 3 Ultra Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. - Nemotron 3.5 Lightning Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. - Big Pickle è un modello stealth che è gratuito su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. -- Ox Alpha Free è un modello stealth gratuito su OpenCode per un periodo limitato. Il suo provider segue una politica di conservazione zero e non usa i tuoi dati per addestrare modelli. - Muse Spark 1.2 Contributor Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. Contattaci se hai domande. diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx index 2eb7571491b4..3ab3372f898b 100644 --- a/packages/web/src/content/docs/ja/go.mdx +++ b/packages/web/src/content/docs/ja/go.mdx @@ -71,7 +71,6 @@ OpenCode Goをサブスクライブできるのは、1つのワークスペー - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (期間限定) 新しいモデルをテストして追加するにつれて、モデルのリストは変更される場合があります。 @@ -113,7 +112,6 @@ OpenCode Goには以下の制限が含まれています: | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | 推定値は、観測されたリクエストパターンに基づいています: @@ -171,13 +169,11 @@ OpenCode Goには以下の制限が含まれています: | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak時間は月曜日から金曜日の01:00-04:00と06:00-10:00 UTCで、週末を含むそれ以外の時間はすべてOff-Peakです。[詳しく見る](https://api-docs.deepseek.com/quick_start/pricing/)。 **DeepSeek V4 Flash Vision Exp:** 画像はサイズに基づいてトークンに変換され、テキストトークンと合わせて入力トークンとして課金されます。 [詳しく見る](https://api-docs.deepseek.com/quick_start/pricing/)。 -**Ox Alpha Free:** 期間限定で無料です。 現在の利用状況は**コンソール**で追跡できます。 @@ -236,7 +232,6 @@ Goでは月額$10を支払い、その6倍の利用枠を提供することを | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | OpenCode設定の[model id](/docs/config/#models)は、`opencode-go/`という形式を使用します。たとえば、Kimi K3の場合は、設定で`opencode-go/kimi-k3`を使用します。 @@ -278,7 +273,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | 使用なし | 0日 | | DeepSeek V4 Flash Vision Exp | 使用なし | 0日 | | Hy3 | 使用なし | 0日 | -| Ox Alpha Free | 使用なし | 0日 | - **Grok 4.6:** ZDRでは、保存データに依存する重要なAPI機能(ステートフルなResponses API、Files and Collections、Batch APIなど)が無効になります。[詳しく見る](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 - **GPT 5.6 Luna:** 不正使用監視ログはすべてのAPI機能の使用時に生成され、最大30日間保持されます。[詳しく見る](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring)。 diff --git a/packages/web/src/content/docs/ja/zen.mdx b/packages/web/src/content/docs/ja/zen.mdx index 601509dcd367..acf316674fdb 100644 --- a/packages/web/src/content/docs/ja/zen.mdx +++ b/packages/web/src/content/docs/ja/zen.mdx @@ -108,7 +108,6 @@ OpenCode Zen は、OpenCode のほかのプロバイダーと同じように動 | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -136,7 +135,6 @@ https://opencode.ai/zen/v1/models | Model | Input | Output | Cached Read | Cached Write | | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -227,7 +225,6 @@ https://opencode.ai/zen/v1/models - Nemotron 3 Ultra Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 - Nemotron 3.5 Lightning Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 - Big Pickle はステルスモデルで、期間限定で OpenCode で無料提供されています。チームはこの期間中にフィードバックを集め、モデルを改善しています。 -- Ox Alpha Free はステルスモデルで、期間限定で OpenCode で無料提供されています。プロバイダーはゼロ保持ポリシーに従い、データをモデルのトレーニングに使用しません。 - Muse Spark 1.2 Contributor Free は期間限定で OpenCode で利用できます。チームはこの期間を活用してフィードバックを収集し、モデルを改善しています。 ご不明な点があれば、お問い合わせください。 diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx index dfe73049ad81..8117a76ad288 100644 --- a/packages/web/src/content/docs/ko/go.mdx +++ b/packages/web/src/content/docs/ko/go.mdx @@ -71,7 +71,6 @@ workspace당 한 명의 멤버만 OpenCode Go를 구독할 수 있습니다. - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (한정된 기간) 새로운 모델을 테스트하고 추가함에 따라 이 목록은 변경될 수 있습니다. @@ -113,7 +112,6 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | 이 예상치는 관찰된 요청 패턴을 기준으로 합니다. @@ -171,13 +169,11 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 시간은 월요일부터 금요일까지 01:00-04:00 및 06:00-10:00 UTC이며, 주말을 포함한 그 외 모든 시간은 Off-Peak입니다. [자세히 알아보기](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** 이미지는 크기에 따라 토큰으로 변환되며 텍스트 토큰과 함께 입력 토큰으로 청구됩니다. [자세히 알아보기](https://api-docs.deepseek.com/quick_start/pricing/). -**Ox Alpha Free:** 한정된 기간 동안 무료입니다. 현재 사용량은 **console**에서 확인할 수 있습니다. @@ -236,7 +232,6 @@ Go에서는 월 $10를 지불하며, 저희는 그 6배의 사용량을 제공 | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | OpenCode config의 [model id](/docs/config/#models)는 `opencode-go/` 형식을 사용합니다. 예를 들어 Kimi K3의 경우 config에서 `opencode-go/kimi-k3`를 사용하면 됩니다. @@ -278,7 +273,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | 사용되지 않음 | 0일 | | DeepSeek V4 Flash Vision Exp | 사용되지 않음 | 0일 | | Hy3 | 사용되지 않음 | 0일 | -| Ox Alpha Free | 사용되지 않음 | 0일 | - **Grok 4.6:** ZDR은 저장된 데이터에 의존하는 중요한 API 기능(상태 저장형 Responses API, Files and Collections, Batch API 포함)을 비활성화합니다. [자세히 알아보기](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** 모든 API 기능 사용에 대해 악용 모니터링 로그가 생성되며 최대 30일 동안 보존됩니다. [자세히 알아보기](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/ko/zen.mdx b/packages/web/src/content/docs/ko/zen.mdx index 58a646f01247..a3965a9eb447 100644 --- a/packages/web/src/content/docs/ko/zen.mdx +++ b/packages/web/src/content/docs/ko/zen.mdx @@ -108,7 +108,6 @@ OpenCode Zen은 OpenCode의 다른 provider와 똑같이 작동합니다. | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -136,7 +135,6 @@ https://opencode.ai/zen/v1/models | 모델 | 입력 | 출력 | Cached Read | Cached Write | | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -227,7 +225,6 @@ https://opencode.ai/zen/v1/models - Nemotron 3 Ultra Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. - Nemotron 3.5 Lightning Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. - Big Pickle은 한정된 기간 동안 OpenCode에서 무료로 제공되는 stealth model입니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. -- Ox Alpha Free는 한정된 기간 동안 OpenCode에서 무료로 제공되는 stealth model입니다. 제공업체는 데이터 미보관 정책을 따르며 사용자의 데이터를 모델 학습에 사용하지 않습니다. - Muse Spark 1.2 Contributor Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간을 활용해 피드백을 수집하고 모델을 개선하고 있습니다. 궁금한 점이 있으면 Contact us로 문의해 주세요. diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx index 93c8dd691259..44b6bf5739f0 100644 --- a/packages/web/src/content/docs/nb/go.mdx +++ b/packages/web/src/content/docs/nb/go.mdx @@ -81,7 +81,6 @@ Den nåværende listen over modeller inkluderer: - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (i en begrenset periode) Listen over modeller kan endres etter hvert som vi tester og legger til nye. @@ -123,7 +122,6 @@ Tabellen nedenfor gir et estimert antall forespørsler basert på typiske bruksm | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | Estimatene er basert på observerte forespørselsmønstre: @@ -181,13 +179,11 @@ Estimatene er også basert på følgende priser per 1M tokens og den månedlige | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak-tidene er 01:00-04:00 og 06:00-10:00 UTC fra mandag til fredag; alle andre tider, inkludert helger, er Off-Peak. [Les mer](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Bilder konverteres til tokens basert på dimensjonene og faktureres som input-tokens sammen med tekst-tokens. [Les mer](https://api-docs.deepseek.com/quick_start/pricing/). -**Ox Alpha Free:** Gratis i en begrenset periode. Du kan spore din nåværende bruk i **konsollen**. @@ -248,7 +244,6 @@ Du kan også få tilgang til Go-modeller gjennom følgende API-endepunkter. | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [Modell-ID-en](/docs/config/#models) i din OpenCode-konfigurasjon bruker formatet `opencode-go/`. For eksempel, for Kimi K3, vil du @@ -292,7 +287,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | Brukes ikke | 0 dager | | DeepSeek V4 Flash Vision Exp | Brukes ikke | 0 dager | | Hy3 | Brukes ikke | 0 dager | -| Ox Alpha Free | Brukes ikke | 0 dager | - **Grok 4.6:** ZDR deaktiverer viktige API-funksjoner som er avhengige av lagrede data, inkludert den tilstandsbaserte Responses API, Files and Collections og Batch API. [Les mer](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Logger for overvåking av misbruk genereres for all bruk av API-funksjoner og oppbevares i opptil 30 dager. [Les mer](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/nb/zen.mdx b/packages/web/src/content/docs/nb/zen.mdx index 0c98f3dc5fbf..68b7435be2b3 100644 --- a/packages/web/src/content/docs/nb/zen.mdx +++ b/packages/web/src/content/docs/nb/zen.mdx @@ -117,7 +117,6 @@ Du kan også få tilgang til modellene våre gjennom følgende API-endepunkter. | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -147,7 +146,6 @@ Vi støtter en pay-as-you-go-modell. Nedenfor er prisene **per 1M tokens**. | Modell | Inndata | Utdata | Bufret lesing | Bufret skriving | | --------------------------------- | ------- | ------- | ------------- | --------------- | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -238,7 +236,6 @@ Gratis-modellene: - Nemotron 3 Ultra Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. - Nemotron 3.5 Lightning Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. - Big Pickle er en stealth-modell som er gratis på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. -- Ox Alpha Free er en stealth-modell som er gratis på OpenCode i en begrenset periode. Leverandøren følger en nulloppbevaringspolicy og bruker ikke dataene dine til å trene modeller. - Muse Spark 1.2 Contributor Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. Kontakt oss hvis du har spørsmål. diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx index 2c4a896416f5..000530420158 100644 --- a/packages/web/src/content/docs/pl/go.mdx +++ b/packages/web/src/content/docs/pl/go.mdx @@ -75,7 +75,6 @@ Obecna lista modeli obejmuje: - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (przez ograniczony czas) Lista modeli może ulec zmianie w miarę testowania i dodawania nowych. @@ -117,7 +116,6 @@ Poniższa tabela przedstawia szacunkową liczbę żądań na podstawie typowych | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | Szacunki te opierają się na zaobserwowanych wzorcach żądań: @@ -175,13 +173,11 @@ Szacunki opierają się również na następujących cenach za 1M tokenów oraz | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Godziny Peak to 01:00-04:00 i 06:00-10:00 UTC od poniedziałku do piątku; wszystkie pozostałe godziny, w tym weekendy, to Off-Peak. [Dowiedz się więcej](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Obrazy są przeliczane na tokeny na podstawie ich wymiarów i rozliczane jako tokeny wejściowe razem z tokenami tekstowymi. [Dowiedz się więcej](https://api-docs.deepseek.com/quick_start/pricing/). -**Ox Alpha Free:** Bezpłatny przez ograniczony czas. Możesz śledzić swoje bieżące zużycie w **konsoli**. @@ -240,7 +236,6 @@ Możesz również uzyskać dostęp do modeli Go za pośrednictwem następującyc | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [ID modelu](/docs/config/#models) w Twojej konfiguracji OpenCode używa formatu `opencode-go/`. Na przykład dla Kimi K3 należy użyć @@ -284,7 +279,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | Niewykorzystywane | 0 dni | | DeepSeek V4 Flash Vision Exp | Niewykorzystywane | 0 dni | | Hy3 | Niewykorzystywane | 0 dni | -| Ox Alpha Free | Niewykorzystywane | 0 dni | - **Grok 4.6:** ZDR wyłącza ważne funkcje API zależne od przechowywanych danych, w tym stanowy Responses API, Files and Collections oraz Batch API. [Dowiedz się więcej](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Dzienniki monitorowania nadużyć są generowane dla każdego użycia funkcji API i przechowywane przez maksymalnie 30 dni. [Dowiedz się więcej](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/pl/zen.mdx b/packages/web/src/content/docs/pl/zen.mdx index b73fe5bd5bd2..c7db53507c4f 100644 --- a/packages/web/src/content/docs/pl/zen.mdx +++ b/packages/web/src/content/docs/pl/zen.mdx @@ -117,7 +117,6 @@ Możesz też uzyskać dostęp do naszych modeli przez poniższe endpointy API. | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -147,7 +146,6 @@ Obsługujemy model pay-as-you-go. Poniżej znajdują się ceny **za 1M tokenów* | Model | Wejście | Wyjście | Odczyt z cache | Zapis do cache | | --------------------------------- | ------- | ------- | -------------- | -------------- | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -238,7 +236,6 @@ Darmowe modele: - Nemotron 3 Ultra Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. - Nemotron 3.5 Lightning Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. - Big Pickle to stealth model, który jest darmowy w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. -- Ox Alpha Free to stealth model, który jest darmowy w OpenCode przez ograniczony czas. Dostawca stosuje zasadę zerowego przechowywania i nie używa twoich danych do trenowania modeli. - Muse Spark 1.2 Contributor Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. Skontaktuj się z nami, jeśli masz pytania. diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index 75487e15f87c..af09191b496a 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -81,7 +81,6 @@ A lista atual de modelos inclui: - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (por tempo limitado) A lista de modelos pode mudar conforme testamos e adicionamos novos. @@ -123,7 +122,6 @@ A tabela abaixo fornece uma contagem estimada de requisições com base nos padr | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | As estimativas se baseiam nos padrões de requisições observados: @@ -181,13 +179,11 @@ As estimativas também se baseiam nos seguintes preços por 1M tokens e no uso m | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Os horários Peak são 01:00-04:00 e 06:00-10:00 UTC, de segunda a sexta-feira; todos os demais horários, incluindo os fins de semana, são Off-Peak. [Saiba mais](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** As imagens são convertidas em tokens com base em suas dimensões e cobradas como tokens de entrada junto com os tokens de texto. [Saiba mais](https://api-docs.deepseek.com/quick_start/pricing/). -**Ox Alpha Free:** Gratuito por tempo limitado. Você pode acompanhar o seu uso atual no **console**. @@ -248,7 +244,6 @@ Você também pode acessar os modelos do Go através dos seguintes endpoints de | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | O [ID do modelo](/docs/config/#models) na sua configuração do OpenCode usa o formato `opencode-go/`. Por exemplo, para o Kimi K3, você usaria @@ -292,7 +287,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | Não usado | 0 dias | | DeepSeek V4 Flash Vision Exp | Não usado | 0 dias | | Hy3 | Não usado | 0 dias | -| Ox Alpha Free | Não usado | 0 dias | - **Grok 4.6:** O ZDR desativa recursos importantes da API que dependem de dados armazenados, incluindo a Responses API com estado, Files and Collections e a Batch API. [Saiba mais](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Logs de monitoramento de abuso são gerados para todo uso de recursos da API e retidos por até 30 dias. [Saiba mais](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/pt-br/zen.mdx b/packages/web/src/content/docs/pt-br/zen.mdx index 6fb7331b5398..5792ca2db7f5 100644 --- a/packages/web/src/content/docs/pt-br/zen.mdx +++ b/packages/web/src/content/docs/pt-br/zen.mdx @@ -108,7 +108,6 @@ Você também pode acessar nossos modelos pelos seguintes endpoints de API. | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -136,7 +135,6 @@ Oferecemos um modelo pay-as-you-go. Abaixo estão os preços **por 1M tokens**. | Modelo | Entrada | Saída | Leitura em cache | Escrita em cache | | --------------------------------- | ------- | ------- | ---------------- | ---------------- | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -227,7 +225,6 @@ Os modelos gratuitos: - Nemotron 3 Ultra Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. - Nemotron 3.5 Lightning Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. - Big Pickle é um modelo stealth que está gratuito no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. -- Ox Alpha Free é um modelo stealth gratuito no OpenCode por tempo limitado. Seu provedor segue uma política de retenção zero e não usa seus dados para treinar modelos. - Muse Spark 1.2 Contributor Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. Entre em contato se você tiver alguma dúvida. diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx index d96d18ae5917..801883ba658d 100644 --- a/packages/web/src/content/docs/ru/go.mdx +++ b/packages/web/src/content/docs/ru/go.mdx @@ -81,7 +81,6 @@ OpenCode Go работает так же, как и любой другой пр - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (ограниченное время) Список моделей может меняться по мере того, как мы тестируем и добавляем новые. @@ -123,7 +122,6 @@ OpenCode Go включает следующие лимиты: | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | Эти оценки основаны на наблюдаемых показателях запросов: @@ -181,13 +179,11 @@ OpenCode Go включает следующие лимиты: | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Часы Peak с понедельника по пятницу: 01:00-04:00 и 06:00-10:00 UTC; все остальные часы, включая выходные, относятся к Off-Peak. [Подробнее](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Изображения преобразуются в токены с учётом их размеров и оплачиваются как входные токены вместе с текстовыми токенами. [Подробнее](https://api-docs.deepseek.com/quick_start/pricing/). -**Ox Alpha Free:** Бесплатно в течение ограниченного времени. Вы можете отслеживать текущее использование в **консоли**. @@ -248,7 +244,6 @@ OpenCode Go включает следующие лимиты: | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [ID модели](/docs/config/#models) в вашем конфиге OpenCode использует формат `opencode-go/`. Например, для Kimi K3 вам нужно @@ -292,7 +287,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | Не используется | 0 дней | | DeepSeek V4 Flash Vision Exp | Не используется | 0 дней | | Hy3 | Не используется | 0 дней | -| Ox Alpha Free | Не используется | 0 дней | - **Grok 4.6:** ZDR отключает важные функции API, зависящие от сохраненных данных, включая Responses API с сохранением состояния, Files and Collections и Batch API. [Подробнее](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Журналы мониторинга злоупотреблений создаются при любом использовании функций API и хранятся до 30 дней. [Подробнее](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/ru/zen.mdx b/packages/web/src/content/docs/ru/zen.mdx index cd3c646d111b..f72238c90054 100644 --- a/packages/web/src/content/docs/ru/zen.mdx +++ b/packages/web/src/content/docs/ru/zen.mdx @@ -117,7 +117,6 @@ OpenCode Zen работает как любой другой провайдер | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -147,7 +146,6 @@ https://opencode.ai/zen/v1/models | Модель | Вход | Выход | Cached Read | Cached Write | | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -238,7 +236,6 @@ https://opencode.ai/zen/v1/models - Nemotron 3 Ultra Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. - Nemotron 3.5 Lightning Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. - Big Pickle — это скрытая модель, которая доступна бесплатно в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. -- Ox Alpha Free — это скрытая модель, которая доступна бесплатно в OpenCode ограниченное время. Поставщик соблюдает политику нулевого хранения и не использует ваши данные для обучения моделей. - Muse Spark 1.2 Contributor Free доступна в OpenCode в течение ограниченного времени. Команда использует этот период для сбора отзывов и улучшения модели. Свяжитесь с нами, если у вас есть вопросы. diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx index 5fb203921442..9f10c061b882 100644 --- a/packages/web/src/content/docs/th/go.mdx +++ b/packages/web/src/content/docs/th/go.mdx @@ -71,7 +71,6 @@ OpenCode Go ทำงานเหมือนกับผู้ให้บร - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (ในช่วงเวลาจำกัด) รายชื่อโมเดลอาจมีการเปลี่ยนแปลงเมื่อเราทำการทดสอบและเพิ่มโมเดลใหม่ๆ @@ -113,7 +112,6 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | การประมาณการนี้อ้างอิงจากรูปแบบการใช้งาน request ที่สังเกตพบ: @@ -171,13 +169,11 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** ช่วงเวลา Peak คือ 01:00-04:00 และ 06:00-10:00 UTC ตั้งแต่วันจันทร์ถึงวันศุกร์ ส่วนเวลาอื่นทั้งหมด รวมถึงวันหยุดสุดสัปดาห์ เป็น Off-Peak [ดูข้อมูลเพิ่มเติม](https://api-docs.deepseek.com/quick_start/pricing/) **DeepSeek V4 Flash Vision Exp:** รูปภาพจะถูกแปลงเป็น token ตามขนาด และคิดค่าบริการเป็น input token รวมกับ text token [ดูข้อมูลเพิ่มเติม](https://api-docs.deepseek.com/quick_start/pricing/) -**Ox Alpha Free:** ใช้งานฟรีในช่วงเวลาจำกัด คุณสามารถติดตามการใช้งานปัจจุบันของคุณได้ใน **console** @@ -236,7 +232,6 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [model id](/docs/config/#models) ใน OpenCode config ของคุณจะใช้รูปแบบ `opencode-go/` ตัวอย่างเช่น สำหรับ Kimi K3 คุณจะใช้ `opencode-go/kimi-k3` ใน config ของคุณ @@ -278,7 +273,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | ไม่นำไปใช้ | 0 วัน | | DeepSeek V4 Flash Vision Exp | ไม่นำไปใช้ | 0 วัน | | Hy3 | ไม่นำไปใช้ | 0 วัน | -| Ox Alpha Free | ไม่นำไปใช้ | 0 วัน | - **Grok 4.6:** ZDR ปิดใช้งานฟีเจอร์ API สำคัญที่ต้องอาศัยข้อมูลที่จัดเก็บไว้ ซึ่งรวมถึง Responses API แบบมีสถานะ, Files and Collections และ Batch API [ดูข้อมูลเพิ่มเติม](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr) - **GPT 5.6 Luna:** ระบบจะสร้างบันทึกการตรวจสอบการใช้งานในทางที่ผิดสำหรับการใช้งานฟีเจอร์ API ทั้งหมด และเก็บรักษาไว้นานสูงสุด 30 วัน [ดูข้อมูลเพิ่มเติม](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring) diff --git a/packages/web/src/content/docs/th/zen.mdx b/packages/web/src/content/docs/th/zen.mdx index 33d19cdd7d81..157e906a3ac1 100644 --- a/packages/web/src/content/docs/th/zen.mdx +++ b/packages/web/src/content/docs/th/zen.mdx @@ -110,7 +110,6 @@ OpenCode Zen ทำงานเหมือน provider อื่น ๆ ใน | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -138,7 +137,6 @@ https://opencode.ai/zen/v1/models | Model | Input | Output | Cached Read | Cached Write | | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -229,7 +227,6 @@ https://opencode.ai/zen/v1/models - Nemotron 3 Ultra Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล - Nemotron 3.5 Lightning Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล - Big Pickle เป็น stealth model ที่ใช้งานฟรีบน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล -- Ox Alpha Free เป็น stealth model ที่ใช้งานฟรีบน OpenCode ในช่วงเวลาจำกัด ผู้ให้บริการใช้นโยบายไม่เก็บรักษาข้อมูลและไม่นำข้อมูลของคุณไปใช้ฝึกโมเดล - Muse Spark 1.2 Contributor Free เปิดให้ใช้งานบน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อรวบรวมความคิดเห็นและปรับปรุงโมเดล ติดต่อเรา หากคุณมีคำถาม diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx index 85f228285f52..4f13b1d73fd4 100644 --- a/packages/web/src/content/docs/tr/go.mdx +++ b/packages/web/src/content/docs/tr/go.mdx @@ -71,7 +71,6 @@ Mevcut model listesi şunları içerir: - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (sınırlı bir süre için) Test edip yenilerini ekledikçe model listesi değişebilir. @@ -113,7 +112,6 @@ Aşağıdaki tablo, tipik Go kullanım modellerine dayalı tahmini bir istek say | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | Tahminler, gözlemlenen istek modellerine dayanır: @@ -171,13 +169,11 @@ Tahminler ayrıca 1M token başına aşağıdaki fiyatlara ve her modelle birlik | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak saatleri pazartesiden cumaya 01:00-04:00 ve 06:00-10:00 UTC'dir; hafta sonları dahil diğer tüm saatler Off-Peak'tir. [Daha fazla bilgi](https://api-docs.deepseek.com/quick_start/pricing/). **DeepSeek V4 Flash Vision Exp:** Görseller boyutlarına göre token'lara dönüştürülür ve metin token'larıyla birlikte girdi token'ları olarak ücretlendirilir. [Daha fazla bilgi](https://api-docs.deepseek.com/quick_start/pricing/). -**Ox Alpha Free:** Sınırlı bir süre için ücretsiz. Mevcut kullanımınızı **konsoldan** takip edebilirsiniz. @@ -236,7 +232,6 @@ Go modellerine aşağıdaki API uç noktaları aracılığıyla da erişebilirsi | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | OpenCode yapılandırmanızdaki [model id](/docs/config/#models) formatı `opencode-go/` şeklindedir. Örneğin, Kimi K3 için yapılandırmanızda `opencode-go/kimi-k3` kullanmalısınız. @@ -278,7 +273,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | Kullanılmaz | 0 gün | | DeepSeek V4 Flash Vision Exp | Kullanılmaz | 0 gün | | Hy3 | Kullanılmaz | 0 gün | -| Ox Alpha Free | Kullanılmaz | 0 gün | - **Grok 4.6:** ZDR, durum bilgisi tutan Responses API, Files and Collections ve Batch API dahil olmak üzere saklanan verilere bağlı önemli API özelliklerini devre dışı bırakır. [Daha fazla bilgi](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Tüm API özelliklerinin kullanımı için kötüye kullanım izleme günlükleri oluşturulur ve 30 güne kadar saklanır. [Daha fazla bilgi](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/tr/zen.mdx b/packages/web/src/content/docs/tr/zen.mdx index 15d592d5c9c7..d96fdce37edb 100644 --- a/packages/web/src/content/docs/tr/zen.mdx +++ b/packages/web/src/content/docs/tr/zen.mdx @@ -108,7 +108,6 @@ Modellerimize aşağıdaki API uç noktaları aracılığıyla da erişebilirsin | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -136,7 +135,6 @@ Kullandıkça öde modelini destekliyoruz. Aşağıda **1M token başına** fiya | Model | Input | Output | Cached Read | Cached Write | | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -227,7 +225,6 @@ Kredi kartı ücretleri maliyet üzerinden yansıtılır (%4.4 + işlem başına - Nemotron 3 Ultra Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. - Nemotron 3.5 Lightning Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. - Big Pickle, sınırlı bir süre için OpenCode'da ücretsiz olan gizli bir modeldir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. -- Ox Alpha Free, sınırlı bir süre için OpenCode'da ücretsiz olan gizli bir modeldir. Sağlayıcısı sıfır saklama politikası uygular ve verilerinizi model eğitimi için kullanmaz. - Muse Spark 1.2 Contributor Free, sınırlı bir süre için OpenCode'da kullanılabilir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. Sorularınız varsa bizimle iletişime geçin. diff --git a/packages/web/src/content/docs/zen.mdx b/packages/web/src/content/docs/zen.mdx index 83ae9160385a..a5a80dbf611e 100644 --- a/packages/web/src/content/docs/zen.mdx +++ b/packages/web/src/content/docs/zen.mdx @@ -117,7 +117,6 @@ You can also access our models through the following API endpoints. | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -147,7 +146,6 @@ We support a pay-as-you-go model. Below are the prices **per 1M tokens**. | Model | Input | Output | Cached Read | Cached Write | | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -238,7 +236,6 @@ The free models: - Nemotron 3 Ultra Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. - Nemotron 3.5 Lightning Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. - Big Pickle is a stealth model that's free on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. -- Ox Alpha Free is a stealth model that's free on OpenCode for a limited time. Its provider follows a zero-retention policy and does not use your data for model training. - Muse Spark 1.2 Contributor Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. Contact us if you have any questions. diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx index 4efd9c1c2204..aed7e023d831 100644 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ b/packages/web/src/content/docs/zh-cn/go.mdx @@ -71,7 +71,6 @@ OpenCode Go 的工作方式与 OpenCode 中的其他提供商一样。 - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (限时) 随着我们进行测试和添加新模型,该列表可能会发生变化。 @@ -113,7 +112,6 @@ OpenCode Go 包含以下限制: | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | 预估值基于观察到的请求模式: @@ -171,13 +169,11 @@ OpenCode Go 包含以下限制: | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 时段为周一至周五的 01:00-04:00 和 06:00-10:00 UTC;其他所有时段(包括周末)均为 Off-Peak。[了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 **DeepSeek V4 Flash Vision Exp:** 图片会根据尺寸转换为 token,并与文本 token 一起按输入 token 计费。 [了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 -**Ox Alpha Free:** 限时免费。 你可以在 **控制台** 中跟踪你当前的使用情况。 @@ -236,7 +232,6 @@ OpenCode Go 包含以下限制: | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | 你的 OpenCode 配置中的 [模型 ID](/docs/config/#models) 使用 `opencode-go/` 格式。例如,对于 Kimi K3,你将在配置中使用 `opencode-go/kimi-k3`。 @@ -278,7 +273,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | 不使用 | 0 天 | | DeepSeek V4 Flash Vision Exp | 不使用 | 0 天 | | Hy3 | 不使用 | 0 天 | -| Ox Alpha Free | 不使用 | 0 天 | - **Grok 4.6:** ZDR 会禁用依赖所存储数据的重要 API 功能,包括有状态的 Responses API、Files and Collections 和 Batch API。[了解更多](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 - **GPT 5.6 Luna:** 所有 API 功能的使用都会生成滥用监控日志,并最多保留 30 天。[了解更多](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring)。 diff --git a/packages/web/src/content/docs/zh-cn/zen.mdx b/packages/web/src/content/docs/zh-cn/zen.mdx index 7aa69ff3e865..258905c22063 100644 --- a/packages/web/src/content/docs/zh-cn/zen.mdx +++ b/packages/web/src/content/docs/zh-cn/zen.mdx @@ -108,7 +108,6 @@ OpenCode Zen 的工作方式与 OpenCode 中的任何其他提供商相同。 | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -136,7 +135,6 @@ https://opencode.ai/zen/v1/models | 模型 | 输入 | 输出 | 缓存读取 | 缓存写入 | | --------------------------------- | ------ | ------- | -------- | -------- | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -227,7 +225,6 @@ https://opencode.ai/zen/v1/models - Nemotron 3 Ultra Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 - Nemotron 3.5 Lightning Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 - Big Pickle 是一个隐身模型,目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 -- Ox Alpha Free 是一个隐身模型,目前在 OpenCode 上限时免费提供。其提供商遵循零保留策略,不会将你的数据用于模型训练。 - Muse Spark 1.2 Contributor Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 如果你有任何问题,请联系我们。 diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx index 630b4e9be76c..b882b7085e4b 100644 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ b/packages/web/src/content/docs/zh-tw/go.mdx @@ -71,7 +71,6 @@ OpenCode Go 的運作方式與 OpenCode 中的任何其他供應商相同。 - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** - **Hy3** -- **Ox Alpha Free** (限時) 隨著我們測試並加入新模型,模型清單可能會有所變動。 @@ -113,7 +112,6 @@ OpenCode Go 包含以下限制: | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy3 | 4,300 | 10,750 | 21,500 | -| Ox Alpha Free | - | - | - | 這些預估值是基於觀察到的請求模式: @@ -171,13 +169,11 @@ OpenCode Go 包含以下限制: | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | -| Ox Alpha Free | - | - | - | - | - | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 時段為週一至週五的 01:00-04:00 和 06:00-10:00 UTC;其他所有時段(包括週末)均為 Off-Peak。[了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 **DeepSeek V4 Flash Vision Exp:** 圖片會根據尺寸轉換為 token,並與文字 token 一起按輸入 token 計費。 [了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 -**Ox Alpha Free:** 限時免費。 您可以在 **console** 中追蹤您目前的使用量。 @@ -236,7 +232,6 @@ OpenCode Go 包含以下限制: | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | ox-alpha-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | 您的 OpenCode 設定中的 [model id](/docs/config/#models) 使用 `opencode-go/` 格式。例如,Kimi K3 在設定中應使用 `opencode-go/kimi-k3`。 @@ -278,7 +273,6 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash | 不使用 | 0 天 | | DeepSeek V4 Flash Vision Exp | 不使用 | 0 天 | | Hy3 | 不使用 | 0 天 | -| Ox Alpha Free | 不使用 | 0 天 | - **Grok 4.6:** ZDR 會停用依賴儲存資料的重要 API 功能,包括具狀態的 Responses API、Files and Collections 與 Batch API。[了解更多](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 - **GPT 5.6 Luna:** 所有 API 功能的使用都會產生濫用監控日誌,並保留最多 30 天。[了解更多](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring)。 diff --git a/packages/web/src/content/docs/zh-tw/zen.mdx b/packages/web/src/content/docs/zh-tw/zen.mdx index 7e50d05cfd87..38be595c4b4d 100644 --- a/packages/web/src/content/docs/zh-tw/zen.mdx +++ b/packages/web/src/content/docs/zh-tw/zen.mdx @@ -112,7 +112,6 @@ OpenCode Zen 的運作方式和 OpenCode 中的其他供應商一樣。 | Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Ox Alpha Free | x-preview-f-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -141,7 +140,6 @@ https://opencode.ai/zen/v1/models | 模型 | 輸入 | 輸出 | 快取讀取 | 快取寫入 | | --------------------------------- | ------ | ------- | -------- | -------- | | Big Pickle | Free | Free | Free | - | -| Ox Alpha Free | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | @@ -232,7 +230,6 @@ https://opencode.ai/zen/v1/models - Nemotron 3 Ultra Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 - Nemotron 3.5 Lightning Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 - Big Pickle 是一個隱身模型,在 OpenCode 上限時免費提供。團隊正在利用這段時間收集回饋並改進模型。 -- Ox Alpha Free 是一個隱身模型,在 OpenCode 上限時免費提供。其供應商遵循零保留政策,不會將你的資料用於模型訓練。 - Muse Spark 1.2 Contributor Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 如果你有任何問題,請聯絡我們。 From 1216c550944de69f73732a907deabcfd5f477cdb Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Wed, 26 Aug 2026 11:20:31 +0000 Subject: [PATCH 046/185] chore: generate --- packages/web/src/content/docs/ar/go.mdx | 1 - packages/web/src/content/docs/bs/go.mdx | 1 - packages/web/src/content/docs/da/go.mdx | 1 - packages/web/src/content/docs/de/go.mdx | 1 - packages/web/src/content/docs/es/go.mdx | 1 - packages/web/src/content/docs/fr/go.mdx | 1 - packages/web/src/content/docs/go.mdx | 1 - packages/web/src/content/docs/it/go.mdx | 1 - packages/web/src/content/docs/ja/go.mdx | 1 - packages/web/src/content/docs/ko/go.mdx | 1 - packages/web/src/content/docs/nb/go.mdx | 1 - packages/web/src/content/docs/pl/go.mdx | 1 - packages/web/src/content/docs/pt-br/go.mdx | 1 - packages/web/src/content/docs/ru/go.mdx | 1 - packages/web/src/content/docs/th/go.mdx | 1 - packages/web/src/content/docs/tr/go.mdx | 1 - packages/web/src/content/docs/zh-cn/go.mdx | 1 - packages/web/src/content/docs/zh-tw/go.mdx | 1 - 18 files changed, 18 deletions(-) diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx index 5ea9b1453feb..71ba2e0b8dce 100644 --- a/packages/web/src/content/docs/ar/go.mdx +++ b/packages/web/src/content/docs/ar/go.mdx @@ -174,7 +174,6 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر **DeepSeek V4 Flash Vision Exp:** يتم تحويل الصور إلى رموز بناءً على أبعادها، وتُحتسب كرموز إدخال إلى جانب رموز النص. [اعرف المزيد](https://api-docs.deepseek.com/quick_start/pricing/). - يمكنك تتبّع استخدامك الحالي في **console**. :::tip diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index ea5204858943..dc7536a8cf42 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -184,7 +184,6 @@ Procjene se također zasnivaju na sljedećim cijenama po 1M tokena i mjesečnoj **DeepSeek V4 Flash Vision Exp:** Slike se pretvaraju u tokene na osnovu svojih dimenzija i naplaćuju kao ulazni tokeni zajedno s tekstualnim tokenima. [Saznajte više](https://api-docs.deepseek.com/quick_start/pricing/). - Svoju trenutnu potrošnju možete pratiti u **konzoli**. :::tip diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx index 042823363dba..b94272e40587 100644 --- a/packages/web/src/content/docs/da/go.mdx +++ b/packages/web/src/content/docs/da/go.mdx @@ -184,7 +184,6 @@ Estimaterne er også baseret på følgende priser pr. 1M tokens og det månedlig **DeepSeek V4 Flash Vision Exp:** Billeder konverteres til tokens baseret på deres dimensioner og afregnes som inputtokens sammen med teksttokens. [Læs mere](https://api-docs.deepseek.com/quick_start/pricing/). - Du kan spore dit nuværende forbrug i **konsollen**. :::tip diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx index 39c1800f016d..d19a1422c552 100644 --- a/packages/web/src/content/docs/de/go.mdx +++ b/packages/web/src/content/docs/de/go.mdx @@ -176,7 +176,6 @@ Die Schätzungen basieren außerdem auf den folgenden Preisen pro 1M Tokens und **DeepSeek V4 Flash Vision Exp:** Bilder werden anhand ihrer Abmessungen in Tokens umgewandelt und zusammen mit Text-Tokens als Input-Tokens abgerechnet. [Mehr erfahren](https://api-docs.deepseek.com/quick_start/pricing/). - Du kannst deine aktuelle Nutzung in der **Console** verfolgen. :::tip diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index 79416ed45d25..ada50b0d2850 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -184,7 +184,6 @@ Las estimaciones también se basan en los siguientes precios por 1M tokens y en **DeepSeek V4 Flash Vision Exp:** Las imágenes se convierten en tokens según sus dimensiones y se facturan como tokens de entrada junto con los tokens de texto. [Más información](https://api-docs.deepseek.com/quick_start/pricing/). - Puedes realizar un seguimiento de tu uso actual en la **consola**. :::tip diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx index 17460a9492d6..b1792e39a29f 100644 --- a/packages/web/src/content/docs/fr/go.mdx +++ b/packages/web/src/content/docs/fr/go.mdx @@ -174,7 +174,6 @@ Les estimations sont également basées sur les prix suivants par 1M tokens et s **DeepSeek V4 Flash Vision Exp:** Les images sont converties en tokens selon leurs dimensions et facturées comme tokens d’entrée avec les tokens de texte. [En savoir plus](https://api-docs.deepseek.com/quick_start/pricing/). - Vous pouvez suivre votre utilisation actuelle dans la **console**. :::tip diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index 8ed9fe567fe2..9566c7c54206 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -184,7 +184,6 @@ The estimates are also based on the following prices per 1M tokens and the month **DeepSeek V4 Flash Vision Exp:** Images are converted into tokens based on their dimensions and billed as input tokens alongside text tokens. [Learn more](https://api-docs.deepseek.com/quick_start/pricing/). - You can track your current usage in the **console**. :::tip diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx index e16b42101e52..fddea0a86576 100644 --- a/packages/web/src/content/docs/it/go.mdx +++ b/packages/web/src/content/docs/it/go.mdx @@ -182,7 +182,6 @@ Le stime si basano anche sui seguenti prezzi per 1M token e sull'utilizzo mensil **DeepSeek V4 Flash Vision Exp:** Le immagini vengono convertite in token in base alle loro dimensioni e fatturate come token di input insieme ai token di testo. [Scopri di più](https://api-docs.deepseek.com/quick_start/pricing/). - Puoi monitorare il tuo utilizzo attuale nella **console**. :::tip diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx index 3ab3372f898b..3a48101c044c 100644 --- a/packages/web/src/content/docs/ja/go.mdx +++ b/packages/web/src/content/docs/ja/go.mdx @@ -174,7 +174,6 @@ OpenCode Goには以下の制限が含まれています: **DeepSeek V4 Flash Vision Exp:** 画像はサイズに基づいてトークンに変換され、テキストトークンと合わせて入力トークンとして課金されます。 [詳しく見る](https://api-docs.deepseek.com/quick_start/pricing/)。 - 現在の利用状況は**コンソール**で追跡できます。 :::tip diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx index 8117a76ad288..56fffd759e6d 100644 --- a/packages/web/src/content/docs/ko/go.mdx +++ b/packages/web/src/content/docs/ko/go.mdx @@ -174,7 +174,6 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. **DeepSeek V4 Flash Vision Exp:** 이미지는 크기에 따라 토큰으로 변환되며 텍스트 토큰과 함께 입력 토큰으로 청구됩니다. [자세히 알아보기](https://api-docs.deepseek.com/quick_start/pricing/). - 현재 사용량은 **console**에서 확인할 수 있습니다. :::tip diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx index 44b6bf5739f0..e5b60d65e267 100644 --- a/packages/web/src/content/docs/nb/go.mdx +++ b/packages/web/src/content/docs/nb/go.mdx @@ -184,7 +184,6 @@ Estimatene er også basert på følgende priser per 1M tokens og den månedlige **DeepSeek V4 Flash Vision Exp:** Bilder konverteres til tokens basert på dimensjonene og faktureres som input-tokens sammen med tekst-tokens. [Les mer](https://api-docs.deepseek.com/quick_start/pricing/). - Du kan spore din nåværende bruk i **konsollen**. :::tip diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx index 000530420158..dfa6095787a1 100644 --- a/packages/web/src/content/docs/pl/go.mdx +++ b/packages/web/src/content/docs/pl/go.mdx @@ -178,7 +178,6 @@ Szacunki opierają się również na następujących cenach za 1M tokenów oraz **DeepSeek V4 Flash Vision Exp:** Obrazy są przeliczane na tokeny na podstawie ich wymiarów i rozliczane jako tokeny wejściowe razem z tokenami tekstowymi. [Dowiedz się więcej](https://api-docs.deepseek.com/quick_start/pricing/). - Możesz śledzić swoje bieżące zużycie w **konsoli**. :::tip diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index af09191b496a..307b9dae8fb8 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -184,7 +184,6 @@ As estimativas também se baseiam nos seguintes preços por 1M tokens e no uso m **DeepSeek V4 Flash Vision Exp:** As imagens são convertidas em tokens com base em suas dimensões e cobradas como tokens de entrada junto com os tokens de texto. [Saiba mais](https://api-docs.deepseek.com/quick_start/pricing/). - Você pode acompanhar o seu uso atual no **console**. :::tip diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx index 801883ba658d..b6eff3279d14 100644 --- a/packages/web/src/content/docs/ru/go.mdx +++ b/packages/web/src/content/docs/ru/go.mdx @@ -184,7 +184,6 @@ OpenCode Go включает следующие лимиты: **DeepSeek V4 Flash Vision Exp:** Изображения преобразуются в токены с учётом их размеров и оплачиваются как входные токены вместе с текстовыми токенами. [Подробнее](https://api-docs.deepseek.com/quick_start/pricing/). - Вы можете отслеживать текущее использование в **консоли**. :::tip diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx index 9f10c061b882..72e81d3ac98d 100644 --- a/packages/web/src/content/docs/th/go.mdx +++ b/packages/web/src/content/docs/th/go.mdx @@ -174,7 +174,6 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: **DeepSeek V4 Flash Vision Exp:** รูปภาพจะถูกแปลงเป็น token ตามขนาด และคิดค่าบริการเป็น input token รวมกับ text token [ดูข้อมูลเพิ่มเติม](https://api-docs.deepseek.com/quick_start/pricing/) - คุณสามารถติดตามการใช้งานปัจจุบันของคุณได้ใน **console** :::tip diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx index 4f13b1d73fd4..b6125956c646 100644 --- a/packages/web/src/content/docs/tr/go.mdx +++ b/packages/web/src/content/docs/tr/go.mdx @@ -174,7 +174,6 @@ Tahminler ayrıca 1M token başına aşağıdaki fiyatlara ve her modelle birlik **DeepSeek V4 Flash Vision Exp:** Görseller boyutlarına göre token'lara dönüştürülür ve metin token'larıyla birlikte girdi token'ları olarak ücretlendirilir. [Daha fazla bilgi](https://api-docs.deepseek.com/quick_start/pricing/). - Mevcut kullanımınızı **konsoldan** takip edebilirsiniz. :::tip diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx index aed7e023d831..ac32c98ed957 100644 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ b/packages/web/src/content/docs/zh-cn/go.mdx @@ -174,7 +174,6 @@ OpenCode Go 包含以下限制: **DeepSeek V4 Flash Vision Exp:** 图片会根据尺寸转换为 token,并与文本 token 一起按输入 token 计费。 [了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 - 你可以在 **控制台** 中跟踪你当前的使用情况。 :::tip diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx index b882b7085e4b..c2ee08c3b666 100644 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ b/packages/web/src/content/docs/zh-tw/go.mdx @@ -174,7 +174,6 @@ OpenCode Go 包含以下限制: **DeepSeek V4 Flash Vision Exp:** 圖片會根據尺寸轉換為 token,並與文字 token 一起按輸入 token 計費。 [了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 - 您可以在 **console** 中追蹤您目前的使用量。 :::tip From a0f36c9df7659c2a284724d1d0338442800592c2 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 26 Aug 2026 07:39:38 -0500 Subject: [PATCH 047/185] feat(stats): add retention metrics --- .../stats/app/src/routes/[lab]/[model].tsx | 6 + packages/stats/app/src/routes/index.css | 179 +++++++++++++++++- packages/stats/app/src/routes/index.tsx | 84 ++++++++ .../migration.sql | 18 ++ packages/stats/core/src/database/schema.ts | 26 +++ packages/stats/core/src/domain/home.test.ts | 48 +++++ packages/stats/core/src/domain/home.ts | 98 +++++++++- .../stats/core/src/domain/inference.test.ts | 55 +++++- packages/stats/core/src/domain/inference.ts | 164 ++++++++++++++++ packages/stats/core/src/domain/retention.ts | 110 +++++++++++ packages/stats/core/src/index.ts | 1 + packages/stats/core/src/runtime.ts | 10 +- packages/stats/core/src/stat-sync.ts | 60 +++++- 13 files changed, 841 insertions(+), 18 deletions(-) create mode 100644 packages/stats/core/migrations/20260826000000_model_retention/migration.sql create mode 100644 packages/stats/core/src/domain/home.test.ts create mode 100644 packages/stats/core/src/domain/retention.ts diff --git a/packages/stats/app/src/routes/[lab]/[model].tsx b/packages/stats/app/src/routes/[lab]/[model].tsx index e0560957ac27..c9a3e6ef6d7a 100644 --- a/packages/stats/app/src/routes/[lab]/[model].tsx +++ b/packages/stats/app/src/routes/[lab]/[model].tsx @@ -470,6 +470,7 @@ function ModelMomentumSection(props: { data: StatsModelPageData | null }) { value={formatInteger(data().totals.sessions)} /> + span { + color: var(--stats-faint); + font-size: 13px; + font-weight: 400; +} + +[data-page="stats"] [data-component="retention-chart"] a > strong { + min-width: 0; + overflow-wrap: anywhere; + font-size: 13px; + font-weight: 600; + line-height: 18px; +} + +[data-page="stats"] [data-component="retention-chart"] a > b, +[data-page="stats"] [data-component="retention-chart"] a > em { + font-size: 13px; + font-style: normal; + font-weight: 500; + text-align: right; + white-space: nowrap; +} + +[data-page="stats"] [data-component="retention-chart"] a > em { + color: var(--stats-muted); +} + +[data-page="stats"] [data-component="retention-marker"] { + position: relative; + display: grid; + grid-template-columns: repeat(4, 1fr); + align-items: center; + height: 16px; + background: linear-gradient(var(--stats-line-strong), var(--stats-line-strong)) center / 100% 1px no-repeat; +} + +[data-page="stats"] [data-component="retention-marker"] > span { + justify-self: end; + width: 1px; + height: 8px; + background: var(--stats-line-strong); +} + +[data-page="stats"] [data-component="retention-marker"] > em { + position: absolute; + top: 50%; + left: var(--retention-position); + width: 7px; + height: 16px; + background: var(--stats-muted); + transform: translate(-50%, -50%); +} + +[data-page="stats"] [data-component="retention-marker"][data-active="true"] > em { + background: var(--stats-accent); +} + [data-page="stats"] [data-component="section-bridge"]:hover { color: var(--stats-text); text-decoration: none; @@ -3521,7 +3641,7 @@ body { [data-page="stats"] [data-slot="model-momentum-metrics"] { display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); + grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 12px; min-width: 0; } @@ -6671,6 +6791,57 @@ body { } } +@media (max-width: 74rem) { + [data-page="stats"] [data-slot="retention-heading"], + [data-page="stats"] [data-component="retention-chart"] a { + grid-template-columns: 40px minmax(140px, 220px) minmax(140px, 1fr) 60px 76px; + gap: 12px; + } +} + +@media (max-width: 47.999rem) { + [data-page="stats"] [data-component="retention-chart"] { + margin-top: 28px; + } + + [data-page="stats"] [data-slot="retention-heading"] { + display: none; + } + + [data-page="stats"] [data-component="retention-chart"] a { + grid-template-columns: 28px minmax(0, 1fr) 58px 62px; + grid-template-rows: auto 16px; + gap: 8px 10px; + min-height: 68px; + padding: 10px; + } + + [data-page="stats"] [data-component="retention-chart"] a > span { + grid-column: 1; + grid-row: 1; + } + + [data-page="stats"] [data-component="retention-chart"] a > strong { + grid-column: 2; + grid-row: 1; + } + + [data-page="stats"] [data-component="retention-marker"] { + grid-column: 2 / -1; + grid-row: 2; + } + + [data-page="stats"] [data-component="retention-chart"] a > b { + grid-column: 3; + grid-row: 1; + } + + [data-page="stats"] [data-component="retention-chart"] a > em { + grid-column: 4; + grid-row: 1; + } +} + [data-page="stats"] [data-component="compare-model-modal-scrim"] { position: fixed; inset: 0; @@ -7368,6 +7539,7 @@ body { [data-page="stats"] [data-section="top-models"], [data-page="stats"] [data-section="leaderboard"], [data-page="stats"] [data-section="unique-users"], + [data-page="stats"] [data-section="retention"], [data-page="stats"] [data-section="market-share"], [data-page="stats"] [data-section="geo-breakdown"], [data-page="stats"] [data-section="token-cost"], @@ -7529,6 +7701,10 @@ body { grid-template-columns: repeat(2, minmax(0, 1fr)); } + [data-page="stats"] [data-component="model-momentum-metric"]:last-child:nth-child(odd) { + grid-column: 1 / -1; + } + [data-page="stats"] [data-component="model-metric-grid"], [data-page="stats"] [data-component="model-metric-grid"][data-variant="dense"], [data-page="stats"] [data-component="model-efficiency-grid"], @@ -7668,6 +7844,7 @@ body { [data-page="stats"] [data-section="top-models"], [data-page="stats"] [data-section="leaderboard"], [data-page="stats"] [data-section="unique-users"], + [data-page="stats"] [data-section="retention"], [data-page="stats"] [data-section="market-share"], [data-page="stats"] [data-section="geo-breakdown"], [data-page="stats"] [data-section="token-cost"], diff --git a/packages/stats/app/src/routes/index.tsx b/packages/stats/app/src/routes/index.tsx index 30491c898332..0e9888d2a0c1 100644 --- a/packages/stats/app/src/routes/index.tsx +++ b/packages/stats/app/src/routes/index.tsx @@ -8,6 +8,7 @@ import { type CountryEntry, type LeaderboardEntry, type MarketDay, + type RetentionEntry, type SessionCostEntry, type TokenCostEntry, type UsagePoint, @@ -69,6 +70,7 @@ type StatsHomePageData = { tokenCost: TokenCostEntry[] cacheRatio: CacheRatioEntry[] sessionCost: SessionCostEntry[] + retention: RetentionEntry[] country: CountryEntry[] } @@ -88,6 +90,7 @@ const getData = query(async () => { tokenCost: priceTokenCostFromCatalog(stats.tokenCost.Go, catalog), cacheRatio: stats.cacheRatio.Go, sessionCost: stats.sessionCost.Go, + retention: stats.retention, country: stats.country["2M"], } satisfies StatsHomePageData }, "getStatsHomeData") @@ -146,6 +149,7 @@ export default function StatsHome() { + @@ -616,6 +620,86 @@ function UniqueUsersSection(props: { data: UsagePoint[] }) { ) } +function RetentionSection(props: { data: RetentionEntry[] }) { + const language = useLanguage() + const [activeIndex, setActiveIndex] = createSignal(0) + + return ( +
    + + 0} + fallback={ + + } + > + + +
    + ) +} + +function RetentionMarker(props: { rate: number; active: boolean }) { + const fill = createMemo(() => Math.min(100, Math.max(0, props.rate))) + return ( + + ) +} + +function formatRetentionRate(value: number) { + return `${value.toFixed(1)}%` +} + function isTopModelsBlankHover(bar: HTMLElement, clientY: number) { const stack = bar.querySelector('[data-slot="top-models-stack"]') if (!stack) return true diff --git a/packages/stats/core/migrations/20260826000000_model_retention/migration.sql b/packages/stats/core/migrations/20260826000000_model_retention/migration.sql new file mode 100644 index 000000000000..e69d7f5bf441 --- /dev/null +++ b/packages/stats/core/migrations/20260826000000_model_retention/migration.sql @@ -0,0 +1,18 @@ +CREATE TABLE `model_retention` ( + `id` bigint AUTO_INCREMENT NOT NULL, + `cohort_date` char(10) NOT NULL, + `dataset` varchar(64) NOT NULL DEFAULT 'all', + `tier` varchar(64) NOT NULL DEFAULT 'all', + `provider` varchar(128) NOT NULL, + `model` varchar(256) NOT NULL, + `eligible_users` bigint NOT NULL DEFAULT 0, + `retained_users` bigint NOT NULL DEFAULT 0, + `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `model_retention_id` PRIMARY KEY(`id`), + CONSTRAINT `uniq_model_retention_cohort` UNIQUE(`cohort_date`,`dataset`,`tier`,`provider`,`model`) +); +--> statement-breakpoint +CREATE INDEX `idx_model_retention_recent` ON `model_retention` (`dataset`,`tier`,`cohort_date`); +--> statement-breakpoint +CREATE INDEX `idx_model_retention_model` ON `model_retention` (`model`,`cohort_date`); diff --git a/packages/stats/core/src/database/schema.ts b/packages/stats/core/src/database/schema.ts index d5bfa314bfde..dcf8d5233271 100644 --- a/packages/stats/core/src/database/schema.ts +++ b/packages/stats/core/src/database/schema.ts @@ -107,6 +107,32 @@ export const geoStat = mysqlTable( ], ) +export const modelRetention = mysqlTable( + "model_retention", + { + id: bigint({ mode: "number" }).autoincrement().primaryKey(), + cohort_date: char({ length: 10 }).notNull(), + dataset: varchar({ length: 64 }).notNull().default("all"), + tier: varchar({ length: 64 }).notNull().default("all"), + provider: varchar({ length: 128 }).notNull(), + model: varchar({ length: 256 }).notNull(), + eligible_users: bigint({ mode: "number" }).notNull().default(0), + retained_users: bigint({ mode: "number" }).notNull().default(0), + ...timestampColumns(), + }, + (table) => [ + uniqueIndex("uniq_model_retention_cohort").on( + table.cohort_date, + table.dataset, + table.tier, + table.provider, + table.model, + ), + index("idx_model_retention_recent").on(table.dataset, table.tier, table.cohort_date), + index("idx_model_retention_model").on(table.model, table.cohort_date), + ], +) + function periodColumns() { return { id: bigint({ mode: "number" }).autoincrement().primaryKey(), diff --git a/packages/stats/core/src/domain/home.test.ts b/packages/stats/core/src/domain/home.test.ts new file mode 100644 index 000000000000..c8b665048c34 --- /dev/null +++ b/packages/stats/core/src/domain/home.test.ts @@ -0,0 +1,48 @@ +import { describe, expect, test } from "bun:test" +import type { RetentionMetricRow } from "./home" + +process.env.SST_RESOURCE_App = JSON.stringify({ name: "opencode", stage: "test" }) +process.env.SST_RESOURCE_StatsDatabase = JSON.stringify({ url: "mysql://localhost/stats" }) + +const { buildRetentionEntries } = await import("./home") + +describe("retention aggregates", () => { + test("pools the latest seven cohorts and ranks models above the sample floor", () => { + const rows = [ + ...cohorts("model-a", "provider-a", 8, 20, 10), + ...cohorts("model-b", "provider-b", 8, 20, 12), + ...cohorts("small-model", "provider-c", 8, 10, 9), + ] + const entries = buildRetentionEntries(rows) + + expect(entries.find((item) => item.model === "model-a")).toMatchObject({ + eligibleUserDays: 140, + retainedUserDays: 70, + rate: 50, + rank: 2, + }) + expect(entries.find((item) => item.model === "model-b")).toMatchObject({ + eligibleUserDays: 140, + retainedUserDays: 84, + rate: 60, + rank: 1, + }) + expect(entries.find((item) => item.model === "small-model")).toMatchObject({ + eligibleUserDays: 70, + retainedUserDays: 63, + rate: 90, + rank: null, + }) + }) +}) + +function cohorts(model: string, provider: string, count: number, eligibleUsers: number, retainedUsers: number) { + return Array.from({ length: count }, (_, index) => ({ + cohortDate: `2026-08-${String(index + 1).padStart(2, "0")}`, + updatedAt: Date.UTC(2026, 7, index + 9), + provider, + model, + eligibleUsers, + retainedUsers, + })) satisfies RetentionMetricRow[] +} diff --git a/packages/stats/core/src/domain/home.ts b/packages/stats/core/src/domain/home.ts index e0fd2be37bd6..c1784ed18a45 100644 --- a/packages/stats/core/src/domain/home.ts +++ b/packages/stats/core/src/domain/home.ts @@ -5,6 +5,7 @@ import { DatabaseError } from "../database" import type { GeoStatMetric } from "./geo" import { ModelStatRepo, type ModelStatMetric } from "./model" import { statProvider } from "./model-normalization" +import { isMissingRetentionTable } from "./retention" import { DATA_SITE_TIERS, normalizeTier } from "./stat" export type UsageProduct = "All Users" | "Zen" | "Go" | "Enterprise" @@ -23,6 +24,15 @@ export type LeaderboardEntry = { export type TokenCostEntry = { model: string; total: number; input: number; output: number; cached: number } export type CacheRatioEntry = { model: string; ratio: number; cached: number; uncached: number; total: number } export type SessionCostEntry = { model: string; cost: number; tokens: number } +export type RetentionEntry = { + model: string + provider: string + author: string + rate: number + eligibleUserDays: number + retainedUserDays: number + rank: number | null +} export type CountryEntry = { country: string; continent: string; tokens: number; share: number; rank: number } export type ModelUsagePoint = { date: string; tokens: number; users: number; sessions: number; cost: number } export type ModelMixEntry = { label: string; tokens: number; share: number } @@ -54,6 +64,7 @@ export type StatsModelData = { totalModels: number tokenShare: number tokenChange: number + retention7d: RetentionEntry | null totals: { sessions: number uniqueUsers: number @@ -114,6 +125,7 @@ export type StatsHomeData = { tokenCost: Record cacheRatio: Record sessionCost: Record + retention: RetentionEntry[] country: Record } @@ -129,6 +141,9 @@ const DAY_MS = 86_400_000 const TOKEN_SCALE = 1_000_000 const DOLLARS_PER_MICROCENT = 1 / 100_000_000 const METRIC_MODEL_LIMIT = 10 +const RETENTION_MODEL_LIMIT = 15 +const RETENTION_MIN_ELIGIBLE_USER_DAYS = 100 +const RETENTION_COHORT_DAYS = 7 const TOP_MODEL_SEGMENT_LIMIT = 9 // Preserve the response shape while the public site presents Go and Free as one cohort. const SITE_PRODUCT = "Go" @@ -144,6 +159,14 @@ type GeoMetricRow = Omit & { periodStart: number updatedAt: number } +export type RetentionMetricRow = { + cohortDate: string + updatedAt: number + provider: string + model: string + eligibleUsers: number + retainedUsers: number +} type DateWindow = { start: number; end: number; previousStart: number; previousEnd: number } type Bucket = { start: number; end: number; label: string } @@ -167,8 +190,12 @@ type RawRow = Record export function getStatsHomeData(): Effect.Effect { return Effect.tryPromise({ try: async () => { - const [modelRows, geoRows] = await Promise.all([listModelDaily(), listGeoDaily()]) - return buildStatsHomeData(modelRows, geoRows) + const [modelRows, geoRows, retentionRows] = await Promise.all([ + listModelDaily(), + listGeoDaily(), + listRetentionDaily(), + ]) + return buildStatsHomeData(modelRows, geoRows, retentionRows) }, catch: (cause) => new StatsDataError(cause), }) @@ -180,7 +207,7 @@ export function getStatsModelData( ): Effect.Effect { return Effect.tryPromise({ try: async () => { - const modelRows = await listModelDaily() + const [modelRows, retentionRows] = await Promise.all([listModelDaily(), listRetentionDaily()]) const normalized = modelRows.flatMap(normalizeStatRow) const resolvedModel = resolveModelName(model, normalized, provider) if (!resolvedModel) return null @@ -192,6 +219,7 @@ export function getStatsModelData( provider: resolveModelProvider(resolvedModel, normalized, provider), }), provider, + retentionRows, ) }, catch: (cause) => new StatsDataError(cause), @@ -260,6 +288,27 @@ async function listGeoDaily(opts?: { provider?: string; model?: string }): Promi })) } +async function listRetentionDaily(): Promise { + try { + return ( + await queryRows( + `select cohort_date, updated_at, provider, model, eligible_users, retained_users + from model_retention where dataset = 'zen' and tier = 'all' order by cohort_date`, + ) + ).map((row) => ({ + cohortDate: stringValue(row.cohort_date), + updatedAt: dateValue(row.updated_at).getTime(), + provider: stringValue(row.provider), + model: stringValue(row.model), + eligibleUsers: numberValue(row.eligible_users), + retainedUsers: numberValue(row.retained_users), + })) + } catch (cause) { + if (isMissingRetentionTable(cause)) return [] + throw cause + } +} + async function queryRows(query: string, params: string[] = []) { return (await new Client({ url: databaseUrl() }).execute(query, params)).rows as RawRow[] } @@ -309,7 +358,11 @@ export const getStatsModelComparisonData = ( { provider: secondProvider, model: secondModel }, ]) -function buildStatsHomeData(modelRows: ModelStatMetric[], geoRows: GeoStatMetric[]): StatsHomeData { +function buildStatsHomeData( + modelRows: ModelStatMetric[], + geoRows: GeoStatMetric[], + retentionRows: RetentionMetricRow[], +): StatsHomeData { const normalized = modelRows.flatMap(normalizeStatRow) const geo = geoRows.flatMap(normalizeGeoRow) const periods = [...normalized, ...geo] @@ -357,6 +410,9 @@ function buildStatsHomeData(modelRows: ModelStatMetric[], geoRows: GeoStatMetric sessionCost: createTokenProductRecord((product) => buildSessionCost(normalized, product, getWindow("1W", earliest, latest)), ), + retention: buildRetentionEntries(retentionRows) + .filter((item) => item.rank !== null) + .slice(0, RETENTION_MODEL_LIMIT), country: createRangeRecord((range) => buildCountryStats(geo, getWindow(range, earliest, latest))), } } @@ -366,6 +422,7 @@ function buildStatsModelData( modelRows: ModelStatMetric[], geoRows: GeoStatMetric[], providerParam?: string, + retentionRows: RetentionMetricRow[] = [], ): StatsModelData | null { const normalized = modelRows.flatMap(normalizeStatRow) const geo = geoRows.flatMap(normalizeGeoRow) @@ -401,6 +458,7 @@ function buildStatsModelData( const peerRank = rankIndex >= 0 ? rankIndex + 1 : 1 const totalTokens = windowPeers.reduce((sum, item) => sum + item.totalTokens, 0) const peerTokens = rankPeers.reduce((sum, item) => sum + item.totalTokens, 0) + const retention7d = buildRetentionEntries(retentionRows).find((item) => item.model === model) ?? null return { updatedAt: Number.isFinite(latestUpdate) ? new Date(latestUpdate).toISOString() : null, @@ -413,6 +471,7 @@ function buildStatsModelData( totalModels: windowPeers.length, tokenShare: totalTokens > 0 ? round((current.totalTokens / totalTokens) * 100, 2) : 0, tokenChange: percentChange(current.totalTokens, previous.totalTokens), + retention7d, totals: { sessions: current.sessions, uniqueUsers: current.uniqueUsers, @@ -509,10 +568,41 @@ function emptyStatsHomeData(): StatsHomeData { tokenCost: createTokenProductRecord(() => []), cacheRatio: createTokenProductRecord(() => []), sessionCost: createTokenProductRecord(() => []), + retention: [], country: createRangeRecord(() => []), } } +export function buildRetentionEntries(rows: RetentionMetricRow[]): RetentionEntry[] { + const cohortDates = [...new Set(rows.map((row) => row.cohortDate))].toSorted().slice(-RETENTION_COHORT_DAYS) + const aggregate = rows + .filter((row) => cohortDates.includes(row.cohortDate)) + .reduce>>((result, row) => { + const current = result.get(row.model) + result.set(row.model, { + model: row.model, + provider: current?.provider ?? row.provider, + eligibleUserDays: (current?.eligibleUserDays ?? 0) + row.eligibleUsers, + retainedUserDays: (current?.retainedUserDays ?? 0) + row.retainedUsers, + }) + return result + }, new Map()) + const entries = [...aggregate.values()].map((item) => ({ + ...item, + author: formatProvider(item.provider), + rate: item.eligibleUserDays > 0 ? round((item.retainedUserDays / item.eligibleUserDays) * 100, 1) : 0, + })) + const ranks = new Map( + entries + .filter((item) => item.eligibleUserDays >= RETENTION_MIN_ELIGIBLE_USER_DAYS) + .toSorted((a, b) => b.rate - a.rate || b.eligibleUserDays - a.eligibleUserDays || a.model.localeCompare(b.model)) + .map((item, index) => [item.model, index + 1]), + ) + return entries + .map((item) => ({ ...item, rank: ranks.get(item.model) ?? null })) + .toSorted((a, b) => (a.rank ?? Number.MAX_SAFE_INTEGER) - (b.rank ?? Number.MAX_SAFE_INTEGER)) +} + function buildUsagePoints( rows: StatMetricRow[], product: UsageProduct, diff --git a/packages/stats/core/src/domain/inference.test.ts b/packages/stats/core/src/domain/inference.test.ts index ad95dad18b7a..c534ac2b7a39 100644 --- a/packages/stats/core/src/domain/inference.test.ts +++ b/packages/stats/core/src/domain/inference.test.ts @@ -1,5 +1,12 @@ import { describe, expect, test } from "bun:test" -import { buildStatsQueries, toGeoAggregate, toModelAggregate, toProviderAggregate } from "./inference" +import { + buildRetentionQueries, + buildStatsQueries, + toGeoAggregate, + toModelAggregate, + toProviderAggregate, + toRetentionAggregate, +} from "./inference" import { modelAuthor, normalizeInferenceModel, statModel, statProvider } from "./model-normalization" describe("inference stat normalization", () => { @@ -155,6 +162,52 @@ describe("inference stat normalization", () => { expect(query).toContain("(source = 'inference-legacy' AND started_at < '2026-08-11T10:57:48.186Z')") expect(query).toContain("(source = 'inference' AND started_at >= '2026-08-11T10:57:48.186Z')") }) + + test("builds complete seven-day cohort retention queries", () => { + const queries = buildRetentionQueries(new Date("2026-08-10T00:00:00.000Z"), new Date("2026-08-20T00:00:00.000Z"), { + namespace: "inference", + table: "generation", + dataset: "zen", + }) + + expect(queries).toHaveLength(1) + expect(queries[0]?.cohortDates).toEqual(["2026-08-10", "2026-08-11", "2026-08-12"]) + expect(queries[0]?.query).toContain("ROW_NUMBER() OVER") + expect(queries[0]?.query).toContain("PARTITION BY cohort_date, user_key") + expect(queries[0]?.query).toContain("ORDER BY total_tokens DESC, requests DESC, model ASC") + expect(queries[0]?.query).toContain("WHEN '2026-08-17' THEN '2026-08-10'") + expect(queries[0]?.query).toContain("WHEN '2026-08-19' THEN '2026-08-12'") + expect(queries[0]?.query).toContain("started_at >= '2026-08-10T00:00:00.000Z'") + expect(queries[0]?.query).toContain("started_at < '2026-08-20T00:00:00.000Z'") + expect(queries[0]?.query).toContain("LEFT JOIN returned ON primary_models.user_key = returned.user_key") + expect(queries[0]?.query).toContain("primary_models.cohort_date = returned.cohort_date") + expect(queries[0]?.query).toContain("COUNT(*) AS eligible_users") + expect(queries[0]?.query).toContain("LIMIT 10000") + }) + + test("maps retention query results", () => { + expect( + toRetentionAggregate({ + cohort_date: "2026-08-10", + dataset: "zen", + tier: "all", + provider: "deepseek", + model: "deepseek-v4-flash-free", + eligible_users: "125", + retained_users: "74", + }), + ).toEqual([ + { + cohortDate: "2026-08-10", + dataset: "zen", + tier: "all", + provider: "deepseek", + model: "deepseek-v4-flash", + eligibleUsers: 125, + retainedUsers: 74, + }, + ]) + }) }) function aggregate(model: string, provider: string) { diff --git a/packages/stats/core/src/domain/inference.ts b/packages/stats/core/src/domain/inference.ts index ee0468407f28..cf475d2809b7 100644 --- a/packages/stats/core/src/domain/inference.ts +++ b/packages/stats/core/src/domain/inference.ts @@ -12,6 +12,7 @@ import { statProvider, } from "./model-normalization" import type { ProviderStatAggregate } from "./provider" +import type { RetentionStatAggregate } from "./retention" import { normalizeCountry, normalizeTier, @@ -23,6 +24,7 @@ import { export type StatDimension = "model" | "provider" | "geo" | "geo_model" export type StatsQuerySource = { namespace: string; table: string; dataset: string } +export type RetentionQuery = { cohortDates: string[]; query: string } type StatsQueryFamily = "usage" | "geo" const DAY_MS = 86_400_000 @@ -46,6 +48,141 @@ export function buildStatsQueries(periodStart: Date, periodEnd: Date, input?: St ) } +export function buildRetentionQueries(periodStart: Date, periodEnd: Date, input?: StatsQuerySource): RetentionQuery[] { + const source = input ?? { + namespace: Resource.R2Sql.namespace, + table: Resource.R2Sql.table, + dataset: Resource.StatsSyncConfig.dataset, + } + const periods = retentionPeriods(periodStart, periodEnd) + if (periods.length === 0) return [] + return [ + { + cohortDates: periods.map((period) => period.start.toISOString().slice(0, 10)), + query: buildRetentionQuery(periods, source), + }, + ] +} + +function buildRetentionQuery( + periods: { start: Date; end: Date; returnStart: Date; returnEnd: Date }[], + source: StatsQuerySource, +) { + const first = periods[0] + const last = periods.at(-1)! + const scanStartValue = sqlString(first.start.toISOString()) + const scanEndValue = sqlString(last.returnEnd.toISOString()) + const ingestEndValue = sqlString(new Date(last.returnEnd.getTime() + DAY_MS).toISOString()) + const sourceTable = [source.namespace, source.table].map(sqlIdentifier).join(".") + const activityDates = [ + ...new Map( + periods.flatMap((period) => [period.start, period.returnStart]).map((date) => [date.toISOString(), date]), + ).values(), + ].toSorted((a, b) => a.getTime() - b.getTime()) + const activityDateSql = `CASE +${activityDates + .map( + (date) => + ` WHEN started_at >= ${sqlString(date.toISOString())} AND started_at < ${sqlString(new Date(date.getTime() + DAY_MS).toISOString())} THEN ${sqlString(date.toISOString().slice(0, 10))}`, + ) + .join("\n")} + ELSE null + END` + const cohortDates = periods.map((period) => sqlString(period.start.toISOString().slice(0, 10))).join(", ") + const returnDates = periods.map((period) => sqlString(period.returnStart.toISOString().slice(0, 10))).join(", ") + const returnCohortSql = `CASE activity_date +${periods + .map( + (period) => + ` WHEN ${sqlString(period.returnStart.toISOString().slice(0, 10))} THEN ${sqlString(period.start.toISOString().slice(0, 10))}`, + ) + .join("\n")} + END` + + return ` +WITH normalized AS ( + SELECT + ${activityDateSql} AS activity_date, + ${statModelSql("model_requested", "route_model")} AS model, + COALESCE(NULLIF(route_model, ''), '') AS provider_model, + COALESCE(NULLIF(provider_id, ''), '') AS raw_provider, + COALESCE(NULLIF(user_id, ''), NULLIF(workspace_id, ''), NULLIF(service_api_key_id, '')) AS user_key, + COALESCE(tokens_cache_read, 0) + COALESCE(tokens_cache_write, 0) + COALESCE(tokens_input, 0) + COALESCE(tokens_output, 0) AS tokens_total + FROM ${sourceTable} + WHERE event_type = 'generation.completed' + AND source IN ('inference', 'inference-legacy') + AND ( + (source = 'inference-legacy' AND started_at < ${sqlString(LIVE_SOURCE_START)}) + OR (source = 'inference' AND started_at >= ${sqlString(LIVE_SOURCE_START)}) + ) + AND (product = 'go' OR (${freeTierSql("model_tier", "model_requested")})) + AND model_requested IS NOT NULL + AND model_requested <> '' + AND __ingest_ts >= ${scanStartValue} + AND __ingest_ts < ${ingestEndValue} + AND started_at >= ${scanStartValue} + AND started_at < ${scanEndValue} +), filtered AS ( + SELECT + activity_date, + ${statProviderSql("model", "provider_model", "raw_provider")} AS provider, + model, + user_key, + tokens_total + FROM normalized + WHERE activity_date IS NOT NULL + AND user_key <> '' + AND lower(model) NOT IN (${[...EXCLUDED_MODELS].map(sqlString).join(", ")}) +), model_usage AS ( + SELECT + activity_date AS cohort_date, + user_key, + provider, + model, + SUM(tokens_total) AS total_tokens, + COUNT(*) AS requests + FROM filtered + WHERE activity_date IN (${cohortDates}) + GROUP BY activity_date, user_key, provider, model +), ranked_models AS ( + SELECT + cohort_date, + user_key, + provider, + model, + ROW_NUMBER() OVER ( + PARTITION BY cohort_date, user_key + ORDER BY total_tokens DESC, requests DESC, model ASC + ) AS model_rank + FROM model_usage +), primary_models AS ( + SELECT cohort_date, user_key, provider, model + FROM ranked_models + WHERE model_rank = 1 +), returned AS ( + SELECT + ${returnCohortSql} AS cohort_date, + user_key + FROM filtered + WHERE activity_date IN (${returnDates}) + GROUP BY ${returnCohortSql}, user_key +) +SELECT + primary_models.cohort_date, + ${sqlString(source.dataset)} AS dataset, + 'all' AS tier, + primary_models.provider, + primary_models.model, + COUNT(*) AS eligible_users, + SUM(CASE WHEN returned.user_key IS NULL THEN 0 ELSE 1 END) AS retained_users +FROM primary_models +LEFT JOIN returned ON primary_models.user_key = returned.user_key + AND primary_models.cohort_date = returned.cohort_date +GROUP BY primary_models.cohort_date, primary_models.provider, primary_models.model +LIMIT 10000 +` +} + function buildStatsQuery( period: { grain: "day" | "week"; key: string; start: Date; end: Date }, source: StatsQuerySource, @@ -223,6 +360,21 @@ export function toGeoAggregate(data: R2SqlData): GeoStatAggregate[] { ]) } +export function toRetentionAggregate(data: R2SqlData): RetentionStatAggregate[] { + if (!data.cohort_date || !data.model) return [] + return [ + { + cohortDate: data.cohort_date, + dataset: data.dataset || Resource.StatsSyncConfig.dataset, + tier: data.tier || "all", + provider: statProvider(data.model, "", data.provider) || "unknown", + model: statModel(data.model, undefined), + eligibleUsers: integer(data, "eligible_users"), + retainedUsers: integer(data, "retained_users"), + }, + ] +} + function toStatBaseAggregate(data: R2SqlData): StatBaseAggregate[] { const grain = data.grain === "day" || data.grain === "week" ? data.grain : undefined if (!grain || !data.period_key) return [] @@ -300,6 +452,18 @@ function statPeriods(grain: "day" | "week", periodStart: Date, periodEnd: Date) }) } +function retentionPeriods(periodStart: Date, periodEnd: Date) { + const first = startOfUtcDay(periodStart) + const last = new Date(startOfUtcDay(periodEnd).getTime() - WEEK_MS) + const count = Math.max(0, Math.floor((last.getTime() - first.getTime()) / DAY_MS)) + return Array.from({ length: count }, (_, index) => { + const start = new Date(first.getTime() + index * DAY_MS) + const end = new Date(start.getTime() + DAY_MS) + const returnStart = new Date(start.getTime() + WEEK_MS) + return { start, end, returnStart, returnEnd: new Date(returnStart.getTime() + DAY_MS) } + }) +} + function statModelSql(model: string, providerModel: string) { return `COALESCE(NULLIF(regexp_replace(CASE WHEN lower(${model}) = 'big-pickle' THEN regexp_replace(NULLIF(${providerModel}, ''), '^.*/', '') diff --git a/packages/stats/core/src/domain/retention.ts b/packages/stats/core/src/domain/retention.ts new file mode 100644 index 000000000000..14b154aac7b7 --- /dev/null +++ b/packages/stats/core/src/domain/retention.ts @@ -0,0 +1,110 @@ +import { and, eq, inArray } from "drizzle-orm" +import { Context, Effect, Layer } from "effect" +import { DatabaseError, DrizzleClient } from "../database" +import { modelRetention } from "../database/schema" +import { chunks, UPSERT_CHUNK_SIZE } from "./stat" + +export type RetentionStatRow = typeof modelRetention.$inferInsert +export type RetentionStatAggregate = { + cohortDate: string + dataset: string + tier: string + provider: string + model: string + eligibleUsers: number + retainedUsers: number +} + +export declare namespace RetentionStatRepo { + export interface Service { + readonly available: () => Effect.Effect + readonly replace: ( + rows: RetentionStatRow[], + scope: { cohortDates: string[]; dataset: string; tier: string }, + ) => Effect.Effect + } +} + +export class RetentionStatRepo extends Context.Service()( + "@opencode/stats/RetentionStatRepo", +) { + static readonly layer: Layer.Layer = Layer.effect( + RetentionStatRepo, + Effect.gen(function* () { + const db = yield* DrizzleClient + + const available = Effect.fn("RetentionStatRepo.available")(function* () { + return yield* Effect.tryPromise({ + try: async () => { + try { + await db.select({ id: modelRetention.id }).from(modelRetention).limit(1) + return true + } catch (cause) { + if (isMissingRetentionTable(cause)) return false + throw cause + } + }, + catch: (cause) => DatabaseError.make({ cause }), + }) + }) + + const replace = Effect.fn("RetentionStatRepo.replace")(function* ( + rows: RetentionStatRow[], + scope: { cohortDates: string[]; dataset: string; tier: string }, + ) { + if (scope.cohortDates.length === 0) return + + yield* Effect.tryPromise({ + try: () => + db + .delete(modelRetention) + .where( + and( + inArray(modelRetention.cohort_date, scope.cohortDates), + eq(modelRetention.dataset, scope.dataset), + eq(modelRetention.tier, scope.tier), + ), + ), + catch: (cause) => DatabaseError.make({ cause }), + }) + yield* Effect.forEach( + chunks(rows, UPSERT_CHUNK_SIZE), + (chunk) => + Effect.tryPromise({ + try: () => db.insert(modelRetention).values(chunk), + catch: (cause) => DatabaseError.make({ cause }), + }), + { discard: true }, + ) + }) + + return RetentionStatRepo.of({ available, replace }) + }), + ) +} + +export function rowsFromAggregates(aggregates: RetentionStatAggregate[]): RetentionStatRow[] { + return aggregates.map((row) => ({ + cohort_date: row.cohortDate, + dataset: row.dataset, + tier: row.tier, + provider: row.provider, + model: row.model, + eligible_users: row.eligibleUsers, + retained_users: row.retainedUsers, + })) +} + +export function isMissingRetentionTable(cause: unknown): boolean { + const text = errorText(cause).toLowerCase() + return text.includes("model_retention") && text.includes("exist") +} + +function errorText(cause: unknown): string { + if (cause instanceof Error) return `${cause.message} ${errorText((cause as { cause?: unknown }).cause)}` + if (typeof cause === "object" && cause) + return Object.values(cause as Record) + .map(errorText) + .join(" ") + return String(cause) +} diff --git a/packages/stats/core/src/index.ts b/packages/stats/core/src/index.ts index 52ff565cb8cf..834625f60165 100644 --- a/packages/stats/core/src/index.ts +++ b/packages/stats/core/src/index.ts @@ -6,6 +6,7 @@ export * as StatsHome from "./domain/home" export * as Inference from "./domain/inference" export * as ModelStat from "./domain/model" export * as ProviderStat from "./domain/provider" +export * as RetentionStat from "./domain/retention" export * as Stat from "./domain/stat" export * as Runtime from "./runtime" export * as StatSync from "./stat-sync" diff --git a/packages/stats/core/src/runtime.ts b/packages/stats/core/src/runtime.ts index cc1dccad24a6..1c0a7b8ac5fc 100644 --- a/packages/stats/core/src/runtime.ts +++ b/packages/stats/core/src/runtime.ts @@ -4,10 +4,14 @@ import { layer as databaseLayer } from "./database" import { GeoStatRepo } from "./domain/geo" import { ModelStatRepo } from "./domain/model" import { ProviderStatRepo } from "./domain/provider" +import { RetentionStatRepo } from "./domain/retention" -const repoLayer = Layer.mergeAll(ModelStatRepo.layer, ProviderStatRepo.layer, GeoStatRepo.layer).pipe( - Layer.provide(databaseLayer), -) +const repoLayer = Layer.mergeAll( + ModelStatRepo.layer, + ProviderStatRepo.layer, + GeoStatRepo.layer, + RetentionStatRepo.layer, +).pipe(Layer.provide(databaseLayer)) export const layer = Layer.mergeAll(AppConfig.layer, databaseLayer, repoLayer) export const runtime = ManagedRuntime.make(layer) diff --git a/packages/stats/core/src/stat-sync.ts b/packages/stats/core/src/stat-sync.ts index ceec6f7e6dcc..cd8cdf35b66c 100644 --- a/packages/stats/core/src/stat-sync.ts +++ b/packages/stats/core/src/stat-sync.ts @@ -2,16 +2,25 @@ import { DateTime, Effect } from "effect" import { Resource } from "sst/resource" import { DatabaseError } from "./database" import { GeoStatRepo, rowsFromAggregates as geoRowsFromAggregates } from "./domain/geo" -import { buildStatsQueries, toGeoAggregate, toModelAggregate, toProviderAggregate } from "./domain/inference" +import { + buildRetentionQueries, + buildStatsQueries, + toGeoAggregate, + toModelAggregate, + toProviderAggregate, + toRetentionAggregate, +} from "./domain/inference" import { ModelStatRepo, rowsFromAggregates as modelRowsFromAggregates } from "./domain/model" import { ProviderStatRepo, rowsFromAggregates as providerRowsFromAggregates } from "./domain/provider" -import { startOfIsoWeek } from "./domain/stat" +import { RetentionStatRepo, rowsFromAggregates as retentionRowsFromAggregates } from "./domain/retention" +import { startOfIsoWeek, startOfUtcDay } from "./domain/stat" import { R2Sql, R2SqlQueryError } from "./r2-sql" const DATALAKE_INGESTION_LAG_MS = 5 * 60_000 const STATS_DATA_START_MS = new Date("2026-05-28T00:00:00.000Z").getTime() const WEEK_MS = 7 * 86_400_000 const DISPLAY_WINDOW_MS = 56 * 86_400_000 +const RETENTION_INCREMENTAL_LOOKBACK_MS = 9 * 86_400_000 // Anchor incremental passes to the ISO week containing this lookback, so the pass // after a week boundary still recomputes the previous week's final aggregates even // if the boundary pass itself failed. @@ -19,11 +28,12 @@ const INCREMENTAL_LOOKBACK_MS = 2 * 3_600_000 export type SyncStatsResult = { ok: true; rows: number; startedAt: string; periodStart: string; periodEnd: string } export type SyncStatsError = R2SqlQueryError | DatabaseError +type SyncStatsServices = R2Sql | ModelStatRepo | ProviderStatRepo | GeoStatRepo | RetentionStatRepo export const syncStats: (options?: { full?: boolean -}) => Effect.Effect = - Effect.fn("StatSync.sync")(function* (options?: { full?: boolean }) { +}) => Effect.Effect = Effect.fn("StatSync.sync")( + function* (options?: { full?: boolean }) { const startedAt = yield* DateTime.nowAsDate const periodEnd = new Date(Math.floor((startedAt.getTime() - DATALAKE_INGESTION_LAG_MS) / 60_000) * 60_000) const periodStart = options?.full ? fullPeriodStart(periodEnd) : incrementalPeriodStart(periodEnd) @@ -31,6 +41,7 @@ export const syncStats: (options?: { const modelStats = yield* ModelStatRepo const providerStats = yield* ProviderStatRepo const geoStats = yield* GeoStatRepo + const retentionStats = yield* RetentionStatRepo yield* logRuntimeCheck() @@ -44,11 +55,39 @@ export const syncStats: (options?: { const geoRows = geoRowsFromAggregates( rows.filter((row) => row.dimension === "geo" || row.dimension === "geo_model").flatMap(toGeoAggregate), ) + const retentionAvailable = yield* retentionStats.available() + const retentionQueries = retentionAvailable + ? buildRetentionQueries( + options?.full + ? periodStart + : new Date( + Math.max(startOfUtcDay(periodEnd).getTime() - RETENTION_INCREMENTAL_LOOKBACK_MS, STATS_DATA_START_MS), + ), + startOfUtcDay(periodEnd), + ) + : [] + const retentionRows = retentionRowsFromAggregates( + yield* Effect.forEach(retentionQueries, (item) => r2Sql.query(item.query), { concurrency: 4 }).pipe( + Effect.map((batches) => batches.flatMap((batch) => batch.flatMap(toRetentionAggregate))), + ), + ) - yield* Effect.all([modelStats.upsert(modelRows), providerStats.upsert(providerRows), geoStats.upsert(geoRows)], { - concurrency: "unbounded", - discard: true, - }) + yield* Effect.all( + [ + modelStats.upsert(modelRows), + providerStats.upsert(providerRows), + geoStats.upsert(geoRows), + retentionStats.replace(retentionRows, { + cohortDates: retentionQueries.flatMap((item) => item.cohortDates), + dataset: Resource.StatsSyncConfig.dataset, + tier: "all", + }), + ], + { + concurrency: "unbounded", + discard: true, + }, + ) yield* Effect.all( [ modelStats.deleteRetiredDimensions(modelRows), @@ -66,6 +105,8 @@ export const syncStats: (options?: { rows: modelRows.length, providerRows: providerRows.length, geoRows: geoRows.length, + retentionRows: retentionRows.length, + retentionAvailable, stage: Resource.App.stage, })}`, ) @@ -77,7 +118,8 @@ export const syncStats: (options?: { periodStart: periodStart.toISOString(), periodEnd: periodEnd.toISOString(), } - }) + }, +) // May 27 was partial, so keep stats anchored at the first complete day. function fullPeriodStart(periodEnd: Date) { From 830aaf2059e87eab3105dda4c19556206d60c443 Mon Sep 17 00:00:00 2001 From: Jack Date: Wed, 26 Aug 2026 21:49:06 +0800 Subject: [PATCH 048/185] docs(go): add GLM-5.3-Flash (#45269) --- packages/console/app/src/i18n/ar.ts | 1 + packages/console/app/src/i18n/br.ts | 1 + packages/console/app/src/i18n/da.ts | 1 + packages/console/app/src/i18n/de.ts | 1 + packages/console/app/src/i18n/en.ts | 1 + packages/console/app/src/i18n/es.ts | 1 + packages/console/app/src/i18n/fr.ts | 1 + packages/console/app/src/i18n/it.ts | 1 + packages/console/app/src/i18n/ja.ts | 1 + packages/console/app/src/i18n/ko.ts | 1 + packages/console/app/src/i18n/no.ts | 1 + packages/console/app/src/i18n/pl.ts | 1 + packages/console/app/src/i18n/ru.ts | 1 + packages/console/app/src/i18n/th.ts | 1 + packages/console/app/src/i18n/tr.ts | 1 + packages/console/app/src/i18n/uk.ts | 1 + packages/console/app/src/i18n/zh.ts | 1 + packages/console/app/src/i18n/zht.ts | 1 + packages/console/app/src/routes/go/index.css | 31 +++++++++++++++++++ packages/console/app/src/routes/go/index.tsx | 13 ++++++-- .../routes/workspace/[id]/go/lite-section.tsx | 1 + packages/web/src/content/docs/ar/go.mdx | 6 ++++ packages/web/src/content/docs/bs/go.mdx | 6 ++++ packages/web/src/content/docs/da/go.mdx | 6 ++++ packages/web/src/content/docs/de/go.mdx | 6 ++++ packages/web/src/content/docs/es/go.mdx | 6 ++++ packages/web/src/content/docs/fr/go.mdx | 6 ++++ packages/web/src/content/docs/go.mdx | 6 ++++ packages/web/src/content/docs/it/go.mdx | 6 ++++ packages/web/src/content/docs/ja/go.mdx | 6 ++++ packages/web/src/content/docs/ko/go.mdx | 6 ++++ packages/web/src/content/docs/nb/go.mdx | 6 ++++ packages/web/src/content/docs/pl/go.mdx | 6 ++++ packages/web/src/content/docs/pt-br/go.mdx | 6 ++++ packages/web/src/content/docs/ru/go.mdx | 6 ++++ packages/web/src/content/docs/th/go.mdx | 6 ++++ packages/web/src/content/docs/tr/go.mdx | 6 ++++ packages/web/src/content/docs/zh-cn/go.mdx | 6 ++++ packages/web/src/content/docs/zh-tw/go.mdx | 6 ++++ 39 files changed, 168 insertions(+), 3 deletions(-) diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts index e22c9a0a7912..b1dfd4833469 100644 --- a/packages/console/app/src/i18n/ar.ts +++ b/packages/console/app/src/i18n/ar.ts @@ -252,6 +252,7 @@ export const dict = { "zen.privacy.exceptionsLink": "الاستثناءات التالية", "go.title": "OpenCode Go | نماذج برمجة منخفضة التكلفة للجميع", + "go.banner.text": "يحصل GLM-5.3-Flash على حدود استخدام مضاعفة لفترة محدودة", "go.meta.description": "يبلغ سعر Go ‏$10/شهر، مع حدود استخدام سخية ووصول موثوق إلى نماذج البرمجة الرائدة.", "go.hero.title": "نماذج برمجة منخفضة التكلفة للجميع", "go.hero.body": diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts index 0120f36f8b4e..12d1b87a5f95 100644 --- a/packages/console/app/src/i18n/br.ts +++ b/packages/console/app/src/i18n/br.ts @@ -256,6 +256,7 @@ export const dict = { "zen.privacy.exceptionsLink": "seguintes exceções", "go.title": "OpenCode Go | Modelos de codificação de baixo custo para todos", + "go.banner.text": "GLM-5.3-Flash tem limites de uso 2x maiores por tempo limitado", "go.meta.description": "O Go custa $10/mês, com limites generosos de uso e acesso confiável aos principais modelos de codificação.", "go.hero.title": "Modelos de codificação de baixo custo para todos", diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts index 64ab93855c80..8ed2a8f7c1b7 100644 --- a/packages/console/app/src/i18n/da.ts +++ b/packages/console/app/src/i18n/da.ts @@ -254,6 +254,7 @@ export const dict = { "zen.privacy.exceptionsLink": "følgende undtagelser", "go.title": "OpenCode Go | Kodningsmodeller til lav pris for alle", + "go.banner.text": "GLM-5.3-Flash får fordoblet brugsgrænse i en begrænset periode", "go.meta.description": "Go koster $10/måned, med generøse brugsgrænser og pålidelig adgang til førende kodningsmodeller.", "go.hero.title": "Kodningsmodeller til lav pris for alle", diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts index fc5635228b72..dea829a39ad4 100644 --- a/packages/console/app/src/i18n/de.ts +++ b/packages/console/app/src/i18n/de.ts @@ -256,6 +256,7 @@ export const dict = { "zen.privacy.exceptionsLink": "folgenden Ausnahmen", "go.title": "OpenCode Go | Kostengünstige Coding-Modelle für alle", + "go.banner.text": "GLM-5.3-Flash erhält für begrenzte Zeit 2x Nutzungslimits", "go.meta.description": "Go kostet $10/Monat, mit großzügigen Nutzungslimits und zuverlässigem Zugang zu führenden Coding-Modellen.", "go.hero.title": "Kostengünstige Coding-Modelle für alle", diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index 46a466b1f80e..a557d4fb0e8e 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -253,6 +253,7 @@ export const dict = { "zen.privacy.exceptionsLink": "following exceptions", "go.title": "OpenCode Go | Low cost coding models for everyone", + "go.banner.text": "GLM-5.3-Flash gets 2× usage limits for a limited time", "go.meta.description": "Go costs $10/month, with generous usage limits and reliable access to leading coding models.", "go.hero.title": "Low cost coding models for everyone", "go.hero.body": diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts index 502eae5aa53f..534ac2eabb83 100644 --- a/packages/console/app/src/i18n/es.ts +++ b/packages/console/app/src/i18n/es.ts @@ -257,6 +257,7 @@ export const dict = { "zen.privacy.exceptionsLink": "siguientes excepciones", "go.title": "OpenCode Go | Modelos de programación de bajo coste para todos", + "go.banner.text": "GLM-5.3-Flash tiene límites de uso 2x mayores por tiempo limitado", "go.meta.description": "Go cuesta 10 $/mes, con límites de uso generosos y acceso fiable a modelos de programación líderes.", "go.hero.title": "Modelos de programación de bajo coste para todos", diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts index 250ac50aa450..2b4ad95d0331 100644 --- a/packages/console/app/src/i18n/fr.ts +++ b/packages/console/app/src/i18n/fr.ts @@ -258,6 +258,7 @@ export const dict = { "zen.privacy.exceptionsLink": "exceptions suivantes", "go.title": "OpenCode Go | Modèles de code à faible coût pour tous", + "go.banner.text": "GLM-5.3-Flash bénéficie de limites d’utilisation 2x supérieures pour une durée limitée", "go.meta.description": "Go coûte 10 $/mois, avec des limites d'utilisation généreuses et un accès fiable aux principaux modèles de codage.", "go.hero.title": "Modèles de code à faible coût pour tous", diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts index 2922105b6e55..3abbaf7db8eb 100644 --- a/packages/console/app/src/i18n/it.ts +++ b/packages/console/app/src/i18n/it.ts @@ -254,6 +254,7 @@ export const dict = { "zen.privacy.exceptionsLink": "seguenti eccezioni", "go.title": "OpenCode Go | Modelli di coding a basso costo per tutti", + "go.banner.text": "GLM-5.3-Flash offre limiti di utilizzo 2x superiori per un periodo limitato", "go.meta.description": "Go costa $10/mese, con limiti di utilizzo generosi e un accesso affidabile ai principali modelli di coding.", "go.hero.title": "Modelli di coding a basso costo per tutti", diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts index 45bff6611ea8..5bb36e46f43a 100644 --- a/packages/console/app/src/i18n/ja.ts +++ b/packages/console/app/src/i18n/ja.ts @@ -253,6 +253,7 @@ export const dict = { "zen.privacy.exceptionsLink": "以下の例外", "go.title": "OpenCode Go | すべての人のための低価格なコーディングモデル", + "go.banner.text": "GLM-5.3-Flashの利用上限が期間限定で2倍に", "go.meta.description": "Goは月額$10で、主要なコーディングモデルへのゆとりある利用上限と安定したアクセスを提供します。", "go.hero.title": "すべての人のための低価格なコーディングモデル", diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts index bf5eb8e6bdeb..b57ab820b304 100644 --- a/packages/console/app/src/i18n/ko.ts +++ b/packages/console/app/src/i18n/ko.ts @@ -250,6 +250,7 @@ export const dict = { "zen.privacy.exceptionsLink": "다음 예외", "go.title": "OpenCode Go | 모두를 위한 저비용 코딩 모델", + "go.banner.text": "GLM-5.3-Flash 사용 한도가 한시적으로 2배 확대됩니다", "go.meta.description": "Go는 월 $10이며, 넉넉한 사용 한도와 주요 코딩 모델에 대한 안정적인 액세스를 제공합니다.", "go.hero.title": "모두를 위한 저비용 코딩 모델", "go.hero.body": diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts index d6dd001552c5..343e81e29973 100644 --- a/packages/console/app/src/i18n/no.ts +++ b/packages/console/app/src/i18n/no.ts @@ -254,6 +254,7 @@ export const dict = { "zen.privacy.exceptionsLink": "følgende unntak", "go.title": "OpenCode Go | Rimelige kodemodeller for alle", + "go.banner.text": "GLM-5.3-Flash får 2x bruksgrense i en begrenset periode", "go.meta.description": "Go koster $10/måned, med sjenerøse bruksgrenser og pålitelig tilgang til ledende kodemodeller.", "go.hero.title": "Rimelige kodemodeller for alle", diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts index d423a5cda0df..f33ddf70f0d1 100644 --- a/packages/console/app/src/i18n/pl.ts +++ b/packages/console/app/src/i18n/pl.ts @@ -255,6 +255,7 @@ export const dict = { "zen.privacy.exceptionsLink": "następującymi wyjątkami", "go.title": "OpenCode Go | Niskokosztowe modele do kodowania dla każdego", + "go.banner.text": "GLM-5.3-Flash oferuje 2x wyższe limity użycia przez ograniczony czas", "go.meta.description": "Go kosztuje $10/miesiąc, oferując hojne limity użycia i niezawodny dostęp do wiodących modeli do kodowania.", "go.hero.title": "Niskokosztowe modele do kodowania dla każdego", diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts index 92cb225588dc..b285c9e85519 100644 --- a/packages/console/app/src/i18n/ru.ts +++ b/packages/console/app/src/i18n/ru.ts @@ -258,6 +258,7 @@ export const dict = { "zen.privacy.exceptionsLink": "следующими исключениями", "go.title": "OpenCode Go | Недорогие модели для кодинга для всех", + "go.banner.text": "GLM-5.3-Flash получает 2x лимиты использования на ограниченное время", "go.meta.description": "Go стоит $10/месяц и предлагает щедрые лимиты использования и надежный доступ к ведущим моделям для кодинга.", "go.hero.title": "Недорогие модели для кодинга для всех", diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts index c3766f5b473a..1302a394371c 100644 --- a/packages/console/app/src/i18n/th.ts +++ b/packages/console/app/src/i18n/th.ts @@ -253,6 +253,7 @@ export const dict = { "zen.privacy.exceptionsLink": "ข้อยกเว้นดังนี้", "go.title": "OpenCode Go | โมเดลเขียนโค้ดราคาประหยัดสำหรับทุกคน", + "go.banner.text": "GLM-5.3-Flash เพิ่มโควตาการใช้งานเป็น 2 เท่าในช่วงเวลาจำกัด", "go.meta.description": "Go มีราคา $10/เดือน พร้อมขีดจำกัดการใช้งานที่เอื้อเฟื้อและการเข้าถึงโมเดลเขียนโค้ดชั้นนำอย่างเชื่อถือได้", "go.hero.title": "โมเดลเขียนโค้ดราคาประหยัดสำหรับทุกคน", diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts index 118d56204503..a78376c8b685 100644 --- a/packages/console/app/src/i18n/tr.ts +++ b/packages/console/app/src/i18n/tr.ts @@ -256,6 +256,7 @@ export const dict = { "zen.privacy.exceptionsLink": "aşağıdaki istisnalar", "go.title": "OpenCode Go | Herkes için düşük maliyetli kodlama modelleri", + "go.banner.text": "GLM-5.3-Flash sınırlı bir süre için 2x kullanım limiti sunuyor", "go.meta.description": "Go ayda 10$'dır; cömert kullanım limitleri ve önde gelen kodlama modellerine güvenilir erişim sunar.", "go.hero.title": "Herkes için düşük maliyetli kodlama modelleri", diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts index 688d61236123..eaa3c63112f4 100644 --- a/packages/console/app/src/i18n/uk.ts +++ b/packages/console/app/src/i18n/uk.ts @@ -255,6 +255,7 @@ export const dict = { "zen.privacy.exceptionsLink": "такими винятками", "go.title": "OpenCode Go | Недорогі моделі кодування для всіх", + "go.banner.text": "GLM-5.3-Flash отримує 2x ліміти використання протягом обмеженого часу", "go.meta.description": "Go коштує $10/місяць, зі щедрими лімітами використання та надійним доступом до провідних моделей для кодування.", "go.hero.title": "Недорогі моделі кодування для всіх", diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts index f852bc084bee..12f161238c82 100644 --- a/packages/console/app/src/i18n/zh.ts +++ b/packages/console/app/src/i18n/zh.ts @@ -244,6 +244,7 @@ export const dict = { "zen.privacy.exceptionsLink": "以下例外情况除外", "go.title": "OpenCode Go | 人人可用的低成本编程模型", + "go.banner.text": "GLM-5.3-Flash 限时享受 2 倍使用额度", "go.meta.description": "Go 每月 $10,提供充裕的使用限额,并可可靠访问领先的编程模型。", "go.hero.title": "人人可用的低成本编程模型", "go.hero.body": diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts index b83e75f779ee..149fbf7c2339 100644 --- a/packages/console/app/src/i18n/zht.ts +++ b/packages/console/app/src/i18n/zht.ts @@ -244,6 +244,7 @@ export const dict = { "zen.privacy.exceptionsLink": "以下例外情況", "go.title": "OpenCode Go | 低成本全民編碼模型", + "go.banner.text": "GLM-5.3-Flash 限時享有 2 倍使用額度", "go.meta.description": "Go 每月 $10,提供充裕的使用限額,並可穩定存取領先的編碼模型。", "go.hero.title": "低成本全民編碼模型", "go.hero.body": diff --git a/packages/console/app/src/routes/go/index.css b/packages/console/app/src/routes/go/index.css index 8e715e363b55..a329e2981efb 100644 --- a/packages/console/app/src/routes/go/index.css +++ b/packages/console/app/src/routes/go/index.css @@ -327,6 +327,37 @@ body { } } + [data-component="desktop-app-banner"] { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 32px; + + [data-slot="badge"] { + background: var(--color-background-strong); + color: var(--color-text-inverted); + font-weight: 500; + padding: 4px 8px; + line-height: 1; + flex-shrink: 0; + } + + [data-slot="content"] { + display: flex; + align-items: center; + gap: 1ch; + } + + [data-slot="text"] { + color: var(--color-text-strong); + line-height: 1.4; + + @media (max-width: 30.625rem) { + display: none; + } + } + } + [data-slot="hero-copy"] { img { margin-bottom: 24px; diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index e36e10af8a87..77747e677df8 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -25,6 +25,7 @@ const checkLoggedIn = query(async () => { const models = [ { name: "Grok 4.6", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention30" }, { name: "GPT 5.6 Luna", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention30" }, + { name: "GLM-5.3-Flash", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "GLM-5.3", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "GLM-5.2", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "GLM-5.1", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, @@ -72,14 +73,14 @@ function LimitsGraph(props: { href: string }) { { id: "kimi-k3", name: "Kimi K3", req: 110, d: "50ms" }, { id: "qwen3.8-max", name: "Qwen3.8 Max", req: 160, d: "90ms" }, { id: "grok-4.6", name: "Grok 4.6", req: 169, d: "75ms" }, - { id: "glm-5.2", name: "GLM-5.2", req: 880, d: "100ms" }, { id: "gpt-5.6-luna", name: "GPT 5.6 Luna", req: 2050, d: "290ms" }, + { id: "glm-5.3-flash", name: "GLM-5.3-Flash", req: 3160, baseReq: 1580, bonus: "2x usage", d: "100ms" }, { id: "minimax-m3", name: "MiniMax M3", req: 3200, d: "210ms" }, { id: "qwen3.7-plus", name: "Qwen3.7 Plus", req: 4300, d: "300ms" }, { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", req: 7600, d: "330ms" }, { id: "longcat-2.0", name: "LongCat-2.0", req: 11400, d: "335ms" }, { id: "mimo-v2.5", name: "MiMo-V2.5", req: 30100, d: "340ms" }, - { id: "hy3", name: "Hy3", req: 34400, baseReq: 4300, d: "320ms" }, + { id: "hy3", name: "Hy3", req: 34400, baseReq: 4300, bonus: "8x usage", d: "320ms" }, { id: "muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", req: 45300, edge: true, d: "360ms" }, ] @@ -219,7 +220,7 @@ function LimitsGraph(props: { href: string }) { )} {"infinite" in m && ({i18n.t("go.graph.limitedTime")})} - {m.baseReq && 8x usage} + {"bonus" in m && {m.bonus}} )} @@ -269,6 +270,12 @@ export default function Home() {
    +
    + {i18n.t("home.banner.badge")} +
    + {i18n.t("go.banner.text")} +
    +
    diff --git a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx index 7e535ae8a765..1770ee30741a 100644 --- a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx @@ -642,6 +642,7 @@ export function LiteSection(props: { lite: LiteSubscription | undefined }) {
    • Grok 4.6
    • GPT 5.6 Luna
    • +
    • GLM-5.3-Flash
    • GLM-5.3
    • GLM-5.2
    • GLM-5.1
    • diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx index 71ba2e0b8dce..6d74e4b66ed2 100644 --- a/packages/web/src/content/docs/ar/go.mdx +++ b/packages/web/src/content/docs/ar/go.mdx @@ -50,6 +50,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر تشمل قائمة النماذج الحالية: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -92,6 +93,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | ---------------------------- | ------------------- | ------------------ | ---------------- | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -116,6 +118,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر تستند التقديرات إلى أنماط الطلبات المرصودة: - Grok 4.6 — ‏390 input، و32,500 cached، و120 output tokens لكل طلب +- GLM-5.3-Flash — ‏1,000 input، و55,000 cached، و200 output tokens لكل طلب - GLM-5.3/5.2/5.1 — ‏700 input، و52,000 cached، و150 output tokens لكل طلب - GPT 5.6 Luna — ‏1,000 توكن إدخال، و50,000 توكن مخزّن مؤقتًا، و220 توكن إخراج لكل طلب - Kimi K3 — ‏1,050 input، و76,500 cached، و300 output tokens لكل طلب @@ -143,6 +146,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -210,6 +214,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -252,6 +257,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | ------------- | ------------------ | | Grok 4.6 | غير مستخدَمة | 30 يومًا | | GPT 5.6 Luna | غير مستخدَمة | 30 يومًا | +| GLM-5.3-Flash | غير مستخدَمة | 0 أيام | | GLM-5.3 | غير مستخدَمة | 0 أيام | | GLM-5.2 | غير مستخدَمة | 0 أيام | | GLM-5.1 | غير مستخدَمة | 0 أيام | diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index dc7536a8cf42..67c398dcde6b 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -60,6 +60,7 @@ Samo jedan član po radnom prostoru (workspace) može se pretplatiti na OpenCode Trenutna lista modela uključuje: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -102,6 +103,7 @@ Tabela ispod pruža procijenjeni broj zahtjeva na osnovu tipičnih obrazaca kori | ---------------------------- | ------------------ | ----------------- | ----------------- | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -126,6 +128,7 @@ Tabela ispod pruža procijenjeni broj zahtjeva na osnovu tipičnih obrazaca kori Procjene se zasnivaju na zapaženim obrascima zahtjeva: - Grok 4.6 — 390 ulaznih, 32,500 keširanih, 120 izlaznih tokena po zahtjevu +- GLM-5.3-Flash — 1,000 ulaznih (input), 55,000 keširanih, 200 izlaznih (output) tokena po zahtjevu - GLM-5.3/5.2/5.1 — 700 ulaznih (input), 52,000 keširanih, 150 izlaznih (output) tokena po zahtjevu - GPT 5.6 Luna — 1,000 ulaznih, 50,000 keširanih, 220 izlaznih tokena po zahtjevu - Kimi K3 — 1,050 ulaznih, 76,500 keširanih, 300 izlaznih tokena po zahtjevu @@ -153,6 +156,7 @@ Procjene se također zasnivaju na sljedećim cijenama po 1M tokena i mjesečnoj | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -222,6 +226,7 @@ Također možete pristupiti Go modelima putem sljedećih API endpointa. | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -266,6 +271,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | ----------------- | -------------------- | | Grok 4.6 | Ne koristi se | 30 dana | | GPT 5.6 Luna | Ne koristi se | 30 dana | +| GLM-5.3-Flash | Ne koristi se | 0 dana | | GLM-5.3 | Ne koristi se | 0 dana | | GLM-5.2 | Ne koristi se | 0 dana | | GLM-5.1 | Ne koristi se | 0 dana | diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx index b94272e40587..b926902d1d49 100644 --- a/packages/web/src/content/docs/da/go.mdx +++ b/packages/web/src/content/docs/da/go.mdx @@ -60,6 +60,7 @@ Kun ét medlem per arbejdsområde kan abonnere på OpenCode Go. Den nuværende liste over modeller inkluderer: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -102,6 +103,7 @@ Tabellen nedenfor giver et estimeret antal anmodninger baseret på typiske Go-fo | ---------------------------- | ----------------------- | ------------------- | --------------------- | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -126,6 +128,7 @@ Tabellen nedenfor giver et estimeret antal anmodninger baseret på typiske Go-fo Estimaterne er baseret på observerede anmodningsmønstre: - Grok 4.6 — 390 input, 32.500 cachelagrede, 120 output-tokens pr. anmodning +- GLM-5.3-Flash — 1.000 input, 55.000 cachelagrede, 200 output-tokens pr. anmodning - GLM-5.3/5.2/5.1 — 700 input, 52.000 cachelagrede, 150 output-tokens pr. anmodning - GPT 5.6 Luna — 1.000 input, 50.000 cachelagrede, 220 output-tokens pr. anmodning - Kimi K3 — 1.050 input, 76.500 cachelagrede, 300 output-tokens pr. anmodning @@ -153,6 +156,7 @@ Estimaterne er også baseret på følgende priser pr. 1M tokens og det månedlig | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -222,6 +226,7 @@ Du kan også få adgang til Go-modeller gennem følgende API-endpoints. | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -266,6 +271,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | ------------ | -------------- | | Grok 4.6 | Ikke brugt | 30 dage | | GPT 5.6 Luna | Ikke brugt | 30 dage | +| GLM-5.3-Flash | Ikke brugt | 0 dage | | GLM-5.3 | Ikke brugt | 0 dage | | GLM-5.2 | Ikke brugt | 0 dage | | GLM-5.1 | Ikke brugt | 0 dage | diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx index d19a1422c552..c26b2cd01ad0 100644 --- a/packages/web/src/content/docs/de/go.mdx +++ b/packages/web/src/content/docs/de/go.mdx @@ -52,6 +52,7 @@ Nur ein Mitglied pro Workspace kann OpenCode Go abonnieren. Die aktuelle Liste der Modelle umfasst: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -94,6 +95,7 @@ Die folgende Tabelle zeigt eine geschätzte Anzahl von Anfragen basierend auf ty | ---------------------------- | ---------------------- | ------------------ | ------------------ | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -118,6 +120,7 @@ Die folgende Tabelle zeigt eine geschätzte Anzahl von Anfragen basierend auf ty Die Schätzungen basieren auf beobachteten Anfragemustern: - Grok 4.6 — 390 Input-, 32.500 Cached-, 120 Output-Tokens pro Anfrage +- GLM-5.3-Flash — 1.000 Input-, 55.000 Cached-, 200 Output-Tokens pro Anfrage - GLM-5.3/5.2/5.1 — 700 Input-, 52.000 Cached-, 150 Output-Tokens pro Anfrage - GPT 5.6 Luna — 1.000 Input-, 50.000 Cached-, 220 Output-Tokens pro Anfrage - Kimi K3 — 1.050 Input-, 76.500 Cached-, 300 Output-Tokens pro Anfrage @@ -145,6 +148,7 @@ Die Schätzungen basieren außerdem auf den folgenden Preisen pro 1M Tokens und | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -212,6 +216,7 @@ Du kannst auf die Go-Modelle auch über die folgenden API-Endpunkte zugreifen. | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -254,6 +259,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | --------------- | ----------------- | | Grok 4.6 | Nicht verwendet | 30 Tage | | GPT 5.6 Luna | Nicht verwendet | 30 Tage | +| GLM-5.3-Flash | Nicht verwendet | 0 Tage | | GLM-5.3 | Nicht verwendet | 0 Tage | | GLM-5.2 | Nicht verwendet | 0 Tage | | GLM-5.1 | Nicht verwendet | 0 Tage | diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index ada50b0d2850..5bab364e4632 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -60,6 +60,7 @@ Solo un miembro por espacio de trabajo puede suscribirse a OpenCode Go. La lista actual de modelos incluye: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -102,6 +103,7 @@ La siguiente tabla proporciona una cantidad estimada de peticiones basada en los | ---------------------------- | ---------------------- | --------------------- | ------------------ | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -126,6 +128,7 @@ La siguiente tabla proporciona una cantidad estimada de peticiones basada en los Las estimaciones se basan en los patrones de peticiones observados: - Grok 4.6 — 390 tokens de entrada, 32,500 en caché, 120 tokens de salida por petición +- GLM-5.3-Flash — 1,000 tokens de entrada, 55,000 en caché, 200 tokens de salida por petición - GLM-5.3/5.2/5.1 — 700 tokens de entrada, 52,000 en caché, 150 tokens de salida por petición - GPT 5.6 Luna — 1,000 tokens de entrada, 50,000 en caché, 220 tokens de salida por petición - Kimi K3 — 1,050 tokens de entrada, 76,500 en caché, 300 tokens de salida por petición @@ -153,6 +156,7 @@ Las estimaciones también se basan en los siguientes precios por 1M tokens y en | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -222,6 +226,7 @@ También puedes acceder a los modelos de Go a través de los siguientes endpoint | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -266,6 +271,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | ------------------------ | ------------------ | | Grok 4.6 | No utilizado | 30 días | | GPT 5.6 Luna | No utilizado | 30 días | +| GLM-5.3-Flash | No utilizado | 0 días | | GLM-5.3 | No utilizado | 0 días | | GLM-5.2 | No utilizado | 0 días | | GLM-5.1 | No utilizado | 0 días | diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx index b1792e39a29f..6c70197dc2fe 100644 --- a/packages/web/src/content/docs/fr/go.mdx +++ b/packages/web/src/content/docs/fr/go.mdx @@ -50,6 +50,7 @@ Un seul membre par espace de travail peut s'abonner à OpenCode Go. La liste actuelle des modèles comprend : - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -92,6 +93,7 @@ Le tableau ci-dessous fournit une estimation du nombre de requêtes basée sur d | ---------------------------- | --------------------- | -------------------- | ----------------- | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -116,6 +118,7 @@ Le tableau ci-dessous fournit une estimation du nombre de requêtes basée sur d Les estimations sont basées sur les schémas de requêtes observés : - Grok 4.6 — 390 tokens en entrée, 32,500 en cache, 120 tokens en sortie par requête +- GLM-5.3-Flash — 1,000 tokens en entrée, 55,000 en cache, 200 tokens en sortie par requête - GLM-5.3/5.2/5.1 — 700 tokens en entrée, 52,000 en cache, 150 tokens en sortie par requête - GPT 5.6 Luna — 1,000 tokens en entrée, 50,000 en cache, 220 tokens en sortie par requête - Kimi K3 — 1,050 tokens en entrée, 76,500 en cache, 300 tokens en sortie par requête @@ -143,6 +146,7 @@ Les estimations sont également basées sur les prix suivants par 1M tokens et s | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -210,6 +214,7 @@ Vous pouvez également accéder aux modèles Go via les points de terminaison d' | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -252,6 +257,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | ------------------------ | ------------------------ | | Grok 4.6 | Non utilisé | 30 jours | | GPT 5.6 Luna | Non utilisé | 30 jours | +| GLM-5.3-Flash | Non utilisé | 0 jour | | GLM-5.3 | Non utilisé | 0 jour | | GLM-5.2 | Non utilisé | 0 jour | | GLM-5.1 | Non utilisé | 0 jour | diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index 9566c7c54206..f0b5af658846 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -60,6 +60,7 @@ Only one member per workspace can subscribe to OpenCode Go. The current list of models includes: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -102,6 +103,7 @@ The table below provides an estimated request count based on typical Go usage pa | ---------------------------- | ------------------- | ----------------- | ------------------ | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -126,6 +128,7 @@ The table below provides an estimated request count based on typical Go usage pa The estimates are based on observed request patterns: - Grok 4.6 — 390 input, 32,500 cached, 120 output tokens per request +- GLM-5.3-Flash — 1,000 input, 55,000 cached, 200 output tokens per request - GLM-5.3/5.2/5.1 — 700 input, 52,000 cached, 150 output tokens per request - GPT 5.6 Luna — 1,000 input, 50,000 cached, 220 output tokens per request - Kimi K3 — 1,050 input, 76,500 cached, 300 output tokens per request @@ -153,6 +156,7 @@ The estimates are also based on the following prices per 1M tokens and the month | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -222,6 +226,7 @@ You can also access Go models through the following API endpoints. | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -266,6 +271,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | -------------- | -------------- | | Grok 4.6 | Not used | 30 days | | GPT 5.6 Luna | Not used | 30 days | +| GLM-5.3-Flash | Not used | 0 days | | GLM-5.3 | Not used | 0 days | | GLM-5.2 | Not used | 0 days | | GLM-5.1 | Not used | 0 days | diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx index fddea0a86576..018c63550471 100644 --- a/packages/web/src/content/docs/it/go.mdx +++ b/packages/web/src/content/docs/it/go.mdx @@ -58,6 +58,7 @@ Solo un membro per workspace può abbonarsi a OpenCode Go. L'elenco attuale dei modelli include: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -100,6 +101,7 @@ La tabella seguente fornisce una stima del conteggio delle richieste in base a p | ---------------------------- | -------------------- | --------------------- | ----------------- | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -124,6 +126,7 @@ La tabella seguente fornisce una stima del conteggio delle richieste in base a p Le stime si basano sui pattern di richieste osservati: - Grok 4.6 — 390 di input, 32.500 in cache, 120 token di output per richiesta +- GLM-5.3-Flash — 1.000 di input, 55.000 in cache, 200 token di output per richiesta - GLM-5.3/5.2/5.1 — 700 di input, 52.000 in cache, 150 token di output per richiesta - GPT 5.6 Luna — 1.000 token di input, 50.000 in cache, 220 token di output per richiesta - Kimi K3 — 1.050 di input, 76.500 in cache, 300 token di output per richiesta @@ -151,6 +154,7 @@ Le stime si basano anche sui seguenti prezzi per 1M token e sull'utilizzo mensil | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -220,6 +224,7 @@ Puoi anche accedere ai modelli Go tramite i seguenti endpoint API. | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -264,6 +269,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | ------------------------- | ---------------------- | | Grok 4.6 | Non utilizzato | 30 giorni | | GPT 5.6 Luna | Non utilizzato | 30 giorni | +| GLM-5.3-Flash | Non utilizzato | 0 giorni | | GLM-5.3 | Non utilizzato | 0 giorni | | GLM-5.2 | Non utilizzato | 0 giorni | | GLM-5.1 | Non utilizzato | 0 giorni | diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx index 3a48101c044c..c1ad6d01846c 100644 --- a/packages/web/src/content/docs/ja/go.mdx +++ b/packages/web/src/content/docs/ja/go.mdx @@ -50,6 +50,7 @@ OpenCode Goをサブスクライブできるのは、1つのワークスペー 現在のモデルリストには以下が含まれます: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -92,6 +93,7 @@ OpenCode Goには以下の制限が含まれています: | ---------------------------- | ------------------------- | ---------------- | ---------------- | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -116,6 +118,7 @@ OpenCode Goには以下の制限が含まれています: 推定値は、観測されたリクエストパターンに基づいています: - Grok 4.6 — リクエストあたり 入力 390トークン、キャッシュ 32,500トークン、出力 120トークン +- GLM-5.3-Flash — リクエストあたり 入力 1,000トークン、キャッシュ 55,000トークン、出力 200トークン - GLM-5.3/5.2/5.1 — リクエストあたり 入力 700トークン、キャッシュ 52,000トークン、出力 150トークン - GPT 5.6 Luna — リクエストあたり 入力 1,000トークン、キャッシュ 50,000トークン、出力 220トークン - Kimi K3 — リクエストあたり 入力 1,050トークン、キャッシュ 76,500トークン、出力 300トークン @@ -143,6 +146,7 @@ OpenCode Goには以下の制限が含まれています: | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -210,6 +214,7 @@ Goでは月額$10を支払い、その6倍の利用枠を提供することを | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -252,6 +257,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | -------------------- | ----------- | | Grok 4.6 | 使用なし | 30日 | | GPT 5.6 Luna | 使用なし | 30日 | +| GLM-5.3-Flash | 使用なし | 0日 | | GLM-5.3 | 使用なし | 0日 | | GLM-5.2 | 使用なし | 0日 | | GLM-5.1 | 使用なし | 0日 | diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx index 56fffd759e6d..b0aecf2e460d 100644 --- a/packages/web/src/content/docs/ko/go.mdx +++ b/packages/web/src/content/docs/ko/go.mdx @@ -50,6 +50,7 @@ workspace당 한 명의 멤버만 OpenCode Go를 구독할 수 있습니다. 현재 모델 목록에는 다음이 포함됩니다. - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -92,6 +93,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | ---------------------------- | ----------------- | -------------- | -------------- | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -116,6 +118,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. 이 예상치는 관찰된 요청 패턴을 기준으로 합니다. - Grok 4.6 — 요청당 입력 390, 캐시 32,500, 출력 토큰 120 +- GLM-5.3-Flash — 요청당 입력 1,000, 캐시 55,000, 출력 토큰 200 - GLM-5.3/5.2/5.1 — 요청당 입력 700, 캐시 52,000, 출력 토큰 150 - GPT 5.6 Luna — 요청당 입력 토큰 1,000개, 캐시 토큰 50,000개, 출력 토큰 220개 - Kimi K3 — 요청당 입력 1,050, 캐시 76,500, 출력 토큰 300 @@ -143,6 +146,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -210,6 +214,7 @@ Go에서는 월 $10를 지불하며, 저희는 그 6배의 사용량을 제공 | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -252,6 +257,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | ------------- | ----------- | | Grok 4.6 | 사용되지 않음 | 30일 | | GPT 5.6 Luna | 사용되지 않음 | 30일 | +| GLM-5.3-Flash | 사용되지 않음 | 0일 | | GLM-5.3 | 사용되지 않음 | 0일 | | GLM-5.2 | 사용되지 않음 | 0일 | | GLM-5.1 | 사용되지 않음 | 0일 | diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx index e5b60d65e267..f8016c4619c8 100644 --- a/packages/web/src/content/docs/nb/go.mdx +++ b/packages/web/src/content/docs/nb/go.mdx @@ -60,6 +60,7 @@ Kun ett medlem per arbeidsområde kan abonnere på OpenCode Go. Den nåværende listen over modeller inkluderer: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -102,6 +103,7 @@ Tabellen nedenfor gir et estimert antall forespørsler basert på typiske bruksm | ---------------------------- | ------------------------ | -------------------- | ---------------------- | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -126,6 +128,7 @@ Tabellen nedenfor gir et estimert antall forespørsler basert på typiske bruksm Estimatene er basert på observerte forespørselsmønstre: - Grok 4.6 — 390 input, 32 500 bufret, 120 output-tokens per forespørsel +- GLM-5.3-Flash — 1 000 input, 55 000 bufret, 200 output-tokens per forespørsel - GLM-5.3/5.2/5.1 — 700 input, 52 000 bufret, 150 output-tokens per forespørsel - GPT 5.6 Luna — 1 000 input, 50 000 bufret, 220 output-tokens per forespørsel - Kimi K3 — 1 050 input, 76 500 bufret, 300 output-tokens per forespørsel @@ -153,6 +156,7 @@ Estimatene er også basert på følgende priser per 1M tokens og den månedlige | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -222,6 +226,7 @@ Du kan også få tilgang til Go-modeller gjennom følgende API-endepunkter. | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -266,6 +271,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | ------------- | --------------- | | Grok 4.6 | Brukes ikke | 30 dager | | GPT 5.6 Luna | Brukes ikke | 30 dager | +| GLM-5.3-Flash | Brukes ikke | 0 dager | | GLM-5.3 | Brukes ikke | 0 dager | | GLM-5.2 | Brukes ikke | 0 dager | | GLM-5.1 | Brukes ikke | 0 dager | diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx index dfa6095787a1..4d04f30c047e 100644 --- a/packages/web/src/content/docs/pl/go.mdx +++ b/packages/web/src/content/docs/pl/go.mdx @@ -54,6 +54,7 @@ Tylko jeden członek na obszar roboczy (workspace) może zasubskrybować OpenCod Obecna lista modeli obejmuje: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -96,6 +97,7 @@ Poniższa tabela przedstawia szacunkową liczbę żądań na podstawie typowych | ---------------------------- | ------------------- | ------------------ | ------------------ | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -120,6 +122,7 @@ Poniższa tabela przedstawia szacunkową liczbę żądań na podstawie typowych Szacunki te opierają się na zaobserwowanych wzorcach żądań: - Grok 4.6 — 390 tokenów wejściowych, 32 500 w pamięci podręcznej, 120 tokenów wyjściowych na żądanie +- GLM-5.3-Flash — 1 000 tokenów wejściowych, 55 000 w pamięci podręcznej, 200 tokenów wyjściowych na żądanie - GLM-5.3/5.2/5.1 — 700 tokenów wejściowych, 52 000 w pamięci podręcznej, 150 tokenów wyjściowych na żądanie - GPT 5.6 Luna — 1 000 tokenów wejściowych, 50 000 w pamięci podręcznej, 220 tokenów wyjściowych na żądanie - Kimi K3 — 1 050 tokenów wejściowych, 76 500 w pamięci podręcznej, 300 tokenów wyjściowych na żądanie @@ -147,6 +150,7 @@ Szacunki opierają się również na następujących cenach za 1M tokenów oraz | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -214,6 +218,7 @@ Możesz również uzyskać dostęp do modeli Go za pośrednictwem następującyc | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -258,6 +263,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | ----------------- | --------------- | | Grok 4.6 | Niewykorzystywane | 30 dni | | GPT 5.6 Luna | Niewykorzystywane | 30 dni | +| GLM-5.3-Flash | Niewykorzystywane | 0 dni | | GLM-5.3 | Niewykorzystywane | 0 dni | | GLM-5.2 | Niewykorzystywane | 0 dni | | GLM-5.1 | Niewykorzystywane | 0 dni | diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index 307b9dae8fb8..a0ec0c5b5be4 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -60,6 +60,7 @@ Apenas um membro por workspace pode assinar o OpenCode Go. A lista atual de modelos inclui: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -102,6 +103,7 @@ A tabela abaixo fornece uma contagem estimada de requisições com base nos padr | ---------------------------- | ----------------------- | ---------------------- | ------------------- | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -126,6 +128,7 @@ A tabela abaixo fornece uma contagem estimada de requisições com base nos padr As estimativas se baseiam nos padrões de requisições observados: - Grok 4.6 — 390 tokens de entrada, 32.500 em cache, 120 tokens de saída por requisição +- GLM-5.3-Flash — 1.000 tokens de entrada, 55.000 em cache, 200 tokens de saída por requisição - GLM-5.3/5.2/5.1 — 700 tokens de entrada, 52.000 em cache, 150 tokens de saída por requisição - GPT 5.6 Luna — 1.000 tokens de entrada, 50.000 em cache, 220 tokens de saída por requisição - Kimi K3 — 1.050 tokens de entrada, 76.500 em cache, 300 tokens de saída por requisição @@ -153,6 +156,7 @@ As estimativas também se baseiam nos seguintes preços por 1M tokens e no uso m | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -222,6 +226,7 @@ Você também pode acessar os modelos do Go através dos seguintes endpoints de | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -266,6 +271,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | ---------------------- | ----------------- | | Grok 4.6 | Não usado | 30 dias | | GPT 5.6 Luna | Não usado | 30 dias | +| GLM-5.3-Flash | Não usado | 0 dias | | GLM-5.3 | Não usado | 0 dias | | GLM-5.2 | Não usado | 0 dias | | GLM-5.1 | Não usado | 0 dias | diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx index b6eff3279d14..c6a05c844c3c 100644 --- a/packages/web/src/content/docs/ru/go.mdx +++ b/packages/web/src/content/docs/ru/go.mdx @@ -60,6 +60,7 @@ OpenCode Go работает так же, как и любой другой пр Текущий список моделей включает: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -102,6 +103,7 @@ OpenCode Go включает следующие лимиты: | ---------------------------- | ------------------- | ----------------- | ---------------- | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -126,6 +128,7 @@ OpenCode Go включает следующие лимиты: Эти оценки основаны на наблюдаемых показателях запросов: - Grok 4.6 — 390 входных, 32,500 кешированных, 120 выходных токенов на запрос +- GLM-5.3-Flash — 1,000 входных, 55,000 кешированных, 200 выходных токенов на запрос - GLM-5.3/5.2/5.1 — 700 входных, 52,000 кешированных, 150 выходных токенов на запрос - GPT 5.6 Luna — 1,000 входных, 50,000 кешированных, 220 выходных токенов на запрос - Kimi K3 — 1,050 входных, 76,500 кешированных, 300 выходных токенов на запрос @@ -153,6 +156,7 @@ OpenCode Go включает следующие лимиты: | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -222,6 +226,7 @@ OpenCode Go включает следующие лимиты: | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -266,6 +271,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | ---------------- | --------------- | | Grok 4.6 | Не используется | 30 дней | | GPT 5.6 Luna | Не используется | 30 дней | +| GLM-5.3-Flash | Не используется | 0 дней | | GLM-5.3 | Не используется | 0 дней | | GLM-5.2 | Не используется | 0 дней | | GLM-5.1 | Не используется | 0 дней | diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx index 72e81d3ac98d..26ae73a36866 100644 --- a/packages/web/src/content/docs/th/go.mdx +++ b/packages/web/src/content/docs/th/go.mdx @@ -50,6 +50,7 @@ OpenCode Go ทำงานเหมือนกับผู้ให้บร รายชื่อโมเดลในปัจจุบันประกอบด้วย: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -92,6 +93,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | ---------------------------- | ---------------------- | ------------------- | ----------------- | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -116,6 +118,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: การประมาณการนี้อ้างอิงจากรูปแบบการใช้งาน request ที่สังเกตพบ: - Grok 4.6 — 390 input, 32,500 cached, 120 output tokens ต่อ request +- GLM-5.3-Flash — 1,000 input, 55,000 cached, 200 output tokens ต่อ request - GLM-5.3/5.2/5.1 — 700 input, 52,000 cached, 150 output tokens ต่อ request - GPT 5.6 Luna — 1,000 input, 50,000 cached, 220 output tokens ต่อ request - Kimi K3 — 1,050 input, 76,500 cached, 300 output tokens ต่อ request @@ -143,6 +146,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -210,6 +214,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -252,6 +257,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | ----------- | ------------------ | | Grok 4.6 | ไม่นำไปใช้ | 30 วัน | | GPT 5.6 Luna | ไม่นำไปใช้ | 30 วัน | +| GLM-5.3-Flash | ไม่นำไปใช้ | 0 วัน | | GLM-5.3 | ไม่นำไปใช้ | 0 วัน | | GLM-5.2 | ไม่นำไปใช้ | 0 วัน | | GLM-5.1 | ไม่นำไปใช้ | 0 วัน | diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx index b6125956c646..7200d2e13259 100644 --- a/packages/web/src/content/docs/tr/go.mdx +++ b/packages/web/src/content/docs/tr/go.mdx @@ -50,6 +50,7 @@ Her çalışma alanından yalnızca bir üye OpenCode Go'ya abone olabilir. Mevcut model listesi şunları içerir: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -92,6 +93,7 @@ Aşağıdaki tablo, tipik Go kullanım modellerine dayalı tahmini bir istek say | ---------------------------- | ------------------ | -------------- | ----------- | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -116,6 +118,7 @@ Aşağıdaki tablo, tipik Go kullanım modellerine dayalı tahmini bir istek say Tahminler, gözlemlenen istek modellerine dayanır: - Grok 4.6 — İstek başına 390 girdi, 32.500 önbelleğe alınmış, 120 çıktı token'ı +- GLM-5.3-Flash — İstek başına 1.000 girdi, 55.000 önbelleğe alınmış, 200 çıktı token'ı - GLM-5.3/5.2/5.1 — İstek başına 700 girdi, 52.000 önbelleğe alınmış, 150 çıktı token'ı - GPT 5.6 Luna — İstek başına 1.000 girdi, 50.000 önbelleğe alınmış, 220 çıktı token'ı - Kimi K3 — İstek başına 1.050 girdi, 76.500 önbelleğe alınmış, 300 çıktı token'ı @@ -143,6 +146,7 @@ Tahminler ayrıca 1M token başına aşağıdaki fiyatlara ve her modelle birlik | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -210,6 +214,7 @@ Go modellerine aşağıdaki API uç noktaları aracılığıyla da erişebilirsi | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -252,6 +257,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | ------------- | ------------ | | Grok 4.6 | Kullanılmaz | 30 gün | | GPT 5.6 Luna | Kullanılmaz | 30 gün | +| GLM-5.3-Flash | Kullanılmaz | 0 gün | | GLM-5.3 | Kullanılmaz | 0 gün | | GLM-5.2 | Kullanılmaz | 0 gün | | GLM-5.1 | Kullanılmaz | 0 gün | diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx index ac32c98ed957..81f9274b4202 100644 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ b/packages/web/src/content/docs/zh-cn/go.mdx @@ -50,6 +50,7 @@ OpenCode Go 的工作方式与 OpenCode 中的其他提供商一样。 当前支持的模型列表包括: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -92,6 +93,7 @@ OpenCode Go 包含以下限制: | ---------------------------- | --------------- | ---------- | ---------- | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -116,6 +118,7 @@ OpenCode Go 包含以下限制: 预估值基于观察到的请求模式: - Grok 4.6 — 每次请求 390 个输入 token,32,500 个缓存 token,120 个输出 token +- GLM-5.3-Flash — 每次请求 1,000 个输入 token,55,000 个缓存 token,200 个输出 token - GLM-5.3/5.2/5.1 — 每次请求 700 个输入 token,52,000 个缓存 token,150 个输出 token - GPT 5.6 Luna — 每次请求 1,000 个输入 token,50,000 个缓存 token,220 个输出 token - Kimi K3 — 每次请求 1,050 个输入 token,76,500 个缓存 token,300 个输出 token @@ -143,6 +146,7 @@ OpenCode Go 包含以下限制: | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -210,6 +214,7 @@ OpenCode Go 包含以下限制: | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -252,6 +257,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | -------- | -------- | | Grok 4.6 | 不使用 | 30 天 | | GPT 5.6 Luna | 不使用 | 30 天 | +| GLM-5.3-Flash | 不使用 | 0 天 | | GLM-5.3 | 不使用 | 0 天 | | GLM-5.2 | 不使用 | 0 天 | | GLM-5.1 | 不使用 | 0 天 | diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx index c2ee08c3b666..bf9076663cee 100644 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ b/packages/web/src/content/docs/zh-tw/go.mdx @@ -50,6 +50,7 @@ OpenCode Go 的運作方式與 OpenCode 中的任何其他供應商相同。 目前的模型清單包括: - **Grok 4.6** +- **GLM-5.3-Flash** - **GLM-5.3** - **GLM-5.2** - **GLM-5.1** @@ -92,6 +93,7 @@ OpenCode Go 包含以下限制: | ---------------------------- | --------------- | ---------- | ---------- | | Grok 4.6 | 169 | 423 | 845 | | GPT 5.6 Luna | 2,050 | 5,100 | 10,250 | +| GLM-5.3-Flash | 1,580 | 3,950 | 7,900 | | GLM-5.3 | 220 | 540 | 1,080 | | GLM-5.2 | 880 | 2,150 | 4,300 | | GLM-5.1 | 880 | 2,150 | 4,300 | @@ -116,6 +118,7 @@ OpenCode Go 包含以下限制: 這些預估值是基於觀察到的請求模式: - Grok 4.6 — 每次請求 390 個輸入 token、32,500 個快取 token、120 個輸出 token +- GLM-5.3-Flash — 每次請求 1,000 個輸入 token、55,000 個快取 token、200 個輸出 token - GLM-5.3/5.2/5.1 — 每次請求 700 個輸入 token、52,000 個快取 token、150 個輸出 token - GPT 5.6 Luna — 每次請求 1,000 個輸入 token、50,000 個快取 token、220 個輸出 token - Kimi K3 — 每次請求 1,050 個輸入 token、76,500 個快取 token、300 個輸出 token @@ -143,6 +146,7 @@ OpenCode Go 包含以下限制: | Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | | GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | | GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | | GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | | GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | | GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | @@ -210,6 +214,7 @@ OpenCode Go 包含以下限制: | ---------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------- | | Grok 4.6 | grok-4.6 | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | GPT 5.6 Luna | gpt-5.6-luna | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | +| GLM-5.3-Flash | glm-5.3-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.3 | glm-5.3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -252,6 +257,7 @@ https://opencode.ai/zen/go/v1/models | ---------------------------- | -------- | -------- | | Grok 4.6 | 不使用 | 30 天 | | GPT 5.6 Luna | 不使用 | 30 天 | +| GLM-5.3-Flash | 不使用 | 0 天 | | GLM-5.3 | 不使用 | 0 天 | | GLM-5.2 | 不使用 | 0 天 | | GLM-5.1 | 不使用 | 0 天 | From 902e67eba9ae0ea8ddb10c64c4b4705a360a4efd Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 26 Aug 2026 09:02:17 -0500 Subject: [PATCH 049/185] feat(stats): add weekly retention --- .../src/component/model-compare-detail.tsx | 21 +++++++ .../stats/app/src/routes/[lab]/[model].tsx | 6 +- packages/stats/app/src/routes/index.tsx | 12 ++-- packages/stats/core/src/domain/home.test.ts | 14 ++--- packages/stats/core/src/domain/home.ts | 50 ++++++++++------- .../stats/core/src/domain/inference.test.ts | 20 +++++-- packages/stats/core/src/domain/inference.ts | 56 +++++++++---------- packages/stats/core/src/stat-sync.ts | 6 +- 8 files changed, 112 insertions(+), 73 deletions(-) diff --git a/packages/stats/app/src/component/model-compare-detail.tsx b/packages/stats/app/src/component/model-compare-detail.tsx index 3790789b58b3..8fc61d1e930d 100644 --- a/packages/stats/app/src/component/model-compare-detail.tsx +++ b/packages/stats/app/src/component/model-compare-detail.tsx @@ -3,6 +3,7 @@ import { ProviderIcon } from "@opencode-ai/ui/provider-icon" import { getStatsModelsComparisonData, type ModelUsagePoint, + type RetentionEntry, type StatsModelComparisonInput, type StatsModelComparisonEntry, } from "@opencode-ai/stats-core/domain/home" @@ -949,6 +950,17 @@ function buildComparisonDetailSections(models: readonly ComparisonModel[]): Comp ], usage: models.map((model) => model.stats?.usage ?? []), }, + { + title: "Retention", + badge: "Week 1", + rows: [ + comparisonDetailRow( + "Returning users", + models.map((model) => retentionCell(model.stats?.weeklyRetention)), + "higher", + ), + ], + }, ] } @@ -1031,6 +1043,15 @@ function percentCell(value: number | undefined): ComparisonDetailCell { return value === undefined ? { value: "No usage" } : { value: formatPercent(value), score: value } } +function retentionCell(value: RetentionEntry | null | undefined): ComparisonDetailCell { + if (!value || value.rank === null) return { value: "Pending" } + return { + value: formatPercent(value.rate), + unit: `${formatTokens(value.eligibleUserWeeks)} user-weeks`, + score: value.rate, + } +} + function tokenCell(value: number | undefined, trend: number | undefined): ComparisonDetailCell { if (value === undefined) return { value: "No usage" } return { value: formatTokens(value), score: value, trend } diff --git a/packages/stats/app/src/routes/[lab]/[model].tsx b/packages/stats/app/src/routes/[lab]/[model].tsx index c9a3e6ef6d7a..d2fbfdf7c5e9 100644 --- a/packages/stats/app/src/routes/[lab]/[model].tsx +++ b/packages/stats/app/src/routes/[lab]/[model].tsx @@ -470,7 +470,7 @@ function ModelMomentumSection(props: { data: StatsModelPageData | null }) { value={formatInteger(data().totals.sessions)} /> - + - + 0} fallback={ } > @@ -660,13 +656,13 @@ function RetentionSection(props: { data: RetentionEntry[] }) { onPointerEnter={() => setActiveIndex(index())} onFocus={() => setActiveIndex(index())} onClick={() => setActiveIndex(index())} - aria-label={`${item.model}, ${formatRetentionRate(item.rate)} seven-day retention, ${formatUsers(item.eligibleUserDays)} eligible user-days`} + aria-label={`${item.model}, ${formatRetentionRate(item.rate)} weekly retention, ${formatUsers(item.eligibleUserWeeks)} eligible user-weeks`} > {item.rank === null ? "–" : String(item.rank).padStart(2, "0")} {item.model} {formatRetentionRate(item.rate)} - {formatUsers(item.eligibleUserDays)} + {formatUsers(item.eligibleUserWeeks)} )} diff --git a/packages/stats/core/src/domain/home.test.ts b/packages/stats/core/src/domain/home.test.ts index c8b665048c34..3608d56d6a74 100644 --- a/packages/stats/core/src/domain/home.test.ts +++ b/packages/stats/core/src/domain/home.test.ts @@ -7,7 +7,7 @@ process.env.SST_RESOURCE_StatsDatabase = JSON.stringify({ url: "mysql://localhos const { buildRetentionEntries } = await import("./home") describe("retention aggregates", () => { - test("pools the latest seven cohorts and ranks models above the sample floor", () => { + test("pools the latest seven weekly cohorts and ranks models above the sample floor", () => { const rows = [ ...cohorts("model-a", "provider-a", 8, 20, 10), ...cohorts("model-b", "provider-b", 8, 20, 12), @@ -16,20 +16,20 @@ describe("retention aggregates", () => { const entries = buildRetentionEntries(rows) expect(entries.find((item) => item.model === "model-a")).toMatchObject({ - eligibleUserDays: 140, - retainedUserDays: 70, + eligibleUserWeeks: 140, + retainedUserWeeks: 70, rate: 50, rank: 2, }) expect(entries.find((item) => item.model === "model-b")).toMatchObject({ - eligibleUserDays: 140, - retainedUserDays: 84, + eligibleUserWeeks: 140, + retainedUserWeeks: 84, rate: 60, rank: 1, }) expect(entries.find((item) => item.model === "small-model")).toMatchObject({ - eligibleUserDays: 70, - retainedUserDays: 63, + eligibleUserWeeks: 70, + retainedUserWeeks: 63, rate: 90, rank: null, }) diff --git a/packages/stats/core/src/domain/home.ts b/packages/stats/core/src/domain/home.ts index c1784ed18a45..d5ce1b9c86fb 100644 --- a/packages/stats/core/src/domain/home.ts +++ b/packages/stats/core/src/domain/home.ts @@ -29,8 +29,8 @@ export type RetentionEntry = { provider: string author: string rate: number - eligibleUserDays: number - retainedUserDays: number + eligibleUserWeeks: number + retainedUserWeeks: number rank: number | null } export type CountryEntry = { country: string; continent: string; tokens: number; share: number; rank: number } @@ -64,7 +64,7 @@ export type StatsModelData = { totalModels: number tokenShare: number tokenChange: number - retention7d: RetentionEntry | null + weeklyRetention: RetentionEntry | null totals: { sessions: number uniqueUsers: number @@ -105,6 +105,7 @@ export type StatsModelComparisonEntry = { totalModels: number tokenShare: number tokenChange: number + weeklyRetention: RetentionEntry | null totals: StatsModelData["totals"] usage: ModelUsagePoint[] } @@ -142,8 +143,8 @@ const TOKEN_SCALE = 1_000_000 const DOLLARS_PER_MICROCENT = 1 / 100_000_000 const METRIC_MODEL_LIMIT = 10 const RETENTION_MODEL_LIMIT = 15 -const RETENTION_MIN_ELIGIBLE_USER_DAYS = 100 -const RETENTION_COHORT_DAYS = 7 +const RETENTION_MIN_ELIGIBLE_USER_WEEKS = 100 +const RETENTION_COHORT_WEEKS = 7 const TOP_MODEL_SEGMENT_LIMIT = 9 // Preserve the response shape while the public site presents Go and Free as one cohort. const SITE_PRODUCT = "Go" @@ -193,7 +194,7 @@ export function getStatsHomeData(): Effect.Effect const [modelRows, geoRows, retentionRows] = await Promise.all([ listModelDaily(), listGeoDaily(), - listRetentionDaily(), + listRetentionWeekly(), ]) return buildStatsHomeData(modelRows, geoRows, retentionRows) }, @@ -207,7 +208,7 @@ export function getStatsModelData( ): Effect.Effect { return Effect.tryPromise({ try: async () => { - const [modelRows, retentionRows] = await Promise.all([listModelDaily(), listRetentionDaily()]) + const [modelRows, retentionRows] = await Promise.all([listModelDaily(), listRetentionWeekly()]) const normalized = modelRows.flatMap(normalizeStatRow) const resolvedModel = resolveModelName(model, normalized, provider) if (!resolvedModel) return null @@ -288,12 +289,12 @@ async function listGeoDaily(opts?: { provider?: string; model?: string }): Promi })) } -async function listRetentionDaily(): Promise { +async function listRetentionWeekly(): Promise { try { return ( await queryRows( `select cohort_date, updated_at, provider, model, eligible_users, retained_users - from model_retention where dataset = 'zen' and tier = 'all' order by cohort_date`, + from model_retention where dataset = 'zen' and tier = 'Go' order by cohort_date`, ) ).map((row) => ({ cohortDate: stringValue(row.cohort_date), @@ -334,8 +335,16 @@ export const getStatsModelsComparisonData: ( ) => Effect.Effect = Effect.fn("StatsModelsComparison.getData")( function* (models) { const modelStats = yield* ModelStatRepo - const rows = yield* modelStats.listDaily() - const entries = models.map((model) => toComparisonEntry(buildStatsModelData(model.model, rows, [], model.provider))) + const [rows, retentionRows] = yield* Effect.all([ + modelStats.listDaily(), + Effect.tryPromise({ + try: listRetentionWeekly, + catch: (cause) => DatabaseError.make({ cause }), + }), + ]) + const entries = models.map((model) => + toComparisonEntry(buildStatsModelData(model.model, rows, [], model.provider, retentionRows)), + ) const latest = entries .map((model) => model?.updatedAt) .flatMap((value) => (value ? [dateTime(value)] : [])) @@ -458,7 +467,7 @@ function buildStatsModelData( const peerRank = rankIndex >= 0 ? rankIndex + 1 : 1 const totalTokens = windowPeers.reduce((sum, item) => sum + item.totalTokens, 0) const peerTokens = rankPeers.reduce((sum, item) => sum + item.totalTokens, 0) - const retention7d = buildRetentionEntries(retentionRows).find((item) => item.model === model) ?? null + const weeklyRetention = buildRetentionEntries(retentionRows).find((item) => item.model === model) ?? null return { updatedAt: Number.isFinite(latestUpdate) ? new Date(latestUpdate).toISOString() : null, @@ -471,7 +480,7 @@ function buildStatsModelData( totalModels: windowPeers.length, tokenShare: totalTokens > 0 ? round((current.totalTokens / totalTokens) * 100, 2) : 0, tokenChange: percentChange(current.totalTokens, previous.totalTokens), - retention7d, + weeklyRetention, totals: { sessions: current.sessions, uniqueUsers: current.uniqueUsers, @@ -553,6 +562,7 @@ function toComparisonEntry(data: StatsModelData | null): StatsModelComparisonEnt totalModels: data.totalModels, tokenShare: data.tokenShare, tokenChange: data.tokenChange, + weeklyRetention: data.weeklyRetention, totals: data.totals, usage: data.usage, } @@ -574,7 +584,7 @@ function emptyStatsHomeData(): StatsHomeData { } export function buildRetentionEntries(rows: RetentionMetricRow[]): RetentionEntry[] { - const cohortDates = [...new Set(rows.map((row) => row.cohortDate))].toSorted().slice(-RETENTION_COHORT_DAYS) + const cohortDates = [...new Set(rows.map((row) => row.cohortDate))].toSorted().slice(-RETENTION_COHORT_WEEKS) const aggregate = rows .filter((row) => cohortDates.includes(row.cohortDate)) .reduce>>((result, row) => { @@ -582,20 +592,22 @@ export function buildRetentionEntries(rows: RetentionMetricRow[]): RetentionEntr result.set(row.model, { model: row.model, provider: current?.provider ?? row.provider, - eligibleUserDays: (current?.eligibleUserDays ?? 0) + row.eligibleUsers, - retainedUserDays: (current?.retainedUserDays ?? 0) + row.retainedUsers, + eligibleUserWeeks: (current?.eligibleUserWeeks ?? 0) + row.eligibleUsers, + retainedUserWeeks: (current?.retainedUserWeeks ?? 0) + row.retainedUsers, }) return result }, new Map()) const entries = [...aggregate.values()].map((item) => ({ ...item, author: formatProvider(item.provider), - rate: item.eligibleUserDays > 0 ? round((item.retainedUserDays / item.eligibleUserDays) * 100, 1) : 0, + rate: item.eligibleUserWeeks > 0 ? round((item.retainedUserWeeks / item.eligibleUserWeeks) * 100, 1) : 0, })) const ranks = new Map( entries - .filter((item) => item.eligibleUserDays >= RETENTION_MIN_ELIGIBLE_USER_DAYS) - .toSorted((a, b) => b.rate - a.rate || b.eligibleUserDays - a.eligibleUserDays || a.model.localeCompare(b.model)) + .filter((item) => item.eligibleUserWeeks >= RETENTION_MIN_ELIGIBLE_USER_WEEKS) + .toSorted( + (a, b) => b.rate - a.rate || b.eligibleUserWeeks - a.eligibleUserWeeks || a.model.localeCompare(b.model), + ) .map((item, index) => [item.model, index + 1]), ) return entries diff --git a/packages/stats/core/src/domain/inference.test.ts b/packages/stats/core/src/domain/inference.test.ts index c534ac2b7a39..8eaf1f918969 100644 --- a/packages/stats/core/src/domain/inference.test.ts +++ b/packages/stats/core/src/domain/inference.test.ts @@ -163,24 +163,32 @@ describe("inference stat normalization", () => { expect(query).toContain("(source = 'inference' AND started_at >= '2026-08-11T10:57:48.186Z')") }) - test("builds complete seven-day cohort retention queries", () => { - const queries = buildRetentionQueries(new Date("2026-08-10T00:00:00.000Z"), new Date("2026-08-20T00:00:00.000Z"), { + test("builds complete week-over-week retention queries", () => { + const queries = buildRetentionQueries(new Date("2026-08-10T00:00:00.000Z"), new Date("2026-08-31T00:00:00.000Z"), { namespace: "inference", table: "generation", dataset: "zen", }) expect(queries).toHaveLength(1) - expect(queries[0]?.cohortDates).toEqual(["2026-08-10", "2026-08-11", "2026-08-12"]) + expect(queries[0]?.cohortDates).toEqual(["2026-08-10", "2026-08-17"]) + expect(queries[0]?.query).toContain("AND product = 'go'") + expect(queries[0]?.query).toContain("COUNT(*) AS model_requests") + expect(queries[0]?.query).toContain( + "SUM(model_requests) OVER (PARTITION BY cohort_date, user_key) AS total_requests", + ) expect(queries[0]?.query).toContain("ROW_NUMBER() OVER") expect(queries[0]?.query).toContain("PARTITION BY cohort_date, user_key") - expect(queries[0]?.query).toContain("ORDER BY total_tokens DESC, requests DESC, model ASC") + expect(queries[0]?.query).toContain("ORDER BY model_requests DESC, model ASC") + expect(queries[0]?.query).toContain("total_requests >= 10") + expect(queries[0]?.query).toContain("CAST(model_requests AS double) / NULLIF(total_requests, 0) >= 0.8") expect(queries[0]?.query).toContain("WHEN '2026-08-17' THEN '2026-08-10'") - expect(queries[0]?.query).toContain("WHEN '2026-08-19' THEN '2026-08-12'") + expect(queries[0]?.query).toContain("WHEN '2026-08-24' THEN '2026-08-17'") expect(queries[0]?.query).toContain("started_at >= '2026-08-10T00:00:00.000Z'") - expect(queries[0]?.query).toContain("started_at < '2026-08-20T00:00:00.000Z'") + expect(queries[0]?.query).toContain("started_at < '2026-08-31T00:00:00.000Z'") expect(queries[0]?.query).toContain("LEFT JOIN returned ON primary_models.user_key = returned.user_key") expect(queries[0]?.query).toContain("primary_models.cohort_date = returned.cohort_date") + expect(queries[0]?.query).toContain("'Go' AS tier") expect(queries[0]?.query).toContain("COUNT(*) AS eligible_users") expect(queries[0]?.query).toContain("LIMIT 10000") }) diff --git a/packages/stats/core/src/domain/inference.ts b/packages/stats/core/src/domain/inference.ts index cf475d2809b7..bf770844462a 100644 --- a/packages/stats/core/src/domain/inference.ts +++ b/packages/stats/core/src/domain/inference.ts @@ -74,23 +74,23 @@ function buildRetentionQuery( const scanEndValue = sqlString(last.returnEnd.toISOString()) const ingestEndValue = sqlString(new Date(last.returnEnd.getTime() + DAY_MS).toISOString()) const sourceTable = [source.namespace, source.table].map(sqlIdentifier).join(".") - const activityDates = [ + const activityWeeks = [ ...new Map( periods.flatMap((period) => [period.start, period.returnStart]).map((date) => [date.toISOString(), date]), ).values(), ].toSorted((a, b) => a.getTime() - b.getTime()) - const activityDateSql = `CASE -${activityDates + const activityWeekSql = `CASE +${activityWeeks .map( (date) => - ` WHEN started_at >= ${sqlString(date.toISOString())} AND started_at < ${sqlString(new Date(date.getTime() + DAY_MS).toISOString())} THEN ${sqlString(date.toISOString().slice(0, 10))}`, + ` WHEN started_at >= ${sqlString(date.toISOString())} AND started_at < ${sqlString(new Date(date.getTime() + WEEK_MS).toISOString())} THEN ${sqlString(date.toISOString().slice(0, 10))}`, ) .join("\n")} ELSE null END` const cohortDates = periods.map((period) => sqlString(period.start.toISOString().slice(0, 10))).join(", ") const returnDates = periods.map((period) => sqlString(period.returnStart.toISOString().slice(0, 10))).join(", ") - const returnCohortSql = `CASE activity_date + const returnCohortSql = `CASE activity_week ${periods .map( (period) => @@ -102,12 +102,11 @@ ${periods return ` WITH normalized AS ( SELECT - ${activityDateSql} AS activity_date, + ${activityWeekSql} AS activity_week, ${statModelSql("model_requested", "route_model")} AS model, COALESCE(NULLIF(route_model, ''), '') AS provider_model, COALESCE(NULLIF(provider_id, ''), '') AS raw_provider, - COALESCE(NULLIF(user_id, ''), NULLIF(workspace_id, ''), NULLIF(service_api_key_id, '')) AS user_key, - COALESCE(tokens_cache_read, 0) + COALESCE(tokens_cache_write, 0) + COALESCE(tokens_input, 0) + COALESCE(tokens_output, 0) AS tokens_total + COALESCE(NULLIF(user_id, ''), NULLIF(workspace_id, ''), NULLIF(service_api_key_id, '')) AS user_key FROM ${sourceTable} WHERE event_type = 'generation.completed' AND source IN ('inference', 'inference-legacy') @@ -115,7 +114,7 @@ WITH normalized AS ( (source = 'inference-legacy' AND started_at < ${sqlString(LIVE_SOURCE_START)}) OR (source = 'inference' AND started_at >= ${sqlString(LIVE_SOURCE_START)}) ) - AND (product = 'go' OR (${freeTierSql("model_tier", "model_requested")})) + AND product = 'go' AND model_requested IS NOT NULL AND model_requested <> '' AND __ingest_ts >= ${scanStartValue} @@ -124,53 +123,55 @@ WITH normalized AS ( AND started_at < ${scanEndValue} ), filtered AS ( SELECT - activity_date, + activity_week, ${statProviderSql("model", "provider_model", "raw_provider")} AS provider, model, - user_key, - tokens_total + user_key FROM normalized - WHERE activity_date IS NOT NULL + WHERE activity_week IS NOT NULL AND user_key <> '' AND lower(model) NOT IN (${[...EXCLUDED_MODELS].map(sqlString).join(", ")}) ), model_usage AS ( SELECT - activity_date AS cohort_date, + activity_week AS cohort_date, user_key, provider, model, - SUM(tokens_total) AS total_tokens, - COUNT(*) AS requests + COUNT(*) AS model_requests FROM filtered - WHERE activity_date IN (${cohortDates}) - GROUP BY activity_date, user_key, provider, model + WHERE activity_week IN (${cohortDates}) + GROUP BY activity_week, user_key, provider, model ), ranked_models AS ( SELECT cohort_date, user_key, provider, model, + model_requests, + SUM(model_requests) OVER (PARTITION BY cohort_date, user_key) AS total_requests, ROW_NUMBER() OVER ( PARTITION BY cohort_date, user_key - ORDER BY total_tokens DESC, requests DESC, model ASC + ORDER BY model_requests DESC, model ASC ) AS model_rank FROM model_usage ), primary_models AS ( SELECT cohort_date, user_key, provider, model FROM ranked_models WHERE model_rank = 1 + AND total_requests >= 10 + AND CAST(model_requests AS double) / NULLIF(total_requests, 0) >= 0.8 ), returned AS ( SELECT ${returnCohortSql} AS cohort_date, user_key FROM filtered - WHERE activity_date IN (${returnDates}) + WHERE activity_week IN (${returnDates}) GROUP BY ${returnCohortSql}, user_key ) SELECT primary_models.cohort_date, ${sqlString(source.dataset)} AS dataset, - 'all' AS tier, + 'Go' AS tier, primary_models.provider, primary_models.model, COUNT(*) AS eligible_users, @@ -453,14 +454,13 @@ function statPeriods(grain: "day" | "week", periodStart: Date, periodEnd: Date) } function retentionPeriods(periodStart: Date, periodEnd: Date) { - const first = startOfUtcDay(periodStart) - const last = new Date(startOfUtcDay(periodEnd).getTime() - WEEK_MS) - const count = Math.max(0, Math.floor((last.getTime() - first.getTime()) / DAY_MS)) + const first = startOfIsoWeek(periodStart) + const completeEnd = startOfIsoWeek(periodEnd) + const count = Math.max(0, Math.floor((completeEnd.getTime() - first.getTime()) / WEEK_MS) - 1) return Array.from({ length: count }, (_, index) => { - const start = new Date(first.getTime() + index * DAY_MS) - const end = new Date(start.getTime() + DAY_MS) - const returnStart = new Date(start.getTime() + WEEK_MS) - return { start, end, returnStart, returnEnd: new Date(returnStart.getTime() + DAY_MS) } + const start = new Date(first.getTime() + index * WEEK_MS) + const end = new Date(start.getTime() + WEEK_MS) + return { start, end, returnStart: end, returnEnd: new Date(end.getTime() + WEEK_MS) } }) } diff --git a/packages/stats/core/src/stat-sync.ts b/packages/stats/core/src/stat-sync.ts index cd8cdf35b66c..aca7fbc6a4af 100644 --- a/packages/stats/core/src/stat-sync.ts +++ b/packages/stats/core/src/stat-sync.ts @@ -20,7 +20,9 @@ const DATALAKE_INGESTION_LAG_MS = 5 * 60_000 const STATS_DATA_START_MS = new Date("2026-05-28T00:00:00.000Z").getTime() const WEEK_MS = 7 * 86_400_000 const DISPLAY_WINDOW_MS = 56 * 86_400_000 -const RETENTION_INCREMENTAL_LOOKBACK_MS = 9 * 86_400_000 +// A retention result needs one complete activity week plus its complete return +// week. Keep another partial week of slack around the ISO-week boundary. +const RETENTION_INCREMENTAL_LOOKBACK_MS = 16 * 86_400_000 // Anchor incremental passes to the ISO week containing this lookback, so the pass // after a week boundary still recomputes the previous week's final aggregates even // if the boundary pass itself failed. @@ -80,7 +82,7 @@ export const syncStats: (options?: { retentionStats.replace(retentionRows, { cohortDates: retentionQueries.flatMap((item) => item.cohortDates), dataset: Resource.StatsSyncConfig.dataset, - tier: "all", + tier: "Go", }), ], { From 023620b57ec799ca1ef7d64d0f3ec404d4c51a16 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 26 Aug 2026 09:39:34 -0500 Subject: [PATCH 050/185] chore: add sst unlock workflow --- .github/workflows/unlock.yml | 52 ++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 .github/workflows/unlock.yml diff --git a/.github/workflows/unlock.yml b/.github/workflows/unlock.yml new file mode 100644 index 000000000000..8df1af0e36f9 --- /dev/null +++ b/.github/workflows/unlock.yml @@ -0,0 +1,52 @@ +name: unlock + +on: + workflow_dispatch: + inputs: + stage: + description: SST stage to unlock + required: true + type: choice + options: + - dev + - production + +concurrency: deploy-${{ inputs.stage }} + +permissions: + contents: read + id-token: write + +jobs: + unlock: + runs-on: ubuntu-latest + environment: ${{ inputs.stage }} + steps: + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + + - uses: ./.github/actions/setup-bun + + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + node-version: "24" + + - uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a # v4.3.1 + with: + role-to-assume: ${{ vars.AWS_DEPLOY_ROLE_ARN }} + role-session-name: opencode-${{ github.run_id }} + aws-region: us-east-1 + + - run: bun sst unlock --stage=${{ inputs.stage }} + env: + GITHUB_TOKEN: ${{ github.token }} + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + PLANETSCALE_SERVICE_TOKEN_NAME: ${{ secrets.PLANETSCALE_SERVICE_TOKEN_NAME }} + PLANETSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }} + STRIPE_SECRET_KEY: ${{ inputs.stage == 'production' && secrets.STRIPE_SECRET_KEY_PROD || secrets.STRIPE_SECRET_KEY_DEV }} + HONEYCOMB_API_KEY: ${{ secrets.HONEYCOMB_API_KEY }} + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_ORG: ${{ vars.SENTRY_ORG }} + SENTRY_PROJECT: ${{ vars.WEB_SENTRY_PROJECT }} + SENTRY_RELEASE: unlock@${{ github.sha }} + VITE_SENTRY_DSN: ${{ vars.WEB_SENTRY_DSN }} + VITE_SENTRY_RELEASE: unlock@${{ github.sha }} From 530535c6ea8f5ee99e2c135afd74fedda05c53b4 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 26 Aug 2026 10:38:12 -0500 Subject: [PATCH 051/185] fix(stats): reduce retention query scan --- .../stats/core/src/domain/inference.test.ts | 14 ++++++----- packages/stats/core/src/domain/inference.ts | 25 ++++++++----------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/packages/stats/core/src/domain/inference.test.ts b/packages/stats/core/src/domain/inference.test.ts index 8eaf1f918969..c2889ff4c66c 100644 --- a/packages/stats/core/src/domain/inference.test.ts +++ b/packages/stats/core/src/domain/inference.test.ts @@ -174,14 +174,16 @@ describe("inference stat normalization", () => { expect(queries[0]?.cohortDates).toEqual(["2026-08-10", "2026-08-17"]) expect(queries[0]?.query).toContain("AND product = 'go'") expect(queries[0]?.query).toContain("COUNT(*) AS model_requests") + expect(queries[0]?.query).toContain("SUM(model_requests) AS total_requests") + expect(queries[0]?.query).toContain("MAX(model_requests) AS max_model_requests") + expect(queries[0]?.query).toContain("GROUP BY cohort_date, user_key") + expect(queries[0]?.query).toContain("INNER JOIN user_totals") + expect(queries[0]?.query).toContain("model_usage.model_requests = user_totals.max_model_requests") + expect(queries[0]?.query).toContain("user_totals.total_requests >= 10") expect(queries[0]?.query).toContain( - "SUM(model_requests) OVER (PARTITION BY cohort_date, user_key) AS total_requests", + "CAST(model_usage.model_requests AS double) / NULLIF(user_totals.total_requests, 0) >= 0.8", ) - expect(queries[0]?.query).toContain("ROW_NUMBER() OVER") - expect(queries[0]?.query).toContain("PARTITION BY cohort_date, user_key") - expect(queries[0]?.query).toContain("ORDER BY model_requests DESC, model ASC") - expect(queries[0]?.query).toContain("total_requests >= 10") - expect(queries[0]?.query).toContain("CAST(model_requests AS double) / NULLIF(total_requests, 0) >= 0.8") + expect(queries[0]?.query).not.toContain(" OVER (") expect(queries[0]?.query).toContain("WHEN '2026-08-17' THEN '2026-08-10'") expect(queries[0]?.query).toContain("WHEN '2026-08-24' THEN '2026-08-17'") expect(queries[0]?.query).toContain("started_at >= '2026-08-10T00:00:00.000Z'") diff --git a/packages/stats/core/src/domain/inference.ts b/packages/stats/core/src/domain/inference.ts index bf770844462a..a1d1a01625fb 100644 --- a/packages/stats/core/src/domain/inference.ts +++ b/packages/stats/core/src/domain/inference.ts @@ -141,25 +141,22 @@ WITH normalized AS ( FROM filtered WHERE activity_week IN (${cohortDates}) GROUP BY activity_week, user_key, provider, model -), ranked_models AS ( +), user_totals AS ( SELECT cohort_date, user_key, - provider, - model, - model_requests, - SUM(model_requests) OVER (PARTITION BY cohort_date, user_key) AS total_requests, - ROW_NUMBER() OVER ( - PARTITION BY cohort_date, user_key - ORDER BY model_requests DESC, model ASC - ) AS model_rank + SUM(model_requests) AS total_requests, + MAX(model_requests) AS max_model_requests FROM model_usage + GROUP BY cohort_date, user_key ), primary_models AS ( - SELECT cohort_date, user_key, provider, model - FROM ranked_models - WHERE model_rank = 1 - AND total_requests >= 10 - AND CAST(model_requests AS double) / NULLIF(total_requests, 0) >= 0.8 + SELECT model_usage.cohort_date, model_usage.user_key, model_usage.provider, model_usage.model + FROM model_usage + INNER JOIN user_totals ON model_usage.cohort_date = user_totals.cohort_date + AND model_usage.user_key = user_totals.user_key + AND model_usage.model_requests = user_totals.max_model_requests + WHERE user_totals.total_requests >= 10 + AND CAST(model_usage.model_requests AS double) / NULLIF(user_totals.total_requests, 0) >= 0.8 ), returned AS ( SELECT ${returnCohortSql} AS cohort_date, From c5ef753d2869982183f64bf1ec6c92b7c4149c59 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 26 Aug 2026 11:14:49 -0500 Subject: [PATCH 052/185] fix(stats): align retention columns --- packages/stats/app/src/routes/index.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/stats/app/src/routes/index.css b/packages/stats/app/src/routes/index.css index b59cf616363e..3b6fa273f72a 100644 --- a/packages/stats/app/src/routes/index.css +++ b/packages/stats/app/src/routes/index.css @@ -1792,7 +1792,9 @@ body { } [data-page="stats"] [data-slot="retention-heading"] { + box-sizing: border-box; min-height: 28px; + padding: 0 12px; color: var(--stats-faint); font-size: 11px; font-style: normal; From c2eacd72afc4a4984564c393e15ab30011057269 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 26 Aug 2026 15:03:16 -0500 Subject: [PATCH 053/185] fix(console): secure server action redirects (#45374) --- packages/console/app/src/lib/server-action.ts | 11 ++++++ packages/console/app/src/middleware.ts | 3 ++ .../console/app/test/serverAction.test.ts | 34 +++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 packages/console/app/src/lib/server-action.ts create mode 100644 packages/console/app/test/serverAction.test.ts diff --git a/packages/console/app/src/lib/server-action.ts b/packages/console/app/src/lib/server-action.ts new file mode 100644 index 000000000000..1d82b5697824 --- /dev/null +++ b/packages/console/app/src/lib/server-action.ts @@ -0,0 +1,11 @@ +export function sanitizeServerActionRequest(request: Request) { + const requestUrl = new URL(request.url) + if (requestUrl.pathname !== "/_server") return request + + const referer = request.headers.get("referer") + if (referer && URL.canParse(referer) && new URL(referer).origin === requestUrl.origin) return request + + const sanitized = new Request(request) + sanitized.headers.set("referer", requestUrl.origin) + return sanitized +} diff --git a/packages/console/app/src/middleware.ts b/packages/console/app/src/middleware.ts index ad5aa09e2ab9..d7b4f066c3d5 100644 --- a/packages/console/app/src/middleware.ts +++ b/packages/console/app/src/middleware.ts @@ -1,9 +1,12 @@ import { createMiddleware } from "@solidjs/start/middleware" import { LOCALE_HEADER, cookie, fromPathname, strip } from "~/lib/language" import { normalizeReferralCode, referralCookie } from "~/lib/referral-invite" +import { sanitizeServerActionRequest } from "~/lib/server-action" export default createMiddleware({ onRequest(event) { + event.request = sanitizeServerActionRequest(event.request) + const url = new URL(event.request.url) const locale = fromPathname(url.pathname) if (locale) { diff --git a/packages/console/app/test/serverAction.test.ts b/packages/console/app/test/serverAction.test.ts new file mode 100644 index 000000000000..6c9d96812812 --- /dev/null +++ b/packages/console/app/test/serverAction.test.ts @@ -0,0 +1,34 @@ +import { describe, expect, test } from "bun:test" +import { sanitizeServerActionRequest } from "../src/lib/server-action" + +describe("server action referer", () => { + test("preserves same-origin return locations", () => { + const request = new Request("https://dev.opencode.ai/_server?id=action", { + headers: { referer: "https://dev.opencode.ai/auth?next=%2Fconsole" }, + }) + + expect(sanitizeServerActionRequest(request)).toBe(request) + }) + + test("replaces unsafe return locations with the request origin", () => { + const referers = ["https://evil.example/phishing-login", "not a url", undefined] + + expect( + referers.map((referer) => + sanitizeServerActionRequest( + new Request("https://dev.opencode.ai/_server?id=action", { + headers: referer === undefined ? undefined : { referer }, + }), + ).headers.get("referer"), + ), + ).toEqual(["https://dev.opencode.ai", "https://dev.opencode.ai", "https://dev.opencode.ai"]) + }) + + test("does not change other routes", () => { + const request = new Request("https://dev.opencode.ai/auth", { + headers: { referer: "https://evil.example/phishing-login" }, + }) + + expect(sanitizeServerActionRequest(request)).toBe(request) + }) +}) From 6568a824553200254e30e5a49c2831d1fb5f62e2 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Thu, 27 Aug 2026 03:11:56 -0400 Subject: [PATCH 054/185] fix(console): merge duplicate Go usage rows (#45503) Co-authored-by: MrMushrooooom <19261047+MrMushrooooom@users.noreply.github.com> --- packages/console/app/src/lib/lite-usage.ts | 15 +++++- packages/console/app/test/liteUsage.test.ts | 58 +++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/packages/console/app/src/lib/lite-usage.ts b/packages/console/app/src/lib/lite-usage.ts index e82483aa3986..618c89e92d75 100644 --- a/packages/console/app/src/lib/lite-usage.ts +++ b/packages/console/app/src/lib/lite-usage.ts @@ -18,7 +18,20 @@ export type LiteUsageBreakdownItem = { } export function buildLiteUsageBreakdown(input: { usage: number; limit: number; sources: LiteUsageBreakdownSource[] }) { - const rows: LiteUsageBreakdownItem[] = input.sources + // Legacy usage can resolve to the same rate as a separately grouped recorded multiplier. + const groups = new Map() + input.sources.forEach((item) => { + const key = JSON.stringify([item.model, item.multiplier]) + const row = groups.get(key) + if (!row) { + groups.set(key, { ...item }) + return + } + row.cost += item.cost + row.quotaCost += item.quotaCost + row.estimated ||= item.estimated + }) + const rows: LiteUsageBreakdownItem[] = Array.from(groups.values()) .filter((item) => item.cost !== 0 || item.quotaCost !== 0) .sort((a, b) => b.quotaCost - a.quotaCost) .map((item) => ({ diff --git a/packages/console/app/test/liteUsage.test.ts b/packages/console/app/test/liteUsage.test.ts index 00a0d962f22e..1d04a04e9e17 100644 --- a/packages/console/app/test/liteUsage.test.ts +++ b/packages/console/app/test/liteUsage.test.ts @@ -72,4 +72,62 @@ describe("Go usage breakdown", () => { expect(result.rows.map((row) => row.multiplier)).toEqual([2, 1]) expect(result.rows.map((row) => row.contributionPercent)).toEqual([40, 10]) }) + + test.each([false, true])("merges same-rate usage (estimated first: %s)", (estimated) => { + const sources = [ + { model: "deepseek-v4-flash", name: "DeepSeek V4 Flash", cost: 200, quotaCost: 400, multiplier: 2, estimated }, + { model: "other", name: "Other", cost: 500, quotaCost: 500, multiplier: 1, estimated: false }, + { + model: "deepseek-v4-flash", + name: "DeepSeek V4 Flash", + cost: 100, + quotaCost: 199, + multiplier: 2, + estimated: !estimated, + }, + ] + const original = structuredClone(sources) + const result = buildLiteUsageBreakdown({ usage: 1_050, limit: 6_000, sources }) + + expect(result.rows).toHaveLength(2) + expect(result.rows[0]).toMatchObject({ + model: "deepseek-v4-flash", + cost: 300, + quotaCost: 599, + multiplier: 2, + estimated: true, + }) + expect(getModelQuotaLimit(result.limit, result.rows[0].multiplier)).toBe(3_000) + expect(result.usage).toBe(1_050) + expect(result.usagePercent).toBe(17.5) + expect(result.rows.reduce((total, row) => total + row.contributionPercent, 0)).toBeCloseTo(result.usagePercent) + expect(sources).toEqual(original) + }) + + test("keeps distinct model IDs with the same display name separate", () => { + const result = buildLiteUsageBreakdown({ + usage: 300, + limit: 1_000, + sources: [ + { model: "first", name: "Model", cost: 100, quotaCost: 100, multiplier: 1, estimated: false }, + { model: "second", name: "Model", cost: 200, quotaCost: 200, multiplier: 1, estimated: false }, + ], + }) + + expect(result.rows.map((row) => row.model)).toEqual(["second", "first"]) + }) + + test("does not merge unknown rates with recorded rates", () => { + const result = buildLiteUsageBreakdown({ + usage: 300, + limit: 1_000, + sources: [ + { model: "glm", name: "GLM", cost: 100, quotaCost: 100, estimated: true }, + { model: "glm", name: "GLM", cost: 200, quotaCost: 200, multiplier: 1, estimated: false }, + ], + }) + + expect(result.rows.map((row) => row.multiplier)).toEqual([1, undefined]) + expect(getModelQuotaLimit(result.limit, result.rows[1].multiplier)).toBeUndefined() + }) }) From 1120d0704e7b84cdda07b7dd291958caf95fa53a Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Thu, 27 Aug 2026 06:12:21 -0500 Subject: [PATCH 055/185] fix(stats): map ox alpha to glm 5.3 flash (#45542) --- .../stats/app/src/routes/[lab]/[model].tsx | 42 ++++++++++++++++--- .../stats/app/src/routes/model-catalog.ts | 6 ++- .../stats/core/src/domain/inference.test.ts | 14 +++++-- packages/stats/core/src/domain/inference.ts | 11 +++-- .../core/src/domain/model-normalization.ts | 11 +++-- 5 files changed, 62 insertions(+), 22 deletions(-) diff --git a/packages/stats/app/src/routes/[lab]/[model].tsx b/packages/stats/app/src/routes/[lab]/[model].tsx index d2fbfdf7c5e9..498b7f7016db 100644 --- a/packages/stats/app/src/routes/[lab]/[model].tsx +++ b/packages/stats/app/src/routes/[lab]/[model].tsx @@ -9,6 +9,7 @@ import { type ModelUsagePoint, type StatsModelData, } from "@opencode-ai/stats-core/domain/home" +import { statModel } from "@opencode-ai/stats-core/domain/model-normalization" import { createAsync, query, useParams } from "@solidjs/router" import { createMemo, createSignal, createUniqueId, For, onMount, Show, type JSX } from "solid-js" import { getRequestEvent } from "solid-js/web" @@ -40,6 +41,8 @@ import { } from "../stats-shell" const statsUnfurlPath = "banner.png" +const glmFlashCatalogId = "zhipuai/glm-5.3-flash" +const glmFlashModel = "glm-5.3-flash" const shortMonths = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"] as const type IsoCountryCode = readonly [string, string, string] @@ -89,14 +92,23 @@ export default function StatsModel() { const stats = createMemo(() => page()?.stats) const githubStars = createAsync(() => getGitHubStars()) const [themePreference, setThemePreference] = createSignal("system") - const modelName = createMemo(() => catalogEntry()?.name ?? stats()?.model ?? modelParam() ?? i18n.t("model.fallback")) + const canonicalModel = createMemo(() => statModel(stats()?.model ?? modelParam(), undefined)) + const modelName = createMemo( + () => catalogEntry()?.name ?? publicModelName(canonicalModel()) ?? i18n.t("model.fallback"), + ) const labName = createMemo(() => formatCatalogLabName(catalogEntry()?.lab ?? stats()?.provider ?? labParam())) - const modelTitle = createMemo(() => i18n.t("model.title", { model: modelName() })) - const modelDescription = createMemo(() => i18n.t("model.description", { model: modelName() })) - const modelPath = createMemo( - () => - `/data/${catalogEntry()?.id ?? [labParam(), stats()?.slug ?? modelParam()].filter((part) => part.length > 0).join("/")}`, + const formerName = createMemo(() => formerModelName(canonicalModel())) + const searchModelName = createMemo(() => + formerName() ? `${modelName()} (formerly ${formerName()})` : modelName(), ) + const modelTitle = createMemo(() => i18n.t("model.title", { model: searchModelName() })) + const modelDescription = createMemo(() => i18n.t("model.description", { model: searchModelName() })) + const modelPath = createMemo(() => { + const fallback = formerName() + ? glmFlashCatalogId + : [labParam(), stats()?.slug ?? canonicalModel()].filter((part) => part.length > 0).join("/") + return `/data/${catalogEntry()?.id ?? fallback}` + }) const modelUrl = createMemo(() => localizedUrl(language.locale(), modelPath())) const statsUnfurlUrl = new URL(statsUnfurlPath, localizedUrl("en", "/data/")).toString() const modelHeaderLinks = createMemo(() => [ @@ -167,6 +179,7 @@ export default function StatsModel() { catalog={catalogEntry() ?? null} catalogData={page()?.catalog ?? null} labName={labName()} + formerName={formerName()} /> @@ -255,6 +268,7 @@ function ModelHero(props: { catalog: ModelCatalogEntry | null catalogData: ModelPageCatalog | null labName: string + formerName?: string }) { const i18n = useI18n() const language = useLanguage() @@ -336,6 +350,9 @@ function ModelHero(props: { when={props.data} fallback={

      + + {(name) => {`Formerly ${name()}.`}} + Listed across the shared model catalog.

      @@ -343,6 +360,9 @@ function ModelHero(props: { > {(data) => (

      + + {(name) => {`Formerly ${name()}.`}} + Ranked {formatHeroRank(data().rank)} @@ -1438,3 +1458,13 @@ function providerSlug(provider: string) { .replace(/^-+|-+$/g, "") .replace(/-{2,}/g, "-") } + +function formerModelName(model: string) { + return statModel(model, undefined) === glmFlashModel ? "ox-alpha" : undefined +} + +function publicModelName(model: string) { + if (model === "unknown") return undefined + if (model === glmFlashModel) return "GLM-5.3-Flash" + return model +} diff --git a/packages/stats/app/src/routes/model-catalog.ts b/packages/stats/app/src/routes/model-catalog.ts index 47fa1cf3474f..87ae460ae1b2 100644 --- a/packages/stats/app/src/routes/model-catalog.ts +++ b/packages/stats/app/src/routes/model-catalog.ts @@ -1,3 +1,4 @@ +import { statModel } from "@opencode-ai/stats-core/domain/model-normalization" import { query } from "@solidjs/router" export const modelCatalogSourceUrl = "https://models.opencode.ai/catalog.json" @@ -71,8 +72,9 @@ export const getModelCatalog = query(async () => { }, "getModelCatalog") export function findModelCatalogEntry(catalog: ModelCatalog, model: string, lab?: string) { - const normalizedId = lab ? `${catalogLabSlug(lab)}/${catalogSlug(model)}` : model.trim().toLowerCase() - const leaf = catalogSlug(model) + const canonicalModel = statModel(model, undefined) + const normalizedId = lab ? `${catalogLabSlug(lab)}/${catalogSlug(canonicalModel)}` : canonicalModel.trim().toLowerCase() + const leaf = catalogSlug(canonicalModel) return ( catalog.models.find((entry) => entry.id.toLowerCase() === normalizedId) ?? catalog.models.find((entry) => (lab ? entry.lab === catalogLabSlug(lab) : true) && entry.slug === leaf) ?? diff --git a/packages/stats/core/src/domain/inference.test.ts b/packages/stats/core/src/domain/inference.test.ts index c2889ff4c66c..5f7e0266bf60 100644 --- a/packages/stats/core/src/domain/inference.test.ts +++ b/packages/stats/core/src/domain/inference.test.ts @@ -50,14 +50,18 @@ describe("inference stat normalization", () => { }) test("merges renamed models under their current name", () => { - expect(statModel("x-preview-f", "")).toBe("ox-alpha") + expect(statModel("x-preview-f", "")).toBe("glm-5.3-flash") + expect(statModel("ox-alpha", "")).toBe("glm-5.3-flash") + expect(statModel("ox-alpha-free", "")).toBe("glm-5.3-flash") + expect(statModel("big-pickle", "zhipuai/ox-alpha-free")).toBe("glm-5.3-flash") expect(statModel("xiaomi/mimo-v2.5", "")).toBe("mimo-v2.5") - expect(toModelAggregate(aggregate("x-preview-f", "openai"))).toMatchObject([ + expect(toModelAggregate(aggregate("x-preview-f", "unknown"))).toMatchObject([ { - provider: "openai", - model: "ox-alpha", + provider: "zhipu", + model: "glm-5.3-flash", }, ]) + expect(toProviderAggregate(aggregate("ox-alpha", "unknown"))).toMatchObject([{ provider: "zhipu" }]) }) test("model aggregates prefer provider.model and use normalized model", () => { @@ -126,6 +130,8 @@ describe("inference stat normalization", () => { expect(queries[0]).toContain("COALESCE(NULLIF(lower(model_tier), ''), '') AS raw_tier") expect(queries[0]).toContain("WHEN lower(COALESCE(raw_tier, '')) = 'free'") expect(queries[0]).toContain("regexp_replace(NULLIF(route_model, ''), '^.*/', '')") + expect(queries[0]).toContain("= 'ox-alpha' THEN 'glm-5.3-flash'") + expect(queries[0]).toContain("= 'x-preview-f' THEN 'glm-5.3-flash'") expect(queries[0]).toContain("OR lower(raw_model) IN ('gpt-5-nano', 'grok-code', 'big-pickle')") expect(queries[0]).toContain("OR lower(raw_model) LIKE '%-free'") expect(queries[0]).toContain("THEN 'Free'") diff --git a/packages/stats/core/src/domain/inference.ts b/packages/stats/core/src/domain/inference.ts index a1d1a01625fb..3767b7ba4d03 100644 --- a/packages/stats/core/src/domain/inference.ts +++ b/packages/stats/core/src/domain/inference.ts @@ -462,13 +462,16 @@ function retentionPeriods(periodStart: Date, periodEnd: Date) { } function statModelSql(model: string, providerModel: string) { - return `COALESCE(NULLIF(regexp_replace(CASE + const normalized = `regexp_replace(CASE WHEN lower(${model}) = 'big-pickle' THEN regexp_replace(NULLIF(${providerModel}, ''), '^.*/', '') + ELSE ${model} + END, '(-free|:free|:global)+$', '')` + return `COALESCE(NULLIF(CASE ${Object.entries(MODEL_NAME_ALIASES) - .map(([from, to]) => ` WHEN lower(${model}) = ${sqlString(from)} THEN ${sqlString(to)}`) + .map(([from, to]) => ` WHEN lower(${normalized}) = ${sqlString(from)} THEN ${sqlString(to)}`) .join("\n")} - ELSE ${model} - END, '(-free|:free|:global)+$', ''), ''), 'unknown')` + ELSE ${normalized} + END, ''), 'unknown')` } function freeTierSql(tier: string, model: string) { diff --git a/packages/stats/core/src/domain/model-normalization.ts b/packages/stats/core/src/domain/model-normalization.ts index c950fda937aa..52c7c189015d 100644 --- a/packages/stats/core/src/domain/model-normalization.ts +++ b/packages/stats/core/src/domain/model-normalization.ts @@ -16,7 +16,8 @@ export const MODEL_AUTHOR_RULES = [ export const EXCLUDED_MODELS = new Set(["alpha-gpt-next"]) export const FREE_MODELS = new Set(["gpt-5-nano", "grok-code", "big-pickle"]) export const MODEL_NAME_ALIASES: Record = { - "x-preview-f": "ox-alpha", + "ox-alpha": "glm-5.3-flash", + "x-preview-f": "glm-5.3-flash", "xiaomi/mimo-v2.5": "mimo-v2.5", } export const RETIRED_STAT_MODELS = ["big-pickle", ...Object.keys(MODEL_NAME_ALIASES)] @@ -35,11 +36,9 @@ export function modelAuthor(value: string | undefined) { export function statModel(model: string | undefined, providerModel: string | undefined) { const normalized = normalizeInferenceModel(model) - const alias = MODEL_NAME_ALIASES[normalized.toLowerCase()] - if (alias) return alias - if (RETIRED_STAT_MODELS.includes(normalized.toLowerCase())) - return normalizeInferenceModel(providerModel?.split("/").at(-1)) - return normalized + const resolved = + normalized === "big-pickle" ? normalizeInferenceModel(providerModel?.split("/").at(-1)) : normalized + return MODEL_NAME_ALIASES[resolved.toLowerCase()] ?? resolved } export function statProvider( From 5f5ea53afb2630227ead917f1a0ddf784c33150c Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Thu, 27 Aug 2026 11:13:37 +0000 Subject: [PATCH 056/185] chore: generate --- packages/stats/app/src/routes/[lab]/[model].tsx | 12 +++--------- packages/stats/app/src/routes/model-catalog.ts | 4 +++- .../stats/core/src/domain/model-normalization.ts | 3 +-- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/packages/stats/app/src/routes/[lab]/[model].tsx b/packages/stats/app/src/routes/[lab]/[model].tsx index 498b7f7016db..e1719807c22b 100644 --- a/packages/stats/app/src/routes/[lab]/[model].tsx +++ b/packages/stats/app/src/routes/[lab]/[model].tsx @@ -98,9 +98,7 @@ export default function StatsModel() { ) const labName = createMemo(() => formatCatalogLabName(catalogEntry()?.lab ?? stats()?.provider ?? labParam())) const formerName = createMemo(() => formerModelName(canonicalModel())) - const searchModelName = createMemo(() => - formerName() ? `${modelName()} (formerly ${formerName()})` : modelName(), - ) + const searchModelName = createMemo(() => (formerName() ? `${modelName()} (formerly ${formerName()})` : modelName())) const modelTitle = createMemo(() => i18n.t("model.title", { model: searchModelName() })) const modelDescription = createMemo(() => i18n.t("model.description", { model: searchModelName() })) const modelPath = createMemo(() => { @@ -350,9 +348,7 @@ function ModelHero(props: { when={props.data} fallback={

      - - {(name) => {`Formerly ${name()}.`}} - + {(name) => {`Formerly ${name()}.`}} Listed across the shared model catalog.

      @@ -360,9 +356,7 @@ function ModelHero(props: { > {(data) => (

      - - {(name) => {`Formerly ${name()}.`}} - + {(name) => {`Formerly ${name()}.`}} Ranked {formatHeroRank(data().rank)} diff --git a/packages/stats/app/src/routes/model-catalog.ts b/packages/stats/app/src/routes/model-catalog.ts index 87ae460ae1b2..44102ba3bd6a 100644 --- a/packages/stats/app/src/routes/model-catalog.ts +++ b/packages/stats/app/src/routes/model-catalog.ts @@ -73,7 +73,9 @@ export const getModelCatalog = query(async () => { export function findModelCatalogEntry(catalog: ModelCatalog, model: string, lab?: string) { const canonicalModel = statModel(model, undefined) - const normalizedId = lab ? `${catalogLabSlug(lab)}/${catalogSlug(canonicalModel)}` : canonicalModel.trim().toLowerCase() + const normalizedId = lab + ? `${catalogLabSlug(lab)}/${catalogSlug(canonicalModel)}` + : canonicalModel.trim().toLowerCase() const leaf = catalogSlug(canonicalModel) return ( catalog.models.find((entry) => entry.id.toLowerCase() === normalizedId) ?? diff --git a/packages/stats/core/src/domain/model-normalization.ts b/packages/stats/core/src/domain/model-normalization.ts index 52c7c189015d..744d761d9039 100644 --- a/packages/stats/core/src/domain/model-normalization.ts +++ b/packages/stats/core/src/domain/model-normalization.ts @@ -36,8 +36,7 @@ export function modelAuthor(value: string | undefined) { export function statModel(model: string | undefined, providerModel: string | undefined) { const normalized = normalizeInferenceModel(model) - const resolved = - normalized === "big-pickle" ? normalizeInferenceModel(providerModel?.split("/").at(-1)) : normalized + const resolved = normalized === "big-pickle" ? normalizeInferenceModel(providerModel?.split("/").at(-1)) : normalized return MODEL_NAME_ALIASES[resolved.toLowerCase()] ?? resolved } From 05ea5073be967c779d326929b2de6228dda4159d Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Thu, 27 Aug 2026 13:21:00 -0400 Subject: [PATCH 057/185] fix(console): improve Go comparison chart on mobile (#45044) Co-authored-by: jayair <53023+jayair@users.noreply.github.com> --- packages/console/app/src/routes/go/index.css | 66 ++++++++++++++++++++ packages/console/app/src/routes/go/index.tsx | 2 +- 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/packages/console/app/src/routes/go/index.css b/packages/console/app/src/routes/go/index.css index a329e2981efb..b72b01395a14 100644 --- a/packages/console/app/src/routes/go/index.css +++ b/packages/console/app/src/routes/go/index.css @@ -855,6 +855,72 @@ body { gap: 14px; } } + + @media (max-width: 32rem) { + svg { + overflow: visible; + } + + [data-slot="xlabels"] { + transform: translateY(62px); + + [data-tick="10"] { + display: none; + } + } + + [data-slot="bars"] > [data-model="ox-alpha-free"] { + transform: translateY(39px); + } + + [data-slot="pills"] [data-item][data-edge] { + left: 3.846153846%; + right: auto; + width: calc(100% - 3.846153846%); + max-width: 100%; + height: auto; + padding: 0; + background: none; + line-height: 16px; + gap: 3px 8px; + flex-wrap: wrap; + justify-content: flex-start; + + &[data-model="muse-spark-1.2-contributor"] { + transform: translateY(11px); + + [data-regions] { + flex-basis: 100%; + } + } + + &[data-model="ox-alpha-free"] { + transform: translateY(51px); + } + } + + figcaption { + margin-top: 90px; + } + } + + @media (max-width: 21.25rem) { + [data-slot="xlabels"] { + transform: translateY(100px); + } + + [data-slot="bars"] > [data-model="ox-alpha-free"] { + transform: translateY(58px); + } + + [data-slot="pills"] [data-item][data-edge][data-model="ox-alpha-free"] { + transform: translateY(70px); + } + + figcaption { + margin-top: 128px; + } + } } } diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index 77747e677df8..7d3170331de3 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -152,7 +152,7 @@ function LimitsGraph(props: { href: string }) { {(m, i) => ( - + Date: Thu, 27 Aug 2026 16:03:36 -0400 Subject: [PATCH 058/185] feat(opencode): load supported v2 config in v1 (#45421) --- packages/opencode/src/config/config.ts | 32 +- packages/opencode/src/config/v2-compat.ts | 449 ++++++++++++++++++ packages/opencode/test/config/config.test.ts | 189 +++++++- .../test/config/fixtures/v2-compat/README.md | 40 ++ .../agents-commands-precedence-input.jsonc | 17 + .../agents-commands-precedence-output.json | 29 ++ .../v2-compat/read/agents-input.jsonc | 15 + .../v2-compat/read/agents-output.json | 24 + .../v2-compat/read/commands-input.jsonc | 12 + .../v2-compat/read/commands-output.json | 17 + .../v2-compat/read/ignored-fields-input.jsonc | 8 + .../v2-compat/read/ignored-fields-output.json | 3 + .../fixtures/v2-compat/read/lsp-input.jsonc | 8 + .../fixtures/v2-compat/read/lsp-output.json | 21 + .../v2-compat/read/mcp-enablement-input.jsonc | 15 + .../v2-compat/read/mcp-enablement-output.json | 57 +++ .../v2-compat/read/mcp-merge-input.jsonc | 11 + .../v2-compat/read/mcp-merge-output.json | 22 + .../v2-compat/read/mcp-oauth-input.jsonc | 19 + .../v2-compat/read/mcp-oauth-output.json | 25 + .../read/mcp-partial-timeout-input.jsonc | 3 + .../read/mcp-partial-timeout-output.json | 3 + .../read/mcp-reserved-enabled-input.jsonc | 7 + .../read/mcp-reserved-enabled-output.json | 10 + .../v2-compat/read/mcp-reserved-input.jsonc | 6 + .../v2-compat/read/mcp-reserved-output.json | 14 + .../v2-compat/read/mcp-timeouts-input.jsonc | 15 + .../v2-compat/read/mcp-timeouts-output.json | 36 ++ .../v2-compat/read/model-object-input.jsonc | 4 + .../v2-compat/read/model-object-output.json | 4 + .../v2-compat/read/model-string-input.jsonc | 4 + .../v2-compat/read/model-string-output.json | 6 + .../v2-compat/read/model-variant-input.jsonc | 3 + .../v2-compat/read/model-variant-output.json | 3 + .../v2-compat/read/settings-input.jsonc | 12 + .../v2-compat/read/settings-output.json | 27 ++ .../read/settings-precedence-input.jsonc | 15 + .../read/settings-precedence-output.json | 17 + .../v2-compat/read/skills-input.jsonc | 3 + .../v2-compat/read/skills-output.json | 12 + .../update-global/clear-shell-input.jsonc | 7 + .../update-global/clear-shell-normalized.json | 5 + .../update-global/clear-shell-output.jsonc | 5 + .../update-global/clear-shell-patch.json | 3 + .../update-global/preserve-v2-json-input.json | 18 + .../preserve-v2-json-normalized.json | 13 + .../preserve-v2-json-output.json | 22 + .../update-global/preserve-v2-json-patch.json | 3 + .../preserve-v2-jsonc-input.jsonc | 19 + .../preserve-v2-jsonc-normalized.json | 13 + .../preserve-v2-jsonc-output.jsonc | 19 + .../preserve-v2-jsonc-patch.json | 3 + .../update-global/v1-overrides-input.json | 16 + .../v1-overrides-normalized.json | 19 + .../update-global/v1-overrides-output.json | 34 ++ .../update-global/v1-overrides-patch.json | 6 + .../update-project/preserve-v2-input.json | 18 + .../preserve-v2-normalized.json | 13 + .../update-project/preserve-v2-output.json | 22 + .../update-project/preserve-v2-patch.json | 3 + .../update-project/v1-overrides-input.json | 16 + .../v1-overrides-normalized.json | 17 + .../update-project/v1-overrides-output.json | 32 ++ .../update-project/v1-overrides-patch.json | 6 + packages/opencode/test/config/snapshot.ts | 6 + .../opencode/test/config/v2-compat.test.ts | 400 ++++++++++++++++ 66 files changed, 1948 insertions(+), 7 deletions(-) create mode 100644 packages/opencode/src/config/v2-compat.ts create mode 100644 packages/opencode/test/config/fixtures/v2-compat/README.md create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/agents-commands-precedence-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/agents-commands-precedence-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/agents-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/agents-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/commands-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/commands-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/ignored-fields-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/ignored-fields-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/lsp-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/lsp-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/mcp-merge-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/mcp-merge-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/mcp-oauth-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/mcp-oauth-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/mcp-partial-timeout-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/mcp-partial-timeout-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-enabled-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-enabled-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/model-object-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/model-object-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/model-string-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/model-string-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/model-variant-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/model-variant-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/settings-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/settings-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/settings-precedence-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/settings-precedence-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/skills-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/read/skills-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-normalized.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-output.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-patch.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-input.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-normalized.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-patch.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-input.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-normalized.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-output.jsonc create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-patch.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-input.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-normalized.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-patch.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-input.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-normalized.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-patch.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-input.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-normalized.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-output.json create mode 100644 packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-patch.json create mode 100644 packages/opencode/test/config/snapshot.ts create mode 100644 packages/opencode/test/config/v2-compat.test.ts diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 86238f1a844c..9e10b67fe703 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -33,6 +33,7 @@ import { ConfigParse } from "./parse" import { ConfigPaths } from "./paths" import { ConfigPlugin } from "./plugin" import { ConfigVariable } from "./variable" +import { ConfigV2Compat } from "./v2-compat" import { Npm } from "@opencode-ai/core/npm" import { withTransientReadRetry } from "@/util/effect-http-client" @@ -184,6 +185,19 @@ const layer = Layer.effect( const readConfigFile = (filepath: string) => fs.readFileStringSafe(filepath).pipe(Effect.orDie) + const decodeConfig = Effect.fnUntraced(function* (input: unknown, source: string) { + const result = ConfigV2Compat.lower(normalizeLoadedConfig(input), source) + yield* Effect.forEach(result.diagnostics, (diagnostic) => + Effect.logWarning("configuration compatibility diagnostic", { + source, + path: diagnostic.path, + kind: diagnostic.kind, + action: diagnostic.message, + }), + ) + return ConfigParse.schema(ConfigV1.Info, result.value, source) + }) + const fetchRemoteJson = Effect.fnUntraced(function* ( url: string, headers: Record | undefined, @@ -224,7 +238,7 @@ const layer = Layer.effect( ), ) const parsed = ConfigParse.jsonc(expanded, source) - const data = ConfigParse.schema(ConfigV1.Info, normalizeLoadedConfig(parsed), source) + const data = yield* decodeConfig(parsed, source) if (!("path" in options)) return data yield* Effect.promise(() => resolveLoadedPlugins(data, options.path)) @@ -625,8 +639,13 @@ const layer = Layer.effect( const dir = yield* InstanceState.directory const file = path.join(dir, "config.json") const existing = yield* loadFile(file) + const text = yield* readConfigFile(file) + const original = text ? ConfigParse.jsonc(text, file) : writable(existing) yield* fs - .writeFileString(file, JSON.stringify(mergeDeep(writable(existing), writable(config)), null, 2)) + .writeFileString( + file, + JSON.stringify(mergeDeep(isRecord(original) ? original : writable(existing), writable(config)), null, 2), + ) .pipe(Effect.orDie) }) @@ -642,15 +661,16 @@ const layer = Layer.effect( let next: Info let changed: boolean if (!file.endsWith(".jsonc")) { - const existing = ConfigParse.schema(ConfigV1.Info, ConfigParse.jsonc(before, file), file) - const merged = mergeDeep(writable(existing), patch) + const existing = ConfigParse.jsonc(before, file) + ConfigParse.schema(ConfigV1.Info, ConfigV2Compat.lower(normalizeLoadedConfig(existing), file).value, file) + const merged = mergeDeep(isRecord(existing) ? existing : {}, patch) const serialized = JSON.stringify(merged, null, 2) + next = yield* decodeConfig(merged, file) changed = serialized !== before if (changed) yield* fs.writeFileString(file, serialized).pipe(Effect.orDie) - next = merged } else { const updated = patchJsonc(before, patch) - next = ConfigParse.schema(ConfigV1.Info, ConfigParse.jsonc(updated, file), file) + next = yield* decodeConfig(ConfigParse.jsonc(updated, file), file) changed = updated !== before if (changed) yield* fs.writeFileString(file, updated).pipe(Effect.orDie) } diff --git a/packages/opencode/src/config/v2-compat.ts b/packages/opencode/src/config/v2-compat.ts new file mode 100644 index 000000000000..9e4e0bf54089 --- /dev/null +++ b/packages/opencode/src/config/v2-compat.ts @@ -0,0 +1,449 @@ +export * as ConfigV2Compat from "./v2-compat" + +import { isDeepStrictEqual } from "node:util" +import { Option, Schema } from "effect" +import { NonNegativeInt, PositiveInt } from "@opencode-ai/core/schema" +import { ConfigAttachmentV1 } from "@opencode-ai/core/v1/config/attachment" +import { ConfigLSPV1 } from "@opencode-ai/core/v1/config/lsp" +import { InvalidError } from "@opencode-ai/core/v1/config/error" + +export interface Diagnostic { + readonly kind: "invalid" | "unsupported" | "conflict" + readonly path: readonly string[] + readonly message: string +} + +export interface Result { + readonly value: unknown + readonly diagnostics: readonly Diagnostic[] +} + +const decodeOptions = { errors: "all", onExcessProperty: "ignore", propertyOrder: "original" } as const +const Record = Schema.Record(Schema.String, Schema.Unknown) +const Timeout = Schema.Struct({ + startup: Schema.optional(PositiveInt), + catalog: Schema.optional(PositiveInt), + execution: Schema.optional(PositiveInt), +}) +const OAuth = Schema.Struct({ + client_id: Schema.optional(Schema.String), + client_secret: Schema.optional(Schema.String), + scope: Schema.optional(Schema.String), + callback_port: Schema.optional(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 65535 }))), + redirect_uri: Schema.optional(Schema.String), +}) +const Server = Schema.Union([ + Schema.Struct({ + type: Schema.Literal("local"), + command: Schema.Array(Schema.String), + cwd: Schema.optional(Schema.String), + environment: Schema.optional(Schema.Record(Schema.String, Schema.String)), + disabled: Schema.optional(Schema.Boolean), + codemode: Schema.optional(Schema.Boolean), + timeout: Schema.optional(Timeout), + }), + Schema.Struct({ + type: Schema.Literal("remote"), + url: Schema.String, + headers: Schema.optional(Schema.Record(Schema.String, Schema.String)), + oauth: Schema.optional(Schema.Union([OAuth, Schema.Literal(false)])), + disabled: Schema.optional(Schema.Boolean), + codemode: Schema.optional(Schema.Boolean), + timeout: Schema.optional(Timeout), + }), +]) +const Selection = Schema.Union([ + Schema.String.check(Schema.isPattern(/^[^/#]+\/[^#]+(?:#[^#]+)?$/)), + Schema.Struct({ + providerID: Schema.String.check(Schema.isPattern(/^[^/#]+$/)), + model: Schema.String.check(Schema.isPattern(/^[^#]+$/)), + variant: Schema.optional(Schema.String.check(Schema.isPattern(/^[^#]+$/))), + }), +]) +const Agent = Schema.Struct({ + model: Schema.optional(Selection), + request: Schema.optional( + Schema.Struct({ + headers: Schema.optional(Schema.Record(Schema.String, Schema.String)), + body: Schema.optional(Schema.Record(Schema.String, Schema.Json)), + }), + ), + system: Schema.optional(Schema.String), + description: Schema.optional(Schema.String), + mode: Schema.optional(Schema.Literals(["subagent", "primary", "all"])), + hidden: Schema.optional(Schema.Boolean), + color: Schema.optional(Schema.String.check(Schema.isPattern(/^#[0-9a-fA-F]{6}$/))), + steps: Schema.optional(PositiveInt), + disabled: Schema.optional(Schema.Boolean), +}) +const Command = Schema.Struct({ + template: Schema.String, + description: Schema.optional(Schema.String), + agent: Schema.optional(Schema.String), + model: Schema.optional(Selection), + subtask: Schema.optional(Schema.Boolean), +}) + +const decodeRecord = Schema.decodeUnknownOption(Record, decodeOptions) +const decodeLspEntry = Schema.decodeUnknownOption(ConfigLSPV1.Entry, decodeOptions) +const builtinServers = new Set(ConfigLSPV1.builtinServerIds) + +export function lower(input: unknown, source = "configuration"): Result { + const parsed = decodeRecord(input) + if (Option.isNone(parsed)) return { value: input, diagnostics: [] } + + const permissions = [ + ...(Object.hasOwn(parsed.value, "permissions") ? [["permissions"]] : []), + ...["agents", "agent", "mode"].flatMap((key) => { + const agents = decodeRecord(parsed.value[key]) + if (Option.isNone(agents)) return [] + return Object.entries(agents.value).flatMap(([name, value]) => { + const agent = decodeRecord(value) + return Option.isSome(agent) && Object.hasOwn(agent.value, "permissions") ? [[key, name, "permissions"]] : [] + }) + }), + ] + if (permissions.length) + throw new InvalidError({ + path: source, + issues: permissions.map((path) => ({ + path, + message: 'V2 permissions are not supported by OpenCode V1. Use V1 "permission" rules or run opencode2.', + })), + }) + + const result: Record = { ...parsed.value } + const diagnostics: Diagnostic[] = [] + for (const key of ["plugins", "providers", "websearch", "warming"]) + if (Object.hasOwn(parsed.value, key)) unsupported([key], diagnostics) + + normalizeSettings(parsed.value, result, diagnostics) + normalizeModel(parsed.value, result, diagnostics) + normalizeSkills(parsed.value, result, diagnostics) + normalizeCompaction(parsed.value, result, diagnostics) + normalizeExperimental(parsed.value, result, diagnostics) + + normalizeAgents(parsed.value, result, diagnostics) + normalizeCommands(parsed.value, result, diagnostics) + normalizeMcp(parsed.value, result, diagnostics) + normalizeLsp(parsed.value, result, diagnostics) + + return { value: result, diagnostics } +} + +function normalizeSettings(input: Record, result: Record, diagnostics: Diagnostic[]) { + if (Object.hasOwn(input, "snapshots")) { + const value = decodeValue(Schema.Boolean, input.snapshots, ["snapshots"], diagnostics) + if (value !== undefined) preferLegacy(result, "snapshot", value, ["snapshots"], diagnostics) + } + if (Object.hasOwn(input, "media")) { + const value = decodeValue(ConfigAttachmentV1.Info, input.media, ["media"], diagnostics) + if (value !== undefined) preferLegacy(result, "attachment", value, ["media"], diagnostics) + } +} + +function normalizeModel(input: Record, result: Record, diagnostics: Diagnostic[]) { + if (!Object.hasOwn(input, "model")) return + const selection = Schema.decodeUnknownOption(Selection, decodeOptions)(input.model) + if (Option.isNone(selection)) return + const value = lowerSelection(selection.value) + result.model = value.model + if (value.variant !== undefined) unsupported(["model", "variant"], diagnostics) +} + +function normalizeSkills(input: Record, result: Record, diagnostics: Diagnostic[]) { + if (!Array.isArray(input.skills)) return + const skills = decodeValue(Schema.Array(Schema.String), input.skills, ["skills"], diagnostics) + if (skills === undefined) return + result.skills = { + paths: skills.filter((value) => !/^https?:\/\//i.test(value)), + urls: skills.filter((value) => /^https?:\/\//i.test(value)), + } +} + +function normalizeCompaction( + input: Record, + result: Record, + diagnostics: Diagnostic[], +) { + const compaction = decodeRecord(input.compaction) + if (Option.isNone(compaction)) return + const value = { ...compaction.value } + if (Object.hasOwn(value, "keep")) { + const keep = decodeValue(Record, value.keep, ["compaction", "keep"], diagnostics) + if (keep !== undefined && Object.hasOwn(keep, "tokens")) { + const tokens = decodeValue(NonNegativeInt, keep.tokens, ["compaction", "keep", "tokens"], diagnostics) + if (tokens !== undefined) + preferLegacy(value, "preserve_recent_tokens", tokens, ["compaction", "keep", "tokens"], diagnostics) + } + } + if (Object.hasOwn(value, "buffer")) { + const buffer = decodeValue(NonNegativeInt, value.buffer, ["compaction", "buffer"], diagnostics) + if (buffer !== undefined) preferLegacy(value, "reserved", buffer, ["compaction", "buffer"], diagnostics) + } + result.compaction = value +} + +function normalizeExperimental( + input: Record, + result: Record, + diagnostics: Diagnostic[], +) { + const experimental = decodeRecord(input.experimental) + if (Option.isNone(experimental)) return + if (Object.hasOwn(experimental.value, "portable_shell_scanner")) + unsupported(["experimental", "portable_shell_scanner"], diagnostics) + if (!Object.hasOwn(experimental.value, "subagent_depth")) return + const depth = decodeValue( + NonNegativeInt, + experimental.value.subagent_depth, + ["experimental", "subagent_depth"], + diagnostics, + ) + if (depth !== undefined) + preferLegacy(result, "subagent_depth", depth, ["experimental", "subagent_depth"], diagnostics) +} + +function normalizeAgents(input: Record, result: Record, diagnostics: Diagnostic[]) { + if (!Object.hasOwn(input, "agents")) return + const agents = decodeValue(Record, input.agents, ["agents"], diagnostics) + if (agents === undefined) return + const legacy = decodeRecord(result.agent) + const merged: Record = Option.isSome(legacy) ? { ...legacy.value } : {} + for (const [name, value] of Object.entries(agents)) { + const path = ["agents", name] + if (Object.hasOwn(merged, name)) { + if (!isDeepStrictEqual(merged[name], value)) conflict(path, diagnostics) + continue + } + const parsed = decodeValue(Agent, value, path, diagnostics) + if (parsed === undefined) continue + if (parsed.request?.headers !== undefined) unsupported([...path, "request", "headers"], diagnostics) + setOwn(merged, name, lowerAgent(parsed)) + } + if (Object.hasOwn(result, "agent") && Option.isNone(legacy)) return + if (Object.keys(merged).length > 0 || Option.isSome(legacy)) result.agent = merged +} + +function normalizeCommands(input: Record, result: Record, diagnostics: Diagnostic[]) { + if (!Object.hasOwn(input, "commands")) return + const commands = decodeValue(Record, input.commands, ["commands"], diagnostics) + if (commands === undefined) return + const legacy = decodeRecord(result.command) + if (Object.hasOwn(result, "command") && Option.isNone(legacy)) return + const merged: Record = Option.isSome(legacy) ? { ...legacy.value } : {} + for (const [name, value] of Object.entries(commands)) { + const path = ["commands", name] + const parsed = decodeValue(Command, value, path, diagnostics) + if (parsed === undefined) continue + preferLegacy(merged, name, lowerCommand(parsed), path, diagnostics) + } + if (Object.keys(merged).length > 0 || Option.isSome(legacy)) result.command = merged +} + +function normalizeMcp(input: Record, result: Record, diagnostics: Diagnostic[]) { + const mcp = decodeRecord(input.mcp) + if (Option.isNone(mcp)) return + const servers: Record = {} + const nested = decodeRecord(mcp.value.servers) + const envelope = Option.isSome(nested) && !isDirectServer(nested.value) + const timeoutRecord = decodeRecord(mcp.value.timeout) + const timeout = Schema.decodeUnknownOption(Timeout, decodeOptions)(mcp.value.timeout) + const globalTimeout = + Option.isSome(timeout) && + Option.isSome(timeoutRecord) && + !isDirectServer(timeoutRecord.value) && + (Object.keys(timeoutRecord.value).length === 0 || + ["startup", "catalog", "execution"].some((key) => Object.hasOwn(timeoutRecord.value, key))) + + for (const [name, value] of Object.entries(mcp.value)) { + if (name === "servers" && envelope) continue + if (name === "timeout" && globalTimeout) continue + const path = ["mcp", name] + const record = decodeRecord(value) + const oauth = Option.isSome(record) ? decodeRecord(record.value.oauth) : Option.none() + const native = + Option.isSome(record) && + (Object.hasOwn(record.value, "disabled") || + Object.hasOwn(record.value, "codemode") || + typeof record.value.timeout === "object" || + (Option.isSome(oauth) && + ["client_id", "client_secret", "callback_port", "redirect_uri"].some((key) => + Object.hasOwn(oauth.value, key), + ))) + // Keep invalid flat entries for the final V1 decoder rather than sanitizing them. + setOwn(servers, name, native ? (normalizeServer(value, path, diagnostics) ?? value) : value) + } + + if (envelope && Option.isSome(nested)) { + for (const [name, value] of Object.entries(nested.value)) { + const path = ["mcp", "servers", name] + if (Object.hasOwn(servers, name)) { + if (!isDeepStrictEqual(servers[name], value)) conflict(path, diagnostics) + continue + } + const record = decodeRecord(value) + if ( + Option.isSome(record) && + typeof record.value.enabled === "boolean" && + !Object.hasOwn(record.value, "disabled") + ) { + setOwn(servers, name, value) + continue + } + const server = normalizeServer(value, path, diagnostics) + if (server !== undefined) setOwn(servers, name, server) + } + } + result.mcp = servers + + if (!globalTimeout || Option.isNone(timeout)) return + const value = lowerTimeout(timeout.value) + if (value === undefined) { + if (Object.keys(timeout.value).length) unsupported(["mcp", "timeout"], diagnostics) + return + } + const existing = decodeRecord(result.experimental) + if (Object.hasOwn(result, "experimental") && Option.isNone(existing)) return + const experimental = Option.isSome(existing) ? { ...existing.value } : {} + preferLegacy(experimental, "mcp_timeout", value, ["mcp", "timeout"], diagnostics) + result.experimental = experimental +} + +function isDirectServer(value: Record) { + // Object-valued entries can be servers literally named "type" or "enabled". + return ["type", "enabled"].some( + (key) => + Object.hasOwn(value, key) && (value[key] === null || typeof value[key] !== "object" || Array.isArray(value[key])), + ) +} + +function normalizeServer(input: unknown, path: string[], diagnostics: Diagnostic[]) { + const server = decodeValue(Server, input, path, diagnostics) + if (server === undefined) return + if (server.codemode !== undefined) unsupported([...path, "codemode"], diagnostics) + if (server.timeout && lowerTimeout(server.timeout) === undefined && Object.keys(server.timeout).length) + unsupported([...path, "timeout"], diagnostics) + const raw = decodeRecord(input) + if (Option.isNone(raw) || !Object.hasOwn(raw.value, "enabled")) return lowerServer(server) + if (server.disabled !== undefined && raw.value.enabled === server.disabled) + conflict([...path, "disabled"], diagnostics) + return { ...lowerServer(server), enabled: raw.value.enabled } +} + +function normalizeLsp(input: Record, result: Record, diagnostics: Diagnostic[]) { + const lsp = decodeRecord(input.lsp) + if (Option.isNone(lsp)) return + result.lsp = Object.fromEntries( + Object.entries(lsp.value).filter(([name, value]) => { + if (builtinServers.has(name)) return true + const entry = decodeLspEntry(value) + if (Option.isNone(entry)) return true + if (entry.value.disabled === true) return true + if ("extensions" in entry.value && entry.value.extensions !== undefined) return true + unsupported(["lsp", name], diagnostics) + return false + }), + ) +} + +function lowerSelection(input: Schema.Schema.Type) { + if (typeof input !== "string") { + return { + model: `${input.providerID}/${input.model}`, + ...(input.variant !== undefined ? { variant: input.variant } : {}), + } + } + const index = input.indexOf("#") + if (index === -1) return { model: input } + return { model: input.slice(0, index), variant: input.slice(index + 1) } +} + +function lowerTimeout(input: Schema.Schema.Type) { + if (input.startup !== undefined) return undefined + if (input.catalog === undefined || input.execution === undefined) return undefined + if (input.catalog !== input.execution) return undefined + return input.catalog +} + +function lowerServer(input: Schema.Schema.Type) { + const result: Record = { + ...input, + enabled: input.disabled !== true, + } + delete result.disabled + delete result.codemode + delete result.timeout + + if (input.timeout) { + const timeout = lowerTimeout(input.timeout) + if (timeout !== undefined) result.timeout = timeout + } + + if (input.type === "remote" && input.oauth && typeof input.oauth === "object") { + const oauth: Record = {} + if (input.oauth.client_id !== undefined) oauth.clientId = input.oauth.client_id + if (input.oauth.client_secret !== undefined) oauth.clientSecret = input.oauth.client_secret + if (input.oauth.scope !== undefined) oauth.scope = input.oauth.scope + if (input.oauth.callback_port !== undefined) oauth.callbackPort = input.oauth.callback_port + if (input.oauth.redirect_uri !== undefined) oauth.redirectUri = input.oauth.redirect_uri + result.oauth = oauth + } + + return result +} + +function lowerAgent(input: Schema.Schema.Type) { + const result: Record = {} + for (const key of ["description", "mode", "hidden", "color", "steps"] as const) { + if (input[key] !== undefined) result[key] = input[key] + } + if (input.system !== undefined) result.prompt = input.system + if (input.disabled !== undefined) result.disable = input.disabled + if (input.model !== undefined) Object.assign(result, lowerSelection(input.model)) + if (input.request?.body !== undefined) result.options = input.request.body + + return result +} + +function lowerCommand(input: Schema.Schema.Type) { + return { ...input, ...(input.model !== undefined ? lowerSelection(input.model) : {}) } +} + +function decodeValue>( + schema: S, + value: unknown, + path: string[], + diagnostics: Diagnostic[], +) { + const decoded = Schema.decodeUnknownOption(schema, decodeOptions)(value) + if (Option.isSome(decoded)) return decoded.value + diagnostics.push({ kind: "invalid", path, message: "Native setting could not be lowered because it is malformed" }) + return undefined +} + +function preferLegacy( + target: Record, + key: string, + value: unknown, + path: string[], + diagnostics: Diagnostic[], +) { + if (Object.hasOwn(target, key)) { + if (!isDeepStrictEqual(target[key], value)) conflict(path, diagnostics) + return + } + setOwn(target, key, value) +} + +function setOwn(target: Record, key: string, value: unknown) { + Object.defineProperty(target, key, { value, enumerable: true, configurable: true, writable: true }) +} + +function unsupported(path: string[], diagnostics: Diagnostic[]) { + diagnostics.push({ kind: "unsupported", path, message: "Omitted native setting that cannot be represented in V1" }) +} + +function conflict(path: string[], diagnostics: Diagnostic[]) { + diagnostics.push({ kind: "conflict", path, message: "Retained legacy value over native value" }) +} diff --git a/packages/opencode/test/config/config.test.ts b/packages/opencode/test/config/config.test.ts index 8f72c0cb7f63..4eb46ae1e900 100644 --- a/packages/opencode/test/config/config.test.ts +++ b/packages/opencode/test/config/config.test.ts @@ -2,12 +2,14 @@ import { test, expect, describe, afterEach, beforeEach, spyOn } from "bun:test" import { ConfigV1 } from "@opencode-ai/core/v1/config/config" import { LayerNode } from "@opencode-ai/core/effect/layer-node" import { httpClient } from "@opencode-ai/core/effect/app-node-platform" -import { Cause, Effect, Exit, Layer, Option } from "effect" +import { Cause, Effect, Exit, Layer, Logger, Option } from "effect" import { NamedError } from "@opencode-ai/core/util/error" import { FetchHttpClient, HttpClient, HttpClientResponse } from "effect/unstable/http" import { Config } from "@/config/config" import { ConfigManaged } from "@/config/managed" import { ConfigParse } from "../../src/config/parse" +import { ConfigV2Compat } from "../../src/config/v2-compat" +import { snapshot } from "./snapshot" import { Npm } from "@opencode-ai/core/npm" import { InstanceRef } from "../../src/effect/instance-ref" @@ -397,6 +399,191 @@ it.effect("updates global config and omits empty shell key in jsonc", () => ), ) +it.effect("logs global update diagnostics once without exposing values", () => + withGlobalConfig( + { + config: { + providers: { example: { settings: { apiKey: "keep-me" } } }, + }, + }, + ({ dir }) => + Effect.gen(function* () { + const messages: unknown[] = [] + yield* Config.use.updateGlobal({ username: "updated" }).pipe( + Effect.provide( + Logger.layer([ + Logger.make((options) => { + messages.push(options.message) + }), + ]), + ), + ) + expect(JSON.stringify(messages)).not.toContain("keep-me") + expect( + messages.filter((item) => Array.isArray(item) && item[0] === "configuration compatibility diagnostic"), + ).toEqual([ + [ + "configuration compatibility diagnostic", + expect.objectContaining({ + source: path.join(dir, "opencode.json"), + kind: "unsupported", + path: ["providers"], + }), + ], + ]) + }), + ), +) + +const updateFixtures = path.join(import.meta.dir, "fixtures/v2-compat") +const globalInputs = [...new Bun.Glob("update-global/*-input.{json,jsonc}").scanSync({ cwd: updateFixtures })].sort() +const projectInputs = [...new Bun.Glob("update-project/*-input.json").scanSync({ cwd: updateFixtures })].sort() +if (!globalInputs.length || !projectInputs.length) throw new Error("Missing config update fixtures") + +for (const input of globalInputs) { + const extension = path.extname(input) + const name = input.slice(0, -`-input${extension}`.length) + const prefix = path.join(updateFixtures, name) + it.live(`fixture ${name}`, () => + withGlobalConfig({}, ({ dir }) => + Effect.gen(function* () { + const fs = yield* FSUtil.Service + const file = path.join(dir, `opencode${extension}`) + yield* fs.writeFileString(file, yield* fs.readFileString(path.join(updateFixtures, input))) + const patch = ConfigParse.schema(ConfigV1.Info, yield* fs.readJson(`${prefix}-patch.json`), input) + const updated = yield* Config.use.updateGlobal(patch) + const written = yield* fs.readFileString(file) + + yield* Effect.promise(() => snapshot(`${prefix}-output${extension}`, written)) + yield* Effect.promise(() => snapshot(`${prefix}-normalized.json`, JSON.stringify(updated.info, null, 2) + "\n")) + }), + ), + ) +} + +for (const input of projectInputs) { + const name = input.slice(0, -"-input.json".length) + const prefix = path.join(updateFixtures, name) + it.instance(`fixture ${name}`, () => + Effect.gen(function* () { + const instance = yield* TestInstance + const fs = yield* FSUtil.Service + const file = path.join(instance.directory, "config.json") + yield* fs.writeFileString(file, yield* fs.readFileString(path.join(updateFixtures, input))) + const patch = ConfigParse.schema(ConfigV1.Info, yield* fs.readJson(`${prefix}-patch.json`), input) + yield* Config.use.update(patch) + const written = yield* fs.readFileString(file) + const normalized = ConfigParse.schema( + ConfigV1.Info, + ConfigV2Compat.lower(ConfigParse.jsonc(written, file)).value, + file, + ) + + yield* Effect.promise(() => snapshot(`${prefix}-output.json`, written)) + yield* Effect.promise(() => snapshot(`${prefix}-normalized.json`, JSON.stringify(normalized, null, 2) + "\n")) + }), + ) +} + +for (const name of ["opencode.json", "opencode.jsonc"]) { + it.live(`rejects updating ${name} with native permissions without writing it`, () => + withGlobalConfig( + { name, config: { permissions: [{ action: "read", resource: "secret-resource", effect: "deny" }] } }, + ({ dir }) => + Effect.gen(function* () { + const fs = yield* FSUtil.Service + const file = path.join(dir, name) + const before = yield* fs.readFileString(file) + const exit = yield* Effect.exit(Config.use.updateGlobal({ username: "changed" })) + expect(Exit.isFailure(exit)).toBe(true) + if (Exit.isFailure(exit)) { + const error = Cause.squash(exit.cause) + expect(error).toMatchObject({ data: { path: file, issues: [{ path: ["permissions"] }] } }) + expect(JSON.stringify(error)).not.toContain("secret-resource") + } + expect(yield* fs.readFileString(file)).toBe(before) + }), + ), + ) +} + +it.instance("rejects a project update with native agent permissions without writing it", () => + Effect.gen(function* () { + const instance = yield* TestInstance + const fs = yield* FSUtil.Service + const file = path.join(instance.directory, "config.json") + const before = JSON.stringify({ agents: { reviewer: { permissions: [] } } }) + yield* fs.writeFileString(file, before) + const exit = yield* Effect.exit(Config.use.update({ username: "changed" })) + expect(Exit.isFailure(exit)).toBe(true) + if (Exit.isFailure(exit)) + expect(Cause.squash(exit.cause)).toMatchObject({ + data: { path: file, issues: [{ path: ["agents", "reviewer", "permissions"] }] }, + }) + expect(yield* fs.readFileString(file)).toBe(before) + }), +) + +it.effect("native project MCP servers override inherited V1 disabled state", () => + withConfigTree( + { + global: { + mcp: { + shared: { type: "local", command: ["global-mcp"], enabled: false }, + }, + }, + project: { + mcp: { + servers: { + shared: { type: "local", command: ["project-mcp"] }, + }, + }, + }, + }, + Effect.gen(function* () { + expect((yield* Config.use.get()).mcp?.shared).toMatchObject({ + type: "local", + command: ["project-mcp"], + enabled: true, + }) + }), + ), +) + +it.effect("rejects native project permissions even with inherited V1 rules", () => + withConfigTree( + { + global: { + permission: { read: "deny", bash: "ask" }, + agent: { reviewer: { permission: { edit: "deny" } } }, + }, + project: { + permissions: [{ action: "read", resource: "*", effect: "allow" }], + agents: { + reviewer: { + system: "Review carefully", + permissions: [{ action: "edit", resource: "*", effect: "allow" }], + }, + }, + }, + }, + Effect.gen(function* () { + const exit = yield* Effect.exit(Config.use.get()) + expect(Exit.isFailure(exit)).toBe(true) + if (Exit.isFailure(exit)) + expect(Cause.squash(exit.cause)).toMatchObject({ + data: { + path: expect.stringContaining("project/opencode.json"), + issues: [ + { path: ["permissions"], message: expect.stringContaining('Use V1 "permission" rules or run opencode2') }, + { path: ["agents", "reviewer", "permissions"], message: expect.stringContaining("not supported") }, + ], + }, + }) + }), + ), +) + it.instance( "loads formatter boolean config", Effect.gen(function* () { diff --git a/packages/opencode/test/config/fixtures/v2-compat/README.md b/packages/opencode/test/config/fixtures/v2-compat/README.md new file mode 100644 index 000000000000..787564763370 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/README.md @@ -0,0 +1,40 @@ +# Config Transformation Fixtures + +Each directory is an operation, with a flat list of files grouped by case-name prefixes. Add a case without adding another +test body; the runners discover `*-input.*` files in sorted order. + +## Operations + +| Directory | Inputs | Expected outputs | Operation | +| ----------------- | ---------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------ | +| `read/` | `-input.jsonc` | `-output.json` | Parse JSONC, lower supported V2 fields, and decode the V1 schema. | +| `update-global/` | `-input.json` or `.jsonc`, `-patch.json` | `-output.json` or `.jsonc`, `-normalized.json` | Write an isolated global file and invoke the real `Config.updateGlobal` service. | +| `update-project/` | `-input.json`, `-patch.json` | `-output.json`, `-normalized.json` | Write an isolated project `config.json` and invoke the real `Config.update` service. | + +Read outputs capture the complete decoded document, including V1 schema defaults, but not environment-dependent runtime +defaults such as the OS username. The read runner also checks that lowering did not mutate its input. + +For updates, `-output.*` is the exact text written by the service, including comments, formatting, and the presence or +absence of a final newline. `-normalized.json` records the V1 config returned by `updateGlobal`, or the decoded saved file +for project updates (which return no config). Native V2 data can remain in the saved file even when it is absent or has a +different shape in the in-memory V1 output. + +These are checked-in expectations, not output generated during ordinary test runs. Missing expectations fail the test. +Focused tests separately cover invalid inputs, diagnostics, secret redaction, logging, and cross-source behavior. + +## Run + +From `packages/opencode`: + +```sh +bun test test/config/v2-compat.test.ts test/config/config.test.ts --timeout 30000 +``` + +To intentionally regenerate expected outputs: + +```sh +UPDATE_CONFIG_FIXTURES=1 bun test test/config/v2-compat.test.ts test/config/config.test.ts --timeout 30000 +``` + +Review every changed `*-output.*` and `*-normalized.json` before accepting it. Do not run a formatter on update outputs; their +exact formatting is part of the snapshot. Inputs are authored by hand and are never rewritten by the fixture runner. diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/agents-commands-precedence-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/agents-commands-precedence-input.jsonc new file mode 100644 index 000000000000..bdef25da81b9 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/agents-commands-precedence-input.jsonc @@ -0,0 +1,17 @@ +{ + "permission": { "bash": "deny", "*": "ask", "edit": "deny" }, + "agent": { + "reviewer": { "prompt": "Legacy prompt", "permission": { "bash": "deny", "edit": "deny" } } + }, + "agents": { + "reviewer": { + "system": "Native prompt" + }, + "native": {} + }, + "command": { "review": { "template": "Legacy review" } }, + "commands": { + "review": { "template": "Native review" }, + "modern": { "template": "Native command" } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/agents-commands-precedence-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/agents-commands-precedence-output.json new file mode 100644 index 000000000000..55815600b883 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/agents-commands-precedence-output.json @@ -0,0 +1,29 @@ +{ + "permission": { + "bash": "deny", + "*": "ask", + "edit": "deny" + }, + "agent": { + "reviewer": { + "prompt": "Legacy prompt", + "permission": { + "bash": "deny", + "edit": "deny" + }, + "options": {} + }, + "native": { + "options": {}, + "permission": {} + } + }, + "command": { + "review": { + "template": "Legacy review" + }, + "modern": { + "template": "Native command" + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/agents-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/agents-input.jsonc new file mode 100644 index 000000000000..e6d51830e744 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/agents-input.jsonc @@ -0,0 +1,15 @@ +{ + "agents": { + "reviewer": { + "model": { "providerID": "anthropic", "model": "claude-sonnet", "variant": "thinking" }, + "system": "Review carefully.", + "description": "Reviews changes", + "mode": "subagent", + "hidden": true, + "color": "#123abc", + "steps": 4, + "disabled": true + }, + "quick": { "model": "openai/gpt-4.1#fast", "disabled": false } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/agents-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/agents-output.json new file mode 100644 index 000000000000..b94b1f42974a --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/agents-output.json @@ -0,0 +1,24 @@ +{ + "agent": { + "reviewer": { + "description": "Reviews changes", + "mode": "subagent", + "hidden": true, + "color": "#123abc", + "steps": 4, + "prompt": "Review carefully.", + "disable": true, + "model": "anthropic/claude-sonnet", + "variant": "thinking", + "options": {}, + "permission": {} + }, + "quick": { + "disable": false, + "model": "openai/gpt-4.1", + "variant": "fast", + "options": {}, + "permission": {} + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/commands-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/commands-input.jsonc new file mode 100644 index 000000000000..e8502d5b2f80 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/commands-input.jsonc @@ -0,0 +1,12 @@ +{ + "commands": { + "review": { + "template": "Review $ARGUMENTS", + "description": "Review code", + "agent": "reviewer", + "model": { "providerID": "anthropic", "model": "claude-sonnet", "variant": "thinking" }, + "subtask": true + }, + "quick": { "template": "Quick review", "model": "openai/gpt-4.1#fast" } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/commands-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/commands-output.json new file mode 100644 index 000000000000..9365d5999f00 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/commands-output.json @@ -0,0 +1,17 @@ +{ + "command": { + "review": { + "template": "Review $ARGUMENTS", + "description": "Review code", + "agent": "reviewer", + "model": "anthropic/claude-sonnet", + "subtask": true, + "variant": "thinking" + }, + "quick": { + "template": "Quick review", + "model": "openai/gpt-4.1", + "variant": "fast" + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/ignored-fields-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/ignored-fields-input.jsonc new file mode 100644 index 000000000000..5981ee463e1a --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/ignored-fields-input.jsonc @@ -0,0 +1,8 @@ +{ + "plugins": [{ "package": "@example/native-plugin" }], + "providers": { "native": { "models": { "example": { "name": "Native model" } } } }, + "policies": [{ "action": "provider.use", "effect": "deny", "resource": "openai" }], + "websearch": "native-only", + "warming": true, + "experimental": { "portable_shell_scanner": true } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/ignored-fields-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/ignored-fields-output.json new file mode 100644 index 000000000000..f1d962881b0b --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/ignored-fields-output.json @@ -0,0 +1,3 @@ +{ + "experimental": {} +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/lsp-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/lsp-input.jsonc new file mode 100644 index 000000000000..cc8689b8f04d --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/lsp-input.jsonc @@ -0,0 +1,8 @@ +{ + "lsp": { + "typescript": { "command": ["typescript-language-server", "--stdio"] }, + "compatible": { "command": ["custom-lsp"], "extensions": [".custom"] }, + "incompatible": { "command": ["incompatible-lsp"] }, + "disabled": { "disabled": true } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/lsp-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/lsp-output.json new file mode 100644 index 000000000000..8e0de3f7841c --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/lsp-output.json @@ -0,0 +1,21 @@ +{ + "lsp": { + "typescript": { + "command": [ + "typescript-language-server", + "--stdio" + ] + }, + "compatible": { + "command": [ + "custom-lsp" + ], + "extensions": [ + ".custom" + ] + }, + "disabled": { + "disabled": true + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-input.jsonc new file mode 100644 index 000000000000..d8970e3e26aa --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-input.jsonc @@ -0,0 +1,15 @@ +{ + "mcp": { + "legacy-disabled": { "enabled": false }, + "legacy-enabled": { "enabled": true }, + "existing": { "type": "local", "command": ["existing-mcp"], "enabled": true }, + "flat-disabled": { "type": "local", "command": ["legacy"], "enabled": false, "codemode": false }, + "flat-enabled": { "type": "local", "command": ["legacy"], "enabled": true, "disabled": true }, + "servers": { + "type": { "type": "local", "command": ["type-mcp"] }, + "enabled": { "type": "remote", "url": "https://example.com/mcp" }, + "explicit-enabled": { "type": "local", "command": ["enabled-mcp"], "disabled": false }, + "explicit-disabled": { "type": "local", "command": ["disabled-mcp"], "disabled": true } + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-output.json new file mode 100644 index 000000000000..9f5d400aef53 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-output.json @@ -0,0 +1,57 @@ +{ + "mcp": { + "legacy-disabled": { + "enabled": false + }, + "legacy-enabled": { + "enabled": true + }, + "existing": { + "type": "local", + "command": [ + "existing-mcp" + ], + "enabled": true + }, + "flat-disabled": { + "type": "local", + "command": [ + "legacy" + ], + "enabled": false + }, + "flat-enabled": { + "type": "local", + "command": [ + "legacy" + ], + "enabled": true + }, + "type": { + "type": "local", + "command": [ + "type-mcp" + ], + "enabled": true + }, + "enabled": { + "type": "remote", + "url": "https://example.com/mcp", + "enabled": true + }, + "explicit-enabled": { + "type": "local", + "command": [ + "enabled-mcp" + ], + "enabled": true + }, + "explicit-disabled": { + "type": "local", + "command": [ + "disabled-mcp" + ], + "enabled": false + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-merge-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-merge-input.jsonc new file mode 100644 index 000000000000..a97d2aedc09e --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-merge-input.jsonc @@ -0,0 +1,11 @@ +{ + // Flat V1 entries win when an enveloped V2 server has the same name. + "mcp": { + "legacy": { "type": "local", "command": ["legacy-mcp"], "enabled": false }, + "shared": { "type": "remote", "url": "https://legacy.example.com/mcp" }, + "servers": { + "shared": { "type": "remote", "url": "https://native.example.com/mcp", "disabled": false }, + "native": { "type": "local", "command": ["native-mcp"], "disabled": true }, + }, + }, +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-merge-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-merge-output.json new file mode 100644 index 000000000000..d425be1f475f --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-merge-output.json @@ -0,0 +1,22 @@ +{ + "mcp": { + "legacy": { + "type": "local", + "command": [ + "legacy-mcp" + ], + "enabled": false + }, + "shared": { + "type": "remote", + "url": "https://legacy.example.com/mcp" + }, + "native": { + "type": "local", + "command": [ + "native-mcp" + ], + "enabled": false + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-oauth-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-oauth-input.jsonc new file mode 100644 index 000000000000..4bb5e1605aae --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-oauth-input.jsonc @@ -0,0 +1,19 @@ +{ + "mcp": { + "servers": { + "authenticated": { + "type": "remote", + "url": "https://oauth.example.com/mcp", + "headers": { "Authorization": "Bearer token" }, + "oauth": { + "client_id": "client", + "client_secret": "secret", + "scope": "read write", + "callback_port": 19877, + "redirect_uri": "http://127.0.0.1:19877/callback" + } + }, + "anonymous": { "type": "remote", "url": "https://anonymous.example.com/mcp", "oauth": false } + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-oauth-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-oauth-output.json new file mode 100644 index 000000000000..91ed4f1d6997 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-oauth-output.json @@ -0,0 +1,25 @@ +{ + "mcp": { + "authenticated": { + "type": "remote", + "url": "https://oauth.example.com/mcp", + "headers": { + "Authorization": "Bearer token" + }, + "oauth": { + "clientId": "client", + "clientSecret": "secret", + "scope": "read write", + "callbackPort": 19877, + "redirectUri": "http://127.0.0.1:19877/callback" + }, + "enabled": true + }, + "anonymous": { + "type": "remote", + "url": "https://anonymous.example.com/mcp", + "oauth": false, + "enabled": true + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-partial-timeout-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-partial-timeout-input.jsonc new file mode 100644 index 000000000000..8257cca21be0 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-partial-timeout-input.jsonc @@ -0,0 +1,3 @@ +{ + "mcp": { "timeout": { "startup": 1000, "catalog": 2000 } } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-partial-timeout-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-partial-timeout-output.json new file mode 100644 index 000000000000..b50b419d08c3 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-partial-timeout-output.json @@ -0,0 +1,3 @@ +{ + "mcp": {} +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-enabled-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-enabled-input.jsonc new file mode 100644 index 000000000000..e4e0a7303316 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-enabled-input.jsonc @@ -0,0 +1,7 @@ +{ + // An object-valued type must not hide a flat enabled-only server. + "mcp": { + "servers": { "type": {}, "enabled": false }, + "timeout": { "enabled": true } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-enabled-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-enabled-output.json new file mode 100644 index 000000000000..004e72494b6e --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-enabled-output.json @@ -0,0 +1,10 @@ +{ + "mcp": { + "servers": { + "enabled": false + }, + "timeout": { + "enabled": true + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-input.jsonc new file mode 100644 index 000000000000..b825f07c3c6f --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-input.jsonc @@ -0,0 +1,6 @@ +{ + "mcp": { + "servers": { "type": "local", "command": ["server-named-servers"] }, + "timeout": { "type": "remote", "url": "https://timeout.example.com/mcp" } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-output.json new file mode 100644 index 000000000000..0f5a30b387c7 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-output.json @@ -0,0 +1,14 @@ +{ + "mcp": { + "servers": { + "type": "local", + "command": [ + "server-named-servers" + ] + }, + "timeout": { + "type": "remote", + "url": "https://timeout.example.com/mcp" + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-input.jsonc new file mode 100644 index 000000000000..1a18254da1ce --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-input.jsonc @@ -0,0 +1,15 @@ +{ + "mcp": { + "timeout": { "catalog": 8000, "execution": 8000 }, + "servers": { + "safe": { "type": "local", "command": ["safe-mcp"], "timeout": { "catalog": 3000, "execution": 3000 } }, + "unsafe": { "type": "local", "command": ["unsafe-mcp"], "timeout": { "catalog": 2000, "execution": 4000 } }, + "partial": { "type": "local", "command": ["partial-mcp"], "timeout": { "execution": 5000 } }, + "startup": { + "type": "local", + "command": ["startup-mcp"], + "timeout": { "startup": 1000, "catalog": 3000, "execution": 3000 } + } + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-output.json new file mode 100644 index 000000000000..41b9b7cd9bb0 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-output.json @@ -0,0 +1,36 @@ +{ + "mcp": { + "safe": { + "type": "local", + "command": [ + "safe-mcp" + ], + "enabled": true, + "timeout": 3000 + }, + "unsafe": { + "type": "local", + "command": [ + "unsafe-mcp" + ], + "enabled": true + }, + "partial": { + "type": "local", + "command": [ + "partial-mcp" + ], + "enabled": true + }, + "startup": { + "type": "local", + "command": [ + "startup-mcp" + ], + "enabled": true + } + }, + "experimental": { + "mcp_timeout": 8000 + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/model-object-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/model-object-input.jsonc new file mode 100644 index 000000000000..f526f0cb0cb9 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/model-object-input.jsonc @@ -0,0 +1,4 @@ +{ + "$schema": "https://opencode.ai/config.json", + "model": { "providerID": "anthropic", "model": "claude-sonnet", "variant": "fast" } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/model-object-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/model-object-output.json new file mode 100644 index 000000000000..05db43112125 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/model-object-output.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://opencode.ai/config.json", + "model": "anthropic/claude-sonnet" +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/model-string-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/model-string-input.jsonc new file mode 100644 index 000000000000..1ef2530d9ffe --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/model-string-input.jsonc @@ -0,0 +1,4 @@ +{ + "model": "anthropic/claude-sonnet", + "permission": "deny" +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/model-string-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/model-string-output.json new file mode 100644 index 000000000000..f8cc9263c0df --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/model-string-output.json @@ -0,0 +1,6 @@ +{ + "model": "anthropic/claude-sonnet", + "permission": { + "*": "deny" + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/model-variant-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/model-variant-input.jsonc new file mode 100644 index 000000000000..ac0b39dfe058 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/model-variant-input.jsonc @@ -0,0 +1,3 @@ +{ + "model": "anthropic/claude-sonnet#fast" +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/model-variant-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/model-variant-output.json new file mode 100644 index 000000000000..6f472abc0b1f --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/model-variant-output.json @@ -0,0 +1,3 @@ +{ + "model": "anthropic/claude-sonnet" +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/settings-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/settings-input.jsonc new file mode 100644 index 000000000000..94bdbdee15f5 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/settings-input.jsonc @@ -0,0 +1,12 @@ +{ + "snapshots": false, + "media": { + "image": { "auto_resize": false, "max_width": 1920, "max_height": 1080, "max_base64_bytes": 4096 } + }, + "compaction": { "auto": false, "keep": { "tokens": 12000 }, "buffer": 2048 }, + "experimental": { + "subagent_depth": 3, + "policies": [{ "effect": "deny", "action": "provider.use", "resource": "openai" }], + "batch_tool": true + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/settings-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/settings-output.json new file mode 100644 index 000000000000..273ec79f3425 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/settings-output.json @@ -0,0 +1,27 @@ +{ + "compaction": { + "auto": false, + "preserve_recent_tokens": 12000, + "reserved": 2048 + }, + "experimental": { + "policies": [ + { + "effect": "deny", + "action": "provider.use", + "resource": "openai" + } + ], + "batch_tool": true + }, + "snapshot": false, + "attachment": { + "image": { + "auto_resize": false, + "max_width": 1920, + "max_height": 1080, + "max_base64_bytes": 4096 + } + }, + "subagent_depth": 3 +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/settings-precedence-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/settings-precedence-input.jsonc new file mode 100644 index 000000000000..d43042091edd --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/settings-precedence-input.jsonc @@ -0,0 +1,15 @@ +{ + "snapshot": false, + "snapshots": true, + "attachment": { "image": { "max_width": 640 } }, + "media": { "image": { "max_width": 1920 } }, + "subagent_depth": 1, + "experimental": { "subagent_depth": 3, "mcp_timeout": 4000 }, + "compaction": { + "preserve_recent_tokens": 100, + "keep": { "tokens": 200 }, + "reserved": 300, + "buffer": 400 + }, + "mcp": { "timeout": { "catalog": 8000, "execution": 8000 } } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/settings-precedence-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/settings-precedence-output.json new file mode 100644 index 000000000000..32c1efada427 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/settings-precedence-output.json @@ -0,0 +1,17 @@ +{ + "snapshot": false, + "attachment": { + "image": { + "max_width": 640 + } + }, + "subagent_depth": 1, + "experimental": { + "mcp_timeout": 4000 + }, + "compaction": { + "preserve_recent_tokens": 100, + "reserved": 300 + }, + "mcp": {} +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/skills-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/skills-input.jsonc new file mode 100644 index 000000000000..ab005d62217a --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/skills-input.jsonc @@ -0,0 +1,3 @@ +{ + "skills": ["./skills", "https://example.com/skills", "/opt/skills", "http://localhost:8080/skills"] +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/skills-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/skills-output.json new file mode 100644 index 000000000000..1486ecd7c245 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/read/skills-output.json @@ -0,0 +1,12 @@ +{ + "skills": { + "paths": [ + "./skills", + "/opt/skills" + ], + "urls": [ + "https://example.com/skills", + "http://localhost:8080/skills" + ] + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-input.jsonc new file mode 100644 index 000000000000..fa3ea0b6c527 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-input.jsonc @@ -0,0 +1,7 @@ +{ + "$schema": "https://opencode.ai/config.json", + // Empty shell in a global update removes the setting. + "shell": "bash", + "model": { "providerID": "example", "model": "demo" }, + "snapshots": false +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-normalized.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-normalized.json new file mode 100644 index 000000000000..133badb77e63 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-normalized.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://opencode.ai/config.json", + "model": "example/demo", + "snapshot": false +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-output.jsonc b/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-output.jsonc new file mode 100644 index 000000000000..d665f8127d70 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-output.jsonc @@ -0,0 +1,5 @@ +{ + "$schema": "https://opencode.ai/config.json", + "model": { "providerID": "example", "model": "demo" }, + "snapshots": false +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-patch.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-patch.json new file mode 100644 index 000000000000..f448f453248d --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-patch.json @@ -0,0 +1,3 @@ +{ + "shell": "" +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-input.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-input.json new file mode 100644 index 000000000000..85438599c2fb --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-input.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://opencode.ai/config.json", + "username": "before", + "mcp": { + "servers": { + "modern": { + "type": "local", + "command": ["modern-mcp"], + "disabled": true + } + } + }, + "providers": { + "example": { + "settings": { "apiKey": "fixture-secret" } + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-normalized.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-normalized.json new file mode 100644 index 000000000000..57bd3589da6e --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-normalized.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://opencode.ai/config.json", + "username": "after", + "mcp": { + "modern": { + "type": "local", + "command": [ + "modern-mcp" + ], + "enabled": false + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-output.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-output.json new file mode 100644 index 000000000000..9a2ce8d385f9 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-output.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://opencode.ai/config.json", + "username": "after", + "mcp": { + "servers": { + "modern": { + "type": "local", + "command": [ + "modern-mcp" + ], + "disabled": true + } + } + }, + "providers": { + "example": { + "settings": { + "apiKey": "fixture-secret" + } + } + } +} \ No newline at end of file diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-patch.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-patch.json new file mode 100644 index 000000000000..1af8720f4b27 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-patch.json @@ -0,0 +1,3 @@ +{ + "username": "after" +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-input.jsonc new file mode 100644 index 000000000000..db714876d10e --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-input.jsonc @@ -0,0 +1,19 @@ +{ + "$schema": "https://opencode.ai/config.json", + // The V1 update must keep comments and native settings. + "username": "before", + "mcp": { + "servers": { + "modern": { + "type": "local", + "command": ["modern-mcp"], + "disabled": true, + }, + }, + }, + "providers": { + "example": { + "settings": { "apiKey": "fixture-secret" }, + }, + }, +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-normalized.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-normalized.json new file mode 100644 index 000000000000..57bd3589da6e --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-normalized.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://opencode.ai/config.json", + "username": "after", + "mcp": { + "modern": { + "type": "local", + "command": [ + "modern-mcp" + ], + "enabled": false + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-output.jsonc b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-output.jsonc new file mode 100644 index 000000000000..abd8b673e24d --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-output.jsonc @@ -0,0 +1,19 @@ +{ + "$schema": "https://opencode.ai/config.json", + // The V1 update must keep comments and native settings. + "username": "after", + "mcp": { + "servers": { + "modern": { + "type": "local", + "command": ["modern-mcp"], + "disabled": true, + }, + }, + }, + "providers": { + "example": { + "settings": { "apiKey": "fixture-secret" }, + }, + }, +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-patch.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-patch.json new file mode 100644 index 000000000000..1af8720f4b27 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-patch.json @@ -0,0 +1,3 @@ +{ + "username": "after" +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-input.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-input.json new file mode 100644 index 000000000000..35ec5a1cd79e --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-input.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://opencode.ai/config.json", + "snapshots": true, + "agents": { + "reviewer": { "disabled": false } + }, + "mcp": { + "servers": { + "modern": { + "type": "local", + "command": ["modern-mcp"], + "disabled": false + } + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-normalized.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-normalized.json new file mode 100644 index 000000000000..07596a743bf4 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-normalized.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://opencode.ai/config.json", + "mcp": { + "modern": { + "enabled": false + } + }, + "snapshot": false, + "permission": { + "read": "deny" + }, + "agent": { + "reviewer": { + "disable": true, + "options": {}, + "permission": {} + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-output.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-output.json new file mode 100644 index 000000000000..13a7ef229abf --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-output.json @@ -0,0 +1,34 @@ +{ + "$schema": "https://opencode.ai/config.json", + "snapshots": true, + "agents": { + "reviewer": { + "disabled": false + } + }, + "mcp": { + "servers": { + "modern": { + "type": "local", + "command": [ + "modern-mcp" + ], + "disabled": false + } + }, + "modern": { + "enabled": false + } + }, + "snapshot": false, + "permission": { + "read": "deny" + }, + "agent": { + "reviewer": { + "disable": true, + "options": {}, + "permission": {} + } + } +} \ No newline at end of file diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-patch.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-patch.json new file mode 100644 index 000000000000..ad732d661dc2 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-patch.json @@ -0,0 +1,6 @@ +{ + "snapshot": false, + "permission": { "read": "deny" }, + "agent": { "reviewer": { "disable": true } }, + "mcp": { "modern": { "enabled": false } } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-input.json b/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-input.json new file mode 100644 index 000000000000..85438599c2fb --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-input.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://opencode.ai/config.json", + "username": "before", + "mcp": { + "servers": { + "modern": { + "type": "local", + "command": ["modern-mcp"], + "disabled": true + } + } + }, + "providers": { + "example": { + "settings": { "apiKey": "fixture-secret" } + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-normalized.json b/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-normalized.json new file mode 100644 index 000000000000..57bd3589da6e --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-normalized.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://opencode.ai/config.json", + "username": "after", + "mcp": { + "modern": { + "type": "local", + "command": [ + "modern-mcp" + ], + "enabled": false + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-output.json b/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-output.json new file mode 100644 index 000000000000..9a2ce8d385f9 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-output.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://opencode.ai/config.json", + "username": "after", + "mcp": { + "servers": { + "modern": { + "type": "local", + "command": [ + "modern-mcp" + ], + "disabled": true + } + } + }, + "providers": { + "example": { + "settings": { + "apiKey": "fixture-secret" + } + } + } +} \ No newline at end of file diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-patch.json b/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-patch.json new file mode 100644 index 000000000000..1af8720f4b27 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-patch.json @@ -0,0 +1,3 @@ +{ + "username": "after" +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-input.json b/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-input.json new file mode 100644 index 000000000000..35ec5a1cd79e --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-input.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://opencode.ai/config.json", + "snapshots": true, + "agents": { + "reviewer": { "disabled": false } + }, + "mcp": { + "servers": { + "modern": { + "type": "local", + "command": ["modern-mcp"], + "disabled": false + } + } + } +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-normalized.json b/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-normalized.json new file mode 100644 index 000000000000..b51b190f0fb8 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-normalized.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://opencode.ai/config.json", + "mcp": { + "modern": { + "enabled": false + } + }, + "snapshot": false, + "agent": { + "reviewer": { + "disable": true, + "options": {}, + "permission": {} + } + }, + "shell": "" +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-output.json b/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-output.json new file mode 100644 index 000000000000..ce2eb0dadc00 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-output.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://opencode.ai/config.json", + "snapshots": true, + "agents": { + "reviewer": { + "disabled": false + } + }, + "mcp": { + "servers": { + "modern": { + "type": "local", + "command": [ + "modern-mcp" + ], + "disabled": false + } + }, + "modern": { + "enabled": false + } + }, + "snapshot": false, + "agent": { + "reviewer": { + "disable": true, + "options": {}, + "permission": {} + } + }, + "shell": "" +} \ No newline at end of file diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-patch.json b/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-patch.json new file mode 100644 index 000000000000..5c25e7eb1c01 --- /dev/null +++ b/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-patch.json @@ -0,0 +1,6 @@ +{ + "snapshot": false, + "agent": { "reviewer": { "disable": true } }, + "mcp": { "modern": { "enabled": false } }, + "shell": "" +} diff --git a/packages/opencode/test/config/snapshot.ts b/packages/opencode/test/config/snapshot.ts new file mode 100644 index 000000000000..d184432fbfb6 --- /dev/null +++ b/packages/opencode/test/config/snapshot.ts @@ -0,0 +1,6 @@ +import { expect } from "bun:test" + +export async function snapshot(file: string, actual: string) { + if (process.env.UPDATE_CONFIG_FIXTURES === "1") await Bun.write(file, actual) + expect(actual).toBe(await Bun.file(file).text()) +} diff --git a/packages/opencode/test/config/v2-compat.test.ts b/packages/opencode/test/config/v2-compat.test.ts new file mode 100644 index 000000000000..51873f0c4e82 --- /dev/null +++ b/packages/opencode/test/config/v2-compat.test.ts @@ -0,0 +1,400 @@ +import { describe, expect, test } from "bun:test" +import { ConfigV1 } from "@opencode-ai/core/v1/config/config" +import { LayerNode } from "@opencode-ai/core/effect/layer-node" +import { httpClient } from "@opencode-ai/core/effect/app-node-platform" +import { FSUtil } from "@opencode-ai/core/fs-util" +import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner" +import { Npm } from "@opencode-ai/core/npm" +import { Effect, Layer, Logger } from "effect" +import { HttpClient } from "effect/unstable/http" +import path from "path" +import { Account } from "../../src/account/account" +import { Auth } from "../../src/auth" +import { Config } from "../../src/config/config" +import { ConfigParse } from "../../src/config/parse" +import { ConfigV2Compat } from "../../src/config/v2-compat" +import { Env } from "../../src/env" +import { AccountTest } from "../fake/account" +import { AuthTest } from "../fake/auth" +import { NpmTest } from "../fake/npm" +import { TestInstance } from "../fixture/fixture" +import { testEffect } from "../lib/effect" +import { snapshot } from "./snapshot" + +const source = "test:v2-compat" +const lower = (input: unknown) => ConfigParse.schema(ConfigV1.Info, ConfigV2Compat.lower(input, source).value, source) + +const it = testEffect( + LayerNode.compile(LayerNode.group([Config.node, FSUtil.node, Env.node, CrossSpawnSpawner.node]), [ + [Auth.node, AuthTest.empty], + [Account.node, AccountTest.empty], + [Npm.node, NpmTest.noop], + [ + httpClient, + Layer.succeed( + HttpClient.HttpClient, + HttpClient.make((request) => Effect.die(`unexpected http request: ${request.method} ${request.url}`)), + ), + ], + ]), +) + +describe("V2 compatibility read fixtures", () => { + const directory = path.join(import.meta.dir, "fixtures/v2-compat/read") + const cases = Array.from(new Bun.Glob("*-input.jsonc").scanSync(directory)) + .map((file) => file.slice(0, -"-input.jsonc".length)) + .sort() + if (!cases.length) throw new Error("No V2 compatibility read fixtures found") + + cases.forEach((name) => { + test(name, async () => { + const source = path.join(directory, `${name}-input.jsonc`) + const input = ConfigParse.jsonc(await Bun.file(source).text(), source) + const original = structuredClone(input) + const result = ConfigV2Compat.lower(input, source) + expect(input).toEqual(original) + const config = ConfigParse.schema(ConfigV1.Info, result.value, source) + await snapshot(path.join(directory, `${name}-output.json`), JSON.stringify(config, null, 2) + "\n") + }) + }) +}) + +describe("ConfigV2Compat.lower", () => { + test("returns structured invalid diagnostics while retaining supported siblings", () => { + const result = ConfigV2Compat.lower({ + mcp: { + servers: { + broken: { type: "local", command: "not-an-array" }, + working: { type: "local", command: ["working-mcp"] }, + }, + }, + agents: { broken: { steps: "many" } }, + commands: { broken: { template: 42 } }, + }) + + expect(result.diagnostics).toEqual( + expect.arrayContaining([ + expect.objectContaining({ kind: "invalid", path: ["mcp", "servers", "broken"] }), + expect.objectContaining({ kind: "invalid", path: ["agents", "broken"] }), + expect.objectContaining({ kind: "invalid", path: ["commands", "broken"] }), + ]), + ) + expect(ConfigParse.schema(ConfigV1.Info, result.value, source).mcp).toEqual({ + working: { type: "local", command: ["working-mcp"], enabled: true }, + }) + }) + + test("reports unsupported settings and lossy conversions without their values", () => { + const secret = "do-not-log-credentials" + const result = ConfigV2Compat.lower({ + model: { providerID: "example", model: "model", variant: "high" }, + plugins: [{ package: "native-plugin", options: { token: secret } }], + providers: { example: { settings: { apiKey: secret } } }, + websearch: secret, + warming: true, + experimental: { portable_shell_scanner: true }, + agents: { reviewer: { request: { headers: { Authorization: secret } } } }, + mcp: { + servers: { + remote: { + type: "remote", + url: `https://example.com/?token=${secret}`, + oauth: { client_secret: secret }, + codemode: false, + timeout: { execution: 60000 }, + }, + }, + }, + lsp: { custom: { command: ["custom-lsp"] } }, + }) + + expect(result.diagnostics).toEqual( + expect.arrayContaining([ + expect.objectContaining({ kind: "unsupported", path: ["model", "variant"] }), + expect.objectContaining({ kind: "unsupported", path: ["plugins"] }), + expect.objectContaining({ kind: "unsupported", path: ["providers"] }), + expect.objectContaining({ kind: "unsupported", path: ["websearch"] }), + expect.objectContaining({ kind: "unsupported", path: ["warming"] }), + expect.objectContaining({ kind: "unsupported", path: ["experimental", "portable_shell_scanner"] }), + expect.objectContaining({ kind: "unsupported", path: ["agents", "reviewer", "request", "headers"] }), + expect.objectContaining({ kind: "unsupported", path: ["mcp", "servers", "remote", "codemode"] }), + expect.objectContaining({ kind: "unsupported", path: ["mcp", "servers", "remote", "timeout"] }), + expect.objectContaining({ kind: "unsupported", path: ["lsp", "custom"] }), + ]), + ) + expect(JSON.stringify(result.diagnostics)).not.toContain(secret) + }) + + test("reports conflicting forms while retaining the V1 value", () => { + const result = ConfigV2Compat.lower({ + snapshot: false, + snapshots: true, + command: { review: { template: "Legacy review" } }, + commands: { review: { template: "Native review" } }, + mcp: { + shared: { type: "local", command: ["legacy"] }, + servers: { shared: { type: "local", command: ["native"] } }, + }, + }) + const config = ConfigParse.schema(ConfigV1.Info, result.value, source) + + expect(config.snapshot).toBe(false) + expect(config.command?.review.template).toBe("Legacy review") + expect(config.mcp?.shared).toEqual({ type: "local", command: ["legacy"] }) + expect(result.diagnostics.filter((item) => item.kind === "conflict")).toHaveLength(3) + }) + + test("does not diagnose ordinary V1 configuration or reject invalid V1 roots early", () => { + expect(ConfigV2Compat.lower({ snapshot: false, mcp: { existing: { enabled: false } } }).diagnostics).toEqual([]) + expect(ConfigV2Compat.lower({ snapshot: false, snapshots: false }).diagnostics).toEqual([]) + const result = ConfigV2Compat.lower(null) + expect(result.value).toBeNull() + expect(() => ConfigParse.schema(ConfigV1.Info, result.value, source)).toThrow() + expect(() => lower({ snapshot: "invalid", snapshots: true })).toThrow() + }) + + test("keeps malformed MCP servers named servers and timeout for V1 validation", () => { + expect(() => lower({ mcp: { servers: { type: "local", command: "invalid" } } })).toThrow() + expect(() => lower({ mcp: { timeout: { type: "remote", url: 42 } } })).toThrow() + expect(() => lower({ mcp: { servers: { type: "bogus" } } })).toThrow() + expect(() => lower({ mcp: { servers: { type: 42 } } })).toThrow() + expect(() => lower({ mcp: { servers: { enabled: "false" } } })).toThrow() + }) + + test("rejects invalid V1 enablement when flat MCP entries include V2 fields", () => { + expect(() => + lower({ mcp: { invalid: { type: "local", command: ["legacy"], enabled: "false", codemode: false } } }), + ).toThrow("ConfigInvalidError") + }) + + test("does not repair malformed V1 containers or shadowed entries with V2 values", () => { + const cases = [ + { agent: null, agents: { reviewer: { system: "Native prompt" } } }, + { command: [], commands: { review: { template: "Native command" } } }, + { attachment: false, media: { image: { auto_resize: true } } }, + { experimental: null, mcp: { timeout: { catalog: 3000, execution: 3000 } } }, + { agent: { reviewer: 42 }, agents: { reviewer: { system: "Native prompt" } } }, + { command: { review: 42 }, commands: { review: { template: "Native command" } } }, + { mcp: { shared: 42, servers: { shared: { type: "local", command: ["native"] } } } }, + ] + cases.forEach((input) => expect(() => lower(input)).toThrow("ConfigInvalidError")) + }) + + test("keeps secrets out of invalid and conflict diagnostics", () => { + const secret = "secret-never-in-diagnostics" + const result = ConfigV2Compat.lower({ + commands: { malformed: { template: { token: secret } } }, + mcp: { + shared: { type: "remote", url: "https://example.com", headers: { Authorization: secret } }, + servers: { + shared: { type: "remote", url: "https://example.com", headers: { Authorization: `${secret}-changed` } }, + malformed: { type: "remote", url: `https://example.com?token=${secret}`, disabled: secret }, + }, + }, + }) + + expect(result.diagnostics).toEqual( + expect.arrayContaining([ + expect.objectContaining({ kind: "conflict", path: ["mcp", "servers", "shared"] }), + expect.objectContaining({ kind: "invalid", path: ["commands", "malformed"] }), + expect.objectContaining({ kind: "invalid", path: ["mcp", "servers", "malformed"] }), + ]), + ) + expect(JSON.stringify(result.diagnostics)).not.toContain(secret) + }) + + test("rejects any native permission field, including empty and malformed values", () => { + const cases = [ + [{ action: "shell", resource: "*", effect: "deny" }], + [ + { action: "read", resource: "*", effect: "allow" }, + { action: "*", resource: "*", effect: "deny" }, + { action: "read", resource: "public", effect: "allow" }, + ], + [], + null, + "secret-permission-value", + [{ action: "read", resource: "secret-permission-value", effect: "invalid" }], + ] + cases.forEach((permissions) => { + expect(() => lower({ username: "keep-me", permissions })).toThrow("ConfigInvalidError") + expect(() => lower({ permission: "deny", permissions })).toThrow("ConfigInvalidError") + }) + }) + + test("does not repair invalid legacy permissions with native rules", () => { + expect(() => lower({ permission: { read: "invalid" }, permissions: [] })).toThrow("ConfigInvalidError") + }) + + test("rejects native agent permissions before decoding or applying V1 precedence", () => { + const cases = [ + { agents: { reviewer: { system: "Review carefully", permissions: [{ action: "read" }] } } }, + { agents: { reviewer: { disabled: true, permissions: [] } } }, + { agent: { reviewer: { permission: "deny" } }, agents: { reviewer: { permissions: [] } } }, + { agents: { reviewer: { steps: "invalid", permissions: [] } } }, + { agent: { reviewer: { permissions: [] } } }, + { mode: { reviewer: { permissions: [] } } }, + ] + cases.forEach((input) => expect(() => lower(input)).toThrow("ConfigInvalidError")) + }) + + test("continues to support V1 permission rules", () => { + const config = lower({ + permission: { bash: "deny", "*": "ask", edit: "allow" }, + agent: { reviewer: { permission: { edit: "deny" } } }, + }) + expect(config.permission).toEqual({ bash: "deny", "*": "ask", edit: "allow" }) + expect(Object.keys(config.permission ?? {})).toEqual(["bash", "*", "edit"]) + expect(config.agent?.reviewer?.permission).toEqual({ edit: "deny" }) + }) + + test("does not sanitize malformed V1 fields before schema validation", () => { + expect(() => lower({ model: 42 })).toThrow() + expect(() => lower({ snapshot: "enabled" })).toThrow() + expect(() => lower({ mcp: { broken: { type: "local", command: "not-an-array" } } })).toThrow() + expect(() => lower({ experimental: { mcp_timeout: -1 } })).toThrow() + }) + + test("does not mutate the input or nested configuration objects", () => { + const input = { + model: { providerID: "anthropic", model: "claude-sonnet", variant: "fast" }, + snapshots: true, + skills: ["./skills", "https://example.com/skills"], + mcp: { + existing: { type: "local", command: ["existing-mcp"], enabled: false }, + servers: { + native: { + type: "remote", + url: "https://example.com/mcp", + disabled: true, + oauth: { client_id: "client" }, + timeout: { execution: 3000 }, + }, + }, + }, + agents: { reviewer: { model: "anthropic/claude-sonnet#thinking", disabled: true } }, + experimental: { subagent_depth: 2 }, + } + const original = structuredClone(input) + + lower(input) + + expect(input).toEqual(original) + }) +}) + +describe("V2 configuration loading", () => { + it.instance("logs compatibility diagnostics without writing the lowered projection", () => + Effect.gen(function* () { + const instance = yield* TestInstance + const fs = yield* FSUtil.Service + const file = path.join(instance.directory, "opencode.jsonc") + const text = + '{\n // Retain this comment\n "$schema": "https://opencode.ai/config.json",\n "plugins": ["native-only"]\n}\n' + yield* fs.writeWithDirs(file, text) + const messages: unknown[] = [] + const config = yield* Config.use.get().pipe( + Effect.provide( + Logger.layer([ + Logger.make((options) => { + messages.push(options.message) + }), + ]), + ), + ) + + expect(config.plugin).toEqual([]) + expect(messages).toContainEqual([ + "configuration compatibility diagnostic", + expect.objectContaining({ source: file, kind: "unsupported", path: ["plugins"] }), + ]) + expect(yield* fs.readFileString(file)).toBe(text) + }), + ) + + it.instance("loads native V2 configuration through the V1 Config service", () => + Effect.gen(function* () { + const instance = yield* TestInstance + const fs = yield* FSUtil.Service + yield* fs.writeWithDirs( + path.join(instance.directory, "opencode.json"), + JSON.stringify({ + $schema: "https://opencode.ai/config.json", + model: { providerID: "anthropic", model: "claude-sonnet", variant: "fast" }, + snapshots: false, + skills: ["./skills", "https://example.com/skills"], + mcp: { + timeout: { catalog: 9000, execution: 9000 }, + servers: { + native: { type: "remote", url: "https://native.example.com/mcp", disabled: false }, + }, + }, + agents: { + reviewer: { + model: "anthropic/claude-sonnet#thinking", + system: "Review carefully.", + }, + }, + commands: { + review: { + template: "Review $ARGUMENTS", + model: { providerID: "anthropic", model: "claude-sonnet", variant: "thinking" }, + }, + }, + experimental: { subagent_depth: 2 }, + }), + ) + + const config = yield* Config.use.get() + + expect(config.model).toBe("anthropic/claude-sonnet") + expect(config.snapshot).toBe(false) + expect(config.skills).toEqual({ paths: ["./skills"], urls: ["https://example.com/skills"] }) + expect(config.mcp?.native).toEqual({ type: "remote", url: "https://native.example.com/mcp", enabled: true }) + expect(config.experimental?.mcp_timeout).toBe(9000) + expect(config.permission).toBeUndefined() + expect(config.agent?.reviewer).toMatchObject({ + model: "anthropic/claude-sonnet", + variant: "thinking", + prompt: "Review carefully.", + permission: {}, + }) + expect(config.command?.review).toMatchObject({ + template: "Review $ARGUMENTS", + model: "anthropic/claude-sonnet", + variant: "thinking", + }) + expect(config.subagent_depth).toBe(2) + }), + ) + + it.instance("keeps legacy TUI normalization when loading a mixed V1 and V2 document", () => + Effect.gen(function* () { + const instance = yield* TestInstance + const fs = yield* FSUtil.Service + yield* fs.writeWithDirs( + path.join(instance.directory, "opencode.json"), + JSON.stringify({ + $schema: "https://opencode.ai/config.json", + model: { providerID: "openai", model: "gpt-4.1" }, + theme: "legacy", + keybinds: { leader: "ctrl+x" }, + tui: { scroll_speed: 4 }, + mcp: { + legacy: { enabled: false }, + servers: { native: { type: "local", command: ["native-mcp"] } }, + }, + }), + ) + + const config = yield* Config.use.get() + + expect(config.model).toBe("openai/gpt-4.1") + expect(config.mcp?.legacy).toEqual({ enabled: false }) + expect(config.mcp?.native).toEqual({ type: "local", command: ["native-mcp"], enabled: true }) + expect(config).not.toHaveProperty("theme") + expect(config).not.toHaveProperty("keybinds") + expect(config).not.toHaveProperty("tui") + }), + ) +}) From c77100a40c16a1c7c39115023ccd6f284b476c77 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Thu, 27 Aug 2026 20:05:43 +0000 Subject: [PATCH 059/185] chore: generate --- .../agents-commands-precedence-input.jsonc | 10 ++++---- .../v2-compat/read/agents-input.jsonc | 6 ++--- .../v2-compat/read/commands-input.jsonc | 6 ++--- .../v2-compat/read/ignored-fields-input.jsonc | 2 +- .../fixtures/v2-compat/read/lsp-input.jsonc | 4 ++-- .../fixtures/v2-compat/read/lsp-output.json | 13 +++------- .../v2-compat/read/mcp-enablement-input.jsonc | 6 ++--- .../v2-compat/read/mcp-enablement-output.json | 24 +++++-------------- .../v2-compat/read/mcp-merge-output.json | 8 ++----- .../v2-compat/read/mcp-oauth-input.jsonc | 10 ++++---- .../read/mcp-partial-timeout-input.jsonc | 2 +- .../read/mcp-reserved-enabled-input.jsonc | 4 ++-- .../v2-compat/read/mcp-reserved-input.jsonc | 4 ++-- .../v2-compat/read/mcp-reserved-output.json | 4 +--- .../v2-compat/read/mcp-timeouts-input.jsonc | 8 +++---- .../v2-compat/read/mcp-timeouts-output.json | 16 ++++--------- .../v2-compat/read/model-object-input.jsonc | 2 +- .../v2-compat/read/model-string-input.jsonc | 2 +- .../v2-compat/read/model-variant-input.jsonc | 2 +- .../v2-compat/read/settings-input.jsonc | 6 ++--- .../read/settings-precedence-input.jsonc | 4 ++-- .../v2-compat/read/skills-input.jsonc | 2 +- .../v2-compat/read/skills-output.json | 10 ++------ .../update-global/clear-shell-input.jsonc | 2 +- .../update-global/clear-shell-output.jsonc | 2 +- .../preserve-v2-json-normalized.json | 4 +--- .../preserve-v2-json-output.json | 6 ++--- .../preserve-v2-jsonc-normalized.json | 4 +--- .../update-global/v1-overrides-output.json | 6 ++--- .../preserve-v2-normalized.json | 4 +--- .../update-project/preserve-v2-output.json | 6 ++--- .../update-project/v1-overrides-output.json | 6 ++--- 32 files changed, 71 insertions(+), 124 deletions(-) diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/agents-commands-precedence-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/agents-commands-precedence-input.jsonc index bdef25da81b9..7315106cdce2 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/agents-commands-precedence-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/agents-commands-precedence-input.jsonc @@ -1,17 +1,17 @@ { "permission": { "bash": "deny", "*": "ask", "edit": "deny" }, "agent": { - "reviewer": { "prompt": "Legacy prompt", "permission": { "bash": "deny", "edit": "deny" } } + "reviewer": { "prompt": "Legacy prompt", "permission": { "bash": "deny", "edit": "deny" } }, }, "agents": { "reviewer": { - "system": "Native prompt" + "system": "Native prompt", }, - "native": {} + "native": {}, }, "command": { "review": { "template": "Legacy review" } }, "commands": { "review": { "template": "Native review" }, - "modern": { "template": "Native command" } - } + "modern": { "template": "Native command" }, + }, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/agents-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/agents-input.jsonc index e6d51830e744..abd03aba246a 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/agents-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/agents-input.jsonc @@ -8,8 +8,8 @@ "hidden": true, "color": "#123abc", "steps": 4, - "disabled": true + "disabled": true, }, - "quick": { "model": "openai/gpt-4.1#fast", "disabled": false } - } + "quick": { "model": "openai/gpt-4.1#fast", "disabled": false }, + }, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/commands-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/commands-input.jsonc index e8502d5b2f80..88e433e6d5c0 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/commands-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/commands-input.jsonc @@ -5,8 +5,8 @@ "description": "Review code", "agent": "reviewer", "model": { "providerID": "anthropic", "model": "claude-sonnet", "variant": "thinking" }, - "subtask": true + "subtask": true, }, - "quick": { "template": "Quick review", "model": "openai/gpt-4.1#fast" } - } + "quick": { "template": "Quick review", "model": "openai/gpt-4.1#fast" }, + }, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/ignored-fields-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/ignored-fields-input.jsonc index 5981ee463e1a..1f054f1cf2bf 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/ignored-fields-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/ignored-fields-input.jsonc @@ -4,5 +4,5 @@ "policies": [{ "action": "provider.use", "effect": "deny", "resource": "openai" }], "websearch": "native-only", "warming": true, - "experimental": { "portable_shell_scanner": true } + "experimental": { "portable_shell_scanner": true }, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/lsp-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/lsp-input.jsonc index cc8689b8f04d..33f94f2be1e1 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/lsp-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/lsp-input.jsonc @@ -3,6 +3,6 @@ "typescript": { "command": ["typescript-language-server", "--stdio"] }, "compatible": { "command": ["custom-lsp"], "extensions": [".custom"] }, "incompatible": { "command": ["incompatible-lsp"] }, - "disabled": { "disabled": true } - } + "disabled": { "disabled": true }, + }, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/lsp-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/lsp-output.json index 8e0de3f7841c..0f2139331635 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/lsp-output.json +++ b/packages/opencode/test/config/fixtures/v2-compat/read/lsp-output.json @@ -1,18 +1,11 @@ { "lsp": { "typescript": { - "command": [ - "typescript-language-server", - "--stdio" - ] + "command": ["typescript-language-server", "--stdio"] }, "compatible": { - "command": [ - "custom-lsp" - ], - "extensions": [ - ".custom" - ] + "command": ["custom-lsp"], + "extensions": [".custom"] }, "disabled": { "disabled": true diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-input.jsonc index d8970e3e26aa..c0f2b0da3ec9 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-input.jsonc @@ -9,7 +9,7 @@ "type": { "type": "local", "command": ["type-mcp"] }, "enabled": { "type": "remote", "url": "https://example.com/mcp" }, "explicit-enabled": { "type": "local", "command": ["enabled-mcp"], "disabled": false }, - "explicit-disabled": { "type": "local", "command": ["disabled-mcp"], "disabled": true } - } - } + "explicit-disabled": { "type": "local", "command": ["disabled-mcp"], "disabled": true }, + }, + }, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-output.json index 9f5d400aef53..4ae15ca1fb8b 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-output.json +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-enablement-output.json @@ -8,30 +8,22 @@ }, "existing": { "type": "local", - "command": [ - "existing-mcp" - ], + "command": ["existing-mcp"], "enabled": true }, "flat-disabled": { "type": "local", - "command": [ - "legacy" - ], + "command": ["legacy"], "enabled": false }, "flat-enabled": { "type": "local", - "command": [ - "legacy" - ], + "command": ["legacy"], "enabled": true }, "type": { "type": "local", - "command": [ - "type-mcp" - ], + "command": ["type-mcp"], "enabled": true }, "enabled": { @@ -41,16 +33,12 @@ }, "explicit-enabled": { "type": "local", - "command": [ - "enabled-mcp" - ], + "command": ["enabled-mcp"], "enabled": true }, "explicit-disabled": { "type": "local", - "command": [ - "disabled-mcp" - ], + "command": ["disabled-mcp"], "enabled": false } } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-merge-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-merge-output.json index d425be1f475f..8ddce438bfa6 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-merge-output.json +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-merge-output.json @@ -2,9 +2,7 @@ "mcp": { "legacy": { "type": "local", - "command": [ - "legacy-mcp" - ], + "command": ["legacy-mcp"], "enabled": false }, "shared": { @@ -13,9 +11,7 @@ }, "native": { "type": "local", - "command": [ - "native-mcp" - ], + "command": ["native-mcp"], "enabled": false } } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-oauth-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-oauth-input.jsonc index 4bb5e1605aae..bed851abb624 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-oauth-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-oauth-input.jsonc @@ -10,10 +10,10 @@ "client_secret": "secret", "scope": "read write", "callback_port": 19877, - "redirect_uri": "http://127.0.0.1:19877/callback" - } + "redirect_uri": "http://127.0.0.1:19877/callback", + }, }, - "anonymous": { "type": "remote", "url": "https://anonymous.example.com/mcp", "oauth": false } - } - } + "anonymous": { "type": "remote", "url": "https://anonymous.example.com/mcp", "oauth": false }, + }, + }, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-partial-timeout-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-partial-timeout-input.jsonc index 8257cca21be0..001199938dc8 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-partial-timeout-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-partial-timeout-input.jsonc @@ -1,3 +1,3 @@ { - "mcp": { "timeout": { "startup": 1000, "catalog": 2000 } } + "mcp": { "timeout": { "startup": 1000, "catalog": 2000 } }, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-enabled-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-enabled-input.jsonc index e4e0a7303316..02285ad6d12a 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-enabled-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-enabled-input.jsonc @@ -2,6 +2,6 @@ // An object-valued type must not hide a flat enabled-only server. "mcp": { "servers": { "type": {}, "enabled": false }, - "timeout": { "enabled": true } - } + "timeout": { "enabled": true }, + }, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-input.jsonc index b825f07c3c6f..df1af73c0e66 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-input.jsonc @@ -1,6 +1,6 @@ { "mcp": { "servers": { "type": "local", "command": ["server-named-servers"] }, - "timeout": { "type": "remote", "url": "https://timeout.example.com/mcp" } - } + "timeout": { "type": "remote", "url": "https://timeout.example.com/mcp" }, + }, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-output.json index 0f5a30b387c7..6e69bb676faf 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-output.json +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-reserved-output.json @@ -2,9 +2,7 @@ "mcp": { "servers": { "type": "local", - "command": [ - "server-named-servers" - ] + "command": ["server-named-servers"] }, "timeout": { "type": "remote", diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-input.jsonc index 1a18254da1ce..44541bbe2448 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-input.jsonc @@ -8,8 +8,8 @@ "startup": { "type": "local", "command": ["startup-mcp"], - "timeout": { "startup": 1000, "catalog": 3000, "execution": 3000 } - } - } - } + "timeout": { "startup": 1000, "catalog": 3000, "execution": 3000 }, + }, + }, + }, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-output.json index 41b9b7cd9bb0..7f9bc3b0aa3a 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-output.json +++ b/packages/opencode/test/config/fixtures/v2-compat/read/mcp-timeouts-output.json @@ -2,31 +2,23 @@ "mcp": { "safe": { "type": "local", - "command": [ - "safe-mcp" - ], + "command": ["safe-mcp"], "enabled": true, "timeout": 3000 }, "unsafe": { "type": "local", - "command": [ - "unsafe-mcp" - ], + "command": ["unsafe-mcp"], "enabled": true }, "partial": { "type": "local", - "command": [ - "partial-mcp" - ], + "command": ["partial-mcp"], "enabled": true }, "startup": { "type": "local", - "command": [ - "startup-mcp" - ], + "command": ["startup-mcp"], "enabled": true } }, diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/model-object-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/model-object-input.jsonc index f526f0cb0cb9..1fe39335cb63 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/model-object-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/model-object-input.jsonc @@ -1,4 +1,4 @@ { "$schema": "https://opencode.ai/config.json", - "model": { "providerID": "anthropic", "model": "claude-sonnet", "variant": "fast" } + "model": { "providerID": "anthropic", "model": "claude-sonnet", "variant": "fast" }, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/model-string-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/model-string-input.jsonc index 1ef2530d9ffe..30d1ab9b867b 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/model-string-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/model-string-input.jsonc @@ -1,4 +1,4 @@ { "model": "anthropic/claude-sonnet", - "permission": "deny" + "permission": "deny", } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/model-variant-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/model-variant-input.jsonc index ac0b39dfe058..354a71140470 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/model-variant-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/model-variant-input.jsonc @@ -1,3 +1,3 @@ { - "model": "anthropic/claude-sonnet#fast" + "model": "anthropic/claude-sonnet#fast", } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/settings-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/settings-input.jsonc index 94bdbdee15f5..bde7a6580f9a 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/settings-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/settings-input.jsonc @@ -1,12 +1,12 @@ { "snapshots": false, "media": { - "image": { "auto_resize": false, "max_width": 1920, "max_height": 1080, "max_base64_bytes": 4096 } + "image": { "auto_resize": false, "max_width": 1920, "max_height": 1080, "max_base64_bytes": 4096 }, }, "compaction": { "auto": false, "keep": { "tokens": 12000 }, "buffer": 2048 }, "experimental": { "subagent_depth": 3, "policies": [{ "effect": "deny", "action": "provider.use", "resource": "openai" }], - "batch_tool": true - } + "batch_tool": true, + }, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/settings-precedence-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/settings-precedence-input.jsonc index d43042091edd..4f4de052af4d 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/settings-precedence-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/settings-precedence-input.jsonc @@ -9,7 +9,7 @@ "preserve_recent_tokens": 100, "keep": { "tokens": 200 }, "reserved": 300, - "buffer": 400 + "buffer": 400, }, - "mcp": { "timeout": { "catalog": 8000, "execution": 8000 } } + "mcp": { "timeout": { "catalog": 8000, "execution": 8000 } }, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/skills-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/read/skills-input.jsonc index ab005d62217a..c5156eb03a96 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/skills-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/read/skills-input.jsonc @@ -1,3 +1,3 @@ { - "skills": ["./skills", "https://example.com/skills", "/opt/skills", "http://localhost:8080/skills"] + "skills": ["./skills", "https://example.com/skills", "/opt/skills", "http://localhost:8080/skills"], } diff --git a/packages/opencode/test/config/fixtures/v2-compat/read/skills-output.json b/packages/opencode/test/config/fixtures/v2-compat/read/skills-output.json index 1486ecd7c245..169bc6fe0a79 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/read/skills-output.json +++ b/packages/opencode/test/config/fixtures/v2-compat/read/skills-output.json @@ -1,12 +1,6 @@ { "skills": { - "paths": [ - "./skills", - "/opt/skills" - ], - "urls": [ - "https://example.com/skills", - "http://localhost:8080/skills" - ] + "paths": ["./skills", "/opt/skills"], + "urls": ["https://example.com/skills", "http://localhost:8080/skills"] } } diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-input.jsonc b/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-input.jsonc index fa3ea0b6c527..010758720386 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-input.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-input.jsonc @@ -3,5 +3,5 @@ // Empty shell in a global update removes the setting. "shell": "bash", "model": { "providerID": "example", "model": "demo" }, - "snapshots": false + "snapshots": false, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-output.jsonc b/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-output.jsonc index d665f8127d70..a347fd0ac546 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-output.jsonc +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/clear-shell-output.jsonc @@ -1,5 +1,5 @@ { "$schema": "https://opencode.ai/config.json", "model": { "providerID": "example", "model": "demo" }, - "snapshots": false + "snapshots": false, } diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-normalized.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-normalized.json index 57bd3589da6e..a2c3189715ec 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-normalized.json +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-normalized.json @@ -4,9 +4,7 @@ "mcp": { "modern": { "type": "local", - "command": [ - "modern-mcp" - ], + "command": ["modern-mcp"], "enabled": false } } diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-output.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-output.json index 9a2ce8d385f9..2ac6239a03ab 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-output.json +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-json-output.json @@ -5,9 +5,7 @@ "servers": { "modern": { "type": "local", - "command": [ - "modern-mcp" - ], + "command": ["modern-mcp"], "disabled": true } } @@ -19,4 +17,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-normalized.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-normalized.json index 57bd3589da6e..a2c3189715ec 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-normalized.json +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/preserve-v2-jsonc-normalized.json @@ -4,9 +4,7 @@ "mcp": { "modern": { "type": "local", - "command": [ - "modern-mcp" - ], + "command": ["modern-mcp"], "enabled": false } } diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-output.json b/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-output.json index 13a7ef229abf..1edbbdddda2b 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-output.json +++ b/packages/opencode/test/config/fixtures/v2-compat/update-global/v1-overrides-output.json @@ -10,9 +10,7 @@ "servers": { "modern": { "type": "local", - "command": [ - "modern-mcp" - ], + "command": ["modern-mcp"], "disabled": false } }, @@ -31,4 +29,4 @@ "permission": {} } } -} \ No newline at end of file +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-normalized.json b/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-normalized.json index 57bd3589da6e..a2c3189715ec 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-normalized.json +++ b/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-normalized.json @@ -4,9 +4,7 @@ "mcp": { "modern": { "type": "local", - "command": [ - "modern-mcp" - ], + "command": ["modern-mcp"], "enabled": false } } diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-output.json b/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-output.json index 9a2ce8d385f9..2ac6239a03ab 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-output.json +++ b/packages/opencode/test/config/fixtures/v2-compat/update-project/preserve-v2-output.json @@ -5,9 +5,7 @@ "servers": { "modern": { "type": "local", - "command": [ - "modern-mcp" - ], + "command": ["modern-mcp"], "disabled": true } } @@ -19,4 +17,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-output.json b/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-output.json index ce2eb0dadc00..38c069d5b56b 100644 --- a/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-output.json +++ b/packages/opencode/test/config/fixtures/v2-compat/update-project/v1-overrides-output.json @@ -10,9 +10,7 @@ "servers": { "modern": { "type": "local", - "command": [ - "modern-mcp" - ], + "command": ["modern-mcp"], "disabled": false } }, @@ -29,4 +27,4 @@ } }, "shell": "" -} \ No newline at end of file +} From 517ee736b31876e6fc7df57307e78bf790b135a7 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Fri, 28 Aug 2026 00:48:48 +0200 Subject: [PATCH 060/185] fix(provider): filter unreplayable Bedrock reasoning before caching (#45769) Co-authored-by: neriousy <34747899+neriousy@users.noreply.github.com> --- packages/opencode/src/provider/transform.ts | 9 +- .../opencode/test/provider/transform.test.ts | 131 +++++++++++++++++- 2 files changed, 134 insertions(+), 6 deletions(-) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 0667fc2eb098..28a5beb9abac 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -208,11 +208,10 @@ function normalizeMessages( return part.text !== "" } if (part.type === "reasoning") { - return ( - part.text.trim().length > 0 || - part.providerOptions?.bedrock?.signature != null || - part.providerOptions?.bedrock?.redactedData != null - ) + // Match what the SDK can replay before assigning cache points. Otherwise + // unsigned reasoning can leave an empty or cache-point-only message. + const metadata = part.providerOptions?.[model.providerID] ?? part.providerOptions?.bedrock + return metadata?.signature != null || metadata?.redactedContent != null || metadata?.redactedData != null } return true }) diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index 97f0de281483..9245e3a57d2c 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -5,7 +5,8 @@ import { LLMRequestPrep } from "@/session/llm/request" import { ProviderV2 } from "@opencode-ai/core/provider" import { ModelV2 } from "@opencode-ai/core/model" import { ModelsDev } from "@opencode-ai/core/models-dev" -import { jsonSchema } from "ai" +import { generateText, jsonSchema, type ModelMessage } from "ai" +import { createAmazonBedrock } from "@ai-sdk/amazon-bedrock" describe("ProviderTransform.options - setCacheKey", () => { const sessionID = "test-session-123" @@ -2362,6 +2363,134 @@ describe("ProviderTransform.message - anthropic empty content filtering", () => expect(result[1].content[0]).toEqual({ type: "text", text: "Answer" }) }) + describe("Bedrock reasoning replay", () => { + const model = { + ...anthropicModel, + id: "amazon-bedrock/anthropic.claude-opus-4-6", + providerID: "amazon-bedrock", + api: { + id: "anthropic.claude-opus-4-6", + url: "https://bedrock-runtime.us-east-1.amazonaws.com", + npm: "@ai-sdk/amazon-bedrock", + }, + } + + for (const cached of [false, true]) { + test(`omits unsigned reasoning before SDK conversion (caching: ${cached})`, async () => { + const selected = cached + ? model + : { ...model, id: "amazon-bedrock/openai.gpt-oss-120b", api: { ...model.api, id: "openai.gpt-oss-120b" } } + const messages = ProviderTransform.message( + [ + { role: "user", content: "Think" }, + { role: "assistant", content: [{ type: "text", text: "Earlier answer" }] }, + { + role: "assistant", + content: [ + { type: "reasoning", text: "Partial thought" }, + { type: "text", text: "" }, + ], + }, + { role: "user", content: "Continue" }, + ], + selected, + {}, + ) + expect(messages.map((message) => message.role)).toEqual(["user", "assistant", "user"]) + expect(messages[1].providerOptions?.bedrock?.cachePoint).toEqual(cached ? { type: "default" } : undefined) + const provider = createAmazonBedrock({ + apiKey: "test-key", + region: "us-east-1", + fetch: Object.assign( + async (...args: Parameters) => { + const body = JSON.parse(String(args[1]?.body)) + expect(body.messages).toEqual([ + { role: "user", content: [{ text: "Think" }] }, + { + role: "assistant", + content: [{ text: "Earlier answer" }, ...(cached ? [{ cachePoint: { type: "default" } }] : [])], + }, + { + role: "user", + content: [{ text: "Continue" }, ...(cached ? [{ cachePoint: { type: "default" } }] : [])], + }, + ]) + return Response.json({ + output: { message: { role: "assistant", content: [{ text: "Recovered" }] } }, + stopReason: "end_turn", + usage: { inputTokens: 1, outputTokens: 1, totalTokens: 2 }, + }) + }, + { preconnect: () => undefined }, + ), + }) + const result = await generateText({ model: provider(selected.api.id), messages, maxRetries: 0 }) + expect(result.text).toBe("Recovered") + }) + } + + for (const namespace of ["bedrock", "amazon-bedrock", "custom-bedrock"]) { + for (const field of ["signature", "redactedContent", "redactedData"]) { + test(`preserves ${namespace}.${field} on empty reasoning`, () => { + const result = ProviderTransform.message( + [ + { + role: "assistant", + content: [{ type: "reasoning", text: "", providerOptions: { [namespace]: { [field]: "opaque" } } }], + }, + ], + namespace === "custom-bedrock" ? { ...model, providerID: namespace } : model, + {}, + ) + expect(result).toHaveLength(1) + expect(result[0].content).toEqual([ + { type: "reasoning", text: "", providerOptions: { bedrock: { [field]: "opaque" } } }, + ]) + }) + } + } + + test("uses stored provider metadata when it will overwrite the SDK namespace", () => { + const result = ProviderTransform.message( + [ + { + role: "assistant", + content: [ + { + type: "reasoning", + text: "Partial thought", + providerOptions: { "amazon-bedrock": {}, bedrock: { signature: "overwritten" } }, + }, + ], + }, + ], + model, + {}, + ) + expect(result).toEqual([]) + }) + + test("keeps text and tool calls next to unsigned reasoning", () => { + const content: ModelMessage["content"] = [ + { type: "text", text: "Answer" }, + { type: "tool-call", toolCallId: "call_1", toolName: "lookup", input: {} }, + ] + const result = ProviderTransform.message( + [{ role: "assistant", content: [{ type: "reasoning", text: "Partial thought" }, ...content] }], + model, + {}, + ) + expect(result).toHaveLength(1) + expect(result[0].content).toEqual(content) + }) + + test("does not remove unsigned reasoning for other providers", () => { + const content: ModelMessage["content"] = [{ type: "reasoning", text: "Partial thought" }] + const result = ProviderTransform.message([{ role: "assistant", content }], anthropicModel, {}) + expect(result[0].content).toEqual(content) + }) + }) + test("does not filter for non-anthropic providers", () => { const openaiModel = { ...anthropicModel, From 790fb5b86f3a5bfea919d426374f9086af4094bd Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Fri, 28 Aug 2026 01:50:15 +0200 Subject: [PATCH 061/185] feat(opencode): support Azure CLI authentication (#45079) Co-authored-by: neriousy <34747899+neriousy@users.noreply.github.com> --- packages/opencode/src/plugin/azure.ts | 231 ++++++++++- packages/opencode/src/provider/provider.ts | 1 + packages/opencode/test/plugin/azure.test.ts | 431 ++++++++++++++++++++ packages/web/src/content/docs/providers.mdx | 33 ++ 4 files changed, 693 insertions(+), 3 deletions(-) create mode 100644 packages/opencode/test/plugin/azure.test.ts diff --git a/packages/opencode/src/plugin/azure.ts b/packages/opencode/src/plugin/azure.ts index 62792b3bd27b..8dd893a0ebd4 100644 --- a/packages/opencode/src/plugin/azure.ts +++ b/packages/opencode/src/plugin/azure.ts @@ -1,6 +1,98 @@ -import type { Hooks, PluginInput } from "@opencode-ai/plugin" +import { readFile } from "node:fs/promises" +import { homedir } from "node:os" +import { join } from "node:path" +import { InstallationVersion } from "@opencode-ai/core/installation/version" +import type { Hooks } from "@opencode-ai/plugin" +import type { Provider } from "@opencode-ai/sdk/v2" +import { Effect, Schema } from "effect" +import { OAUTH_DUMMY_KEY } from "../auth" + +const AZURE_COGNITIVE_SERVICES_SCOPE = "https://cognitiveservices.azure.com/.default" +const AZURE_FOUNDRY_SCOPE = "https://ai.azure.com/.default" +const AZURE_TOKEN_REFRESH_BUFFER = 60_000 + +const AzureCliToken = Schema.Struct({ + accessToken: Schema.NonEmptyString, + expires_on: Schema.optional(Schema.Number), + expiresOn: Schema.optional(Schema.NonEmptyString), +}) +const decodeAzureCliToken = Schema.decodeUnknownPromise(AzureCliToken) +const decodeAzureProfile = Schema.decodeUnknownPromise( + Schema.fromJsonString(Schema.Struct({ subscriptions: Schema.Array(Schema.Unknown) })), +) + +const decodeAzureAccounts = Schema.decodeUnknownPromise( + Schema.Array( + Schema.Struct({ + name: Schema.NonEmptyString, + resourceGroup: Schema.NonEmptyString, + }), + ), +) + +const decodeAzureDeployments = Schema.decodeUnknownPromise( + Schema.Array( + Schema.Struct({ + name: Schema.NonEmptyString, + properties: Schema.Struct({ + model: Schema.Struct({ + name: Schema.NonEmptyString, + }), + provisioningState: Schema.NonEmptyString, + }), + }), + ), +) + +type AzureCommand = { + quiet(): AzureCommand + json(): Promise +} + +type AzureShell = (strings: TemplateStringsArray, ...values: string[]) => AzureCommand +type AzureAccount = { readonly name: string; readonly resourceGroup: string } + +export async function AzureAuthPlugin(input: { $: AzureShell }): Promise { + const available = Boolean(Bun.which("az", { PATH: process.env.PATH })) + // Avoid launching Azure CLI on unrelated commands just because the executable is installed. + const signedIn = available + ? await readFile(join(process.env.AZURE_CONFIG_DIR ?? join(homedir(), ".azure"), "azureProfile.json"), "utf8") + .then((text) => decodeAzureProfile(text.replace(/^\uFEFF/, ""))) + .then((profile) => profile.subscriptions.length > 0) + .catch(() => false) + : false + const accounts = + !process.env.AZURE_RESOURCE_NAME && !process.env.AZURE_RESOURCE_GROUP && signedIn + ? await input.$`az cognitiveservices account list --output json --only-show-errors` + .quiet() + .json() + .then(decodeAzureAccounts) + .catch(() => []) + : [] + return createAzureAuthHooks(input.$, fetch, accounts, available) +} + +export function createAzureAuthHooks( + shell: AzureShell, + request: (input: RequestInfo | URL, init?: RequestInit) => Promise = fetch, + accounts: readonly AzureAccount[] = [], + available = true, +): Hooks { + const tokens = new Map() + async function token(scope: string) { + const cached = tokens.get(scope) + if (cached && cached.expires - Date.now() > AZURE_TOKEN_REFRESH_BUFFER) return cached.token + + const result = await decodeAzureCliToken( + await shell`az account get-access-token --scope ${scope} --output json`.quiet().json(), + ) + const expires = result.expires_on !== undefined ? result.expires_on * 1000 : Date.parse(result.expiresOn ?? "") + if (!Number.isFinite(expires)) throw new Error("Azure CLI returned an invalid token expiration") + const refreshed = { token: result.accessToken, expires } + tokens.set(scope, refreshed) + return refreshed.token + } -export async function AzureAuthPlugin(_input: PluginInput): Promise { const prompts = [] if (!process.env.AZURE_RESOURCE_NAME) { prompts.push({ @@ -10,17 +102,150 @@ export async function AzureAuthPlugin(_input: PluginInput): Promise { placeholder: "e.g. my-models", }) } + const oauthPrompts = + accounts.length > 0 && !process.env.AZURE_RESOURCE_NAME + ? [ + { + type: "select" as const, + key: "resourceSelection", + message: "Select Azure resource", + options: [ + ...accounts.map((account) => ({ + label: account.name, + value: account.name, + hint: account.resourceGroup, + })), + { label: "Enter another resource name", value: "__manual__" }, + ], + }, + { + type: "text" as const, + key: "resourceName", + message: "Enter Azure Resource Name", + placeholder: "e.g. my-models", + when: { key: "resourceSelection", op: "eq" as const, value: "__manual__" }, + }, + ] + : prompts - return { + const hooks: Hooks = { + provider: { + id: "azure", + async models(provider, context) { + if (context.auth?.type !== "oauth") return provider.models + const resource = context.auth.accountId + if (!resource) return {} + return discoverAzureModels(provider.models, resource, shell).catch((error: unknown) => { + Effect.runSync( + Effect.logWarning("Azure model discovery failed", { + resource, + error: error instanceof Error ? error.message : String(error), + }), + ) + return provider.models + }) + }, + }, auth: { provider: "azure", + async loader(getAuth) { + if ((await getAuth()).type !== "oauth") return {} + + return { + apiKey: OAUTH_DUMMY_KEY, + async fetch(input: RequestInfo | URL, init?: RequestInit) { + const headers = new Headers(input instanceof Request ? input.headers : undefined) + new Headers(init?.headers).forEach((value, key) => headers.set(key, value)) + headers.delete("api-key") + headers.delete("x-api-key") + headers.set("authorization", `Bearer ${await token(scopeForRequest(input))}`) + headers.set("User-Agent", `opencode/${InstallationVersion}`) + return request(input, { ...init, headers }) + }, + } + }, methods: [ { type: "api", label: "API key", prompts, }, + { + type: "oauth", + label: "Microsoft Entra ID (Azure CLI)", + prompts: oauthPrompts, + async authorize(inputs) { + return { + url: "", + instructions: "Sign in with `az login` before continuing.", + method: "auto", + callback: async () => { + const resourceName = + inputs?.resourceName ?? + (inputs?.resourceSelection === "__manual__" ? undefined : inputs?.resourceSelection) ?? + process.env.AZURE_RESOURCE_NAME + if (!resourceName) throw new Error("Azure Resource Name is required") + + await token(AZURE_COGNITIVE_SERVICES_SCOPE) + return { + type: "success", + access: OAUTH_DUMMY_KEY, + refresh: OAUTH_DUMMY_KEY, + expires: Date.now() + 365 * 24 * 60 * 60 * 1000, + accountId: resourceName, + } + }, + } + }, + }, ], }, } + if (!available && hooks.auth) hooks.auth.methods = hooks.auth.methods.filter((method) => method.type !== "oauth") + return hooks +} + +async function discoverAzureModels(models: Provider["models"], resourceName: string, shell: AzureShell) { + const resourceGroup = process.env.AZURE_RESOURCE_GROUP + const account = resourceGroup + ? { name: resourceName, resourceGroup } + : ( + await decodeAzureAccounts( + await shell`az cognitiveservices account list --output json --only-show-errors`.quiet().json(), + ) + ).find((account) => account.name.toLowerCase() === resourceName.toLowerCase()) + if (!account) throw new Error(`Azure resource "${resourceName}" was not found in the active subscription`) + + const deployments = await decodeAzureDeployments( + await shell`az cognitiveservices account deployment list --name ${account.name} --resource-group ${account.resourceGroup} --output json --only-show-errors` + .quiet() + .json(), + ) + const found = new Map() + deployments.forEach((deployment) => { + if (deployment.properties.provisioningState !== "Succeeded") return + const modelID = Object.keys(models).find( + (modelID) => modelID.toLowerCase() === deployment.properties.model.name.toLowerCase(), + ) + if (!modelID) return + const id = found.has(modelID) ? deployment.name : modelID + found.set(id, { + ...models[modelID], + id, + name: id === modelID ? models[modelID].name : `${models[modelID].name} (${deployment.name})`, + api: { + ...models[modelID].api, + id: deployment.name, + }, + }) + }) + return Object.fromEntries(found) +} + +function scopeForRequest(input: RequestInfo | URL) { + const url = new URL(input instanceof Request ? input.url : input) + if (url.hostname.endsWith(".services.ai.azure.com") && !url.pathname.startsWith("/models")) { + return AZURE_FOUNDRY_SCOPE + } + return AZURE_COGNITIVE_SERVICES_SCOPE } diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 0f8cbd23f775..b5980f15873b 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -250,6 +250,7 @@ function custom(dep: CustomDep): Record { return [ provider.options?.resourceName, auth?.type === "api" ? auth.metadata?.resourceName : undefined, + auth?.type === "oauth" ? auth.accountId : undefined, env["AZURE_RESOURCE_NAME"], ].find((name) => typeof name === "string" && name.trim() !== "") }) diff --git a/packages/opencode/test/plugin/azure.test.ts b/packages/opencode/test/plugin/azure.test.ts new file mode 100644 index 000000000000..efb4c94f4d3a --- /dev/null +++ b/packages/opencode/test/plugin/azure.test.ts @@ -0,0 +1,431 @@ +import { afterEach, describe, expect, test } from "bun:test" +import { chmod } from "node:fs/promises" +import path from "node:path" +import { tmpdir } from "../fixture/fixture" +import type { Hooks } from "@opencode-ai/plugin" +import type { Auth, Provider } from "@opencode-ai/sdk/v2" +import { OAUTH_DUMMY_KEY } from "../../src/auth" +import { AzureAuthPlugin, createAzureAuthHooks } from "../../src/plugin/azure" + +const resourceName = process.env.AZURE_RESOURCE_NAME +const resourceGroup = process.env.AZURE_RESOURCE_GROUP +const azureConfig = process.env.AZURE_CONFIG_DIR +const originalPath = process.env.PATH + +afterEach(() => { + if (resourceName === undefined) delete process.env.AZURE_RESOURCE_NAME + else process.env.AZURE_RESOURCE_NAME = resourceName + if (resourceGroup === undefined) delete process.env.AZURE_RESOURCE_GROUP + else process.env.AZURE_RESOURCE_GROUP = resourceGroup + if (azureConfig === undefined) delete process.env.AZURE_CONFIG_DIR + else process.env.AZURE_CONFIG_DIR = azureConfig + if (originalPath === undefined) delete process.env.PATH + else process.env.PATH = originalPath +}) + +const oauth: Auth = { + type: "oauth", + access: OAUTH_DUMMY_KEY, + refresh: OAUTH_DUMMY_KEY, + expires: Date.now() + 60 * 60 * 1000, + accountId: "test-resource", +} + +const provider: Provider = { + id: "azure", + name: "Azure", + source: "custom", + env: [], + options: {}, + models: {}, +} + +function oauthMethod(hooks: Hooks) { + const method = hooks.auth?.methods.find((method) => method.type === "oauth") + if (!method || method.type !== "oauth") throw new Error("Azure OAuth method is missing") + return method +} + +function loader(hooks: Hooks) { + if (!hooks.auth?.loader) throw new Error("Azure auth loader is missing") + return hooks.auth.loader +} + +function customFetch(options: Record) { + const result = options["fetch"] + if (typeof result !== "function") throw new Error("Azure custom fetch is missing") + return async (input: RequestInfo | URL, init?: RequestInit) => { + const response: unknown = await Reflect.apply(result, undefined, [input, init]) + if (!(response instanceof Response)) throw new Error("Azure custom fetch returned an invalid response") + return response + } +} + +function models(...ids: string[]): Provider["models"] { + return Object.fromEntries( + ids.map((id) => [ + id, + { + id, + providerID: "azure", + name: id, + family: "", + api: { id, url: "", npm: "@ai-sdk/azure" }, + status: "active", + headers: {}, + options: {}, + cost: { input: 0, output: 0, cache: { read: 0, write: 0 } }, + limit: { context: 0, output: 0 }, + capabilities: { + temperature: true, + reasoning: false, + attachment: false, + toolcall: true, + input: { text: true, audio: false, image: false, video: false, pdf: false }, + output: { text: true, audio: false, image: false, video: false, pdf: false }, + interleaved: false, + }, + release_date: "", + variants: {}, + }, + ]), + ) +} + +function azureShell(scopes: string[]) { + return (_strings: TemplateStringsArray, ...values: string[]) => { + const output = { + quiet: () => output, + json: async () => { + const scope = values[0] + scopes.push(scope) + return { + accessToken: `${scope}-token`, + expires_on: Math.floor((Date.now() + 60 * 60 * 1000) / 1000), + } + }, + } + return output + } +} + +function discoveryShell(accounts: unknown, deployments: unknown, commands: string[]) { + return (strings: TemplateStringsArray, ...values: string[]) => { + const command = String.raw(strings, ...values) + commands.push(command) + const output = { + quiet: () => output, + json: async () => (command.includes("deployment list") ? deployments : accounts), + } + return output + } +} + +describe("plugin.azure", () => { + for (const profile of [ + { name: "missing", content: undefined, signedIn: false }, + { name: "logged out", content: '{"subscriptions":[]}', signedIn: false }, + { name: "signed in with BOM", content: '\uFEFF{"subscriptions":[{}]}', signedIn: true }, + ]) { + test(`only lists resources for a cached Azure login (${profile.name})`, async () => { + await using tmp = await tmpdir() + const executable = path.join(tmp.path, process.platform === "win32" ? "az.cmd" : "az") + await Bun.write(executable, process.platform === "win32" ? "@exit /b 0\r\n" : "#!/bin/sh\nexit 0\n") + await chmod(executable, 0o755) + process.env.PATH = `${tmp.path}${path.delimiter}${originalPath}` + process.env.AZURE_CONFIG_DIR = path.join(tmp.path, "azure-cli") + if (profile.content) + await Bun.write(path.join(process.env.AZURE_CONFIG_DIR, "azureProfile.json"), profile.content) + delete process.env.AZURE_RESOURCE_NAME + delete process.env.AZURE_RESOURCE_GROUP + const commands: string[] = [] + + const hooks = await AzureAuthPlugin({ + $: discoveryShell([{ name: "test-resource", resourceGroup: "test-group" }], [], commands), + }) + + expect(commands).toHaveLength(profile.signedIn ? 1 : 0) + expect(hooks.auth?.methods.some((method) => method.type === "oauth")).toBe(true) + if (profile.signedIn) expect(oauthMethod(hooks).prompts?.[0].type).toBe("select") + }) + } + + test("keeps the existing API-key method and adds Entra ID", () => { + delete process.env.AZURE_RESOURCE_NAME + const hooks = createAzureAuthHooks(azureShell([])) + + expect(hooks.auth?.provider).toBe("azure") + expect(hooks.provider?.id).toBe("azure") + expect(hooks.auth?.methods.map((method) => [method.type, method.label])).toEqual([ + ["api", "API key"], + ["oauth", "Microsoft Entra ID (Azure CLI)"], + ]) + expect(hooks.auth?.methods[0]).toEqual({ + type: "api", + label: "API key", + prompts: [ + { + type: "text", + key: "resourceName", + message: "Enter Azure Resource Name", + placeholder: "e.g. my-models", + }, + ], + }) + expect(hooks.auth?.methods[1].prompts).toEqual(hooks.auth?.methods[0].prompts) + }) + + test("hides Azure CLI authentication when the Azure CLI is not installed", () => { + const hooks = createAzureAuthHooks(azureShell([]), fetch, [], false) + + expect(hooks.auth?.methods.map((method) => method.type)).toEqual(["api"]) + }) + + test("lists Azure CLI resources and allows entering another resource", () => { + delete process.env.AZURE_RESOURCE_NAME + const hooks = createAzureAuthHooks(azureShell([]), fetch, [ + { name: "first-resource", resourceGroup: "first-group" }, + { name: "second-resource", resourceGroup: "second-group" }, + ]) + + expect(oauthMethod(hooks).prompts).toEqual([ + { + type: "select", + key: "resourceSelection", + message: "Select Azure resource", + options: [ + { label: "first-resource", value: "first-resource", hint: "first-group" }, + { label: "second-resource", value: "second-resource", hint: "second-group" }, + { label: "Enter another resource name", value: "__manual__" }, + ], + }, + { + type: "text", + key: "resourceName", + message: "Enter Azure Resource Name", + placeholder: "e.g. my-models", + when: { key: "resourceSelection", op: "eq", value: "__manual__" }, + }, + ]) + }) + + test("uses the selected Azure CLI resource", async () => { + const hooks = createAzureAuthHooks(azureShell([]), fetch, [ + { name: "selected-resource", resourceGroup: "selected-group" }, + ]) + const authorization = await oauthMethod(hooks).authorize({ resourceSelection: "selected-resource" }) + if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") + + expect(await authorization.callback()).toMatchObject({ type: "success", accountId: "selected-resource" }) + }) + + test("uses a manually entered Azure resource that was not listed", async () => { + const hooks = createAzureAuthHooks(azureShell([]), fetch, [{ name: "listed-resource", resourceGroup: "group" }]) + const authorization = await oauthMethod(hooks).authorize({ + resourceSelection: "__manual__", + resourceName: "unlisted-resource", + }) + if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") + + expect(await authorization.callback()).toMatchObject({ type: "success", accountId: "unlisted-resource" }) + }) + + test("checks Azure CLI and stores the resource name", async () => { + const scopes: string[] = [] + const hooks = createAzureAuthHooks(azureShell(scopes)) + const authorization = await oauthMethod(hooks).authorize({ resourceName: "test-resource" }) + if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") + + expect(await authorization.callback()).toMatchObject({ + type: "success", + access: OAUTH_DUMMY_KEY, + refresh: OAUTH_DUMMY_KEY, + accountId: "test-resource", + }) + expect(scopes).toEqual(["https://cognitiveservices.azure.com/.default"]) + }) + + test("supports Azure CLI versions that only provide expiresOn", async () => { + const hooks = createAzureAuthHooks(() => { + const output = { + quiet: () => output, + json: async () => ({ + accessToken: "legacy-token", + expiresOn: new Date(Date.now() + 60 * 60 * 1000).toISOString(), + }), + } + return output + }) + const authorization = await oauthMethod(hooks).authorize({ resourceName: "test-resource" }) + if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") + + expect(await authorization.callback()).toMatchObject({ type: "success", accountId: "test-resource" }) + }) + + test("rejects Azure CLI tokens without a usable expiration", async () => { + const hooks = createAzureAuthHooks(() => { + const output = { + quiet: () => output, + json: async () => ({ accessToken: "invalid-token" }), + } + return output + }) + const authorization = await oauthMethod(hooks).authorize({ resourceName: "test-resource" }) + if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") + + await expect(authorization.callback()).rejects.toThrow("Azure CLI returned an invalid token expiration") + }) + + test("discovers deployed models through Azure CLI", async () => { + delete process.env.AZURE_RESOURCE_GROUP + const commands: string[] = [] + const hooks = createAzureAuthHooks( + discoveryShell( + [{ name: "test-resource", resourceGroup: "test-group" }], + [ + { + name: "gpt-production", + properties: { model: { name: "gpt-5-mini" }, provisioningState: "Succeeded" }, + }, + { + name: "DeepSeek-V4-Flash", + properties: { model: { name: "DeepSeek-V4-Flash" }, provisioningState: "Succeeded" }, + }, + { + name: "phi-production", + properties: { model: { name: "Phi-4-mini-instruct" }, provisioningState: "Succeeded" }, + }, + { + name: "gpt-5-nano", + properties: { model: { name: "gpt-5-nano" }, provisioningState: "Creating" }, + }, + ], + commands, + ), + ) + const list = hooks.provider?.models + if (!list) throw new Error("Azure provider model hook is missing") + + const result = await list( + { + ...provider, + models: models("gpt-5-mini", "deepseek-v4-flash", "phi-4-mini", "phi-4-mini-instruct", "gpt-5-nano"), + }, + { auth: oauth }, + ) + + expect(Object.keys(result)).toEqual(["gpt-5-mini", "deepseek-v4-flash", "phi-4-mini-instruct"]) + expect(result["gpt-5-mini"].api.id).toBe("gpt-production") + expect(result["deepseek-v4-flash"].api.id).toBe("DeepSeek-V4-Flash") + expect(result["phi-4-mini-instruct"].api.id).toBe("phi-production") + expect(commands).toEqual([ + "az cognitiveservices account list --output json --only-show-errors", + "az cognitiveservices account deployment list --name test-resource --resource-group test-group --output json --only-show-errors", + ]) + }) + + test("discovers models directly when the resource group is configured", async () => { + process.env.AZURE_RESOURCE_GROUP = "restricted-group" + const commands: string[] = [] + const hooks = createAzureAuthHooks( + discoveryShell( + [], + [{ name: "gpt-production", properties: { model: { name: "gpt-5-mini" }, provisioningState: "Succeeded" } }], + commands, + ), + ) + const list = hooks.provider?.models + if (!list) throw new Error("Azure provider model hook is missing") + + const result = await list({ ...provider, models: models("gpt-5-mini") }, { auth: oauth }) + + expect(result["gpt-5-mini"].api.id).toBe("gpt-production") + expect(commands).toEqual([ + "az cognitiveservices account deployment list --name test-resource --resource-group restricted-group --output json --only-show-errors", + ]) + }) + + test("preserves multiple deployments of the same model", async () => { + delete process.env.AZURE_RESOURCE_GROUP + const hooks = createAzureAuthHooks( + discoveryShell( + [{ name: "test-resource", resourceGroup: "test-group" }], + [ + { name: "gpt-production", properties: { model: { name: "gpt-5-mini" }, provisioningState: "Succeeded" } }, + { name: "gpt-staging", properties: { model: { name: "gpt-5-mini" }, provisioningState: "Succeeded" } }, + ], + [], + ), + ) + const list = hooks.provider?.models + if (!list) throw new Error("Azure provider model hook is missing") + + const result = await list({ ...provider, models: models("gpt-5-mini") }, { auth: oauth }) + + expect(Object.keys(result)).toEqual(["gpt-5-mini", "gpt-staging"]) + expect(result["gpt-5-mini"].api.id).toBe("gpt-production") + expect(result["gpt-staging"].api.id).toBe("gpt-staging") + expect(result["gpt-staging"].name).toBe("gpt-5-mini (gpt-staging)") + }) + + test("keeps configured models available when Azure discovery fails", async () => { + const hooks = createAzureAuthHooks(() => { + const output = { + quiet: () => output, + json: async () => { + throw new Error("Azure CLI failed") + }, + } + return output + }) + const list = hooks.provider?.models + if (!list) throw new Error("Azure provider model hook is missing") + + const catalog = models("gpt-5-mini") + expect(await list({ ...provider, models: catalog }, { auth: oauth })).toBe(catalog) + }) + + test("does not change API-key loading", async () => { + const scopes: string[] = [] + const hooks = createAzureAuthHooks(azureShell(scopes)) + const catalog = models("gpt-5-mini") + const list = hooks.provider?.models + if (!list) throw new Error("Azure provider model hook is missing") + + expect(await loader(hooks)(async () => ({ type: "api", key: "test-key" }), provider)).toEqual({}) + expect(await list({ ...provider, models: catalog }, { auth: { type: "api", key: "test-key" } })).toBe(catalog) + expect(scopes).toEqual([]) + }) + + test("uses Azure CLI bearer tokens for Azure inference endpoints", async () => { + const scopes: string[] = [] + const requests: Headers[] = [] + const hooks = createAzureAuthHooks(azureShell(scopes), async (_input, init) => { + requests.push(new Headers(init?.headers)) + return new Response(null, { status: 200 }) + }) + const options = await loader(hooks)(async () => oauth, provider) + const request = customFetch(options) + + await request("https://test-resource.openai.azure.com/openai/v1/responses", { + headers: { "api-key": OAUTH_DUMMY_KEY, "x-keep": "yes" }, + }) + await request("https://test-resource.services.ai.azure.com/models/chat/completions", { + headers: { Authorization: `Bearer ${OAUTH_DUMMY_KEY}` }, + }) + await request("https://test-resource.services.ai.azure.com/anthropic/v1/messages", { + headers: { "x-api-key": OAUTH_DUMMY_KEY }, + }) + + expect(scopes).toEqual(["https://cognitiveservices.azure.com/.default", "https://ai.azure.com/.default"]) + expect(requests.map((headers) => headers.get("authorization"))).toEqual([ + "Bearer https://cognitiveservices.azure.com/.default-token", + "Bearer https://cognitiveservices.azure.com/.default-token", + "Bearer https://ai.azure.com/.default-token", + ]) + expect(requests[0].get("api-key")).toBeNull() + expect(requests[0].get("x-keep")).toBe("yes") + expect(requests[2].get("x-api-key")).toBeNull() + expect(requests.every((headers) => headers.get("user-agent")?.startsWith("opencode/"))).toBe(true) + }) +}) diff --git a/packages/web/src/content/docs/providers.mdx b/packages/web/src/content/docs/providers.mdx index 331a55ec629e..877f91c4e245 100644 --- a/packages/web/src/content/docs/providers.mdx +++ b/packages/web/src/content/docs/providers.mdx @@ -457,6 +457,39 @@ If you encounter "I'm sorry, but I cannot assist with that request" errors, try /models ``` +#### Microsoft Entra ID (Azure CLI) + +You can use your Azure CLI session instead of an API key. [Install the Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli), run `az login`, then run `/connect`, select **Azure**, and choose **Microsoft Entra ID (Azure CLI)**. OpenCode lists the Resources visible to your Azure CLI session and their Resource groups. Select a Resource, or choose **Enter another resource name** to enter one manually. If resource listing is unavailable, OpenCode asks for the name directly. Use `az login --tenant TENANT_ID` if the Resource belongs to a different tenant. + +Find the Resource name by opening your Azure OpenAI or Foundry Resource in the [Azure portal](https://portal.azure.com/) or [Microsoft Foundry](https://ai.azure.com/). It is also the first part of the endpoint: `my-models` in `https://my-models.openai.azure.com/` or `https://my-models.services.ai.azure.com/`. If your identity can list Resources, you can also find their names and Resource groups with: + +```bash +az cognitiveservices account list \ + --query "[].{name:name,resourceGroup:resourceGroup}" \ + --output table +``` + +OpenCode finds the Resource group and discovers its deployed models from the active Azure CLI subscription. Run `az account set --subscription NAME_OR_ID` first if the Resource is in a different subscription. Set `AZURE_RESOURCE_GROUP` to skip listing the subscription and query a known Resource directly. + +Model discovery requires Azure control-plane permissions, which are separate from inference permissions. If your identity cannot list deployments, OpenCode keeps the Azure model catalog available instead. Select a model whose name matches your deployment, or configure its deployment name explicitly: + +```json title="opencode.json" +{ + "$schema": "https://opencode.ai/config.json", + "provider": { + "azure": { + "models": { + "gpt-5-mini": { + "id": "gpt-production" + } + } + } + } +} +``` + +Assign your identity the inference role required by the deployment: **Cognitive Services OpenAI User** for Azure OpenAI models or **Cognitive Services User** for other Foundry models. OpenCode refreshes access tokens through the Azure CLI, including versions earlier than 2.54.0, so you only need to sign in again when the CLI session expires. + --- ### Azure Cognitive Services From 15537a41d2a0514f7040e1c4128b7846cdc19ce0 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Thu, 27 Aug 2026 20:08:12 -0400 Subject: [PATCH 062/185] fix(opencode): compare config snapshots as JSON (#45784) Co-authored-by: jlongster <17031+jlongster@users.noreply.github.com> --- packages/opencode/test/config/snapshot.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/opencode/test/config/snapshot.ts b/packages/opencode/test/config/snapshot.ts index d184432fbfb6..d206570fdb12 100644 --- a/packages/opencode/test/config/snapshot.ts +++ b/packages/opencode/test/config/snapshot.ts @@ -1,6 +1,8 @@ import { expect } from "bun:test" +import { ConfigParse } from "../../src/config/parse" export async function snapshot(file: string, actual: string) { + const value = ConfigParse.jsonc(actual, file) if (process.env.UPDATE_CONFIG_FIXTURES === "1") await Bun.write(file, actual) - expect(actual).toBe(await Bun.file(file).text()) + expect(value).toEqual(ConfigParse.jsonc(await Bun.file(file).text(), file)) } From 19db518e0a851160cc77230320125563f4cb117f Mon Sep 17 00:00:00 2001 From: opencode Date: Fri, 28 Aug 2026 04:10:10 +0000 Subject: [PATCH 063/185] sync release versions for v1.18.24 --- bun.lock | 56 ++++++++++----------- packages/app/package.json | 2 +- packages/cli/package.json | 2 +- packages/codemode/package.json | 2 +- packages/console/app/package.json | 2 +- packages/console/core/package.json | 2 +- packages/console/function/package.json | 2 +- packages/console/mail/package.json | 2 +- packages/console/support/package.json | 2 +- packages/core/package.json | 2 +- packages/desktop/package.json | 2 +- packages/effect-drizzle-sqlite/package.json | 2 +- packages/effect-sqlite-node/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/function/package.json | 2 +- packages/http-recorder/package.json | 2 +- packages/llm/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- packages/server/package.json | 2 +- packages/session-ui/package.json | 2 +- packages/slack/package.json | 2 +- packages/stats/app/package.json | 2 +- packages/stats/core/package.json | 2 +- packages/stats/server/package.json | 2 +- packages/tui/package.json | 2 +- packages/ui/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 30 files changed, 57 insertions(+), 57 deletions(-) diff --git a/bun.lock b/bun.lock index 740abb79909b..ec7c2c1ebf52 100644 --- a/bun.lock +++ b/bun.lock @@ -29,7 +29,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@corvu/drawer": "catalog:", "@dnd-kit/abstract": "0.5.0", @@ -96,7 +96,7 @@ }, "packages/cli": { "name": "@opencode-ai/cli", - "version": "1.18.23", + "version": "1.18.24", "bin": { "lildax": "./bin/lildax.cjs", }, @@ -144,7 +144,7 @@ }, "packages/codemode": { "name": "@opencode-ai/codemode", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "acorn": "8.15.0", "effect": "catalog:", @@ -158,7 +158,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -194,7 +194,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -221,7 +221,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@ai-sdk/anthropic": "3.0.82", "@ai-sdk/openai": "3.0.48", @@ -244,7 +244,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -268,7 +268,7 @@ }, "packages/console/support": { "name": "@opencode-ai/console-support", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@opencode-ai/console-core": "workspace:*", @@ -288,7 +288,7 @@ }, "packages/core": { "name": "@opencode-ai/core", - "version": "1.18.23", + "version": "1.18.24", "bin": { "opencode": "./bin/opencode", }, @@ -382,7 +382,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@zip.js/zip.js": "2.7.62", "drizzle-orm": "catalog:", @@ -436,7 +436,7 @@ }, "packages/effect-drizzle-sqlite": { "name": "@opencode-ai/effect-drizzle-sqlite", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "drizzle-orm": "catalog:", "effect": "catalog:", @@ -450,7 +450,7 @@ }, "packages/effect-sqlite-node": { "name": "@opencode-ai/effect-sqlite-node", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "effect": "catalog:", }, @@ -462,7 +462,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@hono/standard-validator": "catalog:", "@opencode-ai/core": "workspace:*", @@ -494,7 +494,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -510,7 +510,7 @@ }, "packages/http-recorder": { "name": "@opencode-ai/http-recorder", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@effect/platform-node": "4.0.0-beta.83", "@effect/platform-node-shared": "4.0.0-beta.83", @@ -541,7 +541,7 @@ }, "packages/llm": { "name": "@opencode-ai/llm", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@opencode-ai/schema": "workspace:*", "@smithy/eventstream-codec": "4.2.14", @@ -560,7 +560,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.18.23", + "version": "1.18.24", "bin": { "opencode": "./bin/opencode", }, @@ -691,7 +691,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@ai-sdk/provider": "3.0.8", "@opencode-ai/sdk": "workspace:*", @@ -767,7 +767,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "cross-spawn": "catalog:", }, @@ -782,7 +782,7 @@ }, "packages/server": { "name": "@opencode-ai/server", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/protocol": "workspace:*", @@ -797,7 +797,7 @@ }, "packages/session-ui": { "name": "@opencode-ai/session-ui", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/client": "file:../app/vendor/opencode-ai-client-1.17.13-v2.tgz", @@ -837,7 +837,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -850,7 +850,7 @@ }, "packages/stats/app": { "name": "@opencode-ai/stats-app", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@ibm/plex": "6.4.1", "@kobalte/core": "catalog:", @@ -877,7 +877,7 @@ }, "packages/stats/core": { "name": "@opencode-ai/stats-core", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@aws-sdk/client-athena": "3.933.0", "@planetscale/database": "1.19.0", @@ -896,7 +896,7 @@ }, "packages/stats/server": { "name": "@opencode-ai/stats-server", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@aws-sdk/client-firehose": "3.933.0", "@effect/platform-node": "catalog:", @@ -938,7 +938,7 @@ }, "packages/tui": { "name": "@opencode-ai/tui", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/plugin": "workspace:*", @@ -965,7 +965,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@kobalte/core": "catalog:", "@pierre/diffs": "catalog:", @@ -1016,7 +1016,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/app/package.json b/packages/app/package.json index 044e0cd9ebab..fa7e969d067f 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.18.23", + "version": "1.18.24", "description": "", "type": "module", "exports": { diff --git a/packages/cli/package.json b/packages/cli/package.json index 4c77ac3c2e7a..cdd74c067ca4 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/cli", - "version": "1.18.23", + "version": "1.18.24", "type": "module", "license": "MIT", "bin": { diff --git a/packages/codemode/package.json b/packages/codemode/package.json index cbfb81c45940..9772aeee2311 100644 --- a/packages/codemode/package.json +++ b/packages/codemode/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/codemode", - "version": "1.18.23", + "version": "1.18.24", "description": "Effect-native confined code execution over schema-described tools", "private": true, "type": "module", diff --git a/packages/console/app/package.json b/packages/console/app/package.json index ca4db3c70cff..908421539385 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.18.23", + "version": "1.18.24", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index 78b0a05e300e..729ce531ff50 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/console-core", - "version": "1.18.23", + "version": "1.18.24", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 2848ac685b5e..9afac31c073f 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.18.23", + "version": "1.18.24", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index 6d81e0bbf05b..09e59abd7229 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.18.23", + "version": "1.18.24", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/console/support/package.json b/packages/console/support/package.json index 1b12ec02843d..f1a837f147a5 100644 --- a/packages/console/support/package.json +++ b/packages/console/support/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-support", - "version": "1.18.23", + "version": "1.18.24", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/core/package.json b/packages/core/package.json index ba3653df8ae1..c185ce9233cf 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.23", + "version": "1.18.24", "name": "@opencode-ai/core", "type": "module", "license": "MIT", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index b2c975f2b0bf..91cbafd1e4ab 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.18.23", + "version": "1.18.24", "type": "module", "license": "MIT", "homepage": "https://opencode.ai", diff --git a/packages/effect-drizzle-sqlite/package.json b/packages/effect-drizzle-sqlite/package.json index d289ec31ff42..ed29249c656e 100644 --- a/packages/effect-drizzle-sqlite/package.json +++ b/packages/effect-drizzle-sqlite/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.23", + "version": "1.18.24", "name": "@opencode-ai/effect-drizzle-sqlite", "type": "module", "license": "MIT", diff --git a/packages/effect-sqlite-node/package.json b/packages/effect-sqlite-node/package.json index 572b7c5e85e5..0de3380caab1 100644 --- a/packages/effect-sqlite-node/package.json +++ b/packages/effect-sqlite-node/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.23", + "version": "1.18.24", "name": "@opencode-ai/effect-sqlite-node", "type": "module", "license": "MIT", diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index b5fa9476fab1..6f38a4ce224d 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.18.23", + "version": "1.18.24", "private": true, "type": "module", "license": "MIT", diff --git a/packages/function/package.json b/packages/function/package.json index 85771f63537f..c5da6ac18ef0 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.18.23", + "version": "1.18.24", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/http-recorder/package.json b/packages/http-recorder/package.json index 07ed4c96108f..6a4f06694730 100644 --- a/packages/http-recorder/package.json +++ b/packages/http-recorder/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.23", + "version": "1.18.24", "name": "@opencode-ai/http-recorder", "description": "Record and replay Effect HTTP client traffic with deterministic cassettes", "type": "module", diff --git a/packages/llm/package.json b/packages/llm/package.json index b18e9ceae69a..bbd432a22210 100644 --- a/packages/llm/package.json +++ b/packages/llm/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.23", + "version": "1.18.24", "name": "@opencode-ai/llm", "type": "module", "license": "MIT", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index a8b4ee7a880e..007c0bcaddd7 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.23", + "version": "1.18.24", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index c39a8c9d8d64..9f3de7c8ca88 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/plugin", - "version": "1.18.23", + "version": "1.18.24", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index 64ec112cdaae..ae7135ac96e7 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/sdk", - "version": "1.18.23", + "version": "1.18.24", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index c5f24b3ff753..d33ddbe09489 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/server", - "version": "1.18.23", + "version": "1.18.24", "private": true, "type": "module", "license": "MIT", diff --git a/packages/session-ui/package.json b/packages/session-ui/package.json index 341bc8272a0d..a373c2ab0eb7 100644 --- a/packages/session-ui/package.json +++ b/packages/session-ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/session-ui", - "version": "1.18.23", + "version": "1.18.24", "private": true, "type": "module", "license": "MIT", diff --git a/packages/slack/package.json b/packages/slack/package.json index 46eac6d1f59f..a2d71e2b5f61 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.18.23", + "version": "1.18.24", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/stats/app/package.json b/packages/stats/app/package.json index 472999056493..f35c12961913 100644 --- a/packages/stats/app/package.json +++ b/packages/stats/app/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-app", - "version": "1.18.23", + "version": "1.18.24", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/core/package.json b/packages/stats/core/package.json index f4ab6c5ca640..882f51f403ad 100644 --- a/packages/stats/core/package.json +++ b/packages/stats/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-core", - "version": "1.18.23", + "version": "1.18.24", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/server/package.json b/packages/stats/server/package.json index 12da00b36e25..135e884b3ba9 100644 --- a/packages/stats/server/package.json +++ b/packages/stats/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-server", - "version": "1.18.23", + "version": "1.18.24", "private": true, "type": "module", "license": "MIT", diff --git a/packages/tui/package.json b/packages/tui/package.json index 08557e6368eb..cc211c1d61e0 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/tui", - "version": "1.18.23", + "version": "1.18.24", "private": true, "type": "module", "license": "MIT", diff --git a/packages/ui/package.json b/packages/ui/package.json index 2a8dc93df72c..a62dc8dbfceb 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.18.23", + "version": "1.18.24", "type": "module", "license": "MIT", "repository": { diff --git a/packages/web/package.json b/packages/web/package.json index f3a3f4ab96a9..de7043fc9f6d 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -2,7 +2,7 @@ "name": "@opencode-ai/web", "type": "module", "license": "MIT", - "version": "1.18.23", + "version": "1.18.24", "scripts": { "dev": "astro dev", "dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev", diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index cae6ef4272b3..f7526a3689b3 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "opencode", "displayName": "opencode", "description": "opencode for VS Code", - "version": "1.18.23", + "version": "1.18.24", "publisher": "sst-dev", "repository": { "type": "git", From 8a7cc0c0ffa3a1b70ca0211a425434771402d673 Mon Sep 17 00:00:00 2001 From: Jack Date: Fri, 28 Aug 2026 13:17:02 +0800 Subject: [PATCH 064/185] docs(go): add Qwen3.8 Flash (#45836) --- packages/console/app/src/routes/go/index.tsx | 3 ++- .../app/src/routes/workspace/[id]/go/lite-section.tsx | 1 + packages/web/src/content/docs/ar/go.mdx | 6 ++++++ packages/web/src/content/docs/bs/go.mdx | 6 ++++++ packages/web/src/content/docs/da/go.mdx | 6 ++++++ packages/web/src/content/docs/de/go.mdx | 6 ++++++ packages/web/src/content/docs/es/go.mdx | 6 ++++++ packages/web/src/content/docs/fr/go.mdx | 6 ++++++ packages/web/src/content/docs/go.mdx | 6 ++++++ packages/web/src/content/docs/it/go.mdx | 6 ++++++ packages/web/src/content/docs/ja/go.mdx | 6 ++++++ packages/web/src/content/docs/ko/go.mdx | 6 ++++++ packages/web/src/content/docs/nb/go.mdx | 6 ++++++ packages/web/src/content/docs/pl/go.mdx | 6 ++++++ packages/web/src/content/docs/pt-br/go.mdx | 6 ++++++ packages/web/src/content/docs/ru/go.mdx | 6 ++++++ packages/web/src/content/docs/th/go.mdx | 6 ++++++ packages/web/src/content/docs/tr/go.mdx | 6 ++++++ packages/web/src/content/docs/zh-cn/go.mdx | 6 ++++++ packages/web/src/content/docs/zh-tw/go.mdx | 6 ++++++ 20 files changed, 111 insertions(+), 1 deletion(-) diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index 7d3170331de3..423f98b955e0 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -36,6 +36,7 @@ const models = [ { name: "MiMo-V2.5-Pro", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "MiMo-V2.5", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "Qwen3.8 Max", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, + { name: "Qwen3.8 Flash", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "Qwen3.7 Max", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "Qwen3.7 Plus", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "Qwen3.6 Plus", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, @@ -71,12 +72,12 @@ function LimitsGraph(props: { href: string }) { const baseline = 100 const graph = [ { id: "kimi-k3", name: "Kimi K3", req: 110, d: "50ms" }, - { id: "qwen3.8-max", name: "Qwen3.8 Max", req: 160, d: "90ms" }, { id: "grok-4.6", name: "Grok 4.6", req: 169, d: "75ms" }, { id: "gpt-5.6-luna", name: "GPT 5.6 Luna", req: 2050, d: "290ms" }, { id: "glm-5.3-flash", name: "GLM-5.3-Flash", req: 3160, baseReq: 1580, bonus: "2x usage", d: "100ms" }, { id: "minimax-m3", name: "MiniMax M3", req: 3200, d: "210ms" }, { id: "qwen3.7-plus", name: "Qwen3.7 Plus", req: 4300, d: "300ms" }, + { id: "qwen3.8-flash", name: "Qwen3.8 Flash", req: 5400, d: "315ms" }, { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", req: 7600, d: "330ms" }, { id: "longcat-2.0", name: "LongCat-2.0", req: 11400, d: "335ms" }, { id: "mimo-v2.5", name: "MiMo-V2.5", req: 30100, d: "340ms" }, diff --git a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx index 1770ee30741a..2c762920d5f1 100644 --- a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx @@ -654,6 +654,7 @@ export function LiteSection(props: { lite: LiteSubscription | undefined }) {

    • MiniMax M2.7
    • Muse Spark 1.2 Contributor
    • Qwen3.8 Max
    • +
    • Qwen3.8 Flash
    • Qwen3.7 Max
    • Qwen3.7 Plus
    • Qwen3.6 Plus
    • diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx index 6d74e4b66ed2..b2094f5c1f83 100644 --- a/packages/web/src/content/docs/ar/go.mdx +++ b/packages/web/src/content/docs/ar/go.mdx @@ -65,6 +65,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([مناطق محدودة](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -107,6 +108,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -131,6 +133,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر - MiniMax M2.7 — ‏300 input، و55,000 cached، و125 output tokens لكل طلب - Muse Spark 1.2 Contributor — ‏620 input، و71,400 cached، و300 output tokens لكل طلب - Qwen3.8 Max — ‏420 input، و66,000 cached، و200 output tokens لكل طلب +- Qwen3.8 Flash — ‏600 input، و58,000 cached، و200 output tokens لكل طلب - Qwen3.7 Max — ‏420 input، و66,000 cached، و200 output tokens لكل طلب - Qwen3.7 Plus — ‏500 input، و57,000 cached، و190 output tokens لكل طلب - Qwen3.6 Plus — ‏500 input، و57,000 cached، و190 output tokens لكل طلب @@ -161,6 +164,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -232,6 +236,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -268,6 +273,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | غير مستخدَمة | 0 أيام | | MiMo-V2.5 | غير مستخدَمة | 0 أيام | | Qwen3.8 Max | غير مستخدَمة | 0 أيام | +| Qwen3.8 Flash | غير مستخدَمة | 0 أيام | | Qwen3.7 Max | غير مستخدَمة | 0 أيام | | Qwen3.7 Plus | غير مستخدَمة | 0 أيام | | Qwen3.6 Plus | غير مستخدَمة | 0 أيام | diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index 67c398dcde6b..cf7dbfad6eca 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -75,6 +75,7 @@ Trenutna lista modela uključuje: - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([ograničene regije](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -117,6 +118,7 @@ Tabela ispod pruža procijenjeni broj zahtjeva na osnovu tipičnih obrazaca kori | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -141,6 +143,7 @@ Procjene se zasnivaju na zapaženim obrascima zahtjeva: - MiniMax M2.7 — 300 ulaznih, 55,000 keširanih, 125 izlaznih tokena po zahtjevu - Muse Spark 1.2 Contributor — 620 ulaznih, 71,400 keširanih, 300 izlaznih tokena po zahtjevu - Qwen3.8 Max — 420 ulaznih, 66,000 keširanih, 200 izlaznih tokena po zahtjevu +- Qwen3.8 Flash — 600 ulaznih, 58,000 keširanih, 200 izlaznih tokena po zahtjevu - Qwen3.7 Max — 420 ulaznih, 66,000 keširanih, 200 izlaznih tokena po zahtjevu - Qwen3.7 Plus — 500 ulaznih, 57,000 keširanih, 190 izlaznih tokena po zahtjevu - Qwen3.6 Plus — 500 ulaznih, 57,000 keširanih, 190 izlaznih tokena po zahtjevu @@ -171,6 +174,7 @@ Procjene se također zasnivaju na sljedećim cijenama po 1M tokena i mjesečnoj | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -244,6 +248,7 @@ Također možete pristupiti Go modelima putem sljedećih API endpointa. | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -282,6 +287,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | Ne koristi se | 0 dana | | MiMo-V2.5 | Ne koristi se | 0 dana | | Qwen3.8 Max | Ne koristi se | 0 dana | +| Qwen3.8 Flash | Ne koristi se | 0 dana | | Qwen3.7 Max | Ne koristi se | 0 dana | | Qwen3.7 Plus | Ne koristi se | 0 dana | | Qwen3.6 Plus | Ne koristi se | 0 dana | diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx index b926902d1d49..e962d4e4acf1 100644 --- a/packages/web/src/content/docs/da/go.mdx +++ b/packages/web/src/content/docs/da/go.mdx @@ -75,6 +75,7 @@ Den nuværende liste over modeller inkluderer: - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([begrænsede regioner](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -117,6 +118,7 @@ Tabellen nedenfor giver et estimeret antal anmodninger baseret på typiske Go-fo | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -141,6 +143,7 @@ Estimaterne er baseret på observerede anmodningsmønstre: - MiniMax M2.7 — 300 input, 55.000 cachelagrede, 125 output-tokens pr. anmodning - Muse Spark 1.2 Contributor — 620 input, 71.400 cachelagrede, 300 output-tokens pr. anmodning - Qwen3.8 Max — 420 input, 66.000 cachelagrede, 200 output-tokens pr. anmodning +- Qwen3.8 Flash — 600 input, 58.000 cachelagrede, 200 output-tokens pr. anmodning - Qwen3.7 Max — 420 input, 66.000 cachelagrede, 200 output-tokens pr. anmodning - Qwen3.7 Plus — 500 input, 57.000 cachelagrede, 190 output-tokens pr. anmodning - Qwen3.6 Plus — 500 input, 57.000 cachelagrede, 190 output-tokens pr. anmodning @@ -171,6 +174,7 @@ Estimaterne er også baseret på følgende priser pr. 1M tokens og det månedlig | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -244,6 +248,7 @@ Du kan også få adgang til Go-modeller gennem følgende API-endpoints. | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -282,6 +287,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | Ikke brugt | 0 dage | | MiMo-V2.5 | Ikke brugt | 0 dage | | Qwen3.8 Max | Ikke brugt | 0 dage | +| Qwen3.8 Flash | Ikke brugt | 0 dage | | Qwen3.7 Max | Ikke brugt | 0 dage | | Qwen3.7 Plus | Ikke brugt | 0 dage | | Qwen3.6 Plus | Ikke brugt | 0 dage | diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx index c26b2cd01ad0..31c5233ddeb2 100644 --- a/packages/web/src/content/docs/de/go.mdx +++ b/packages/web/src/content/docs/de/go.mdx @@ -67,6 +67,7 @@ Die aktuelle Liste der Modelle umfasst: - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([begrenzte Regionen](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -109,6 +110,7 @@ Die folgende Tabelle zeigt eine geschätzte Anzahl von Anfragen basierend auf ty | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -133,6 +135,7 @@ Die Schätzungen basieren auf beobachteten Anfragemustern: - MiniMax M2.7 — 300 Input-, 55.000 Cached-, 125 Output-Tokens pro Anfrage - Muse Spark 1.2 Contributor — 620 Input-, 71.400 Cached-, 300 Output-Tokens pro Anfrage - Qwen3.8 Max — 420 Input-, 66.000 Cached-, 200 Output-Tokens pro Anfrage +- Qwen3.8 Flash — 600 Input-, 58.000 Cached-, 200 Output-Tokens pro Anfrage - Qwen3.7 Max — 420 Input-, 66.000 Cached-, 200 Output-Tokens pro Anfrage - Qwen3.7 Plus — 500 Input-, 57.000 Cached-, 190 Output-Tokens pro Anfrage - Qwen3.6 Plus — 500 Input-, 57.000 Cached-, 190 Output-Tokens pro Anfrage @@ -163,6 +166,7 @@ Die Schätzungen basieren außerdem auf den folgenden Preisen pro 1M Tokens und | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -234,6 +238,7 @@ Du kannst auf die Go-Modelle auch über die folgenden API-Endpunkte zugreifen. | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -270,6 +275,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | Nicht verwendet | 0 Tage | | MiMo-V2.5 | Nicht verwendet | 0 Tage | | Qwen3.8 Max | Nicht verwendet | 0 Tage | +| Qwen3.8 Flash | Nicht verwendet | 0 Tage | | Qwen3.7 Max | Nicht verwendet | 0 Tage | | Qwen3.7 Plus | Nicht verwendet | 0 Tage | | Qwen3.6 Plus | Nicht verwendet | 0 Tage | diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index 5bab364e4632..1585fb230d60 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -75,6 +75,7 @@ La lista actual de modelos incluye: - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([regiones limitadas](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -117,6 +118,7 @@ La siguiente tabla proporciona una cantidad estimada de peticiones basada en los | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -141,6 +143,7 @@ Las estimaciones se basan en los patrones de peticiones observados: - MiniMax M2.7 — 300 tokens de entrada, 55,000 en caché, 125 tokens de salida por petición - Muse Spark 1.2 Contributor — 620 tokens de entrada, 71,400 en caché, 300 tokens de salida por petición - Qwen3.8 Max — 420 tokens de entrada, 66,000 en caché, 200 tokens de salida por petición +- Qwen3.8 Flash — 600 tokens de entrada, 58,000 en caché, 200 tokens de salida por petición - Qwen3.7 Max — 420 tokens de entrada, 66,000 en caché, 200 tokens de salida por petición - Qwen3.7 Plus — 500 tokens de entrada, 57,000 en caché, 190 tokens de salida por petición - Qwen3.6 Plus — 500 tokens de entrada, 57,000 en caché, 190 tokens de salida por petición @@ -171,6 +174,7 @@ Las estimaciones también se basan en los siguientes precios por 1M tokens y en | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -244,6 +248,7 @@ También puedes acceder a los modelos de Go a través de los siguientes endpoint | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -282,6 +287,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | No utilizado | 0 días | | MiMo-V2.5 | No utilizado | 0 días | | Qwen3.8 Max | No utilizado | 0 días | +| Qwen3.8 Flash | No utilizado | 0 días | | Qwen3.7 Max | No utilizado | 0 días | | Qwen3.7 Plus | No utilizado | 0 días | | Qwen3.6 Plus | No utilizado | 0 días | diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx index 6c70197dc2fe..a5b13e2fa73d 100644 --- a/packages/web/src/content/docs/fr/go.mdx +++ b/packages/web/src/content/docs/fr/go.mdx @@ -65,6 +65,7 @@ La liste actuelle des modèles comprend : - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([régions limitées](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -107,6 +108,7 @@ Le tableau ci-dessous fournit une estimation du nombre de requêtes basée sur d | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -131,6 +133,7 @@ Les estimations sont basées sur les schémas de requêtes observés : - MiniMax M2.7 — 300 tokens en entrée, 55,000 en cache, 125 tokens en sortie par requête - Muse Spark 1.2 Contributor — 620 tokens en entrée, 71,400 en cache, 300 tokens en sortie par requête - Qwen3.8 Max — 420 tokens en entrée, 66,000 en cache, 200 tokens en sortie par requête +- Qwen3.8 Flash — 600 tokens en entrée, 58,000 en cache, 200 tokens en sortie par requête - Qwen3.7 Max — 420 tokens en entrée, 66,000 en cache, 200 tokens en sortie par requête - Qwen3.7 Plus — 500 tokens en entrée, 57,000 en cache, 190 tokens en sortie par requête - Qwen3.6 Plus — 500 tokens en entrée, 57,000 en cache, 190 tokens en sortie par requête @@ -161,6 +164,7 @@ Les estimations sont également basées sur les prix suivants par 1M tokens et s | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -232,6 +236,7 @@ Vous pouvez également accéder aux modèles Go via les points de terminaison d' | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -268,6 +273,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | Non utilisé | 0 jour | | MiMo-V2.5 | Non utilisé | 0 jour | | Qwen3.8 Max | Non utilisé | 0 jour | +| Qwen3.8 Flash | Non utilisé | 0 jour | | Qwen3.7 Max | Non utilisé | 0 jour | | Qwen3.7 Plus | Non utilisé | 0 jour | | Qwen3.6 Plus | Non utilisé | 0 jour | diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index f0b5af658846..96a6b4cbcc39 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -75,6 +75,7 @@ The current list of models includes: - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([limited regions](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -117,6 +118,7 @@ The table below provides an estimated request count based on typical Go usage pa | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -143,6 +145,7 @@ The estimates are based on observed request patterns: - MiMo-V2.5 — 830 input, 71,500 cached, 295 output tokens per request - MiMo-V2.5-Pro — 790 input, 86,000 cached, 305 output tokens per request - Qwen3.8 Max — 420 input, 66,000 cached, 200 output tokens per request +- Qwen3.8 Flash — 600 input, 58,000 cached, 200 output tokens per request - Qwen3.7 Max — 420 input, 66,000 cached, 200 output tokens per request - Qwen3.7 Plus — 500 input, 57,000 cached, 190 output tokens per request - Qwen3.6 Plus — 500 input, 57,000 cached, 190 output tokens per request @@ -171,6 +174,7 @@ The estimates are also based on the following prices per 1M tokens and the month | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -244,6 +248,7 @@ You can also access Go models through the following API endpoints. | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -282,6 +287,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | Not used | 0 days | | MiMo-V2.5 | Not used | 0 days | | Qwen3.8 Max | Not used | 0 days | +| Qwen3.8 Flash | Not used | 0 days | | Qwen3.7 Max | Not used | 0 days | | Qwen3.7 Plus | Not used | 0 days | | Qwen3.6 Plus | Not used | 0 days | diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx index 018c63550471..cd553896bde4 100644 --- a/packages/web/src/content/docs/it/go.mdx +++ b/packages/web/src/content/docs/it/go.mdx @@ -73,6 +73,7 @@ L'elenco attuale dei modelli include: - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([regioni limitate](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -115,6 +116,7 @@ La tabella seguente fornisce una stima del conteggio delle richieste in base a p | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -139,6 +141,7 @@ Le stime si basano sui pattern di richieste osservati: - MiniMax M2.7 — 300 di input, 55.000 in cache, 125 token di output per richiesta - Muse Spark 1.2 Contributor — 620 di input, 71.400 in cache, 300 token di output per richiesta - Qwen3.8 Max — 420 di input, 66.000 in cache, 200 token di output per richiesta +- Qwen3.8 Flash — 600 di input, 58.000 in cache, 200 token di output per richiesta - Qwen3.7 Max — 420 di input, 66.000 in cache, 200 token di output per richiesta - Qwen3.7 Plus — 500 di input, 57.000 in cache, 190 token di output per richiesta - Qwen3.6 Plus — 500 di input, 57.000 in cache, 190 token di output per richiesta @@ -169,6 +172,7 @@ Le stime si basano anche sui seguenti prezzi per 1M token e sull'utilizzo mensil | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -242,6 +246,7 @@ Puoi anche accedere ai modelli Go tramite i seguenti endpoint API. | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -280,6 +285,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | Non utilizzato | 0 giorni | | MiMo-V2.5 | Non utilizzato | 0 giorni | | Qwen3.8 Max | Non utilizzato | 0 giorni | +| Qwen3.8 Flash | Non utilizzato | 0 giorni | | Qwen3.7 Max | Non utilizzato | 0 giorni | | Qwen3.7 Plus | Non utilizzato | 0 giorni | | Qwen3.6 Plus | Non utilizzato | 0 giorni | diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx index c1ad6d01846c..c277ee728dad 100644 --- a/packages/web/src/content/docs/ja/go.mdx +++ b/packages/web/src/content/docs/ja/go.mdx @@ -65,6 +65,7 @@ OpenCode Goをサブスクライブできるのは、1つのワークスペー - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([一部の地域に限定](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -107,6 +108,7 @@ OpenCode Goには以下の制限が含まれています: | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -131,6 +133,7 @@ OpenCode Goには以下の制限が含まれています: - MiniMax M2.7 — リクエストあたり 入力 300トークン、キャッシュ 55,000トークン、出力 125トークン - Muse Spark 1.2 Contributor — リクエストあたり 入力 620トークン、キャッシュ 71,400トークン、出力 300トークン - Qwen3.8 Max — リクエストあたり 入力 420トークン、キャッシュ 66,000トークン、出力 200トークン +- Qwen3.8 Flash — リクエストあたり 入力 600トークン、キャッシュ 58,000トークン、出力 200トークン - Qwen3.7 Max — リクエストあたり 入力 420トークン、キャッシュ 66,000トークン、出力 200トークン - Qwen3.7 Plus — リクエストあたり 入力 500トークン、キャッシュ 57,000トークン、出力 190トークン - Qwen3.6 Plus — リクエストあたり 入力 500トークン、キャッシュ 57,000トークン、出力 190トークン @@ -161,6 +164,7 @@ OpenCode Goには以下の制限が含まれています: | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -232,6 +236,7 @@ Goでは月額$10を支払い、その6倍の利用枠を提供することを | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -268,6 +273,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | 使用なし | 0日 | | MiMo-V2.5 | 使用なし | 0日 | | Qwen3.8 Max | 使用なし | 0日 | +| Qwen3.8 Flash | 使用なし | 0日 | | Qwen3.7 Max | 使用なし | 0日 | | Qwen3.7 Plus | 使用なし | 0日 | | Qwen3.6 Plus | 使用なし | 0日 | diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx index b0aecf2e460d..d2e5bfc8bb98 100644 --- a/packages/web/src/content/docs/ko/go.mdx +++ b/packages/web/src/content/docs/ko/go.mdx @@ -65,6 +65,7 @@ workspace당 한 명의 멤버만 OpenCode Go를 구독할 수 있습니다. - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([일부 지역에서만 제공](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -107,6 +108,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -131,6 +133,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. - MiniMax M2.7 — 요청당 입력 300, 캐시 55,000, 출력 토큰 125 - Muse Spark 1.2 Contributor — 요청당 입력 620, 캐시 71,400, 출력 토큰 300 - Qwen3.8 Max — 요청당 입력 420, 캐시 66,000, 출력 토큰 200 +- Qwen3.8 Flash — 요청당 입력 600, 캐시 58,000, 출력 토큰 200 - Qwen3.7 Max — 요청당 입력 420, 캐시 66,000, 출력 토큰 200 - Qwen3.7 Plus — 요청당 입력 500, 캐시 57,000, 출력 토큰 190 - Qwen3.6 Plus — 요청당 입력 500, 캐시 57,000, 출력 토큰 190 @@ -161,6 +164,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -232,6 +236,7 @@ Go에서는 월 $10를 지불하며, 저희는 그 6배의 사용량을 제공 | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -268,6 +273,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | 사용되지 않음 | 0일 | | MiMo-V2.5 | 사용되지 않음 | 0일 | | Qwen3.8 Max | 사용되지 않음 | 0일 | +| Qwen3.8 Flash | 사용되지 않음 | 0일 | | Qwen3.7 Max | 사용되지 않음 | 0일 | | Qwen3.7 Plus | 사용되지 않음 | 0일 | | Qwen3.6 Plus | 사용되지 않음 | 0일 | diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx index f8016c4619c8..37393d9e45c9 100644 --- a/packages/web/src/content/docs/nb/go.mdx +++ b/packages/web/src/content/docs/nb/go.mdx @@ -75,6 +75,7 @@ Den nåværende listen over modeller inkluderer: - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([begrensede regioner](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -117,6 +118,7 @@ Tabellen nedenfor gir et estimert antall forespørsler basert på typiske bruksm | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -141,6 +143,7 @@ Estimatene er basert på observerte forespørselsmønstre: - MiniMax M2.7 — 300 input, 55 000 bufret, 125 output-tokens per forespørsel - Muse Spark 1.2 Contributor — 620 input, 71 400 bufret, 300 output-tokens per forespørsel - Qwen3.8 Max — 420 input, 66 000 bufret, 200 output-tokens per forespørsel +- Qwen3.8 Flash — 600 input, 58 000 bufret, 200 output-tokens per forespørsel - Qwen3.7 Max — 420 input, 66 000 bufret, 200 output-tokens per forespørsel - Qwen3.7 Plus — 500 input, 57 000 bufret, 190 output-tokens per forespørsel - Qwen3.6 Plus — 500 input, 57 000 bufret, 190 output-tokens per forespørsel @@ -171,6 +174,7 @@ Estimatene er også basert på følgende priser per 1M tokens og den månedlige | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -244,6 +248,7 @@ Du kan også få tilgang til Go-modeller gjennom følgende API-endepunkter. | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -282,6 +287,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | Brukes ikke | 0 dager | | MiMo-V2.5 | Brukes ikke | 0 dager | | Qwen3.8 Max | Brukes ikke | 0 dager | +| Qwen3.8 Flash | Brukes ikke | 0 dager | | Qwen3.7 Max | Brukes ikke | 0 dager | | Qwen3.7 Plus | Brukes ikke | 0 dager | | Qwen3.6 Plus | Brukes ikke | 0 dager | diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx index 4d04f30c047e..a43f032f86bb 100644 --- a/packages/web/src/content/docs/pl/go.mdx +++ b/packages/web/src/content/docs/pl/go.mdx @@ -69,6 +69,7 @@ Obecna lista modeli obejmuje: - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([ograniczone regiony](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -111,6 +112,7 @@ Poniższa tabela przedstawia szacunkową liczbę żądań na podstawie typowych | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -135,6 +137,7 @@ Szacunki te opierają się na zaobserwowanych wzorcach żądań: - MiniMax M2.7 — 300 tokenów wejściowych, 55 000 w pamięci podręcznej, 125 tokenów wyjściowych na żądanie - Muse Spark 1.2 Contributor — 620 tokenów wejściowych, 71 400 w pamięci podręcznej, 300 tokenów wyjściowych na żądanie - Qwen3.8 Max — 420 tokenów wejściowych, 66 000 w pamięci podręcznej, 200 tokenów wyjściowych na żądanie +- Qwen3.8 Flash — 600 tokenów wejściowych, 58 000 w pamięci podręcznej, 200 tokenów wyjściowych na żądanie - Qwen3.7 Max — 420 tokenów wejściowych, 66 000 w pamięci podręcznej, 200 tokenów wyjściowych na żądanie - Qwen3.7 Plus — 500 tokenów wejściowych, 57 000 w pamięci podręcznej, 190 tokenów wyjściowych na żądanie - Qwen3.6 Plus — 500 tokenów wejściowych, 57 000 w pamięci podręcznej, 190 tokenów wyjściowych na żądanie @@ -165,6 +168,7 @@ Szacunki opierają się również na następujących cenach za 1M tokenów oraz | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -236,6 +240,7 @@ Możesz również uzyskać dostęp do modeli Go za pośrednictwem następującyc | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -274,6 +279,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | Niewykorzystywane | 0 dni | | MiMo-V2.5 | Niewykorzystywane | 0 dni | | Qwen3.8 Max | Niewykorzystywane | 0 dni | +| Qwen3.8 Flash | Niewykorzystywane | 0 dni | | Qwen3.7 Max | Niewykorzystywane | 0 dni | | Qwen3.7 Plus | Niewykorzystywane | 0 dni | | Qwen3.6 Plus | Niewykorzystywane | 0 dni | diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index a0ec0c5b5be4..5cc64321277c 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -75,6 +75,7 @@ A lista atual de modelos inclui: - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([regiões limitadas](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -117,6 +118,7 @@ A tabela abaixo fornece uma contagem estimada de requisições com base nos padr | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -141,6 +143,7 @@ As estimativas se baseiam nos padrões de requisições observados: - MiniMax M2.7 — 300 tokens de entrada, 55.000 em cache, 125 tokens de saída por requisição - Muse Spark 1.2 Contributor — 620 tokens de entrada, 71.400 em cache, 300 tokens de saída por requisição - Qwen3.8 Max — 420 tokens de entrada, 66.000 em cache, 200 tokens de saída por requisição +- Qwen3.8 Flash — 600 tokens de entrada, 58.000 em cache, 200 tokens de saída por requisição - Qwen3.7 Max — 420 tokens de entrada, 66.000 em cache, 200 tokens de saída por requisição - Qwen3.7 Plus — 500 tokens de entrada, 57.000 em cache, 190 tokens de saída por requisição - Qwen3.6 Plus — 500 tokens de entrada, 57.000 em cache, 190 tokens de saída por requisição @@ -171,6 +174,7 @@ As estimativas também se baseiam nos seguintes preços por 1M tokens e no uso m | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -244,6 +248,7 @@ Você também pode acessar os modelos do Go através dos seguintes endpoints de | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -282,6 +287,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | Não usado | 0 dias | | MiMo-V2.5 | Não usado | 0 dias | | Qwen3.8 Max | Não usado | 0 dias | +| Qwen3.8 Flash | Não usado | 0 dias | | Qwen3.7 Max | Não usado | 0 dias | | Qwen3.7 Plus | Não usado | 0 dias | | Qwen3.6 Plus | Não usado | 0 dias | diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx index c6a05c844c3c..91c2936b3826 100644 --- a/packages/web/src/content/docs/ru/go.mdx +++ b/packages/web/src/content/docs/ru/go.mdx @@ -75,6 +75,7 @@ OpenCode Go работает так же, как и любой другой пр - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([доступно в отдельных регионах](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -117,6 +118,7 @@ OpenCode Go включает следующие лимиты: | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -141,6 +143,7 @@ OpenCode Go включает следующие лимиты: - MiniMax M2.7 — 300 входных, 55,000 кешированных, 125 выходных токенов на запрос - Muse Spark 1.2 Contributor — 620 входных, 71,400 кешированных, 300 выходных токенов на запрос - Qwen3.8 Max — 420 входных, 66,000 кешированных, 200 выходных токенов на запрос +- Qwen3.8 Flash — 600 входных, 58,000 кешированных, 200 выходных токенов на запрос - Qwen3.7 Max — 420 входных, 66,000 кешированных, 200 выходных токенов на запрос - Qwen3.7 Plus — 500 входных, 57,000 кешированных, 190 выходных токенов на запрос - Qwen3.6 Plus — 500 входных, 57,000 кешированных, 190 выходных токенов на запрос @@ -171,6 +174,7 @@ OpenCode Go включает следующие лимиты: | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -244,6 +248,7 @@ OpenCode Go включает следующие лимиты: | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -282,6 +287,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | Не используется | 0 дней | | MiMo-V2.5 | Не используется | 0 дней | | Qwen3.8 Max | Не используется | 0 дней | +| Qwen3.8 Flash | Не используется | 0 дней | | Qwen3.7 Max | Не используется | 0 дней | | Qwen3.7 Plus | Не используется | 0 дней | | Qwen3.6 Plus | Не используется | 0 дней | diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx index 26ae73a36866..05c7facde5fd 100644 --- a/packages/web/src/content/docs/th/go.mdx +++ b/packages/web/src/content/docs/th/go.mdx @@ -65,6 +65,7 @@ OpenCode Go ทำงานเหมือนกับผู้ให้บร - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([เฉพาะบางภูมิภาค](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -107,6 +108,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -131,6 +133,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: - MiniMax M2.7 — 300 input, 55,000 cached, 125 output tokens ต่อ request - Muse Spark 1.2 Contributor — 620 input, 71,400 cached, 300 output tokens ต่อ request - Qwen3.8 Max — 420 input, 66,000 cached, 200 output tokens ต่อ request +- Qwen3.8 Flash — 600 input, 58,000 cached, 200 output tokens ต่อ request - Qwen3.7 Max — 420 input, 66,000 cached, 200 output tokens ต่อ request - Qwen3.7 Plus — 500 input, 57,000 cached, 190 output tokens ต่อ request - Qwen3.6 Plus — 500 input, 57,000 cached, 190 output tokens ต่อ request @@ -161,6 +164,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -232,6 +236,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -268,6 +273,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | ไม่นำไปใช้ | 0 วัน | | MiMo-V2.5 | ไม่นำไปใช้ | 0 วัน | | Qwen3.8 Max | ไม่นำไปใช้ | 0 วัน | +| Qwen3.8 Flash | ไม่นำไปใช้ | 0 วัน | | Qwen3.7 Max | ไม่นำไปใช้ | 0 วัน | | Qwen3.7 Plus | ไม่นำไปใช้ | 0 วัน | | Qwen3.6 Plus | ไม่นำไปใช้ | 0 วัน | diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx index 7200d2e13259..5b2222eb4cb8 100644 --- a/packages/web/src/content/docs/tr/go.mdx +++ b/packages/web/src/content/docs/tr/go.mdx @@ -65,6 +65,7 @@ Mevcut model listesi şunları içerir: - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([sınırlı bölgeler](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -107,6 +108,7 @@ Aşağıdaki tablo, tipik Go kullanım modellerine dayalı tahmini bir istek say | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -131,6 +133,7 @@ Tahminler, gözlemlenen istek modellerine dayanır: - MiniMax M2.7 — İstek başına 300 girdi, 55.000 önbelleğe alınmış, 125 çıktı token'ı - Muse Spark 1.2 Contributor — İstek başına 620 girdi, 71.400 önbelleğe alınmış, 300 çıktı token'ı - Qwen3.8 Max — İstek başına 420 girdi, 66.000 önbelleğe alınmış, 200 çıktı token'ı +- Qwen3.8 Flash — İstek başına 600 girdi, 58.000 önbelleğe alınmış, 200 çıktı token'ı - Qwen3.7 Max — İstek başına 420 girdi, 66.000 önbelleğe alınmış, 200 çıktı token'ı - Qwen3.7 Plus — İstek başına 500 girdi, 57.000 önbelleğe alınmış, 190 çıktı token'ı - Qwen3.6 Plus — İstek başına 500 girdi, 57.000 önbelleğe alınmış, 190 çıktı token'ı @@ -161,6 +164,7 @@ Tahminler ayrıca 1M token başına aşağıdaki fiyatlara ve her modelle birlik | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -232,6 +236,7 @@ Go modellerine aşağıdaki API uç noktaları aracılığıyla da erişebilirsi | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -268,6 +273,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | Kullanılmaz | 0 gün | | MiMo-V2.5 | Kullanılmaz | 0 gün | | Qwen3.8 Max | Kullanılmaz | 0 gün | +| Qwen3.8 Flash | Kullanılmaz | 0 gün | | Qwen3.7 Max | Kullanılmaz | 0 gün | | Qwen3.7 Plus | Kullanılmaz | 0 gün | | Qwen3.6 Plus | Kullanılmaz | 0 gün | diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx index 81f9274b4202..2a66074ad9c8 100644 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ b/packages/web/src/content/docs/zh-cn/go.mdx @@ -65,6 +65,7 @@ OpenCode Go 的工作方式与 OpenCode 中的其他提供商一样。 - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([仅限部分地区](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -107,6 +108,7 @@ OpenCode Go 包含以下限制: | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -133,6 +135,7 @@ OpenCode Go 包含以下限制: - MiniMax M2.7 — 每次请求 300 个输入 token,55,000 个缓存 token,125 个输出 token - Muse Spark 1.2 Contributor — 每次请求 620 个输入 token,71,400 个缓存 token,300 个输出 token - Qwen3.8 Max — 每次请求 420 个输入 token,66,000 个缓存 token,200 个输出 token +- Qwen3.8 Flash — 每次请求 600 个输入 token,58,000 个缓存 token,200 个输出 token - Qwen3.7 Max — 每次请求 420 个输入 token,66,000 个缓存 token,200 个输出 token - Qwen3.7 Plus — 每次请求 500 个输入 token,57,000 个缓存 token,190 个输出 token - Qwen3.6 Plus — 每次请求 500 个输入 token,57,000 个缓存 token,190 个输出 token @@ -161,6 +164,7 @@ OpenCode Go 包含以下限制: | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -232,6 +236,7 @@ OpenCode Go 包含以下限制: | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -268,6 +273,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | 不使用 | 0 天 | | MiMo-V2.5 | 不使用 | 0 天 | | Qwen3.8 Max | 不使用 | 0 天 | +| Qwen3.8 Flash | 不使用 | 0 天 | | Qwen3.7 Max | 不使用 | 0 天 | | Qwen3.7 Plus | 不使用 | 0 天 | | Qwen3.6 Plus | 不使用 | 0 天 | diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx index bf9076663cee..e006253dfe0e 100644 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ b/packages/web/src/content/docs/zh-tw/go.mdx @@ -65,6 +65,7 @@ OpenCode Go 的運作方式與 OpenCode 中的任何其他供應商相同。 - **MiniMax M2.7** - **Muse Spark 1.2 Contributor** ([僅限部分地區](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** +- **Qwen3.8 Flash** - **Qwen3.7 Max** - **Qwen3.7 Plus** - **Qwen3.6 Plus** @@ -107,6 +108,7 @@ OpenCode Go 包含以下限制: | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | +| Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | | Qwen3.7 Max | 340 | 840 | 1,690 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | @@ -131,6 +133,7 @@ OpenCode Go 包含以下限制: - MiniMax M2.7 — 每次請求 300 個輸入 token、55,000 個快取 token、125 個輸出 token - Muse Spark 1.2 Contributor — 每次請求 620 個輸入 token、71,400 個快取 token、300 個輸出 token - Qwen3.8 Max — 每次請求 420 個輸入 token、66,000 個快取 token、200 個輸出 token +- Qwen3.8 Flash — 每次請求 600 個輸入 token、58,000 個快取 token、200 個輸出 token - Qwen3.7 Max — 每次請求 420 個輸入 token、66,000 個快取 token、200 個輸出 token - Qwen3.7 Plus — 每次請求 500 個輸入 token、57,000 個快取 token、190 個輸出 token - Qwen3.6 Plus — 每次請求 500 個輸入 token、57,000 個快取 token、190 個輸出 token @@ -161,6 +164,7 @@ OpenCode Go 包含以下限制: | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | | Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | @@ -232,6 +236,7 @@ OpenCode Go 包含以下限制: | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -268,6 +273,7 @@ https://opencode.ai/zen/go/v1/models | MiMo-V2.5-Pro | 不使用 | 0 天 | | MiMo-V2.5 | 不使用 | 0 天 | | Qwen3.8 Max | 不使用 | 0 天 | +| Qwen3.8 Flash | 不使用 | 0 天 | | Qwen3.7 Max | 不使用 | 0 天 | | Qwen3.7 Plus | 不使用 | 0 天 | | Qwen3.6 Plus | 不使用 | 0 天 | From 733562e92a96255fb123aae92f267e4534a635fb Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Fri, 28 Aug 2026 15:38:25 +1000 Subject: [PATCH 065/185] fix(opencode): remove Bun dependency from Azure authentication (#45845) Co-authored-by: Hona <10430890+Hona@users.noreply.github.com> --- packages/opencode/src/plugin/azure.ts | 50 +++--- packages/opencode/test/plugin/azure.test.ts | 179 ++++++++++++++------ 2 files changed, 155 insertions(+), 74 deletions(-) diff --git a/packages/opencode/src/plugin/azure.ts b/packages/opencode/src/plugin/azure.ts index 8dd893a0ebd4..33a164f372d9 100644 --- a/packages/opencode/src/plugin/azure.ts +++ b/packages/opencode/src/plugin/azure.ts @@ -2,10 +2,12 @@ import { readFile } from "node:fs/promises" import { homedir } from "node:os" import { join } from "node:path" import { InstallationVersion } from "@opencode-ai/core/installation/version" +import { which } from "@opencode-ai/core/util/which" import type { Hooks } from "@opencode-ai/plugin" import type { Provider } from "@opencode-ai/sdk/v2" import { Effect, Schema } from "effect" import { OAUTH_DUMMY_KEY } from "../auth" +import { Process } from "../util/process" const AZURE_COGNITIVE_SERVICES_SCOPE = "https://cognitiveservices.azure.com/.default" const AZURE_FOUNDRY_SCOPE = "https://ai.azure.com/.default" @@ -44,16 +46,11 @@ const decodeAzureDeployments = Schema.decodeUnknownPromise( ), ) -type AzureCommand = { - quiet(): AzureCommand - json(): Promise -} - -type AzureShell = (strings: TemplateStringsArray, ...values: string[]) => AzureCommand +type AzureCommand = (args: string[]) => Promise type AzureAccount = { readonly name: string; readonly resourceGroup: string } -export async function AzureAuthPlugin(input: { $: AzureShell }): Promise { - const available = Boolean(Bun.which("az", { PATH: process.env.PATH })) +export async function AzureAuthPlugin(): Promise { + const available = Boolean(which("az")) // Avoid launching Azure CLI on unrelated commands just because the executable is installed. const signedIn = available ? await readFile(join(process.env.AZURE_CONFIG_DIR ?? join(homedir(), ".azure"), "azureProfile.json"), "utf8") @@ -63,17 +60,15 @@ export async function AzureAuthPlugin(input: { $: AzureShell }): Promise : false const accounts = !process.env.AZURE_RESOURCE_NAME && !process.env.AZURE_RESOURCE_GROUP && signedIn - ? await input.$`az cognitiveservices account list --output json --only-show-errors` - .quiet() - .json() + ? await runAzure(["cognitiveservices", "account", "list", "--output", "json", "--only-show-errors"]) .then(decodeAzureAccounts) .catch(() => []) : [] - return createAzureAuthHooks(input.$, fetch, accounts, available) + return createAzureAuthHooks(runAzure, fetch, accounts, available) } export function createAzureAuthHooks( - shell: AzureShell, + run: AzureCommand, request: (input: RequestInfo | URL, init?: RequestInit) => Promise = fetch, accounts: readonly AzureAccount[] = [], available = true, @@ -84,7 +79,7 @@ export function createAzureAuthHooks( if (cached && cached.expires - Date.now() > AZURE_TOKEN_REFRESH_BUFFER) return cached.token const result = await decodeAzureCliToken( - await shell`az account get-access-token --scope ${scope} --output json`.quiet().json(), + await run(["account", "get-access-token", "--scope", scope, "--output", "json"]), ) const expires = result.expires_on !== undefined ? result.expires_on * 1000 : Date.parse(result.expiresOn ?? "") if (!Number.isFinite(expires)) throw new Error("Azure CLI returned an invalid token expiration") @@ -135,7 +130,7 @@ export function createAzureAuthHooks( if (context.auth?.type !== "oauth") return provider.models const resource = context.auth.accountId if (!resource) return {} - return discoverAzureModels(provider.models, resource, shell).catch((error: unknown) => { + return discoverAzureModels(provider.models, resource, run).catch((error: unknown) => { Effect.runSync( Effect.logWarning("Azure model discovery failed", { resource, @@ -205,21 +200,36 @@ export function createAzureAuthHooks( return hooks } -async function discoverAzureModels(models: Provider["models"], resourceName: string, shell: AzureShell) { +async function runAzure(args: string[]): Promise { + const result = await Process.run([which("az") ?? "az", ...args]) + return JSON.parse(result.stdout.toString()) +} + +async function discoverAzureModels(models: Provider["models"], resourceName: string, run: AzureCommand) { const resourceGroup = process.env.AZURE_RESOURCE_GROUP const account = resourceGroup ? { name: resourceName, resourceGroup } : ( await decodeAzureAccounts( - await shell`az cognitiveservices account list --output json --only-show-errors`.quiet().json(), + await run(["cognitiveservices", "account", "list", "--output", "json", "--only-show-errors"]), ) ).find((account) => account.name.toLowerCase() === resourceName.toLowerCase()) if (!account) throw new Error(`Azure resource "${resourceName}" was not found in the active subscription`) const deployments = await decodeAzureDeployments( - await shell`az cognitiveservices account deployment list --name ${account.name} --resource-group ${account.resourceGroup} --output json --only-show-errors` - .quiet() - .json(), + await run([ + "cognitiveservices", + "account", + "deployment", + "list", + "--name", + account.name, + "--resource-group", + account.resourceGroup, + "--output", + "json", + "--only-show-errors", + ]), ) const found = new Map() deployments.forEach((deployment) => { diff --git a/packages/opencode/test/plugin/azure.test.ts b/packages/opencode/test/plugin/azure.test.ts index efb4c94f4d3a..11e7f3a2c3e0 100644 --- a/packages/opencode/test/plugin/azure.test.ts +++ b/packages/opencode/test/plugin/azure.test.ts @@ -1,11 +1,14 @@ import { afterEach, describe, expect, test } from "bun:test" import { chmod } from "node:fs/promises" import path from "node:path" +import { pathToFileURL } from "node:url" import { tmpdir } from "../fixture/fixture" import type { Hooks } from "@opencode-ai/plugin" import type { Auth, Provider } from "@opencode-ai/sdk/v2" import { OAUTH_DUMMY_KEY } from "../../src/auth" import { AzureAuthPlugin, createAzureAuthHooks } from "../../src/plugin/azure" +import { Process } from "../../src/util/process" +import { which } from "@opencode-ai/core/util/which" const resourceName = process.env.AZURE_RESOURCE_NAME const resourceGroup = process.env.AZURE_RESOURCE_GROUP @@ -93,35 +96,127 @@ function models(...ids: string[]): Provider["models"] { } function azureShell(scopes: string[]) { - return (_strings: TemplateStringsArray, ...values: string[]) => { - const output = { - quiet: () => output, - json: async () => { - const scope = values[0] - scopes.push(scope) - return { - accessToken: `${scope}-token`, - expires_on: Math.floor((Date.now() + 60 * 60 * 1000) / 1000), - } - }, + return async (args: string[]) => { + const scope = args[args.indexOf("--scope") + 1] + scopes.push(scope) + return { + accessToken: `${scope}-token`, + expires_on: Math.floor((Date.now() + 60 * 60 * 1000) / 1000), } - return output } } function discoveryShell(accounts: unknown, deployments: unknown, commands: string[]) { - return (strings: TemplateStringsArray, ...values: string[]) => { - const command = String.raw(strings, ...values) + return async (args: string[]) => { + const command = ["az", ...args].join(" ") commands.push(command) - const output = { - quiet: () => output, - json: async () => (command.includes("deployment list") ? deployments : accounts), - } - return output + return command.includes("deployment list") ? deployments : accounts + } +} + +async function azureCli(dir: string) { + const bin = path.join(dir, "azure cli") + const calls = path.join(dir, "calls.jsonl") + const script = path.join(bin, "cli.cjs") + await Bun.write(calls, "") + await Bun.write( + script, + ` + const fs = require("node:fs") + const args = process.argv.slice(2) + fs.appendFileSync(${JSON.stringify(calls)}, JSON.stringify(args) + "\\n") + console.log(JSON.stringify(args.includes("get-access-token") + ? { accessToken: "test-token", expires_on: Math.floor(Date.now() / 1000) + 3600 } + : args.includes("deployment") ? [] : [{ name: "test-resource", resourceGroup: "test group & value" }])) + `, + ) + const executable = path.join(bin, process.platform === "win32" ? "az.cmd" : "az") + await Bun.write( + executable, + process.platform === "win32" + ? `@"${process.execPath}" "${script}" %*\r\n` + : `#!/bin/sh\nexec '${process.execPath}' '${script}' "$@"\n`, + ) + await chmod(executable, 0o755) + return { + bin, + calls: async () => + (await Bun.file(calls).text()) + .split("\n") + .filter(Boolean) + .map((line) => JSON.parse(line)), } } describe("plugin.azure", () => { + test("initializes and runs Azure CLI under Node without Bun or a plugin shell", async () => { + await using tmp = await tmpdir() + const node = which("node") + if (!node) throw new Error("Node is required for the Azure runtime compatibility test") + const bundle = await Bun.build({ + entrypoints: [path.join(import.meta.dir, "../../src/plugin/azure.ts")], + target: "node", + format: "esm", + }) + expect(bundle.success).toBe(true) + const entry = path.join(tmp.path, "azure.mjs") + await Bun.write(entry, bundle.outputs[0]) + const cli = await azureCli(tmp.path) + await Bun.write(path.join(tmp.path, "azureProfile.json"), '\uFEFF{"subscriptions":[{}]}') + for (const installed of [false, true]) { + const result = await Process.run( + [ + node, + "--input-type=module", + "-e", + ` + import assert from "node:assert/strict" + import { AzureAuthPlugin } from ${JSON.stringify(pathToFileURL(entry).href)} + assert.equal(typeof Bun, "undefined") + delete process.env.AZURE_RESOURCE_NAME + delete process.env.AZURE_RESOURCE_GROUP + const hooks = await AzureAuthPlugin({ $: undefined }) + assert.equal(hooks.auth.provider, "azure") + assert.deepEqual(hooks.auth.methods.map((method) => method.type), ${JSON.stringify(installed ? ["api", "oauth"] : ["api"])}) + if (${installed}) { + const method = hooks.auth.methods.find((method) => method.type === "oauth") + assert.equal(method.prompts[0].type, "select") + const authorization = await method.authorize({ resourceSelection: "test-resource" }) + const auth = await authorization.callback() + assert.equal(auth.type, "success") + assert.equal(auth.accountId, "test-resource") + assert.deepEqual(await hooks.provider.models({ models: {} }, { auth: { ...auth, type: "oauth" } }), {}) + } + `, + ], + { + env: { PATH: installed ? cli.bin : tmp.path, XDG_DATA_HOME: tmp.path, AZURE_CONFIG_DIR: tmp.path }, + nothrow: true, + }, + ) + expect(result.stderr.toString()).toBe("") + expect(result.code).toBe(0) + } + expect(await cli.calls()).toEqual([ + ["cognitiveservices", "account", "list", "--output", "json", "--only-show-errors"], + ["account", "get-access-token", "--scope", "https://cognitiveservices.azure.com/.default", "--output", "json"], + ["cognitiveservices", "account", "list", "--output", "json", "--only-show-errors"], + [ + "cognitiveservices", + "account", + "deployment", + "list", + "--name", + "test-resource", + "--resource-group", + "test group & value", + "--output", + "json", + "--only-show-errors", + ], + ]) + }) + for (const profile of [ { name: "missing", content: undefined, signedIn: false }, { name: "logged out", content: '{"subscriptions":[]}', signedIn: false }, @@ -129,22 +224,16 @@ describe("plugin.azure", () => { ]) { test(`only lists resources for a cached Azure login (${profile.name})`, async () => { await using tmp = await tmpdir() - const executable = path.join(tmp.path, process.platform === "win32" ? "az.cmd" : "az") - await Bun.write(executable, process.platform === "win32" ? "@exit /b 0\r\n" : "#!/bin/sh\nexit 0\n") - await chmod(executable, 0o755) - process.env.PATH = `${tmp.path}${path.delimiter}${originalPath}` + const cli = await azureCli(tmp.path) + process.env.PATH = cli.bin process.env.AZURE_CONFIG_DIR = path.join(tmp.path, "azure-cli") if (profile.content) await Bun.write(path.join(process.env.AZURE_CONFIG_DIR, "azureProfile.json"), profile.content) delete process.env.AZURE_RESOURCE_NAME delete process.env.AZURE_RESOURCE_GROUP - const commands: string[] = [] - - const hooks = await AzureAuthPlugin({ - $: discoveryShell([{ name: "test-resource", resourceGroup: "test-group" }], [], commands), - }) + const hooks = await AzureAuthPlugin() - expect(commands).toHaveLength(profile.signedIn ? 1 : 0) + expect(await cli.calls()).toHaveLength(profile.signedIn ? 1 : 0) expect(hooks.auth?.methods.some((method) => method.type === "oauth")).toBe(true) if (profile.signedIn) expect(oauthMethod(hooks).prompts?.[0].type).toBe("select") }) @@ -246,16 +335,10 @@ describe("plugin.azure", () => { }) test("supports Azure CLI versions that only provide expiresOn", async () => { - const hooks = createAzureAuthHooks(() => { - const output = { - quiet: () => output, - json: async () => ({ - accessToken: "legacy-token", - expiresOn: new Date(Date.now() + 60 * 60 * 1000).toISOString(), - }), - } - return output - }) + const hooks = createAzureAuthHooks(async () => ({ + accessToken: "legacy-token", + expiresOn: new Date(Date.now() + 60 * 60 * 1000).toISOString(), + })) const authorization = await oauthMethod(hooks).authorize({ resourceName: "test-resource" }) if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") @@ -263,13 +346,7 @@ describe("plugin.azure", () => { }) test("rejects Azure CLI tokens without a usable expiration", async () => { - const hooks = createAzureAuthHooks(() => { - const output = { - quiet: () => output, - json: async () => ({ accessToken: "invalid-token" }), - } - return output - }) + const hooks = createAzureAuthHooks(async () => ({ accessToken: "invalid-token" })) const authorization = await oauthMethod(hooks).authorize({ resourceName: "test-resource" }) if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") @@ -369,14 +446,8 @@ describe("plugin.azure", () => { }) test("keeps configured models available when Azure discovery fails", async () => { - const hooks = createAzureAuthHooks(() => { - const output = { - quiet: () => output, - json: async () => { - throw new Error("Azure CLI failed") - }, - } - return output + const hooks = createAzureAuthHooks(async () => { + throw new Error("Azure CLI failed") }) const list = hooks.provider?.models if (!list) throw new Error("Azure provider model hook is missing") From c2e39bb5565f9a76f4c9a2eed171f088f949310a Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Fri, 28 Aug 2026 05:52:06 +0000 Subject: [PATCH 066/185] test(opencode): use native config path in permission assertion (#45849) Co-authored-by: Hona <10430890+Hona@users.noreply.github.com> --- packages/opencode/test/config/config.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/test/config/config.test.ts b/packages/opencode/test/config/config.test.ts index 4eb46ae1e900..8d5baede50fd 100644 --- a/packages/opencode/test/config/config.test.ts +++ b/packages/opencode/test/config/config.test.ts @@ -573,7 +573,7 @@ it.effect("rejects native project permissions even with inherited V1 rules", () if (Exit.isFailure(exit)) expect(Cause.squash(exit.cause)).toMatchObject({ data: { - path: expect.stringContaining("project/opencode.json"), + path: expect.stringContaining(path.join("project", "opencode.json")), issues: [ { path: ["permissions"], message: expect.stringContaining('Use V1 "permission" rules or run opencode2') }, { path: ["agents", "reviewer", "permissions"], message: expect.stringContaining("not supported") }, From 755ebdb94ee755a9d5691e47af2c16f56696996e Mon Sep 17 00:00:00 2001 From: opencode Date: Fri, 28 Aug 2026 05:58:17 +0000 Subject: [PATCH 067/185] sync release versions for v1.18.25 --- bun.lock | 56 ++++++++++----------- packages/app/package.json | 2 +- packages/cli/package.json | 2 +- packages/codemode/package.json | 2 +- packages/console/app/package.json | 2 +- packages/console/core/package.json | 2 +- packages/console/function/package.json | 2 +- packages/console/mail/package.json | 2 +- packages/console/support/package.json | 2 +- packages/core/package.json | 2 +- packages/desktop/package.json | 2 +- packages/effect-drizzle-sqlite/package.json | 2 +- packages/effect-sqlite-node/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/function/package.json | 2 +- packages/http-recorder/package.json | 2 +- packages/llm/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- packages/server/package.json | 2 +- packages/session-ui/package.json | 2 +- packages/slack/package.json | 2 +- packages/stats/app/package.json | 2 +- packages/stats/core/package.json | 2 +- packages/stats/server/package.json | 2 +- packages/tui/package.json | 2 +- packages/ui/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 30 files changed, 57 insertions(+), 57 deletions(-) diff --git a/bun.lock b/bun.lock index ec7c2c1ebf52..c8cb37f4e50c 100644 --- a/bun.lock +++ b/bun.lock @@ -29,7 +29,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@corvu/drawer": "catalog:", "@dnd-kit/abstract": "0.5.0", @@ -96,7 +96,7 @@ }, "packages/cli": { "name": "@opencode-ai/cli", - "version": "1.18.24", + "version": "1.18.25", "bin": { "lildax": "./bin/lildax.cjs", }, @@ -144,7 +144,7 @@ }, "packages/codemode": { "name": "@opencode-ai/codemode", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "acorn": "8.15.0", "effect": "catalog:", @@ -158,7 +158,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -194,7 +194,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -221,7 +221,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@ai-sdk/anthropic": "3.0.82", "@ai-sdk/openai": "3.0.48", @@ -244,7 +244,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -268,7 +268,7 @@ }, "packages/console/support": { "name": "@opencode-ai/console-support", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@opencode-ai/console-core": "workspace:*", @@ -288,7 +288,7 @@ }, "packages/core": { "name": "@opencode-ai/core", - "version": "1.18.24", + "version": "1.18.25", "bin": { "opencode": "./bin/opencode", }, @@ -382,7 +382,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@zip.js/zip.js": "2.7.62", "drizzle-orm": "catalog:", @@ -436,7 +436,7 @@ }, "packages/effect-drizzle-sqlite": { "name": "@opencode-ai/effect-drizzle-sqlite", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "drizzle-orm": "catalog:", "effect": "catalog:", @@ -450,7 +450,7 @@ }, "packages/effect-sqlite-node": { "name": "@opencode-ai/effect-sqlite-node", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "effect": "catalog:", }, @@ -462,7 +462,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@hono/standard-validator": "catalog:", "@opencode-ai/core": "workspace:*", @@ -494,7 +494,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -510,7 +510,7 @@ }, "packages/http-recorder": { "name": "@opencode-ai/http-recorder", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@effect/platform-node": "4.0.0-beta.83", "@effect/platform-node-shared": "4.0.0-beta.83", @@ -541,7 +541,7 @@ }, "packages/llm": { "name": "@opencode-ai/llm", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@opencode-ai/schema": "workspace:*", "@smithy/eventstream-codec": "4.2.14", @@ -560,7 +560,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.18.24", + "version": "1.18.25", "bin": { "opencode": "./bin/opencode", }, @@ -691,7 +691,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@ai-sdk/provider": "3.0.8", "@opencode-ai/sdk": "workspace:*", @@ -767,7 +767,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "cross-spawn": "catalog:", }, @@ -782,7 +782,7 @@ }, "packages/server": { "name": "@opencode-ai/server", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/protocol": "workspace:*", @@ -797,7 +797,7 @@ }, "packages/session-ui": { "name": "@opencode-ai/session-ui", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/client": "file:../app/vendor/opencode-ai-client-1.17.13-v2.tgz", @@ -837,7 +837,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -850,7 +850,7 @@ }, "packages/stats/app": { "name": "@opencode-ai/stats-app", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@ibm/plex": "6.4.1", "@kobalte/core": "catalog:", @@ -877,7 +877,7 @@ }, "packages/stats/core": { "name": "@opencode-ai/stats-core", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@aws-sdk/client-athena": "3.933.0", "@planetscale/database": "1.19.0", @@ -896,7 +896,7 @@ }, "packages/stats/server": { "name": "@opencode-ai/stats-server", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@aws-sdk/client-firehose": "3.933.0", "@effect/platform-node": "catalog:", @@ -938,7 +938,7 @@ }, "packages/tui": { "name": "@opencode-ai/tui", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/plugin": "workspace:*", @@ -965,7 +965,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@kobalte/core": "catalog:", "@pierre/diffs": "catalog:", @@ -1016,7 +1016,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/app/package.json b/packages/app/package.json index fa7e969d067f..e0a1d076e73d 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.18.24", + "version": "1.18.25", "description": "", "type": "module", "exports": { diff --git a/packages/cli/package.json b/packages/cli/package.json index cdd74c067ca4..207967c19c01 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/cli", - "version": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "bin": { diff --git a/packages/codemode/package.json b/packages/codemode/package.json index 9772aeee2311..400451efca64 100644 --- a/packages/codemode/package.json +++ b/packages/codemode/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/codemode", - "version": "1.18.24", + "version": "1.18.25", "description": "Effect-native confined code execution over schema-described tools", "private": true, "type": "module", diff --git a/packages/console/app/package.json b/packages/console/app/package.json index 908421539385..e83f568c3be2 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index 729ce531ff50..0ce0fa748339 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/console-core", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 9afac31c073f..734a3efe345e 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.18.24", + "version": "1.18.25", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index 09e59abd7229..a859c292f0f4 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/console/support/package.json b/packages/console/support/package.json index f1a837f147a5..c68e83fcdf37 100644 --- a/packages/console/support/package.json +++ b/packages/console/support/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-support", - "version": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/core/package.json b/packages/core/package.json index c185ce9233cf..37afa0b65b2c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.24", + "version": "1.18.25", "name": "@opencode-ai/core", "type": "module", "license": "MIT", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 91cbafd1e4ab..d4d2532c522f 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "homepage": "https://opencode.ai", diff --git a/packages/effect-drizzle-sqlite/package.json b/packages/effect-drizzle-sqlite/package.json index ed29249c656e..eb8103695c4e 100644 --- a/packages/effect-drizzle-sqlite/package.json +++ b/packages/effect-drizzle-sqlite/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.24", + "version": "1.18.25", "name": "@opencode-ai/effect-drizzle-sqlite", "type": "module", "license": "MIT", diff --git a/packages/effect-sqlite-node/package.json b/packages/effect-sqlite-node/package.json index 0de3380caab1..829aab45fab8 100644 --- a/packages/effect-sqlite-node/package.json +++ b/packages/effect-sqlite-node/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.24", + "version": "1.18.25", "name": "@opencode-ai/effect-sqlite-node", "type": "module", "license": "MIT", diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index 6f38a4ce224d..6e70986db787 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/function/package.json b/packages/function/package.json index c5da6ac18ef0..1c0931b39538 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.18.24", + "version": "1.18.25", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/http-recorder/package.json b/packages/http-recorder/package.json index 6a4f06694730..b7041f7225d7 100644 --- a/packages/http-recorder/package.json +++ b/packages/http-recorder/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.24", + "version": "1.18.25", "name": "@opencode-ai/http-recorder", "description": "Record and replay Effect HTTP client traffic with deterministic cassettes", "type": "module", diff --git a/packages/llm/package.json b/packages/llm/package.json index bbd432a22210..e7b93f1fda7a 100644 --- a/packages/llm/package.json +++ b/packages/llm/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.24", + "version": "1.18.25", "name": "@opencode-ai/llm", "type": "module", "license": "MIT", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 007c0bcaddd7..45c6110363ec 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.24", + "version": "1.18.25", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 9f3de7c8ca88..60c3cad95fb3 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/plugin", - "version": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index ae7135ac96e7..66b07a349f6a 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/sdk", - "version": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index d33ddbe09489..7c65eedadade 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/server", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/session-ui/package.json b/packages/session-ui/package.json index a373c2ab0eb7..16a2d88151e0 100644 --- a/packages/session-ui/package.json +++ b/packages/session-ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/session-ui", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/slack/package.json b/packages/slack/package.json index a2d71e2b5f61..ecaa750fd542 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/stats/app/package.json b/packages/stats/app/package.json index f35c12961913..a53fca609a3e 100644 --- a/packages/stats/app/package.json +++ b/packages/stats/app/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-app", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/core/package.json b/packages/stats/core/package.json index 882f51f403ad..5d333cfce322 100644 --- a/packages/stats/core/package.json +++ b/packages/stats/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-core", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/server/package.json b/packages/stats/server/package.json index 135e884b3ba9..0681be86c3e7 100644 --- a/packages/stats/server/package.json +++ b/packages/stats/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-server", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/tui/package.json b/packages/tui/package.json index cc211c1d61e0..d208dfa62655 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/tui", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/ui/package.json b/packages/ui/package.json index a62dc8dbfceb..dc3052a6cd0d 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "repository": { diff --git a/packages/web/package.json b/packages/web/package.json index de7043fc9f6d..5552d1fffeb1 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -2,7 +2,7 @@ "name": "@opencode-ai/web", "type": "module", "license": "MIT", - "version": "1.18.24", + "version": "1.18.25", "scripts": { "dev": "astro dev", "dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev", diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index f7526a3689b3..de3b012f3ec9 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "opencode", "displayName": "opencode", "description": "opencode for VS Code", - "version": "1.18.24", + "version": "1.18.25", "publisher": "sst-dev", "repository": { "type": "git", From 1be9fd55a9326d5e7b09786195e5669e311e61b4 Mon Sep 17 00:00:00 2001 From: Jack Date: Fri, 28 Aug 2026 18:21:28 +0800 Subject: [PATCH 068/185] docs(go): add Hy4 preview (#45904) --- packages/console/app/src/routes/go/index.tsx | 2 ++ .../app/src/routes/workspace/[id]/go/lite-section.tsx | 1 + packages/web/src/content/docs/ar/go.mdx | 6 ++++++ packages/web/src/content/docs/bs/go.mdx | 6 ++++++ packages/web/src/content/docs/da/go.mdx | 6 ++++++ packages/web/src/content/docs/de/go.mdx | 6 ++++++ packages/web/src/content/docs/es/go.mdx | 6 ++++++ packages/web/src/content/docs/fr/go.mdx | 6 ++++++ packages/web/src/content/docs/go.mdx | 6 ++++++ packages/web/src/content/docs/it/go.mdx | 6 ++++++ packages/web/src/content/docs/ja/go.mdx | 6 ++++++ packages/web/src/content/docs/ko/go.mdx | 6 ++++++ packages/web/src/content/docs/nb/go.mdx | 6 ++++++ packages/web/src/content/docs/pl/go.mdx | 6 ++++++ packages/web/src/content/docs/pt-br/go.mdx | 6 ++++++ packages/web/src/content/docs/ru/go.mdx | 6 ++++++ packages/web/src/content/docs/th/go.mdx | 6 ++++++ packages/web/src/content/docs/tr/go.mdx | 6 ++++++ packages/web/src/content/docs/zh-cn/go.mdx | 6 ++++++ packages/web/src/content/docs/zh-tw/go.mdx | 6 ++++++ 20 files changed, 111 insertions(+) diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index 423f98b955e0..b2e67ecc6e49 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -45,6 +45,7 @@ const models = [ { name: "Muse Spark 1.2 Contributor", training: "go.faq.a5.used", retention: "go.faq.a5.notZdr" }, { name: "DeepSeek V4 Pro", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "DeepSeek V4 Flash", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, + { name: "Hy4 preview", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "Hy3", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, ] as const @@ -73,6 +74,7 @@ function LimitsGraph(props: { href: string }) { const graph = [ { id: "kimi-k3", name: "Kimi K3", req: 110, d: "50ms" }, { id: "grok-4.6", name: "Grok 4.6", req: 169, d: "75ms" }, + { id: "hy4-preview", name: "Hy4 preview", req: 1350, d: "90ms" }, { id: "gpt-5.6-luna", name: "GPT 5.6 Luna", req: 2050, d: "290ms" }, { id: "glm-5.3-flash", name: "GLM-5.3-Flash", req: 3160, baseReq: 1580, bonus: "2x usage", d: "100ms" }, { id: "minimax-m3", name: "MiniMax M3", req: 3200, d: "210ms" }, diff --git a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx index 2c762920d5f1..3a0ebe361aec 100644 --- a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx @@ -663,6 +663,7 @@ export function LiteSection(props: { lite: LiteSubscription | undefined }) {
    • DeepSeek V4 Flash Vision Exp
    • MiMo-V2.5
    • MiMo-V2.5-Pro
    • +
    • Hy4 preview
    • Hy3

    {i18n.t("workspace.lite.promo.footer")}

    diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx index b2094f5c1f83..23e95b346026 100644 --- a/packages/web/src/content/docs/ar/go.mdx +++ b/packages/web/src/content/docs/ar/go.mdx @@ -72,6 +72,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** قد تتغير قائمة النماذج مع استمرارنا في اختبار نماذج جديدة وإضافتها. @@ -115,6 +116,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | تستند التقديرات إلى أنماط الطلبات المرصودة: @@ -137,6 +139,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر - Qwen3.7 Max — ‏420 input، و66,000 cached، و200 output tokens لكل طلب - Qwen3.7 Plus — ‏500 input، و57,000 cached، و190 output tokens لكل طلب - Qwen3.6 Plus — ‏500 input، و57,000 cached، و190 output tokens لكل طلب +- Hy4 preview — ‏830 input، و71,500 cached، و295 output tokens لكل طلب - Hy3 — ‏830 input، و71,500 cached، و295 output tokens لكل طلب - MiMo-V2.5 — ‏830 input، و71,500 cached، و295 output tokens لكل طلب - MiMo-V2.5-Pro — ‏790 input، و86,000 cached، و305 output tokens لكل طلب @@ -176,6 +179,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** ساعات Peak هي 01:00-04:00 و06:00-10:00 UTC من الاثنين إلى الجمعة؛ وجميع الساعات الأخرى، بما في ذلك عطلات نهاية الأسبوع، Off-Peak. [اعرف المزيد](https://api-docs.deepseek.com/quick_start/pricing/). @@ -240,6 +244,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | يستخدم [model id](/docs/config/#models) في إعدادات OpenCode لديك التنسيق `opencode-go/`. على سبيل المثال، بالنسبة إلى Kimi K3، ستستخدم `opencode-go/kimi-k3` في إعداداتك. @@ -283,6 +288,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | غير مستخدَمة | 0 أيام | | DeepSeek V4 Flash | غير مستخدَمة | 0 أيام | | DeepSeek V4 Flash Vision Exp | غير مستخدَمة | 0 أيام | +| Hy4 preview | غير مستخدَمة | 0 أيام | | Hy3 | غير مستخدَمة | 0 أيام | - **Grok 4.6:** تعطّل ZDR ميزات API مهمة تعتمد على البيانات المخزنة، بما في ذلك Responses API ذات الحالة، وFiles and Collections، وBatch API. [اعرف المزيد](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index cf7dbfad6eca..1200b785a33c 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -82,6 +82,7 @@ Trenutna lista modela uključuje: - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** Lista modela se može mijenjati dok testiramo i dodajemo nove. @@ -125,6 +126,7 @@ Tabela ispod pruža procijenjeni broj zahtjeva na osnovu tipičnih obrazaca kori | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | Procjene se zasnivaju na zapaženim obrascima zahtjeva: @@ -147,6 +149,7 @@ Procjene se zasnivaju na zapaženim obrascima zahtjeva: - Qwen3.7 Max — 420 ulaznih, 66,000 keširanih, 200 izlaznih tokena po zahtjevu - Qwen3.7 Plus — 500 ulaznih, 57,000 keširanih, 190 izlaznih tokena po zahtjevu - Qwen3.6 Plus — 500 ulaznih, 57,000 keširanih, 190 izlaznih tokena po zahtjevu +- Hy4 preview — 830 ulaznih, 71,500 keširanih, 295 izlaznih tokena po zahtjevu - Hy3 — 830 ulaznih, 71,500 keširanih, 295 izlaznih tokena po zahtjevu - MiMo-V2.5 — 830 ulaznih, 71,500 keširanih, 295 izlaznih tokena po zahtjevu - MiMo-V2.5-Pro — 790 ulaznih, 86,000 keširanih, 305 izlaznih tokena po zahtjevu @@ -186,6 +189,7 @@ Procjene se također zasnivaju na sljedećim cijenama po 1M tokena i mjesečnoj | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak sati su 01:00-04:00 i 06:00-10:00 UTC od ponedjeljka do petka; svi ostali sati, uključujući vikende, su Off-Peak. [Saznajte više](https://api-docs.deepseek.com/quick_start/pricing/). @@ -252,6 +256,7 @@ Također možete pristupiti Go modelima putem sljedećih API endpointa. | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [Model id](/docs/config/#models) u vašoj OpenCode konfiguraciji @@ -297,6 +302,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | Ne koristi se | 0 dana | | DeepSeek V4 Flash | Ne koristi se | 0 dana | | DeepSeek V4 Flash Vision Exp | Ne koristi se | 0 dana | +| Hy4 preview | Ne koristi se | 0 dana | | Hy3 | Ne koristi se | 0 dana | - **Grok 4.6:** ZDR onemogućava važne API funkcije koje zavise od pohranjenih podataka, uključujući Responses API s očuvanjem stanja, Files and Collections i Batch API. [Saznajte više](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx index e962d4e4acf1..925e8c51761e 100644 --- a/packages/web/src/content/docs/da/go.mdx +++ b/packages/web/src/content/docs/da/go.mdx @@ -82,6 +82,7 @@ Den nuværende liste over modeller inkluderer: - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** Listen over modeller kan ændre sig, efterhånden som vi tester og tilføjer nye. @@ -125,6 +126,7 @@ Tabellen nedenfor giver et estimeret antal anmodninger baseret på typiske Go-fo | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | Estimaterne er baseret på observerede anmodningsmønstre: @@ -147,6 +149,7 @@ Estimaterne er baseret på observerede anmodningsmønstre: - Qwen3.7 Max — 420 input, 66.000 cachelagrede, 200 output-tokens pr. anmodning - Qwen3.7 Plus — 500 input, 57.000 cachelagrede, 190 output-tokens pr. anmodning - Qwen3.6 Plus — 500 input, 57.000 cachelagrede, 190 output-tokens pr. anmodning +- Hy4 preview — 830 input, 71.500 cachelagrede, 295 output-tokens pr. anmodning - Hy3 — 830 input, 71.500 cachelagrede, 295 output-tokens pr. anmodning - MiMo-V2.5 — 830 input, 71.500 cachelagrede, 295 output-tokens pr. anmodning - MiMo-V2.5-Pro — 790 input, 86.000 cachelagrede, 305 output-tokens pr. anmodning @@ -186,6 +189,7 @@ Estimaterne er også baseret på følgende priser pr. 1M tokens og det månedlig | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak-tiderne er 01:00-04:00 og 06:00-10:00 UTC fra mandag til fredag; alle andre tider, herunder weekender, er Off-Peak. [Læs mere](https://api-docs.deepseek.com/quick_start/pricing/). @@ -252,6 +256,7 @@ Du kan også få adgang til Go-modeller gennem følgende API-endpoints. | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | Dit [model id](/docs/config/#models) i din OpenCode config @@ -297,6 +302,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | Ikke brugt | 0 dage | | DeepSeek V4 Flash | Ikke brugt | 0 dage | | DeepSeek V4 Flash Vision Exp | Ikke brugt | 0 dage | +| Hy4 preview | Ikke brugt | 0 dage | | Hy3 | Ikke brugt | 0 dage | - **Grok 4.6:** ZDR deaktiverer vigtige API-funktioner, der afhænger af lagrede data, herunder den tilstandsbevarende Responses API, Files and Collections og Batch API. [Læs mere](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx index 31c5233ddeb2..941c439d75a9 100644 --- a/packages/web/src/content/docs/de/go.mdx +++ b/packages/web/src/content/docs/de/go.mdx @@ -74,6 +74,7 @@ Die aktuelle Liste der Modelle umfasst: - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** Die Liste der Modelle kann sich ändern, während wir neue testen und hinzufügen. @@ -117,6 +118,7 @@ Die folgende Tabelle zeigt eine geschätzte Anzahl von Anfragen basierend auf ty | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | Die Schätzungen basieren auf beobachteten Anfragemustern: @@ -139,6 +141,7 @@ Die Schätzungen basieren auf beobachteten Anfragemustern: - Qwen3.7 Max — 420 Input-, 66.000 Cached-, 200 Output-Tokens pro Anfrage - Qwen3.7 Plus — 500 Input-, 57.000 Cached-, 190 Output-Tokens pro Anfrage - Qwen3.6 Plus — 500 Input-, 57.000 Cached-, 190 Output-Tokens pro Anfrage +- Hy4 preview — 830 Input-, 71.500 Cached-, 295 Output-Tokens pro Anfrage - Hy3 — 830 Input-, 71.500 Cached-, 295 Output-Tokens pro Anfrage - MiMo-V2.5 — 830 Input-, 71.500 Cached-, 295 Output-Tokens pro Anfrage - MiMo-V2.5-Pro — 790 Input-, 86.000 Cached-, 305 Output-Tokens pro Anfrage @@ -178,6 +181,7 @@ Die Schätzungen basieren außerdem auf den folgenden Preisen pro 1M Tokens und | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Die Peak-Zeiten sind montags bis freitags von 01:00-04:00 und 06:00-10:00 UTC; alle anderen Zeiten, einschließlich der Wochenenden, sind Off-Peak. [Mehr erfahren](https://api-docs.deepseek.com/quick_start/pricing/). @@ -242,6 +246,7 @@ Du kannst auf die Go-Modelle auch über die folgenden API-Endpunkte zugreifen. | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | Die [Modell-ID](/docs/config/#models) in deiner OpenCode Config verwendet das Format `opencode-go/`. Für Kimi K3 würdest du beispielsweise `opencode-go/kimi-k3` in deiner Config verwenden. @@ -285,6 +290,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | Nicht verwendet | 0 Tage | | DeepSeek V4 Flash | Nicht verwendet | 0 Tage | | DeepSeek V4 Flash Vision Exp | Nicht verwendet | 0 Tage | +| Hy4 preview | Nicht verwendet | 0 Tage | | Hy3 | Nicht verwendet | 0 Tage | - **Grok 4.6:** ZDR deaktiviert wichtige API-Funktionen, die von gespeicherten Daten abhängen, einschließlich der zustandsbehafteten Responses API, Files and Collections und der Batch API. [Mehr erfahren](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index 1585fb230d60..c5b40f679ef4 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -82,6 +82,7 @@ La lista actual de modelos incluye: - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** La lista de modelos puede cambiar a medida que probamos y agregamos otros nuevos. @@ -125,6 +126,7 @@ La siguiente tabla proporciona una cantidad estimada de peticiones basada en los | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | Las estimaciones se basan en los patrones de peticiones observados: @@ -147,6 +149,7 @@ Las estimaciones se basan en los patrones de peticiones observados: - Qwen3.7 Max — 420 tokens de entrada, 66,000 en caché, 200 tokens de salida por petición - Qwen3.7 Plus — 500 tokens de entrada, 57,000 en caché, 190 tokens de salida por petición - Qwen3.6 Plus — 500 tokens de entrada, 57,000 en caché, 190 tokens de salida por petición +- Hy4 preview — 830 tokens de entrada, 71,500 en caché, 295 tokens de salida por petición - Hy3 — 830 tokens de entrada, 71,500 en caché, 295 tokens de salida por petición - MiMo-V2.5 — 830 tokens de entrada, 71,500 en caché, 295 tokens de salida por petición - MiMo-V2.5-Pro — 790 tokens de entrada, 86,000 en caché, 305 tokens de salida por petición @@ -186,6 +189,7 @@ Las estimaciones también se basan en los siguientes precios por 1M tokens y en | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Las horas Peak son 01:00-04:00 y 06:00-10:00 UTC, de lunes a viernes; todas las demás horas, incluidos los fines de semana, son Off-Peak. [Más información](https://api-docs.deepseek.com/quick_start/pricing/). @@ -252,6 +256,7 @@ También puedes acceder a los modelos de Go a través de los siguientes endpoint | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | El [ID del modelo](/docs/config/#models) en tu configuración de OpenCode @@ -297,6 +302,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | No utilizado | 0 días | | DeepSeek V4 Flash | No utilizado | 0 días | | DeepSeek V4 Flash Vision Exp | No utilizado | 0 días | +| Hy4 preview | No utilizado | 0 días | | Hy3 | No utilizado | 0 días | - **Grok 4.6:** ZDR deshabilita funciones importantes de la API que dependen de datos almacenados, incluidas la Responses API con estado, Files and Collections y la Batch API. [Más información](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx index a5b13e2fa73d..f47bf643b11c 100644 --- a/packages/web/src/content/docs/fr/go.mdx +++ b/packages/web/src/content/docs/fr/go.mdx @@ -72,6 +72,7 @@ La liste actuelle des modèles comprend : - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** La liste des modèles peut changer au fur et à mesure que nous en testons et en ajoutons de nouveaux. @@ -115,6 +116,7 @@ Le tableau ci-dessous fournit une estimation du nombre de requêtes basée sur d | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | Les estimations sont basées sur les schémas de requêtes observés : @@ -137,6 +139,7 @@ Les estimations sont basées sur les schémas de requêtes observés : - Qwen3.7 Max — 420 tokens en entrée, 66,000 en cache, 200 tokens en sortie par requête - Qwen3.7 Plus — 500 tokens en entrée, 57,000 en cache, 190 tokens en sortie par requête - Qwen3.6 Plus — 500 tokens en entrée, 57,000 en cache, 190 tokens en sortie par requête +- Hy4 preview — 830 tokens en entrée, 71,500 en cache, 295 tokens en sortie par requête - Hy3 — 830 tokens en entrée, 71,500 en cache, 295 tokens en sortie par requête - MiMo-V2.5 — 830 tokens en entrée, 71,500 en cache, 295 tokens en sortie par requête - MiMo-V2.5-Pro — 790 tokens en entrée, 86,000 en cache, 305 tokens en sortie par requête @@ -176,6 +179,7 @@ Les estimations sont également basées sur les prix suivants par 1M tokens et s | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Les heures Peak sont 01:00-04:00 et 06:00-10:00 UTC, du lundi au vendredi ; toutes les autres heures, y compris le week-end, sont Off-Peak. [En savoir plus](https://api-docs.deepseek.com/quick_start/pricing/). @@ -240,6 +244,7 @@ Vous pouvez également accéder aux modèles Go via les points de terminaison d' | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | L'[ID de modèle](/docs/config/#models) dans votre configuration OpenCode utilise le format `opencode-go/`. Par exemple, pour Kimi K3, vous utiliseriez `opencode-go/kimi-k3` dans votre configuration. @@ -283,6 +288,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | Non utilisé | 0 jour | | DeepSeek V4 Flash | Non utilisé | 0 jour | | DeepSeek V4 Flash Vision Exp | Non utilisé | 0 jour | +| Hy4 preview | Non utilisé | 0 jour | | Hy3 | Non utilisé | 0 jour | - **Grok 4.6:** Le ZDR désactive d’importantes fonctionnalités API qui dépendent des données stockées, notamment Responses API avec état, Files and Collections et Batch API. [En savoir plus](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index 96a6b4cbcc39..4c5e925a9f7f 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -82,6 +82,7 @@ The current list of models includes: - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** The list of models may change as we test and add new ones. @@ -125,6 +126,7 @@ The table below provides an estimated request count based on typical Go usage pa | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | The estimates are based on observed request patterns: @@ -149,6 +151,7 @@ The estimates are based on observed request patterns: - Qwen3.7 Max — 420 input, 66,000 cached, 200 output tokens per request - Qwen3.7 Plus — 500 input, 57,000 cached, 190 output tokens per request - Qwen3.6 Plus — 500 input, 57,000 cached, 190 output tokens per request +- Hy4 preview — 830 input, 71,500 cached, 295 output tokens per request - Hy3 — 830 input, 71,500 cached, 295 output tokens per request The estimates are also based on the following prices per 1M tokens and the monthly usage included with each model: @@ -186,6 +189,7 @@ The estimates are also based on the following prices per 1M tokens and the month | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak hours are 01:00-04:00 and 06:00-10:00 UTC, Monday through Friday; all other hours, including weekends, are Off-Peak. [Learn more](https://api-docs.deepseek.com/quick_start/pricing/). @@ -252,6 +256,7 @@ You can also access Go models through the following API endpoints. | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | The [model id](/docs/config/#models) in your OpenCode config @@ -297,6 +302,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | Not used | 0 days\* | | DeepSeek V4 Flash | Not used | 0 days\* | | DeepSeek V4 Flash Vision Exp | Not used | 0 days\* | +| Hy4 preview | Not used | 0 days | | Hy3 | Not used | 0 days | - **Grok 4.6:** ZDR disables important API features that depend on stored data, including the stateful Responses API, Files and Collections, and the Batch API. [Learn more](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx index cd553896bde4..634a1d89850b 100644 --- a/packages/web/src/content/docs/it/go.mdx +++ b/packages/web/src/content/docs/it/go.mdx @@ -80,6 +80,7 @@ L'elenco attuale dei modelli include: - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** L'elenco dei modelli potrebbe cambiare man mano che ne testiamo e aggiungiamo di nuovi. @@ -123,6 +124,7 @@ La tabella seguente fornisce una stima del conteggio delle richieste in base a p | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | Le stime si basano sui pattern di richieste osservati: @@ -145,6 +147,7 @@ Le stime si basano sui pattern di richieste osservati: - Qwen3.7 Max — 420 di input, 66.000 in cache, 200 token di output per richiesta - Qwen3.7 Plus — 500 di input, 57.000 in cache, 190 token di output per richiesta - Qwen3.6 Plus — 500 di input, 57.000 in cache, 190 token di output per richiesta +- Hy4 preview — 830 di input, 71.500 in cache, 295 token di output per richiesta - Hy3 — 830 di input, 71.500 in cache, 295 token di output per richiesta - MiMo-V2.5 — 830 di input, 71.500 in cache, 295 token di output per richiesta - MiMo-V2.5-Pro — 790 di input, 86.000 in cache, 305 token di output per richiesta @@ -184,6 +187,7 @@ Le stime si basano anche sui seguenti prezzi per 1M token e sull'utilizzo mensil | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Gli orari Peak sono 01:00-04:00 e 06:00-10:00 UTC, dal lunedì al venerdì; tutti gli altri orari, inclusi i fine settimana, sono Off-Peak. [Scopri di più](https://api-docs.deepseek.com/quick_start/pricing/). @@ -250,6 +254,7 @@ Puoi anche accedere ai modelli Go tramite i seguenti endpoint API. | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | Il [model id](/docs/config/#models) nella tua OpenCode config @@ -295,6 +300,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | Non utilizzato | 0 giorni | | DeepSeek V4 Flash | Non utilizzato | 0 giorni | | DeepSeek V4 Flash Vision Exp | Non utilizzato | 0 giorni | +| Hy4 preview | Non utilizzato | 0 giorni | | Hy3 | Non utilizzato | 0 giorni | - **Grok 4.6:** ZDR disabilita importanti funzionalità API che dipendono dai dati archiviati, tra cui la Responses API con stato, Files and Collections e Batch API. [Scopri di più](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx index c277ee728dad..fdfbb5ab90c4 100644 --- a/packages/web/src/content/docs/ja/go.mdx +++ b/packages/web/src/content/docs/ja/go.mdx @@ -72,6 +72,7 @@ OpenCode Goをサブスクライブできるのは、1つのワークスペー - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** 新しいモデルをテストして追加するにつれて、モデルのリストは変更される場合があります。 @@ -115,6 +116,7 @@ OpenCode Goには以下の制限が含まれています: | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | 推定値は、観測されたリクエストパターンに基づいています: @@ -137,6 +139,7 @@ OpenCode Goには以下の制限が含まれています: - Qwen3.7 Max — リクエストあたり 入力 420トークン、キャッシュ 66,000トークン、出力 200トークン - Qwen3.7 Plus — リクエストあたり 入力 500トークン、キャッシュ 57,000トークン、出力 190トークン - Qwen3.6 Plus — リクエストあたり 入力 500トークン、キャッシュ 57,000トークン、出力 190トークン +- Hy4 preview — リクエストあたり 入力 830トークン、キャッシュ 71,500トークン、出力 295トークン - Hy3 — リクエストあたり 入力 830トークン、キャッシュ 71,500トークン、出力 295トークン - MiMo-V2.5 — リクエストあたり 入力 830トークン、キャッシュ 71,500トークン、出力 295トークン - MiMo-V2.5-Pro — リクエストあたり 入力 790トークン、キャッシュ 86,000トークン、出力 305トークン @@ -176,6 +179,7 @@ OpenCode Goには以下の制限が含まれています: | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak時間は月曜日から金曜日の01:00-04:00と06:00-10:00 UTCで、週末を含むそれ以外の時間はすべてOff-Peakです。[詳しく見る](https://api-docs.deepseek.com/quick_start/pricing/)。 @@ -240,6 +244,7 @@ Goでは月額$10を支払い、その6倍の利用枠を提供することを | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | OpenCode設定の[model id](/docs/config/#models)は、`opencode-go/`という形式を使用します。たとえば、Kimi K3の場合は、設定で`opencode-go/kimi-k3`を使用します。 @@ -283,6 +288,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | 使用なし | 0日 | | DeepSeek V4 Flash | 使用なし | 0日 | | DeepSeek V4 Flash Vision Exp | 使用なし | 0日 | +| Hy4 preview | 使用なし | 0日 | | Hy3 | 使用なし | 0日 | - **Grok 4.6:** ZDRでは、保存データに依存する重要なAPI機能(ステートフルなResponses API、Files and Collections、Batch APIなど)が無効になります。[詳しく見る](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx index d2e5bfc8bb98..41d6f227d372 100644 --- a/packages/web/src/content/docs/ko/go.mdx +++ b/packages/web/src/content/docs/ko/go.mdx @@ -72,6 +72,7 @@ workspace당 한 명의 멤버만 OpenCode Go를 구독할 수 있습니다. - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** 새로운 모델을 테스트하고 추가함에 따라 이 목록은 변경될 수 있습니다. @@ -115,6 +116,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | 이 예상치는 관찰된 요청 패턴을 기준으로 합니다. @@ -137,6 +139,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. - Qwen3.7 Max — 요청당 입력 420, 캐시 66,000, 출력 토큰 200 - Qwen3.7 Plus — 요청당 입력 500, 캐시 57,000, 출력 토큰 190 - Qwen3.6 Plus — 요청당 입력 500, 캐시 57,000, 출력 토큰 190 +- Hy4 preview — 요청당 입력 830, 캐시 71,500, 출력 토큰 295 - Hy3 — 요청당 입력 830, 캐시 71,500, 출력 토큰 295 - MiMo-V2.5 — 요청당 입력 830, 캐시 71,500, 출력 토큰 295 - MiMo-V2.5-Pro — 요청당 입력 790, 캐시 86,000, 출력 토큰 305 @@ -176,6 +179,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 시간은 월요일부터 금요일까지 01:00-04:00 및 06:00-10:00 UTC이며, 주말을 포함한 그 외 모든 시간은 Off-Peak입니다. [자세히 알아보기](https://api-docs.deepseek.com/quick_start/pricing/). @@ -240,6 +244,7 @@ Go에서는 월 $10를 지불하며, 저희는 그 6배의 사용량을 제공 | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | OpenCode config의 [model id](/docs/config/#models)는 `opencode-go/` 형식을 사용합니다. 예를 들어 Kimi K3의 경우 config에서 `opencode-go/kimi-k3`를 사용하면 됩니다. @@ -283,6 +288,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | 사용되지 않음 | 0일 | | DeepSeek V4 Flash | 사용되지 않음 | 0일 | | DeepSeek V4 Flash Vision Exp | 사용되지 않음 | 0일 | +| Hy4 preview | 사용되지 않음 | 0일 | | Hy3 | 사용되지 않음 | 0일 | - **Grok 4.6:** ZDR은 저장된 데이터에 의존하는 중요한 API 기능(상태 저장형 Responses API, Files and Collections, Batch API 포함)을 비활성화합니다. [자세히 알아보기](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx index 37393d9e45c9..cb802b371d78 100644 --- a/packages/web/src/content/docs/nb/go.mdx +++ b/packages/web/src/content/docs/nb/go.mdx @@ -82,6 +82,7 @@ Den nåværende listen over modeller inkluderer: - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** Listen over modeller kan endres etter hvert som vi tester og legger til nye. @@ -125,6 +126,7 @@ Tabellen nedenfor gir et estimert antall forespørsler basert på typiske bruksm | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | Estimatene er basert på observerte forespørselsmønstre: @@ -147,6 +149,7 @@ Estimatene er basert på observerte forespørselsmønstre: - Qwen3.7 Max — 420 input, 66 000 bufret, 200 output-tokens per forespørsel - Qwen3.7 Plus — 500 input, 57 000 bufret, 190 output-tokens per forespørsel - Qwen3.6 Plus — 500 input, 57 000 bufret, 190 output-tokens per forespørsel +- Hy4 preview — 830 input, 71 500 bufret, 295 output-tokens per forespørsel - Hy3 — 830 input, 71 500 bufret, 295 output-tokens per forespørsel - MiMo-V2.5 — 830 input, 71 500 bufret, 295 output-tokens per forespørsel - MiMo-V2.5-Pro — 790 input, 86 000 bufret, 305 output-tokens per forespørsel @@ -186,6 +189,7 @@ Estimatene er også basert på følgende priser per 1M tokens og den månedlige | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak-tidene er 01:00-04:00 og 06:00-10:00 UTC fra mandag til fredag; alle andre tider, inkludert helger, er Off-Peak. [Les mer](https://api-docs.deepseek.com/quick_start/pricing/). @@ -252,6 +256,7 @@ Du kan også få tilgang til Go-modeller gjennom følgende API-endepunkter. | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [Modell-ID-en](/docs/config/#models) i din OpenCode-konfigurasjon @@ -297,6 +302,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | Brukes ikke | 0 dager | | DeepSeek V4 Flash | Brukes ikke | 0 dager | | DeepSeek V4 Flash Vision Exp | Brukes ikke | 0 dager | +| Hy4 preview | Brukes ikke | 0 dager | | Hy3 | Brukes ikke | 0 dager | - **Grok 4.6:** ZDR deaktiverer viktige API-funksjoner som er avhengige av lagrede data, inkludert den tilstandsbaserte Responses API, Files and Collections og Batch API. [Les mer](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx index a43f032f86bb..2acddfffb0b8 100644 --- a/packages/web/src/content/docs/pl/go.mdx +++ b/packages/web/src/content/docs/pl/go.mdx @@ -76,6 +76,7 @@ Obecna lista modeli obejmuje: - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** Lista modeli może ulec zmianie w miarę testowania i dodawania nowych. @@ -119,6 +120,7 @@ Poniższa tabela przedstawia szacunkową liczbę żądań na podstawie typowych | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | Szacunki te opierają się na zaobserwowanych wzorcach żądań: @@ -141,6 +143,7 @@ Szacunki te opierają się na zaobserwowanych wzorcach żądań: - Qwen3.7 Max — 420 tokenów wejściowych, 66 000 w pamięci podręcznej, 200 tokenów wyjściowych na żądanie - Qwen3.7 Plus — 500 tokenów wejściowych, 57 000 w pamięci podręcznej, 190 tokenów wyjściowych na żądanie - Qwen3.6 Plus — 500 tokenów wejściowych, 57 000 w pamięci podręcznej, 190 tokenów wyjściowych na żądanie +- Hy4 preview — 830 tokenów wejściowych, 71 500 w pamięci podręcznej, 295 tokenów wyjściowych na żądanie - Hy3 — 830 tokenów wejściowych, 71 500 w pamięci podręcznej, 295 tokenów wyjściowych na żądanie - MiMo-V2.5 — 830 tokenów wejściowych, 71 500 w pamięci podręcznej, 295 tokenów wyjściowych na żądanie - MiMo-V2.5-Pro — 790 tokenów wejściowych, 86 000 w pamięci podręcznej, 305 tokenów wyjściowych na żądanie @@ -180,6 +183,7 @@ Szacunki opierają się również na następujących cenach za 1M tokenów oraz | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Godziny Peak to 01:00-04:00 i 06:00-10:00 UTC od poniedziałku do piątku; wszystkie pozostałe godziny, w tym weekendy, to Off-Peak. [Dowiedz się więcej](https://api-docs.deepseek.com/quick_start/pricing/). @@ -244,6 +248,7 @@ Możesz również uzyskać dostęp do modeli Go za pośrednictwem następującyc | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [ID modelu](/docs/config/#models) w Twojej konfiguracji OpenCode @@ -289,6 +294,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | Niewykorzystywane | 0 dni | | DeepSeek V4 Flash | Niewykorzystywane | 0 dni | | DeepSeek V4 Flash Vision Exp | Niewykorzystywane | 0 dni | +| Hy4 preview | Niewykorzystywane | 0 dni | | Hy3 | Niewykorzystywane | 0 dni | - **Grok 4.6:** ZDR wyłącza ważne funkcje API zależne od przechowywanych danych, w tym stanowy Responses API, Files and Collections oraz Batch API. [Dowiedz się więcej](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index 5cc64321277c..291ce76e8f7d 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -82,6 +82,7 @@ A lista atual de modelos inclui: - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** A lista de modelos pode mudar conforme testamos e adicionamos novos. @@ -125,6 +126,7 @@ A tabela abaixo fornece uma contagem estimada de requisições com base nos padr | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | As estimativas se baseiam nos padrões de requisições observados: @@ -147,6 +149,7 @@ As estimativas se baseiam nos padrões de requisições observados: - Qwen3.7 Max — 420 tokens de entrada, 66.000 em cache, 200 tokens de saída por requisição - Qwen3.7 Plus — 500 tokens de entrada, 57.000 em cache, 190 tokens de saída por requisição - Qwen3.6 Plus — 500 tokens de entrada, 57.000 em cache, 190 tokens de saída por requisição +- Hy4 preview — 830 tokens de entrada, 71.500 em cache, 295 tokens de saída por requisição - Hy3 — 830 tokens de entrada, 71.500 em cache, 295 tokens de saída por requisição - MiMo-V2.5 — 830 tokens de entrada, 71.500 em cache, 295 tokens de saída por requisição - MiMo-V2.5-Pro — 790 tokens de entrada, 86.000 em cache, 305 tokens de saída por requisição @@ -186,6 +189,7 @@ As estimativas também se baseiam nos seguintes preços por 1M tokens e no uso m | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Os horários Peak são 01:00-04:00 e 06:00-10:00 UTC, de segunda a sexta-feira; todos os demais horários, incluindo os fins de semana, são Off-Peak. [Saiba mais](https://api-docs.deepseek.com/quick_start/pricing/). @@ -252,6 +256,7 @@ Você também pode acessar os modelos do Go através dos seguintes endpoints de | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | O [ID do modelo](/docs/config/#models) na sua configuração do OpenCode @@ -297,6 +302,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | Não usado | 0 dias | | DeepSeek V4 Flash | Não usado | 0 dias | | DeepSeek V4 Flash Vision Exp | Não usado | 0 dias | +| Hy4 preview | Não usado | 0 dias | | Hy3 | Não usado | 0 dias | - **Grok 4.6:** O ZDR desativa recursos importantes da API que dependem de dados armazenados, incluindo a Responses API com estado, Files and Collections e a Batch API. [Saiba mais](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx index 91c2936b3826..f6f04d416230 100644 --- a/packages/web/src/content/docs/ru/go.mdx +++ b/packages/web/src/content/docs/ru/go.mdx @@ -82,6 +82,7 @@ OpenCode Go работает так же, как и любой другой пр - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** Список моделей может меняться по мере того, как мы тестируем и добавляем новые. @@ -125,6 +126,7 @@ OpenCode Go включает следующие лимиты: | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | Эти оценки основаны на наблюдаемых показателях запросов: @@ -147,6 +149,7 @@ OpenCode Go включает следующие лимиты: - Qwen3.7 Max — 420 входных, 66,000 кешированных, 200 выходных токенов на запрос - Qwen3.7 Plus — 500 входных, 57,000 кешированных, 190 выходных токенов на запрос - Qwen3.6 Plus — 500 входных, 57,000 кешированных, 190 выходных токенов на запрос +- Hy4 preview — 830 входных, 71,500 кешированных, 295 выходных токенов на запрос - Hy3 — 830 входных, 71,500 кешированных, 295 выходных токенов на запрос - MiMo-V2.5 — 830 входных, 71,500 кешированных, 295 выходных токенов на запрос - MiMo-V2.5-Pro — 790 входных, 86,000 кешированных, 305 выходных токенов на запрос @@ -186,6 +189,7 @@ OpenCode Go включает следующие лимиты: | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Часы Peak с понедельника по пятницу: 01:00-04:00 и 06:00-10:00 UTC; все остальные часы, включая выходные, относятся к Off-Peak. [Подробнее](https://api-docs.deepseek.com/quick_start/pricing/). @@ -252,6 +256,7 @@ OpenCode Go включает следующие лимиты: | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [ID модели](/docs/config/#models) в вашем конфиге OpenCode @@ -297,6 +302,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | Не используется | 0 дней | | DeepSeek V4 Flash | Не используется | 0 дней | | DeepSeek V4 Flash Vision Exp | Не используется | 0 дней | +| Hy4 preview | Не используется | 0 дней | | Hy3 | Не используется | 0 дней | - **Grok 4.6:** ZDR отключает важные функции API, зависящие от сохраненных данных, включая Responses API с сохранением состояния, Files and Collections и Batch API. [Подробнее](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx index 05c7facde5fd..eb98cda3e073 100644 --- a/packages/web/src/content/docs/th/go.mdx +++ b/packages/web/src/content/docs/th/go.mdx @@ -72,6 +72,7 @@ OpenCode Go ทำงานเหมือนกับผู้ให้บร - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** รายชื่อโมเดลอาจมีการเปลี่ยนแปลงเมื่อเราทำการทดสอบและเพิ่มโมเดลใหม่ๆ @@ -115,6 +116,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | การประมาณการนี้อ้างอิงจากรูปแบบการใช้งาน request ที่สังเกตพบ: @@ -137,6 +139,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: - Qwen3.7 Max — 420 input, 66,000 cached, 200 output tokens ต่อ request - Qwen3.7 Plus — 500 input, 57,000 cached, 190 output tokens ต่อ request - Qwen3.6 Plus — 500 input, 57,000 cached, 190 output tokens ต่อ request +- Hy4 preview — 830 input, 71,500 cached, 295 output tokens ต่อ request - Hy3 — 830 input, 71,500 cached, 295 output tokens ต่อ request - MiMo-V2.5 — 830 input, 71,500 cached, 295 output tokens ต่อ request - MiMo-V2.5-Pro — 790 input, 86,000 cached, 305 output tokens ต่อ request @@ -176,6 +179,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** ช่วงเวลา Peak คือ 01:00-04:00 และ 06:00-10:00 UTC ตั้งแต่วันจันทร์ถึงวันศุกร์ ส่วนเวลาอื่นทั้งหมด รวมถึงวันหยุดสุดสัปดาห์ เป็น Off-Peak [ดูข้อมูลเพิ่มเติม](https://api-docs.deepseek.com/quick_start/pricing/) @@ -240,6 +244,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [model id](/docs/config/#models) ใน OpenCode config ของคุณจะใช้รูปแบบ `opencode-go/` ตัวอย่างเช่น สำหรับ Kimi K3 คุณจะใช้ `opencode-go/kimi-k3` ใน config ของคุณ @@ -283,6 +288,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | ไม่นำไปใช้ | 0 วัน | | DeepSeek V4 Flash | ไม่นำไปใช้ | 0 วัน | | DeepSeek V4 Flash Vision Exp | ไม่นำไปใช้ | 0 วัน | +| Hy4 preview | ไม่นำไปใช้ | 0 วัน | | Hy3 | ไม่นำไปใช้ | 0 วัน | - **Grok 4.6:** ZDR ปิดใช้งานฟีเจอร์ API สำคัญที่ต้องอาศัยข้อมูลที่จัดเก็บไว้ ซึ่งรวมถึง Responses API แบบมีสถานะ, Files and Collections และ Batch API [ดูข้อมูลเพิ่มเติม](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr) diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx index 5b2222eb4cb8..c54cd4d800be 100644 --- a/packages/web/src/content/docs/tr/go.mdx +++ b/packages/web/src/content/docs/tr/go.mdx @@ -72,6 +72,7 @@ Mevcut model listesi şunları içerir: - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** Test edip yenilerini ekledikçe model listesi değişebilir. @@ -115,6 +116,7 @@ Aşağıdaki tablo, tipik Go kullanım modellerine dayalı tahmini bir istek say | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | Tahminler, gözlemlenen istek modellerine dayanır: @@ -137,6 +139,7 @@ Tahminler, gözlemlenen istek modellerine dayanır: - Qwen3.7 Max — İstek başına 420 girdi, 66.000 önbelleğe alınmış, 200 çıktı token'ı - Qwen3.7 Plus — İstek başına 500 girdi, 57.000 önbelleğe alınmış, 190 çıktı token'ı - Qwen3.6 Plus — İstek başına 500 girdi, 57.000 önbelleğe alınmış, 190 çıktı token'ı +- Hy4 preview — İstek başına 830 girdi, 71.500 önbelleğe alınmış, 295 çıktı token'ı - Hy3 — İstek başına 830 girdi, 71.500 önbelleğe alınmış, 295 çıktı token'ı - MiMo-V2.5 — İstek başına 830 girdi, 71.500 önbelleğe alınmış, 295 çıktı token'ı - MiMo-V2.5-Pro — İstek başına 790 girdi, 86.000 önbelleğe alınmış, 305 çıktı token'ı @@ -176,6 +179,7 @@ Tahminler ayrıca 1M token başına aşağıdaki fiyatlara ve her modelle birlik | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak saatleri pazartesiden cumaya 01:00-04:00 ve 06:00-10:00 UTC'dir; hafta sonları dahil diğer tüm saatler Off-Peak'tir. [Daha fazla bilgi](https://api-docs.deepseek.com/quick_start/pricing/). @@ -240,6 +244,7 @@ Go modellerine aşağıdaki API uç noktaları aracılığıyla da erişebilirsi | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | OpenCode yapılandırmanızdaki [model id](/docs/config/#models) formatı `opencode-go/` şeklindedir. Örneğin, Kimi K3 için yapılandırmanızda `opencode-go/kimi-k3` kullanmalısınız. @@ -283,6 +288,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | Kullanılmaz | 0 gün | | DeepSeek V4 Flash | Kullanılmaz | 0 gün | | DeepSeek V4 Flash Vision Exp | Kullanılmaz | 0 gün | +| Hy4 preview | Kullanılmaz | 0 gün | | Hy3 | Kullanılmaz | 0 gün | - **Grok 4.6:** ZDR, durum bilgisi tutan Responses API, Files and Collections ve Batch API dahil olmak üzere saklanan verilere bağlı önemli API özelliklerini devre dışı bırakır. [Daha fazla bilgi](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx index 2a66074ad9c8..6cdada1776fb 100644 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ b/packages/web/src/content/docs/zh-cn/go.mdx @@ -72,6 +72,7 @@ OpenCode Go 的工作方式与 OpenCode 中的其他提供商一样。 - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** 随着我们进行测试和添加新模型,该列表可能会发生变化。 @@ -115,6 +116,7 @@ OpenCode Go 包含以下限制: | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | 预估值基于观察到的请求模式: @@ -139,6 +141,7 @@ OpenCode Go 包含以下限制: - Qwen3.7 Max — 每次请求 420 个输入 token,66,000 个缓存 token,200 个输出 token - Qwen3.7 Plus — 每次请求 500 个输入 token,57,000 个缓存 token,190 个输出 token - Qwen3.6 Plus — 每次请求 500 个输入 token,57,000 个缓存 token,190 个输出 token +- Hy4 preview — 每次请求 830 个输入 token,71,500 个缓存 token,295 个输出 token - Hy3 — 每次请求 830 个输入 token,71,500 个缓存 token,295 个输出 token 预估值还基于以下每 1M tokens 的价格以及每个模型包含的每月使用额度: @@ -176,6 +179,7 @@ OpenCode Go 包含以下限制: | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 时段为周一至周五的 01:00-04:00 和 06:00-10:00 UTC;其他所有时段(包括周末)均为 Off-Peak。[了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 @@ -240,6 +244,7 @@ OpenCode Go 包含以下限制: | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | 你的 OpenCode 配置中的 [模型 ID](/docs/config/#models) 使用 `opencode-go/` 格式。例如,对于 Kimi K3,你将在配置中使用 `opencode-go/kimi-k3`。 @@ -283,6 +288,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | 不使用 | 0 天 | | DeepSeek V4 Flash | 不使用 | 0 天 | | DeepSeek V4 Flash Vision Exp | 不使用 | 0 天 | +| Hy4 preview | 不使用 | 0 天 | | Hy3 | 不使用 | 0 天 | - **Grok 4.6:** ZDR 会禁用依赖所存储数据的重要 API 功能,包括有状态的 Responses API、Files and Collections 和 Batch API。[了解更多](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx index e006253dfe0e..010715b8049b 100644 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ b/packages/web/src/content/docs/zh-tw/go.mdx @@ -72,6 +72,7 @@ OpenCode Go 的運作方式與 OpenCode 中的任何其他供應商相同。 - **DeepSeek V4 Pro** - **DeepSeek V4 Flash** - **DeepSeek V4 Flash Vision Exp** +- **Hy4 preview** - **Hy3** 隨著我們測試並加入新模型,模型清單可能會有所變動。 @@ -115,6 +116,7 @@ OpenCode Go 包含以下限制: | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | | DeepSeek V4 Flash | 7,600 | 18,900 | 37,800 | | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | +| Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | 這些預估值是基於觀察到的請求模式: @@ -137,6 +139,7 @@ OpenCode Go 包含以下限制: - Qwen3.7 Max — 每次請求 420 個輸入 token、66,000 個快取 token、200 個輸出 token - Qwen3.7 Plus — 每次請求 500 個輸入 token、57,000 個快取 token、190 個輸出 token - Qwen3.6 Plus — 每次請求 500 個輸入 token、57,000 個快取 token、190 個輸出 token +- Hy4 preview — 每次請求 830 個輸入 token、71,500 個快取 token、295 個輸出 token - Hy3 — 每次請求 830 個輸入 token、71,500 個快取 token、295 個輸出 token - MiMo-V2.5 — 每次請求 830 個輸入 token、71,500 個快取 token、295 個輸出 token - MiMo-V2.5-Pro — 每次請求 790 個輸入 token、86,000 個快取 token、305 個輸出 token @@ -176,6 +179,7 @@ OpenCode Go 包含以下限制: | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | | DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 時段為週一至週五的 01:00-04:00 和 06:00-10:00 UTC;其他所有時段(包括週末)均為 Off-Peak。[了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 @@ -240,6 +244,7 @@ OpenCode Go 包含以下限制: | Qwen3.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | 您的 OpenCode 設定中的 [model id](/docs/config/#models) 使用 `opencode-go/` 格式。例如,Kimi K3 在設定中應使用 `opencode-go/kimi-k3`。 @@ -283,6 +288,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Pro | 不使用 | 0 天 | | DeepSeek V4 Flash | 不使用 | 0 天 | | DeepSeek V4 Flash Vision Exp | 不使用 | 0 天 | +| Hy4 preview | 不使用 | 0 天 | | Hy3 | 不使用 | 0 天 | - **Grok 4.6:** ZDR 會停用依賴儲存資料的重要 API 功能,包括具狀態的 Responses API、Files and Collections 與 Batch API。[了解更多](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 From df35e842f59bc115bb7c0479a8e11f017d443f2c Mon Sep 17 00:00:00 2001 From: Jack Date: Fri, 28 Aug 2026 20:04:58 +0800 Subject: [PATCH 069/185] docs(zen): add Ling 3.0 Flash Fin Free (#45923) --- packages/web/src/content/docs/ar/zen.mdx | 4 ++++ packages/web/src/content/docs/bs/zen.mdx | 4 ++++ packages/web/src/content/docs/da/zen.mdx | 4 ++++ packages/web/src/content/docs/de/zen.mdx | 4 ++++ packages/web/src/content/docs/es/zen.mdx | 4 ++++ packages/web/src/content/docs/fr/zen.mdx | 4 ++++ packages/web/src/content/docs/it/zen.mdx | 4 ++++ packages/web/src/content/docs/ja/zen.mdx | 4 ++++ packages/web/src/content/docs/ko/zen.mdx | 4 ++++ packages/web/src/content/docs/nb/zen.mdx | 4 ++++ packages/web/src/content/docs/pl/zen.mdx | 4 ++++ packages/web/src/content/docs/pt-br/zen.mdx | 4 ++++ packages/web/src/content/docs/ru/zen.mdx | 4 ++++ packages/web/src/content/docs/th/zen.mdx | 4 ++++ packages/web/src/content/docs/tr/zen.mdx | 4 ++++ packages/web/src/content/docs/zen.mdx | 4 ++++ packages/web/src/content/docs/zh-cn/zen.mdx | 4 ++++ packages/web/src/content/docs/zh-tw/zen.mdx | 4 ++++ 18 files changed, 72 insertions(+) diff --git a/packages/web/src/content/docs/ar/zen.mdx b/packages/web/src/content/docs/ar/zen.mdx index 7609c0b6f8fb..e8e5494267da 100644 --- a/packages/web/src/content/docs/ar/zen.mdx +++ b/packages/web/src/content/docs/ar/zen.mdx @@ -114,6 +114,7 @@ OpenCode Zen هي بوابة AI تتيح لك الوصول إلى هذه الن | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -141,6 +142,7 @@ https://opencode.ai/zen/v1/models | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -226,6 +228,7 @@ https://opencode.ai/zen/v1/models - MiMo-V2.5 Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. - Hy3 Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. +- Ling 3.0 Flash Fin Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. - Nemotron 3 Ultra Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. - Nemotron 3.5 Lightning Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. - Big Pickle نموذج خفي ومتاح مجانا على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. @@ -283,6 +286,7 @@ https://opencode.ai/zen/v1/models - Big Pickle: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج. - MiMo-V2.5 Free: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج. - Hy3 Free: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج. +- Ling 3.0 Flash Fin Free: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج. - Nemotron 3 Ultra Free (نقاط نهاية NVIDIA المجانية): للاستخدام التجريبي فقط — لا ترسل بيانات شخصية أو سرية. يُسجَّل استخدامك لأغراض أمنية ولتحسين منتجات وخدمات NVIDIA. بيانات الجلسة المُسجَّلة لأغراض التحسين غير مرتبطة بهويتك أو بأي مُعرِّف دائم. لمزيد من المعلومات حول ممارسات معالجة البيانات لدينا، راجع [سياسة الخصوصية](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). بتفاعلك مع نقطة النهاية هذه، فإنك توافق على جمعنا لهذه المعلومات وتسجيلها واستخدامها وعلى [شروط خدمة النسخة التجريبية من واجهة NVIDIA API](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (نقاط نهاية NVIDIA المجانية): للاستخدام التجريبي فقط — لا ترسل بيانات شخصية أو سرية. يُسجَّل استخدامك لأغراض أمنية ولتحسين منتجات وخدمات NVIDIA. بيانات الجلسة المُسجَّلة لأغراض التحسين غير مرتبطة بهويتك أو بأي مُعرِّف دائم. لمزيد من المعلومات حول ممارسات معالجة البيانات لدينا، راجع [سياسة الخصوصية](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). بتفاعلك مع نقطة النهاية هذه، فإنك توافق على جمعنا لهذه المعلومات وتسجيلها واستخدامها وعلى [شروط خدمة النسخة التجريبية من واجهة NVIDIA API](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: يتم الاحتفاظ بالطلبات لمدة 30 يوما وفقا لـ [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). diff --git a/packages/web/src/content/docs/bs/zen.mdx b/packages/web/src/content/docs/bs/zen.mdx index 4cb932343d6f..a38341ae1793 100644 --- a/packages/web/src/content/docs/bs/zen.mdx +++ b/packages/web/src/content/docs/bs/zen.mdx @@ -119,6 +119,7 @@ Našim modelima možete pristupiti i preko sljedećih API endpointa. | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -148,6 +149,7 @@ Podržavamo pay-as-you-go model. Ispod su cijene **po 1M tokena**. | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -233,6 +235,7 @@ Besplatni modeli: - MiMo-V2.5 Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. - Hy3 Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. +- Ling 3.0 Flash Fin Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. - Nemotron 3 Ultra Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. - Nemotron 3.5 Lightning Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. - Big Pickle je stealth model koji je besplatan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. @@ -295,6 +298,7 @@ i ne koriste vaše podatke za treniranje modela, uz sljedeće izuzetke: - Big Pickle: Tokom besplatnog perioda, prikupljeni podaci mogu se koristiti za poboljšanje modela. - MiMo-V2.5 Free: Tokom besplatnog perioda, prikupljeni podaci mogu se koristiti za poboljšanje modela. - Hy3 Free: Tokom besplatnog perioda, prikupljeni podaci mogu se koristiti za poboljšanje modela. +- Ling 3.0 Flash Fin Free: Tokom besplatnog perioda, prikupljeni podaci mogu se koristiti za poboljšanje modela. - Nemotron 3 Ultra Free (besplatni NVIDIA endpointi): Samo za probnu upotrebu — nemojte slati lične ili povjerljive podatke. Vaše korištenje se bilježi radi sigurnosti i poboljšanja NVIDIA proizvoda i usluga. Zabilježeni podaci sesije koji se koriste u svrhu poboljšanja nisu povezani s vašim identitetom niti bilo kojim trajnim identifikatorom. Za više informacija o našim praksama obrade podataka pogledajte našu [Politiku privatnosti](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Interakcijom s ovim endpointom pristajete na naše prikupljanje, bilježenje i korištenje takvih informacija te na [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (besplatni NVIDIA endpointi): Samo za probnu upotrebu — nemojte slati lične ili povjerljive podatke. Vaše korištenje se bilježi radi sigurnosti i poboljšanja NVIDIA proizvoda i usluga. Zabilježeni podaci sesije koji se koriste u svrhu poboljšanja nisu povezani s vašim identitetom niti bilo kojim trajnim identifikatorom. Za više informacija o našim praksama obrade podataka pogledajte našu [Politiku privatnosti](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Interakcijom s ovim endpointom pristajete na naše prikupljanje, bilježenje i korištenje takvih informacija te na [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: Requests are retained for 30 days in accordance with [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). diff --git a/packages/web/src/content/docs/da/zen.mdx b/packages/web/src/content/docs/da/zen.mdx index 5a8fee3ea87e..f6a1831eaf13 100644 --- a/packages/web/src/content/docs/da/zen.mdx +++ b/packages/web/src/content/docs/da/zen.mdx @@ -119,6 +119,7 @@ Du kan også få adgang til vores modeller gennem følgende API-endpoints. | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -148,6 +149,7 @@ Vi understøtter en pay-as-you-go-model. Nedenfor er priserne **pr. 1M tokens**. | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -233,6 +235,7 @@ De gratis modeller: - MiMo-V2.5 Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. - Hy3 Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. +- Ling 3.0 Flash Fin Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. - Nemotron 3 Ultra Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. - Nemotron 3.5 Lightning Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. - Big Pickle er en stealth-model, som er gratis på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. @@ -293,6 +296,7 @@ Alle vores modeller hostes i US. Vores udbydere følger en nul-opbevaringspoliti - Big Pickle: I den gratis periode kan indsamlede data blive brugt til at forbedre modellen. - MiMo-V2.5 Free: I den gratis periode kan indsamlede data blive brugt til at forbedre modellen. - Hy3 Free: I den gratis periode kan indsamlede data blive brugt til at forbedre modellen. +- Ling 3.0 Flash Fin Free: I den gratis periode kan indsamlede data blive brugt til at forbedre modellen. - Nemotron 3 Ultra Free (gratis NVIDIA-endpoints): Kun til prøvebrug — indsend ikke personlige eller fortrolige data. Din brug logges af sikkerhedshensyn og for at forbedre NVIDIAs produkter og tjenester. De loggede sessionsdata, der bruges til forbedringsformål, er ikke knyttet til din identitet eller nogen vedvarende identifikator. For mere information om vores databehandlingspraksis, se vores [privatlivspolitik](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ved at interagere med dette endpoint giver du samtykke til vores indsamling, registrering og brug af sådanne oplysninger samt [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (gratis NVIDIA-endpoints): Kun til prøvebrug — indsend ikke personlige eller fortrolige data. Din brug logges af sikkerhedshensyn og for at forbedre NVIDIAs produkter og tjenester. De loggede sessionsdata, der bruges til forbedringsformål, er ikke knyttet til din identitet eller nogen vedvarende identifikator. For mere information om vores databehandlingspraksis, se vores [privatlivspolitik](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ved at interagere med dette endpoint giver du samtykke til vores indsamling, registrering og brug af sådanne oplysninger samt [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: Anmodninger opbevares i 30 dage i overensstemmelse med [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). diff --git a/packages/web/src/content/docs/de/zen.mdx b/packages/web/src/content/docs/de/zen.mdx index c1061c2d7e1d..a39b0217f66e 100644 --- a/packages/web/src/content/docs/de/zen.mdx +++ b/packages/web/src/content/docs/de/zen.mdx @@ -110,6 +110,7 @@ Du kannst auch über die folgenden API-Endpunkte auf unsere Modelle zugreifen. | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -137,6 +138,7 @@ Wir unterstützen ein Pay-as-you-go-Modell. Unten findest du die Preise **pro 1M | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -222,6 +224,7 @@ Die kostenlosen Modelle: - MiMo-V2.5 Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. - Hy3 Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. +- Ling 3.0 Flash Fin Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. - Nemotron 3 Ultra Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. - Nemotron 3.5 Lightning Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. - Big Pickle ist ein Stealth-Modell, das für begrenzte Zeit kostenlos auf OpenCode verfügbar ist. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. @@ -279,6 +282,7 @@ Alle unsere Modelle werden in den USA gehostet. Unsere Provider folgen einer Zer - Big Pickle: Während des kostenlosen Zeitraums können gesammelte Daten zur Verbesserung des Modells verwendet werden. - MiMo-V2.5 Free: Während des kostenlosen Zeitraums können gesammelte Daten zur Verbesserung des Modells verwendet werden. - Hy3 Free: Während des kostenlosen Zeitraums können gesammelte Daten zur Verbesserung des Modells verwendet werden. +- Ling 3.0 Flash Fin Free: Während des kostenlosen Zeitraums können gesammelte Daten zur Verbesserung des Modells verwendet werden. - Nemotron 3 Ultra Free (kostenlose NVIDIA-Endpunkte): Nur für Testzwecke — übermitteln Sie keine personenbezogenen oder vertraulichen Daten. Ihre Nutzung wird zu Sicherheitszwecken und zur Verbesserung der Produkte und Dienste von NVIDIA protokolliert. Die zu Verbesserungszwecken protokollierten Sitzungsdaten sind nicht mit Ihrer Identität oder einem dauerhaften Identifikator verknüpft. Weitere Informationen zu unseren Datenverarbeitungspraktiken finden Sie in unserer [Datenschutzrichtlinie](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Durch die Interaktion mit diesem Endpunkt stimmen Sie unserer Erhebung, Aufzeichnung und Nutzung solcher Informationen sowie den [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) zu. - Nemotron 3.5 Lightning Free (kostenlose NVIDIA-Endpunkte): Nur für Testzwecke — übermitteln Sie keine personenbezogenen oder vertraulichen Daten. Ihre Nutzung wird zu Sicherheitszwecken und zur Verbesserung der Produkte und Dienste von NVIDIA protokolliert. Die zu Verbesserungszwecken protokollierten Sitzungsdaten sind nicht mit Ihrer Identität oder einem dauerhaften Identifikator verknüpft. Weitere Informationen zu unseren Datenverarbeitungspraktiken finden Sie in unserer [Datenschutzrichtlinie](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Durch die Interaktion mit diesem Endpunkt stimmen Sie unserer Erhebung, Aufzeichnung und Nutzung solcher Informationen sowie den [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) zu. - OpenAI APIs: Anfragen werden in Übereinstimmung mit [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) 30 Tage lang gespeichert. diff --git a/packages/web/src/content/docs/es/zen.mdx b/packages/web/src/content/docs/es/zen.mdx index eed117a8d962..c48854ac6311 100644 --- a/packages/web/src/content/docs/es/zen.mdx +++ b/packages/web/src/content/docs/es/zen.mdx @@ -119,6 +119,7 @@ También puedes acceder a nuestros modelos a través de los siguientes endpoints | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -148,6 +149,7 @@ Admitimos un modelo de pago por uso. A continuación se muestran los precios **p | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -233,6 +235,7 @@ Los modelos gratuitos: - MiMo-V2.5 Free está disponible en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. - Hy3 Free está disponible en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. +- Ling 3.0 Flash Fin Free está disponible en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. - Nemotron 3 Ultra Free está disponible en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. - Nemotron 3.5 Lightning Free está disponible en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. - Big Pickle es un modelo stealth que es gratuito en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. @@ -293,6 +296,7 @@ Todos nuestros modelos están alojados en US. Nuestros proveedores siguen una po - Big Pickle: Durante su período gratuito, los datos recopilados pueden usarse para mejorar el modelo. - MiMo-V2.5 Free: Durante su período gratuito, los datos recopilados pueden usarse para mejorar el modelo. - Hy3 Free: Durante su período gratuito, los datos recopilados pueden usarse para mejorar el modelo. +- Ling 3.0 Flash Fin Free: Durante su período gratuito, los datos recopilados pueden usarse para mejorar el modelo. - Nemotron 3 Ultra Free (endpoints gratuitos de NVIDIA): Solo para uso de prueba — no envíes datos personales ni confidenciales. Tu uso se registra con fines de seguridad y para mejorar los productos y servicios de NVIDIA. Los datos de sesión registrados con fines de mejora no están vinculados a tu identidad ni a ningún identificador persistente. Para obtener más información sobre nuestras prácticas de procesamiento de datos, consulta nuestra [Política de privacidad](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Al interactuar con este endpoint, aceptas que recopilemos, registremos y usemos dicha información, así como los [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (endpoints gratuitos de NVIDIA): Solo para uso de prueba — no envíes datos personales ni confidenciales. Tu uso se registra con fines de seguridad y para mejorar los productos y servicios de NVIDIA. Los datos de sesión registrados con fines de mejora no están vinculados a tu identidad ni a ningún identificador persistente. Para obtener más información sobre nuestras prácticas de procesamiento de datos, consulta nuestra [Política de privacidad](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Al interactuar con este endpoint, aceptas que recopilemos, registremos y usemos dicha información, así como los [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: Las solicitudes se conservan durante 30 días de acuerdo con [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). diff --git a/packages/web/src/content/docs/fr/zen.mdx b/packages/web/src/content/docs/fr/zen.mdx index 8061a2ced0d2..1cc5b70dc4e0 100644 --- a/packages/web/src/content/docs/fr/zen.mdx +++ b/packages/web/src/content/docs/fr/zen.mdx @@ -110,6 +110,7 @@ Vous pouvez également accéder à nos modèles via les points de terminaison AP | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -137,6 +138,7 @@ Nous prenons en charge un modèle de paiement à l'utilisation. Vous trouverez c | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -222,6 +224,7 @@ Les modèles gratuits : - MiMo-V2.5 Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. - Hy3 Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. +- Ling 3.0 Flash Fin Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. - Nemotron 3 Ultra Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. - Nemotron 3.5 Lightning Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. - Big Pickle est un modèle stealth gratuit sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. @@ -279,6 +282,7 @@ Tous nos modèles sont hébergés aux US. Nos fournisseurs suivent une politique - Big Pickle : Pendant sa période gratuite, les données collectées peuvent être utilisées pour améliorer le modèle. - MiMo-V2.5 Free : Pendant sa période gratuite, les données collectées peuvent être utilisées pour améliorer le modèle. - Hy3 Free : Pendant sa période gratuite, les données collectées peuvent être utilisées pour améliorer le modèle. +- Ling 3.0 Flash Fin Free : Pendant sa période gratuite, les données collectées peuvent être utilisées pour améliorer le modèle. - Nemotron 3 Ultra Free (endpoints NVIDIA gratuits) : Réservé à un usage d'essai — n'envoyez pas de données personnelles ou confidentielles. Votre utilisation est journalisée à des fins de sécurité et pour améliorer les produits et services de NVIDIA. Les données de session journalisées à des fins d'amélioration ne sont pas liées à votre identité ni à un quelconque identifiant persistant. Pour plus d'informations sur nos pratiques de traitement des données, consultez notre [Politique de confidentialité](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). En interagissant avec cet endpoint, vous consentez à notre collecte, à notre enregistrement et à notre utilisation de ces informations ainsi qu'aux [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (endpoints NVIDIA gratuits) : Réservé à un usage d'essai — n'envoyez pas de données personnelles ou confidentielles. Votre utilisation est journalisée à des fins de sécurité et pour améliorer les produits et services de NVIDIA. Les données de session journalisées à des fins d'amélioration ne sont pas liées à votre identité ni à un quelconque identifiant persistant. Pour plus d'informations sur nos pratiques de traitement des données, consultez notre [Politique de confidentialité](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). En interagissant avec cet endpoint, vous consentez à notre collecte, à notre enregistrement et à notre utilisation de ces informations ainsi qu'aux [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs : Les requêtes sont conservées pendant 30 jours conformément à [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). diff --git a/packages/web/src/content/docs/it/zen.mdx b/packages/web/src/content/docs/it/zen.mdx index ab6c944725f8..f77f77622971 100644 --- a/packages/web/src/content/docs/it/zen.mdx +++ b/packages/web/src/content/docs/it/zen.mdx @@ -119,6 +119,7 @@ Puoi anche accedere ai nostri modelli tramite i seguenti endpoint API. | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -148,6 +149,7 @@ Supportiamo un modello pay-as-you-go. Qui sotto trovi i prezzi **per 1M token**. | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -233,6 +235,7 @@ I modelli gratuiti: - MiMo-V2.5 Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. - Hy3 Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. +- Ling 3.0 Flash Fin Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. - Nemotron 3 Ultra Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. - Nemotron 3.5 Lightning Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. - Big Pickle è un modello stealth che è gratuito su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. @@ -293,6 +296,7 @@ Tutti i nostri modelli sono ospitati negli US. I nostri provider seguono una pol - Big Pickle: durante il periodo gratuito, i dati raccolti possono essere usati per migliorare il modello. - MiMo-V2.5 Free: durante il periodo gratuito, i dati raccolti possono essere usati per migliorare il modello. - Hy3 Free: durante il periodo gratuito, i dati raccolti possono essere usati per migliorare il modello. +- Ling 3.0 Flash Fin Free: durante il periodo gratuito, i dati raccolti possono essere usati per migliorare il modello. - Nemotron 3 Ultra Free (endpoint NVIDIA gratuiti): solo per uso di prova — non inviare dati personali o riservati. Il tuo utilizzo viene registrato per finalità di sicurezza e per migliorare i prodotti e i servizi di NVIDIA. I dati di sessione registrati a fini di miglioramento non sono collegati alla tua identità né ad alcun identificatore persistente. Per maggiori informazioni sulle nostre pratiche di trattamento dei dati, consulta la nostra [Informativa sulla privacy](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Interagendo con questo endpoint, acconsenti alla nostra raccolta, registrazione e utilizzo di tali informazioni e ai [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (endpoint NVIDIA gratuiti): solo per uso di prova — non inviare dati personali o riservati. Il tuo utilizzo viene registrato per finalità di sicurezza e per migliorare i prodotti e i servizi di NVIDIA. I dati di sessione registrati a fini di miglioramento non sono collegati alla tua identità né ad alcun identificatore persistente. Per maggiori informazioni sulle nostre pratiche di trattamento dei dati, consulta la nostra [Informativa sulla privacy](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Interagendo con questo endpoint, acconsenti alla nostra raccolta, registrazione e utilizzo di tali informazioni e ai [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: le richieste vengono conservate per 30 giorni in conformità con [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). diff --git a/packages/web/src/content/docs/ja/zen.mdx b/packages/web/src/content/docs/ja/zen.mdx index acf316674fdb..9ccc24c2840e 100644 --- a/packages/web/src/content/docs/ja/zen.mdx +++ b/packages/web/src/content/docs/ja/zen.mdx @@ -110,6 +110,7 @@ OpenCode Zen は、OpenCode のほかのプロバイダーと同じように動 | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -137,6 +138,7 @@ https://opencode.ai/zen/v1/models | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -222,6 +224,7 @@ https://opencode.ai/zen/v1/models - MiMo-V2.5 Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 - Hy3 Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 +- Ling 3.0 Flash Fin Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 - Nemotron 3 Ultra Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 - Nemotron 3.5 Lightning Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 - Big Pickle はステルスモデルで、期間限定で OpenCode で無料提供されています。チームはこの期間中にフィードバックを集め、モデルを改善しています。 @@ -279,6 +282,7 @@ https://opencode.ai/zen/v1/models - Big Pickle: 無料提供期間中、収集されたデータがモデル改善に使われる場合があります。 - MiMo-V2.5 Free: 無料提供期間中、収集されたデータがモデル改善に使われる場合があります。 - Hy3 Free: 無料提供期間中、収集されたデータがモデル改善に使われる場合があります。 +- Ling 3.0 Flash Fin Free: 無料提供期間中、収集されたデータがモデル改善に使われる場合があります。 - Nemotron 3 Ultra Free(NVIDIA の無料エンドポイント): 試用専用です — 個人情報や機密データは送信しないでください。お客様の利用は、セキュリティ目的および NVIDIA の製品とサービスの改善のために記録されます。改善目的で記録されたセッションデータは、お客様の身元や永続的な識別子とは関連付けられません。当社のデータ処理慣行の詳細については、[プライバシーポリシー](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)をご覧ください。このエンドポイントを利用することで、お客様はそのような情報の当社による収集、記録、利用、および [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) に同意したものとみなされます。 - Nemotron 3.5 Lightning Free(NVIDIA の無料エンドポイント): 試用専用です — 個人情報や機密データは送信しないでください。お客様の利用は、セキュリティ目的および NVIDIA の製品とサービスの改善のために記録されます。改善目的で記録されたセッションデータは、お客様の身元や永続的な識別子とは関連付けられません。当社のデータ処理慣行の詳細については、[プライバシーポリシー](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)をご覧ください。このエンドポイントを利用することで、お客様はそのような情報の当社による収集、記録、利用、および [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) に同意したものとみなされます。 - OpenAI APIs: リクエストは [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) に従って 30 日間保持されます。 diff --git a/packages/web/src/content/docs/ko/zen.mdx b/packages/web/src/content/docs/ko/zen.mdx index a3965a9eb447..eca5125ad515 100644 --- a/packages/web/src/content/docs/ko/zen.mdx +++ b/packages/web/src/content/docs/ko/zen.mdx @@ -110,6 +110,7 @@ OpenCode Zen은 OpenCode의 다른 provider와 똑같이 작동합니다. | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -137,6 +138,7 @@ https://opencode.ai/zen/v1/models | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -222,6 +224,7 @@ https://opencode.ai/zen/v1/models - MiMo-V2.5 Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. - Hy3 Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. +- Ling 3.0 Flash Fin Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. - Nemotron 3 Ultra Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. - Nemotron 3.5 Lightning Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. - Big Pickle은 한정된 기간 동안 OpenCode에서 무료로 제공되는 stealth model입니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. @@ -279,6 +282,7 @@ https://opencode.ai/zen/v1/models - Big Pickle: 무료 제공 기간에는 수집된 데이터가 모델 개선에 사용될 수 있습니다. - MiMo-V2.5 Free: 무료 제공 기간에는 수집된 데이터가 모델 개선에 사용될 수 있습니다. - Hy3 Free: 무료 제공 기간에는 수집된 데이터가 모델 개선에 사용될 수 있습니다. +- Ling 3.0 Flash Fin Free: 무료 제공 기간에는 수집된 데이터가 모델 개선에 사용될 수 있습니다. - Nemotron 3 Ultra Free(NVIDIA 무료 엔드포인트): 평가판 전용이며 — 개인 정보나 기밀 데이터는 제출하지 마세요. 사용 내역은 보안 목적과 NVIDIA 제품 및 서비스 개선을 위해 기록됩니다. 개선 목적으로 기록된 세션 데이터는 사용자의 신원이나 영구 식별자와 연결되지 않습니다. 당사의 데이터 처리 관행에 대한 자세한 내용은 [개인정보처리방침](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)을 참조하세요. 이 엔드포인트와 상호 작용함으로써 사용자는 당사가 이러한 정보를 수집, 기록, 사용하는 것과 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)에 동의하게 됩니다. - Nemotron 3.5 Lightning Free(NVIDIA 무료 엔드포인트): 평가판 전용이며 — 개인 정보나 기밀 데이터는 제출하지 마세요. 사용 내역은 보안 목적과 NVIDIA 제품 및 서비스 개선을 위해 기록됩니다. 개선 목적으로 기록된 세션 데이터는 사용자의 신원이나 영구 식별자와 연결되지 않습니다. 당사의 데이터 처리 관행에 대한 자세한 내용은 [개인정보처리방침](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)을 참조하세요. 이 엔드포인트와 상호 작용함으로써 사용자는 당사가 이러한 정보를 수집, 기록, 사용하는 것과 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)에 동의하게 됩니다. - OpenAI APIs: 요청은 [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data)에 따라 30일 동안 보관됩니다. diff --git a/packages/web/src/content/docs/nb/zen.mdx b/packages/web/src/content/docs/nb/zen.mdx index 68b7435be2b3..4a48b8310cff 100644 --- a/packages/web/src/content/docs/nb/zen.mdx +++ b/packages/web/src/content/docs/nb/zen.mdx @@ -119,6 +119,7 @@ Du kan også få tilgang til modellene våre gjennom følgende API-endepunkter. | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -148,6 +149,7 @@ Vi støtter en pay-as-you-go-modell. Nedenfor er prisene **per 1M tokens**. | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -233,6 +235,7 @@ Gratis-modellene: - MiMo-V2.5 Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. - Hy3 Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. +- Ling 3.0 Flash Fin Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. - Nemotron 3 Ultra Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. - Nemotron 3.5 Lightning Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. - Big Pickle er en stealth-modell som er gratis på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. @@ -293,6 +296,7 @@ Alle modellene våre hostes i US. Leverandørene våre følger en policy for zer - Big Pickle: I gratisperioden kan innsamlede data brukes til å forbedre modellen. - MiMo-V2.5 Free: I gratisperioden kan innsamlede data brukes til å forbedre modellen. - Hy3 Free: I gratisperioden kan innsamlede data brukes til å forbedre modellen. +- Ling 3.0 Flash Fin Free: I gratisperioden kan innsamlede data brukes til å forbedre modellen. - Nemotron 3 Ultra Free (gratis NVIDIA-endepunkter): Kun for prøvebruk — ikke send inn personopplysninger eller konfidensielle data. Bruken din logges av sikkerhetshensyn og for å forbedre NVIDIAs produkter og tjenester. Sesjonsdataene som logges for forbedringsformål, er ikke knyttet til identiteten din eller noen vedvarende identifikator. For mer informasjon om vår databehandlingspraksis, se vår [personvernerklæring](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ved å samhandle med dette endepunktet samtykker du til at vi samler inn, registrerer og bruker slik informasjon, samt til [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (gratis NVIDIA-endepunkter): Kun for prøvebruk — ikke send inn personopplysninger eller konfidensielle data. Bruken din logges av sikkerhetshensyn og for å forbedre NVIDIAs produkter og tjenester. Sesjonsdataene som logges for forbedringsformål, er ikke knyttet til identiteten din eller noen vedvarende identifikator. For mer informasjon om vår databehandlingspraksis, se vår [personvernerklæring](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ved å samhandle med dette endepunktet samtykker du til at vi samler inn, registrerer og bruker slik informasjon, samt til [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: Forespørsler lagres i 30 dager i samsvar med [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). diff --git a/packages/web/src/content/docs/pl/zen.mdx b/packages/web/src/content/docs/pl/zen.mdx index c7db53507c4f..9698672a2a06 100644 --- a/packages/web/src/content/docs/pl/zen.mdx +++ b/packages/web/src/content/docs/pl/zen.mdx @@ -119,6 +119,7 @@ Możesz też uzyskać dostęp do naszych modeli przez poniższe endpointy API. | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -148,6 +149,7 @@ Obsługujemy model pay-as-you-go. Poniżej znajdują się ceny **za 1M tokenów* | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -233,6 +235,7 @@ Darmowe modele: - MiMo-V2.5 Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. - Hy3 Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. +- Ling 3.0 Flash Fin Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. - Nemotron 3 Ultra Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. - Nemotron 3.5 Lightning Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. - Big Pickle to stealth model, który jest darmowy w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. @@ -293,6 +296,7 @@ Wszystkie nasze modele są hostowane w US. Nasi dostawcy stosują politykę zero - Big Pickle: W czasie darmowego okresu zebrane dane mogą być wykorzystywane do ulepszania modelu. - MiMo-V2.5 Free: W czasie darmowego okresu zebrane dane mogą być wykorzystywane do ulepszania modelu. - Hy3 Free: W czasie darmowego okresu zebrane dane mogą być wykorzystywane do ulepszania modelu. +- Ling 3.0 Flash Fin Free: W czasie darmowego okresu zebrane dane mogą być wykorzystywane do ulepszania modelu. - Nemotron 3 Ultra Free (darmowe endpointy NVIDIA): Tylko do użytku próbnego — nie przesyłaj danych osobowych ani poufnych. Twoje korzystanie jest rejestrowane w celach bezpieczeństwa oraz w celu ulepszania produktów i usług NVIDIA. Rejestrowane dane sesji wykorzystywane do celów ulepszania nie są powiązane z Twoją tożsamością ani żadnym trwałym identyfikatorem. Aby uzyskać więcej informacji o naszych praktykach przetwarzania danych, zapoznaj się z naszą [Polityką prywatności](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Korzystając z tego endpointu, wyrażasz zgodę na gromadzenie, rejestrowanie i wykorzystywanie przez nas takich informacji oraz na [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (darmowe endpointy NVIDIA): Tylko do użytku próbnego — nie przesyłaj danych osobowych ani poufnych. Twoje korzystanie jest rejestrowane w celach bezpieczeństwa oraz w celu ulepszania produktów i usług NVIDIA. Rejestrowane dane sesji wykorzystywane do celów ulepszania nie są powiązane z Twoją tożsamością ani żadnym trwałym identyfikatorem. Aby uzyskać więcej informacji o naszych praktykach przetwarzania danych, zapoznaj się z naszą [Polityką prywatności](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Korzystając z tego endpointu, wyrażasz zgodę na gromadzenie, rejestrowanie i wykorzystywanie przez nas takich informacji oraz na [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: Żądania są przechowywane przez 30 dni zgodnie z [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). diff --git a/packages/web/src/content/docs/pt-br/zen.mdx b/packages/web/src/content/docs/pt-br/zen.mdx index 5792ca2db7f5..6ee33cd324dc 100644 --- a/packages/web/src/content/docs/pt-br/zen.mdx +++ b/packages/web/src/content/docs/pt-br/zen.mdx @@ -110,6 +110,7 @@ Você também pode acessar nossos modelos pelos seguintes endpoints de API. | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -137,6 +138,7 @@ Oferecemos um modelo pay-as-you-go. Abaixo estão os preços **por 1M tokens**. | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -222,6 +224,7 @@ Os modelos gratuitos: - MiMo-V2.5 Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. - Hy3 Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. +- Ling 3.0 Flash Fin Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. - Nemotron 3 Ultra Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. - Nemotron 3.5 Lightning Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. - Big Pickle é um modelo stealth que está gratuito no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. @@ -279,6 +282,7 @@ Todos os nossos modelos são hospedados nos US. Nossos provedores seguem uma pol - Big Pickle: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo. - MiMo-V2.5 Free: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo. - Hy3 Free: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo. +- Ling 3.0 Flash Fin Free: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo. - Nemotron 3 Ultra Free (endpoints gratuitos da NVIDIA): Apenas para uso de avaliação — não envie dados pessoais ou confidenciais. Seu uso é registrado para fins de segurança e para melhorar os produtos e serviços da NVIDIA. Os dados de sessão registrados para fins de melhoria não estão vinculados à sua identidade nem a qualquer identificador persistente. Para mais informações sobre nossas práticas de processamento de dados, consulte nossa [Política de Privacidade](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ao interagir com este endpoint, você consente com a nossa coleta, registro e uso dessas informações e com os [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (endpoints gratuitos da NVIDIA): Apenas para uso de avaliação — não envie dados pessoais ou confidenciais. Seu uso é registrado para fins de segurança e para melhorar os produtos e serviços da NVIDIA. Os dados de sessão registrados para fins de melhoria não estão vinculados à sua identidade nem a qualquer identificador persistente. Para mais informações sobre nossas práticas de processamento de dados, consulte nossa [Política de Privacidade](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ao interagir com este endpoint, você consente com a nossa coleta, registro e uso dessas informações e com os [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: As solicitações são retidas por 30 dias de acordo com [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). diff --git a/packages/web/src/content/docs/ru/zen.mdx b/packages/web/src/content/docs/ru/zen.mdx index f72238c90054..cda6177b9241 100644 --- a/packages/web/src/content/docs/ru/zen.mdx +++ b/packages/web/src/content/docs/ru/zen.mdx @@ -119,6 +119,7 @@ OpenCode Zen работает как любой другой провайдер | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -148,6 +149,7 @@ https://opencode.ai/zen/v1/models | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -233,6 +235,7 @@ https://opencode.ai/zen/v1/models - MiMo-V2.5 Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. - Hy3 Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. +- Ling 3.0 Flash Fin Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. - Nemotron 3 Ultra Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. - Nemotron 3.5 Lightning Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. - Big Pickle — это скрытая модель, которая доступна бесплатно в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. @@ -293,6 +296,7 @@ https://opencode.ai/zen/v1/models - Big Pickle: во время бесплатного периода собранные данные могут использоваться для улучшения модели. - MiMo-V2.5 Free: во время бесплатного периода собранные данные могут использоваться для улучшения модели. - Hy3 Free: во время бесплатного периода собранные данные могут использоваться для улучшения модели. +- Ling 3.0 Flash Fin Free: во время бесплатного периода собранные данные могут использоваться для улучшения модели. - Nemotron 3 Ultra Free (бесплатные эндпоинты NVIDIA): только для пробного использования — не отправляйте персональные или конфиденциальные данные. Использование логируется в целях безопасности и для улучшения продуктов и сервисов NVIDIA. Логируемые данные сессии, используемые в целях улучшения, не связаны с вашей личностью или каким-либо постоянным идентификатором. Подробнее о наших практиках обработки данных см. в нашей [Политике конфиденциальности](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Взаимодействуя с этим эндпоинтом, вы соглашаетесь на сбор, запись и использование нами такой информации, а также с [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (бесплатные эндпоинты NVIDIA): только для пробного использования — не отправляйте персональные или конфиденциальные данные. Использование логируется в целях безопасности и для улучшения продуктов и сервисов NVIDIA. Логируемые данные сессии, используемые в целях улучшения, не связаны с вашей личностью или каким-либо постоянным идентификатором. Подробнее о наших практиках обработки данных см. в нашей [Политике конфиденциальности](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Взаимодействуя с этим эндпоинтом, вы соглашаетесь на сбор, запись и использование нами такой информации, а также с [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: запросы хранятся 30 дней в соответствии с [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). diff --git a/packages/web/src/content/docs/th/zen.mdx b/packages/web/src/content/docs/th/zen.mdx index 157e906a3ac1..4788e22dd86e 100644 --- a/packages/web/src/content/docs/th/zen.mdx +++ b/packages/web/src/content/docs/th/zen.mdx @@ -112,6 +112,7 @@ OpenCode Zen ทำงานเหมือน provider อื่น ๆ ใน | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -139,6 +140,7 @@ https://opencode.ai/zen/v1/models | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -224,6 +226,7 @@ https://opencode.ai/zen/v1/models - MiMo-V2.5 Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล - Hy3 Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล +- Ling 3.0 Flash Fin Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล - Nemotron 3 Ultra Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล - Nemotron 3.5 Lightning Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล - Big Pickle เป็น stealth model ที่ใช้งานฟรีบน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล @@ -281,6 +284,7 @@ https://opencode.ai/zen/v1/models - Big Pickle: ระหว่างช่วงที่เปิดให้ใช้ฟรี ข้อมูลที่เก็บรวบรวมอาจถูกนำไปใช้เพื่อปรับปรุงโมเดล - MiMo-V2.5 Free: ระหว่างช่วงที่เปิดให้ใช้ฟรี ข้อมูลที่เก็บรวบรวมอาจถูกนำไปใช้เพื่อปรับปรุงโมเดล - Hy3 Free: ระหว่างช่วงที่เปิดให้ใช้ฟรี ข้อมูลที่เก็บรวบรวมอาจถูกนำไปใช้เพื่อปรับปรุงโมเดล +- Ling 3.0 Flash Fin Free: ระหว่างช่วงที่เปิดให้ใช้ฟรี ข้อมูลที่เก็บรวบรวมอาจถูกนำไปใช้เพื่อปรับปรุงโมเดล - Nemotron 3 Ultra Free (endpoint ฟรีของ NVIDIA): ใช้สำหรับการทดลองเท่านั้น — โปรดอย่าส่งข้อมูลส่วนบุคคลหรือข้อมูลลับ การใช้งานของคุณจะถูกบันทึกเพื่อวัตถุประสงค์ด้านความปลอดภัยและเพื่อปรับปรุงผลิตภัณฑ์และบริการของ NVIDIA ข้อมูลเซสชันที่บันทึกไว้เพื่อวัตถุประสงค์ในการปรับปรุงจะไม่เชื่อมโยงกับตัวตนของคุณหรือตัวระบุถาวรใด ๆ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแนวปฏิบัติในการประมวลผลข้อมูลของเรา โปรดดู [นโยบายความเป็นส่วนตัว](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) ของเรา การโต้ตอบกับ endpoint นี้ถือว่าคุณยินยอมให้เราเก็บรวบรวม บันทึก และใช้ข้อมูลดังกล่าว รวมถึง [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) - Nemotron 3.5 Lightning Free (endpoint ฟรีของ NVIDIA): ใช้สำหรับการทดลองเท่านั้น — โปรดอย่าส่งข้อมูลส่วนบุคคลหรือข้อมูลลับ การใช้งานของคุณจะถูกบันทึกเพื่อวัตถุประสงค์ด้านความปลอดภัยและเพื่อปรับปรุงผลิตภัณฑ์และบริการของ NVIDIA ข้อมูลเซสชันที่บันทึกไว้เพื่อวัตถุประสงค์ในการปรับปรุงจะไม่เชื่อมโยงกับตัวตนของคุณหรือตัวระบุถาวรใด ๆ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแนวปฏิบัติในการประมวลผลข้อมูลของเรา โปรดดู [นโยบายความเป็นส่วนตัว](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) ของเรา การโต้ตอบกับ endpoint นี้ถือว่าคุณยินยอมให้เราเก็บรวบรวม บันทึก และใช้ข้อมูลดังกล่าว รวมถึง [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) - OpenAI APIs: คำขอจะถูกเก็บไว้เป็นเวลา 30 วันตาม [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). diff --git a/packages/web/src/content/docs/tr/zen.mdx b/packages/web/src/content/docs/tr/zen.mdx index d96fdce37edb..0188c0961a26 100644 --- a/packages/web/src/content/docs/tr/zen.mdx +++ b/packages/web/src/content/docs/tr/zen.mdx @@ -110,6 +110,7 @@ Modellerimize aşağıdaki API uç noktaları aracılığıyla da erişebilirsin | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -137,6 +138,7 @@ Kullandıkça öde modelini destekliyoruz. Aşağıda **1M token başına** fiya | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -222,6 +224,7 @@ Kredi kartı ücretleri maliyet üzerinden yansıtılır (%4.4 + işlem başına - MiMo-V2.5 Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. - Hy3 Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. +- Ling 3.0 Flash Fin Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. - Nemotron 3 Ultra Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. - Nemotron 3.5 Lightning Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. - Big Pickle, sınırlı bir süre için OpenCode'da ücretsiz olan gizli bir modeldir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. @@ -279,6 +282,7 @@ Tüm modellerimiz US'de barındırılıyor. Sağlayıcılarımız zero-retention - Big Pickle: Ücretsiz döneminde toplanan veriler modeli iyileştirmek için kullanılabilir. - MiMo-V2.5 Free: Ücretsiz döneminde toplanan veriler modeli iyileştirmek için kullanılabilir. - Hy3 Free: Ücretsiz döneminde toplanan veriler modeli iyileştirmek için kullanılabilir. +- Ling 3.0 Flash Fin Free: Ücretsiz döneminde toplanan veriler modeli iyileştirmek için kullanılabilir. - Nemotron 3 Ultra Free (ücretsiz NVIDIA uç noktaları): Yalnızca deneme amaçlıdır — kişisel veya gizli veri göndermeyin. Kullanımınız güvenlik amacıyla ve NVIDIA ürünlerini ve hizmetlerini geliştirmek için kaydedilir. Geliştirme amacıyla kaydedilen oturum verileri kimliğinizle veya herhangi bir kalıcı tanımlayıcıyla ilişkilendirilmez. Veri işleme uygulamalarımız hakkında daha fazla bilgi için [Gizlilik Politikamıza](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) bakın. Bu uç noktayla etkileşime geçerek, bu tür bilgileri toplamamıza, kaydetmemize ve kullanmamıza ve [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) koşullarına onay vermiş olursunuz. - Nemotron 3.5 Lightning Free (ücretsiz NVIDIA uç noktaları): Yalnızca deneme amaçlıdır — kişisel veya gizli veri göndermeyin. Kullanımınız güvenlik amacıyla ve NVIDIA ürünlerini ve hizmetlerini geliştirmek için kaydedilir. Geliştirme amacıyla kaydedilen oturum verileri kimliğinizle veya herhangi bir kalıcı tanımlayıcıyla ilişkilendirilmez. Veri işleme uygulamalarımız hakkında daha fazla bilgi için [Gizlilik Politikamıza](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) bakın. Bu uç noktayla etkileşime geçerek, bu tür bilgileri toplamamıza, kaydetmemize ve kullanmamıza ve [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) koşullarına onay vermiş olursunuz. - OpenAI APIs: İstekler [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) uyarınca 30 gün boyunca saklanır. diff --git a/packages/web/src/content/docs/zen.mdx b/packages/web/src/content/docs/zen.mdx index a5a80dbf611e..e41ab3f90277 100644 --- a/packages/web/src/content/docs/zen.mdx +++ b/packages/web/src/content/docs/zen.mdx @@ -119,6 +119,7 @@ You can also access our models through the following API endpoints. | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -148,6 +149,7 @@ We support a pay-as-you-go model. Below are the prices **per 1M tokens**. | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -233,6 +235,7 @@ The free models: - MiMo-V2.5 Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. - Hy3 Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. +- Ling 3.0 Flash Fin Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. - Nemotron 3 Ultra Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. - Nemotron 3.5 Lightning Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. - Big Pickle is a stealth model that's free on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. @@ -293,6 +296,7 @@ All our models are hosted in the US. Our providers follow a zero-retention polic - Big Pickle: During its free period, collected data may be used to improve the model. - MiMo-V2.5 Free: During its free period, collected data may be used to improve the model. - Hy3 Free: During its free period, collected data may be used to improve the model. +- Ling 3.0 Flash Fin Free: During its free period, collected data may be used to improve the model. - Nemotron 3 Ultra Free (NVIDIA free endpoints): Trial use only — do not submit personal or confidential data. Your use is logged for security purposes and to improve NVIDIA products and services. The logged session data for improvement purposes is not linked to your identity or any persistent identifier. For more information about our data processing practices, see our [Privacy Policy](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). By interacting with this endpoint, you consent to our collection, recording, and use of such information and the [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (NVIDIA free endpoints): Trial use only — do not submit personal or confidential data. Your use is logged for security purposes and to improve NVIDIA products and services. The logged session data for improvement purposes is not linked to your identity or any persistent identifier. For more information about our data processing practices, see our [Privacy Policy](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). By interacting with this endpoint, you consent to our collection, recording, and use of such information and the [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: Requests are retained for 30 days in accordance with [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). diff --git a/packages/web/src/content/docs/zh-cn/zen.mdx b/packages/web/src/content/docs/zh-cn/zen.mdx index 258905c22063..51c0549f3a47 100644 --- a/packages/web/src/content/docs/zh-cn/zen.mdx +++ b/packages/web/src/content/docs/zh-cn/zen.mdx @@ -110,6 +110,7 @@ OpenCode Zen 的工作方式与 OpenCode 中的任何其他提供商相同。 | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -137,6 +138,7 @@ https://opencode.ai/zen/v1/models | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -222,6 +224,7 @@ https://opencode.ai/zen/v1/models - MiMo-V2.5 Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 - Hy3 Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 +- Ling 3.0 Flash Fin Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 - Nemotron 3 Ultra Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 - Nemotron 3.5 Lightning Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 - Big Pickle 是一个隐身模型,目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 @@ -279,6 +282,7 @@ https://opencode.ai/zen/v1/models - Big Pickle:在免费期间,收集的数据可能会被用于改进模型。 - MiMo-V2.5 Free:在免费期间,收集的数据可能会被用于改进模型。 - Hy3 Free:在免费期间,收集的数据可能会被用于改进模型。 +- Ling 3.0 Flash Fin Free:在免费期间,收集的数据可能会被用于改进模型。 - Nemotron 3 Ultra Free(NVIDIA 免费端点):仅供试用 — 请勿提交个人或机密数据。出于安全目的以及为改进 NVIDIA 产品和服务,系统会记录你的使用情况。出于改进目的而记录的会话数据不会与你的身份或任何持久标识符相关联。有关我们数据处理实践的更多信息,请参阅我们的[隐私政策](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。与此端点进行交互,即表示你同意我们收集、记录和使用此类信息,并同意 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。 - Nemotron 3.5 Lightning Free(NVIDIA 免费端点):仅供试用 — 请勿提交个人或机密数据。出于安全目的以及为改进 NVIDIA 产品和服务,系统会记录你的使用情况。出于改进目的而记录的会话数据不会与你的身份或任何持久标识符相关联。有关我们数据处理实践的更多信息,请参阅我们的[隐私政策](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。与此端点进行交互,即表示你同意我们收集、记录和使用此类信息,并同意 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。 - OpenAI APIs:请求会根据 [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) 保留 30 天。 diff --git a/packages/web/src/content/docs/zh-tw/zen.mdx b/packages/web/src/content/docs/zh-tw/zen.mdx index 38be595c4b4d..501a62dbbbc4 100644 --- a/packages/web/src/content/docs/zh-tw/zen.mdx +++ b/packages/web/src/content/docs/zh-tw/zen.mdx @@ -114,6 +114,7 @@ OpenCode Zen 的運作方式和 OpenCode 中的其他供應商一樣。 | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | @@ -142,6 +143,7 @@ https://opencode.ai/zen/v1/models | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | | Hy3 Free | Free | Free | Free | - | +| Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | @@ -227,6 +229,7 @@ https://opencode.ai/zen/v1/models - MiMo-V2.5 Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 - Hy3 Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 +- Ling 3.0 Flash Fin Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 - Nemotron 3 Ultra Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 - Nemotron 3.5 Lightning Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 - Big Pickle 是一個隱身模型,在 OpenCode 上限時免費提供。團隊正在利用這段時間收集回饋並改進模型。 @@ -285,6 +288,7 @@ https://opencode.ai/zen/v1/models - Big Pickle: 在免費期間,收集到的資料可能會用於改進模型。 - MiMo-V2.5 Free: 在免費期間,收集到的資料可能會用於改進模型。 - Hy3 Free: 在免費期間,收集到的資料可能會用於改進模型。 +- Ling 3.0 Flash Fin Free: 在免費期間,收集到的資料可能會用於改進模型。 - Nemotron 3 Ultra Free(NVIDIA 免費端點):僅供試用 — 請勿提交個人或機密資料。基於安全目的以及為了改進 NVIDIA 產品與服務,系統會記錄你的使用情況。基於改進目的而記錄的工作階段資料不會與你的身分或任何持久識別碼相關聯。有關我們資料處理實務的更多資訊,請參閱我們的[隱私政策](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。與此端點進行互動,即表示你同意我們收集、記錄與使用此類資訊,並同意 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。 - Nemotron 3.5 Lightning Free(NVIDIA 免費端點):僅供試用 — 請勿提交個人或機密資料。基於安全目的以及為了改進 NVIDIA 產品與服務,系統會記錄你的使用情況。基於改進目的而記錄的工作階段資料不會與你的身分或任何持久識別碼相關聯。有關我們資料處理實務的更多資訊,請參閱我們的[隱私政策](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。與此端點進行互動,即表示你同意我們收集、記錄與使用此類資訊,並同意 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。 - OpenAI APIs: 請求會依據 [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) 保留 30 天。 From 62a2f0e6174de920ca8cbb118bdea7dbef3ef3fd Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Fri, 28 Aug 2026 22:22:28 -0400 Subject: [PATCH 070/185] feat(console): animate Go usage allowances and bonuses (#46055) --- bun.lock | 5 + packages/console/app/package.json | 1 + .../app/src/component/limits-graph.tsx | 267 ++++++++++++++++++ .../app/src/component/rolling-number.tsx | 58 ++++ packages/console/app/src/i18n/en.ts | 2 +- packages/console/app/src/routes/go/index.css | 210 ++++++++++++-- packages/console/app/src/routes/go/index.tsx | 200 +------------ 7 files changed, 528 insertions(+), 215 deletions(-) create mode 100644 packages/console/app/src/component/limits-graph.tsx create mode 100644 packages/console/app/src/component/rolling-number.tsx diff --git a/bun.lock b/bun.lock index c8cb37f4e50c..71049cb1ac29 100644 --- a/bun.lock +++ b/bun.lock @@ -178,6 +178,7 @@ "@upstash/redis": "1.38.0", "chart.js": "4.5.1", "nitro": "3.0.1-alpha.1", + "number-flow": "0.6.2", "solid-js": "catalog:", "solid-list": "0.3.0", "solid-stripe": "0.8.1", @@ -3651,6 +3652,8 @@ "escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + "esm-env": ["esm-env@1.2.2", "", {}, "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="], + "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], "estree-util-attach-comments": ["estree-util-attach-comments@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw=="], @@ -4565,6 +4568,8 @@ "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + "number-flow": ["number-flow@0.6.2", "", { "dependencies": { "esm-env": "^1.1.4" } }, "sha512-MCnImG4Q5vPwhSXnov56nOuyyKn6LC+Qd7II1UiKc+ACRtug5iAtn0+CwXNxM38AC5lSowEY+oYEtZX2qMnUyw=="], + "nypm": ["nypm@0.6.6", "", { "dependencies": { "citty": "^0.2.2", "pathe": "^2.0.3", "tinyexec": "^1.1.1" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-vRyr0r4cbBapw07Xw8xrj9Teq3o7MUD35rSaTcanDbW+aK2XHDgJFiU6ZTj2GBw7Q12ysdsyFss+Vdz4hQ0Y6Q=="], "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], diff --git a/packages/console/app/package.json b/packages/console/app/package.json index e83f568c3be2..8e03034d621a 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -29,6 +29,7 @@ "@upstash/redis": "1.38.0", "chart.js": "4.5.1", "nitro": "3.0.1-alpha.1", + "number-flow": "0.6.2", "solid-js": "catalog:", "solid-list": "0.3.0", "solid-stripe": "0.8.1", diff --git a/packages/console/app/src/component/limits-graph.tsx b/packages/console/app/src/component/limits-graph.tsx new file mode 100644 index 000000000000..03e278939769 --- /dev/null +++ b/packages/console/app/src/component/limits-graph.tsx @@ -0,0 +1,267 @@ +import { For, createSignal, onCleanup, onMount } from "solid-js" +import { useI18n } from "~/context/i18n" +import { RollingNumber } from "./rolling-number" + +export function LimitsGraph(props: { href: string }) { + let root!: HTMLElement + const [visible, setVisible] = createSignal(false) + const [boosted, setBoosted] = createSignal(false) + const [promoted, setPromoted] = createSignal([]) + let timer: ReturnType | undefined + + const i18n = useI18n() + + onMount(() => { + const motion = window.matchMedia("(prefers-reduced-motion: reduce)") + const finish = () => { + if (!motion.matches) return + clearTimeout(timer) + setVisible(true) + setBoosted(true) + setPromoted(bonuses.map((model) => model.id)) + } + motion.addEventListener("change", finish) + onCleanup(() => { + clearTimeout(timer) + motion.removeEventListener("change", finish) + }) + if (motion.matches) return finish() + if (typeof IntersectionObserver === "undefined") return setVisible(true) + const observer = new IntersectionObserver( + (entries) => { + const entry = entries[0] + if (!entry?.isIntersecting || entry.intersectionRatio < 0.35) return + setVisible(true) + observer.disconnect() + }, + { threshold: 0.35 }, + ) + observer.observe(root) + onCleanup(() => observer.disconnect()) + }) + + const baseline = 100 + const graph = [ + { id: "kimi-k3", name: "Kimi K3", req: 110 }, + { id: "grok-4.6", name: "Grok 4.6", req: 169 }, + { id: "hy4-preview", name: "Hy4 preview", req: 1350 }, + { id: "gpt-5.6-luna", name: "GPT 5.6 Luna", req: 2050 }, + { id: "glm-5.3-flash", name: "GLM-5.3-Flash", req: 3160, baseReq: 1580, bonus: "2x usage" }, + { id: "minimax-m3", name: "MiniMax M3", req: 3200 }, + { id: "qwen3.7-plus", name: "Qwen3.7 Plus", req: 4300 }, + { id: "qwen3.8-flash", name: "Qwen3.8 Flash", req: 5400 }, + { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", req: 7600 }, + { id: "longcat-2.0", name: "LongCat-2.0", req: 11400 }, + { id: "mimo-v2.5", name: "MiMo-V2.5", req: 30100 }, + { id: "hy3", name: "Hy3", req: 34400, baseReq: 4300, bonus: "8x usage" }, + { id: "muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", req: 45300, edge: true }, + ].map((model, index) => ({ ...model, d: `${50 + index * 25}ms` })) + const bonuses = graph.filter((model) => model.baseReq) + + const w = 1040 + const chartW = 720 + const left = 40 + const right = 60 + const top = 18 + const bottom = 44 + const plot = chartW - left - right + const infiniteX = w - 180 + + const ratio = (n: number) => n / baseline + const rmax = Math.max(1, ...graph.filter((m) => !("infinite" in m)).map((m) => ratio(m.req))) + const log = (n: number) => Math.log10(Math.max(n, 1)) + const base = 24 + const p = 2.2 + const x = (r: number) => left + base + Math.pow(log(r) / log(rmax), p) * (plot - base) + const ticks = [1, 5, 10, 25, 50, 100, 250].filter((t) => t <= rmax) + const labels = (() => { + const set = new Set() + let last = -Infinity + for (const t of ticks) { + if (t === 1) { + set.add(t) + last = x(t) + continue + } + const pos = x(t) + if (pos - last < 44) continue + set.add(t) + last = pos + } + return set + })() + const shown = ticks.filter((t) => labels.has(t)) + const bh = 8 + const gap = 20 + const step = bh + gap + const gy = (i: number) => top + 22 + step * i + const h = gy(graph.length - 1) + bottom + const my = graph.length < 2 ? gy(0) : (gy(0) + gy(graph.length - 1)) / 2 + const px = (n: number) => `${(n / w) * 100}%` + const py = (n: number) => `${(n / h) * 100}%` + const lx = px(left - 16) + const ty = py(h - 18) + const timing = () => { + const style = getComputedStyle(root) + return { + duration: Number.parseFloat(style.getPropertyValue("--bonus-duration")), + easing: style.getPropertyValue("--spring-easing").trim(), + spinEasing: style.getPropertyValue("--digit-easing").trim(), + } + } + + return ( +
    { + if (!(event.target instanceof SVGElement) || event.animationName !== "go-graph-reveal") return + if (event.target.hasAttribute("data-stage-end") && !boosted()) { + const duration = Number.parseFloat(getComputedStyle(root).getPropertyValue("--reveal-duration")) + timer = setTimeout(() => setBoosted(true), duration * 0.6) + return + } + if (event.target.dataset.animate !== "bonus") return + const model = event.target.dataset.model + if (!model) return + setPromoted((current) => [...current, model]) + }} + > +
    + + + + + + +
    + + {(m, i) => ( + + + {!("infinite" in m) && m.baseReq ? ( + + ) : ( + {"infinite" in m ? "\u221e" : m.req.toLocaleString()} + )} + {m.name} + {m.id === "muse-spark-1.2-contributor" && ( + + ( + + {i18n.t("go.graph.limitedRegions")} + + ) + + )} + {"infinite" in m && ({i18n.t("go.graph.limitedTime")})} + + {"bonus" in m && {m.bonus}} + + )} + +
    +
    + +
    +
    +
    +
    + {i18n.t("go.graph.label")} + + {i18n.t("go.graph.usageLimits")} + +
    +
    +
    +
    +
    + ) +} diff --git a/packages/console/app/src/component/rolling-number.tsx b/packages/console/app/src/component/rolling-number.tsx new file mode 100644 index 000000000000..df1af6ca20cf --- /dev/null +++ b/packages/console/app/src/component/rolling-number.tsx @@ -0,0 +1,58 @@ +import NumberFlow from "number-flow" +import { continuous } from "number-flow/plugins" +import { createEffect, onCleanup, onMount } from "solid-js" + +export function RollingNumber(props: { + value: number + target: number + timing: () => { duration: number; easing: string; spinEasing: string } +}) { + let root!: HTMLSpanElement + // Keep the server-rendered text stable while the custom element owns its contents. + const initial = props.value.toLocaleString() + const growing = props.target.toLocaleString().length > initial.length + + onMount(() => { + if (new Intl.NumberFormat().resolvedOptions().numberingSystem !== "latn") { + createEffect(() => { + root.textContent = props.value.toLocaleString() + }) + return + } + + const flow = new NumberFlow() + flow.format = { useGrouping: true, maximumFractionDigits: 0 } + flow.trend = 1 + if (growing) flow.plugins = [continuous] + flow.opacityTiming = { duration: 180, easing: "ease-out" } + const motion = window.matchMedia("(prefers-reduced-motion: reduce)") + const updateMotion = () => { + flow.animated = !motion.matches + } + updateMotion() + motion.addEventListener("change", updateMotion) + onCleanup(() => motion.removeEventListener("change", updateMotion)) + root.replaceChildren(flow) + createEffect(() => { + const value = props.value + if (flow.value === value) return + const timing = props.timing() + flow.transformTiming = { duration: timing.duration, easing: timing.easing } + flow.spinTiming = { + duration: timing.duration, + easing: growing ? "cubic-bezier(0.45, 0, 0.55, 1)" : timing.spinEasing, + } + flow.update(value) + }) + }) + + return ( + + {initial} + + ) +} diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index a557d4fb0e8e..a479f2642b9a 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -267,7 +267,7 @@ export const dict = { "go.graph.free": "Free", "go.graph.freePill": "Big Pickle and free models", "go.graph.go": "Go", - "go.graph.label": "Requests per 5 hour", + "go.graph.label": "Requests / 5 hours", "go.graph.limitedRegions": "limited regions", "go.graph.limitedTime": "limited time", "go.graph.tick": "{{n}}x", diff --git a/packages/console/app/src/routes/go/index.css b/packages/console/app/src/routes/go/index.css index b72b01395a14..7f70c41c1def 100644 --- a/packages/console/app/src/routes/go/index.css +++ b/packages/console/app/src/routes/go/index.css @@ -21,10 +21,40 @@ } } -@keyframes go-graph-bar { +@keyframes go-graph-reveal { to { + clip-path: inset(0 0 0 0) fill-box; + } +} + +@keyframes go-graph-label { + to { + mask-position: 0 0; opacity: 1; - transform: scaleX(1); + } +} + +@keyframes go-graph-grid { + to { + mask-position: 0 100%; + } +} + +@keyframes go-graph-heat { + from { + filter: brightness(var(--arrival-brightness)); + } + to { + filter: brightness(1); + } +} + +@keyframes go-graph-bonus-heat { + from { + color: var(--color-go-3); + } + to { + color: var(--color-text-weak); } } @@ -477,6 +507,48 @@ body { } [data-component="limit-graph"] { + --reveal-duration: 950ms; + --bonus-duration: 1500ms; + --digit-easing: cubic-bezier(0.22, 1, 0.36, 1); + --grid-duration: 2000ms; + --grid-easing: cubic-bezier(0.22, 1, 0.36, 1); + --arrival-brightness: 1.15; + --heat-duration: 1600ms; + --bar-delay: 240ms; + /* Critically damped response, shared by the bars, labels, and rolling digits. */ + --spring-easing: linear( + 0, + 0.02991, + 0.10078, + 0.19179, + 0.28962, + 0.38611, + 0.47651, + 0.55839, + 0.63079, + 0.69365, + 0.74748, + 0.79306, + 0.83131, + 0.86315, + 0.8895, + 0.91117, + 0.92892, + 0.94339, + 0.95515, + 0.96467, + 0.97236, + 0.97855, + 0.98352, + 0.98751, + 0.9907, + 0.99324, + 0.99527, + 0.99689, + 0.99817, + 0.99919, + 1 + ); margin: 0 auto; width: calc(100% - 120px); max-width: calc(100% - 120px); @@ -491,6 +563,7 @@ body { } [data-slot="plot"] { + container-type: inline-size; position: relative; overflow: visible; width: 100%; @@ -515,6 +588,7 @@ body { } [data-slot="xlabels"] [data-xlabel] { + opacity: 0; position: absolute; left: var(--x); top: var(--y); @@ -551,11 +625,26 @@ body { } } + [data-slot="xlabels"] [data-xlabel], + [data-slot="pills"] [data-label], + [data-bonus] { + mask-image: linear-gradient(to right, #000 40%, transparent 60%); + mask-size: 250% 100%; + mask-position: 100% 0; + mask-repeat: no-repeat; + } + [data-slot="pills"] { position: absolute; inset: 0; pointer-events: none; + [data-label] { + display: inline-flex; + align-items: center; + gap: 8px; + } + [data-item] { position: absolute; left: var(--x); @@ -573,7 +662,6 @@ body { font-size: 13px; line-height: 20px; box-sizing: border-box; - opacity: 0; } @media (max-width: 60rem) { @@ -605,10 +693,16 @@ body { [data-value] { color: var(--color-text-strong); font-weight: 600; + font-variant-numeric: tabular-nums; white-space: nowrap; + + number-flow { + line-height: 1; + } } [data-bonus] { + opacity: 0; color: var(--color-text-weak); font-size: 12px; font-weight: 400; @@ -685,11 +779,22 @@ body { opacity: 0.55; } + [data-grid], + [data-stub] { + mask-image: linear-gradient(to top, #000 48%, transparent 52%); + mask-size: 100% 250%; + mask-position: 0 0; + mask-repeat: no-repeat; + mask-origin: stroke-box; + mask-clip: stroke-box; + } + + [data-animate="bar"], + [data-animate="bonus"] { + clip-path: inset(0 100% 0 0) fill-box; + } + [data-bar] { - transform-box: fill-box; - transform-origin: left center; - opacity: 0; - transform: scaleX(0.02); fill: var(--bar-go); stroke: none; } @@ -760,18 +865,74 @@ body { animation-delay: var(--d, 0ms); } - &[data-visible] [data-bar] { - animation: go-graph-bar 560ms cubic-bezier(0.2, 0.7, 0.2, 1) forwards; + &[data-visible] [data-grid], + &[data-visible] [data-stub] { + animation: + go-graph-grid var(--grid-duration) var(--grid-easing) forwards, + go-graph-heat var(--heat-duration) linear backwards; + animation-delay: var(--d, 0ms), calc(var(--d, 0ms) + var(--grid-duration)); + } + + &[data-visible] [data-slot="xlabels"] [data-xlabel] { + animation: go-graph-label 300ms ease-out forwards; animation-delay: var(--d, 0ms); } - &[data-visible] [data-slot="pills"] [data-item] { - opacity: 1; - transition: opacity 240ms ease; - transition-delay: var(--d, 0ms); + &[data-visible] [data-animate="bar"] { + animation: + go-graph-reveal var(--reveal-duration) var(--spring-easing) forwards, + go-graph-heat var(--heat-duration) linear backwards; + animation-delay: + calc(var(--bar-delay) + var(--d, 0ms)), calc(var(--bar-delay) + var(--d, 0ms) + var(--reveal-duration)); + } + + &[data-visible] [data-slot="pills"] [data-label] { + animation: go-graph-label 400ms ease-out forwards; + animation-delay: calc(var(--bar-delay) + var(--d, 0ms) + var(--reveal-duration) * 0.4); + } + + &[data-boosted] [data-animate="bonus"] { + animation: + go-graph-reveal var(--bonus-duration) var(--spring-easing) forwards, + go-graph-heat var(--heat-duration) linear backwards; + animation-delay: var(--bonus-delay), calc(var(--bonus-delay) + var(--bonus-duration)); + } + + &[data-boosted] [data-slot="pills"] [data-item][data-promo] { + translate: var(--travel) 0; + transition: translate var(--bonus-duration) var(--spring-easing) var(--bonus-delay); + + @media (max-width: 60rem) { + &[data-edge] { + translate: none; + transition: none; + } + } + } + + &[data-boosted] [data-bonus] { + animation: + go-graph-label 400ms ease-out forwards, + go-graph-bonus-heat 3000ms linear backwards; + animation-delay: var(--bonus-delay); } @media (prefers-reduced-motion: reduce) { + [data-grid], + [data-stub], + &[data-visible] [data-grid], + &[data-visible] [data-stub] { + mask-image: none; + animation: none; + } + + [data-slot="xlabels"] [data-xlabel], + &[data-visible] [data-slot="xlabels"] [data-xlabel] { + opacity: 1; + mask-image: none; + animation: none; + } + [data-animate="line"] { stroke-dashoffset: 0; animation: none; @@ -781,9 +942,12 @@ body { transform: none; animation: none; } - [data-bar] { + [data-animate="bar"], + &[data-visible] [data-animate="bar"], + [data-animate="bonus"], + &[data-boosted] [data-animate="bonus"] { opacity: 1; - transform: none; + clip-path: none; animation: none; } [data-row], @@ -792,8 +956,16 @@ body { transition: none; } - [data-slot="pills"] [data-item] { + [data-slot="pills"] [data-label], + &[data-visible] [data-slot="pills"] [data-label], + [data-bonus], + &[data-boosted] [data-bonus] { opacity: 1; + mask-image: none; + animation: none; + } + + &[data-boosted] [data-slot="pills"] [data-item][data-promo] { transition: none; } } @@ -886,6 +1058,12 @@ body { flex-wrap: wrap; justify-content: flex-start; + [data-label] { + max-width: 100%; + flex-wrap: wrap; + gap: 3px 8px; + } + &[data-model="muse-spark-1.2-contributor"] { transform: translateY(11px); diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index b2e67ecc6e49..6b356ccafa10 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -1,7 +1,7 @@ import "./index.css" import { createAsync, query } from "@solidjs/router" import { Title, Meta } from "@solidjs/meta" -import { For, createMemo, createSignal, onCleanup, onMount } from "solid-js" +import { For, createMemo } from "solid-js" //import { HttpHeader } from "@solidjs/start" import goLogoLight from "../../asset/go-ornate-light.svg" import goLogoDark from "../../asset/go-ornate-dark.svg" @@ -10,6 +10,7 @@ import { Faq } from "~/component/faq" import { Legal } from "~/component/legal" import { Footer } from "~/component/footer" import { Header } from "~/component/header" +import { LimitsGraph } from "~/component/limits-graph" import { config } from "~/config" import { getLastSeenWorkspaceID } from "../workspace/common" import { IconMiniMax, IconMiMo, IconZai, IconAlibaba, IconDeepSeek } from "~/component/icon" @@ -49,203 +50,6 @@ const models = [ { name: "Hy3", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, ] as const -function LimitsGraph(props: { href: string }) { - let root!: HTMLElement - const [visible, setVisible] = createSignal(false) - - const i18n = useI18n() - - onMount(() => { - if (typeof IntersectionObserver === "undefined") return setVisible(true) - const observer = new IntersectionObserver( - (entries) => { - const entry = entries[0] - if (!entry?.isIntersecting) return - setVisible(true) - observer.disconnect() - }, - { threshold: 0.35 }, - ) - observer.observe(root) - onCleanup(() => observer.disconnect()) - }) - - const baseline = 100 - const graph = [ - { id: "kimi-k3", name: "Kimi K3", req: 110, d: "50ms" }, - { id: "grok-4.6", name: "Grok 4.6", req: 169, d: "75ms" }, - { id: "hy4-preview", name: "Hy4 preview", req: 1350, d: "90ms" }, - { id: "gpt-5.6-luna", name: "GPT 5.6 Luna", req: 2050, d: "290ms" }, - { id: "glm-5.3-flash", name: "GLM-5.3-Flash", req: 3160, baseReq: 1580, bonus: "2x usage", d: "100ms" }, - { id: "minimax-m3", name: "MiniMax M3", req: 3200, d: "210ms" }, - { id: "qwen3.7-plus", name: "Qwen3.7 Plus", req: 4300, d: "300ms" }, - { id: "qwen3.8-flash", name: "Qwen3.8 Flash", req: 5400, d: "315ms" }, - { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", req: 7600, d: "330ms" }, - { id: "longcat-2.0", name: "LongCat-2.0", req: 11400, d: "335ms" }, - { id: "mimo-v2.5", name: "MiMo-V2.5", req: 30100, d: "340ms" }, - { id: "hy3", name: "Hy3", req: 34400, baseReq: 4300, bonus: "8x usage", d: "320ms" }, - { id: "muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", req: 45300, edge: true, d: "360ms" }, - ] - - const w = 1040 - const chartW = 720 - const left = 40 - const right = 60 - const top = 18 - const bottom = 44 - const plot = chartW - left - right - const infiniteX = w - 180 - - const ratio = (n: number) => n / baseline - const rmax = Math.max(1, ...graph.filter((m) => !("infinite" in m)).map((m) => ratio(m.req))) - const log = (n: number) => Math.log10(Math.max(n, 1)) - const base = 24 - const p = 2.2 - const x = (r: number) => left + base + Math.pow(log(r) / log(rmax), p) * (plot - base) - const ticks = [1, 5, 10, 25, 50, 100, 250].filter((t) => t <= rmax) - const labels = (() => { - const set = new Set() - let last = -Infinity - for (const t of ticks) { - if (t === 1) { - set.add(t) - last = x(t) - continue - } - const pos = x(t) - if (pos - last < 44) continue - set.add(t) - last = pos - } - return set - })() - const shown = ticks.filter((t) => labels.has(t)) - const bh = 8 - const gap = 20 - const step = bh + gap - const gy = (i: number) => top + 22 + step * i - const h = gy(graph.length - 1) + bottom - const my = graph.length < 2 ? gy(0) : (gy(0) + gy(graph.length - 1)) / 2 - const px = (n: number) => `${(n / w) * 100}%` - const py = (n: number) => `${(n / h) * 100}%` - const lx = px(left - 16) - const ty = py(h - 18) - - return ( -
    -
    - - - - - - -
    - - {(m, i) => ( - - {"infinite" in m ? "∞" : m.req.toLocaleString()} - {m.name} - {m.id === "muse-spark-1.2-contributor" && ( - - ( - - {i18n.t("go.graph.limitedRegions")} - - ) - - )} - {"infinite" in m && ({i18n.t("go.graph.limitedTime")})} - {"bonus" in m && {m.bonus}} - - )} - -
    -
    - -
    -
    -
    -
    - {i18n.t("go.graph.label")} - - {i18n.t("go.graph.usageLimits")} - -
    -
    -
    -
    -
    - ) -} - export default function Home() { const workspaceID = createAsync(() => checkLoggedIn()) const subscribeUrl = createMemo(() => (workspaceID() ? `/workspace/${workspaceID()}/go` : "/auth")) From dc4449df0d52199704ea4989a5a993ebbc605612 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Sat, 29 Aug 2026 02:34:49 +0000 Subject: [PATCH 071/185] chore: update nix node_modules hashes --- nix/hashes.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nix/hashes.json b/nix/hashes.json index 8279470428b0..8ad745661434 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,8 +1,8 @@ { "nodeModules": { - "x86_64-linux": "sha256-fJ72uEK9rSoFL6eJk0Lwkc2TIMLZyQ7Iz83WrZE2duA=", - "aarch64-linux": "sha256-ElEwz5spFa8XFYSBiGjKlTKRFQCju/ZYDlb6h1FaKoI=", - "aarch64-darwin": "sha256-RmbrAlggOqxNFdhW+qj2tjRCpRf2NDLe68TikbGtCeA=", - "x86_64-darwin": "sha256-ZgYE0J+Dkz/kALK3kZ1jdFIZ5/BEkEaw0mXCqPon0iY=" + "x86_64-linux": "sha256-Sz806ltZYh+09hLqdqZAxSUlhJMk8bg50oHHoykNa/Y=", + "aarch64-linux": "sha256-dDSLsgah0NKAJLVczh25KOzLl10xhhSbO7WKac1qbJI=", + "aarch64-darwin": "sha256-xZZ5d4i4Ek+X7kvyGN96gbRwXK45j3bsWhPW1kILawI=", + "x86_64-darwin": "sha256-hYTHDIbNF4PZuuSz7z4NZv870FcstVYrMuhGIiFapEY=" } } From be53e17e19f3bae8925c65c9cd5802104d1d8a3e Mon Sep 17 00:00:00 2001 From: Jack Date: Sun, 30 Aug 2026 11:34:46 +0800 Subject: [PATCH 072/185] docs(go): end Hy3 usage promotion (#46213) --- packages/console/app/src/component/limits-graph.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/console/app/src/component/limits-graph.tsx b/packages/console/app/src/component/limits-graph.tsx index 03e278939769..376e23f9c7ca 100644 --- a/packages/console/app/src/component/limits-graph.tsx +++ b/packages/console/app/src/component/limits-graph.tsx @@ -49,11 +49,11 @@ export function LimitsGraph(props: { href: string }) { { id: "glm-5.3-flash", name: "GLM-5.3-Flash", req: 3160, baseReq: 1580, bonus: "2x usage" }, { id: "minimax-m3", name: "MiniMax M3", req: 3200 }, { id: "qwen3.7-plus", name: "Qwen3.7 Plus", req: 4300 }, + { id: "hy3", name: "Hy3", req: 4300 }, { id: "qwen3.8-flash", name: "Qwen3.8 Flash", req: 5400 }, { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", req: 7600 }, { id: "longcat-2.0", name: "LongCat-2.0", req: 11400 }, { id: "mimo-v2.5", name: "MiMo-V2.5", req: 30100 }, - { id: "hy3", name: "Hy3", req: 34400, baseReq: 4300, bonus: "8x usage" }, { id: "muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", req: 45300, edge: true }, ].map((model, index) => ({ ...model, d: `${50 + index * 25}ms` })) const bonuses = graph.filter((model) => model.baseReq) From 10765ff2a9da8c3b88e4de873aa383a49c318912 Mon Sep 17 00:00:00 2001 From: Jack Date: Sun, 30 Aug 2026 12:09:56 +0800 Subject: [PATCH 073/185] fix: remove Hy3 Free docs and correct Go chart rendering (#46221) --- packages/console/app/src/routes/go/index.css | 45 ++++---------------- packages/web/src/content/docs/ar/zen.mdx | 4 -- packages/web/src/content/docs/bs/zen.mdx | 4 -- packages/web/src/content/docs/da/zen.mdx | 4 -- packages/web/src/content/docs/de/zen.mdx | 4 -- packages/web/src/content/docs/es/zen.mdx | 4 -- packages/web/src/content/docs/fr/zen.mdx | 4 -- packages/web/src/content/docs/it/zen.mdx | 4 -- packages/web/src/content/docs/ja/zen.mdx | 4 -- packages/web/src/content/docs/ko/zen.mdx | 4 -- packages/web/src/content/docs/nb/zen.mdx | 4 -- packages/web/src/content/docs/pl/zen.mdx | 4 -- packages/web/src/content/docs/pt-br/zen.mdx | 4 -- packages/web/src/content/docs/ru/zen.mdx | 4 -- packages/web/src/content/docs/th/zen.mdx | 4 -- packages/web/src/content/docs/tr/zen.mdx | 4 -- packages/web/src/content/docs/zen.mdx | 4 -- packages/web/src/content/docs/zh-cn/zen.mdx | 4 -- packages/web/src/content/docs/zh-tw/zen.mdx | 4 -- 19 files changed, 8 insertions(+), 109 deletions(-) diff --git a/packages/console/app/src/routes/go/index.css b/packages/console/app/src/routes/go/index.css index 7f70c41c1def..724fa381e9a7 100644 --- a/packages/console/app/src/routes/go/index.css +++ b/packages/console/app/src/routes/go/index.css @@ -40,24 +40,6 @@ } } -@keyframes go-graph-heat { - from { - filter: brightness(var(--arrival-brightness)); - } - to { - filter: brightness(1); - } -} - -@keyframes go-graph-bonus-heat { - from { - color: var(--color-go-3); - } - to { - color: var(--color-text-weak); - } -} - [data-page="go"] { --color-background: hsl(0, 20%, 99%); --color-background-weak: hsl(0, 8%, 97%); @@ -512,8 +494,6 @@ body { --digit-easing: cubic-bezier(0.22, 1, 0.36, 1); --grid-duration: 2000ms; --grid-easing: cubic-bezier(0.22, 1, 0.36, 1); - --arrival-brightness: 1.15; - --heat-duration: 1600ms; --bar-delay: 240ms; /* Critically damped response, shared by the bars, labels, and rolling digits. */ --spring-easing: linear( @@ -706,7 +686,7 @@ body { color: var(--color-text-weak); font-size: 12px; font-weight: 400; - line-height: 1; + line-height: inherit; white-space: nowrap; @media (max-width: 40rem) { @@ -867,10 +847,8 @@ body { &[data-visible] [data-grid], &[data-visible] [data-stub] { - animation: - go-graph-grid var(--grid-duration) var(--grid-easing) forwards, - go-graph-heat var(--heat-duration) linear backwards; - animation-delay: var(--d, 0ms), calc(var(--d, 0ms) + var(--grid-duration)); + animation: go-graph-grid var(--grid-duration) var(--grid-easing) forwards; + animation-delay: var(--d, 0ms); } &[data-visible] [data-slot="xlabels"] [data-xlabel] { @@ -879,11 +857,8 @@ body { } &[data-visible] [data-animate="bar"] { - animation: - go-graph-reveal var(--reveal-duration) var(--spring-easing) forwards, - go-graph-heat var(--heat-duration) linear backwards; - animation-delay: - calc(var(--bar-delay) + var(--d, 0ms)), calc(var(--bar-delay) + var(--d, 0ms) + var(--reveal-duration)); + animation: go-graph-reveal var(--reveal-duration) var(--spring-easing) forwards; + animation-delay: calc(var(--bar-delay) + var(--d, 0ms)); } &[data-visible] [data-slot="pills"] [data-label] { @@ -892,10 +867,8 @@ body { } &[data-boosted] [data-animate="bonus"] { - animation: - go-graph-reveal var(--bonus-duration) var(--spring-easing) forwards, - go-graph-heat var(--heat-duration) linear backwards; - animation-delay: var(--bonus-delay), calc(var(--bonus-delay) + var(--bonus-duration)); + animation: go-graph-reveal var(--bonus-duration) var(--spring-easing) forwards; + animation-delay: var(--bonus-delay); } &[data-boosted] [data-slot="pills"] [data-item][data-promo] { @@ -911,9 +884,7 @@ body { } &[data-boosted] [data-bonus] { - animation: - go-graph-label 400ms ease-out forwards, - go-graph-bonus-heat 3000ms linear backwards; + animation: go-graph-label 400ms ease-out forwards; animation-delay: var(--bonus-delay); } diff --git a/packages/web/src/content/docs/ar/zen.mdx b/packages/web/src/content/docs/ar/zen.mdx index e8e5494267da..ff8c3d2157f7 100644 --- a/packages/web/src/content/docs/ar/zen.mdx +++ b/packages/web/src/content/docs/ar/zen.mdx @@ -113,7 +113,6 @@ OpenCode Zen هي بوابة AI تتيح لك الوصول إلى هذه الن | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -141,7 +140,6 @@ https://opencode.ai/zen/v1/models | --------------------------------- | ------- | ------- | --------------- | --------------- | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -227,7 +225,6 @@ https://opencode.ai/zen/v1/models النماذج المجانية: - MiMo-V2.5 Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. -- Hy3 Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. - Ling 3.0 Flash Fin Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. - Nemotron 3 Ultra Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. - Nemotron 3.5 Lightning Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. @@ -285,7 +282,6 @@ https://opencode.ai/zen/v1/models - Big Pickle: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج. - MiMo-V2.5 Free: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج. -- Hy3 Free: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج. - Ling 3.0 Flash Fin Free: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج. - Nemotron 3 Ultra Free (نقاط نهاية NVIDIA المجانية): للاستخدام التجريبي فقط — لا ترسل بيانات شخصية أو سرية. يُسجَّل استخدامك لأغراض أمنية ولتحسين منتجات وخدمات NVIDIA. بيانات الجلسة المُسجَّلة لأغراض التحسين غير مرتبطة بهويتك أو بأي مُعرِّف دائم. لمزيد من المعلومات حول ممارسات معالجة البيانات لدينا، راجع [سياسة الخصوصية](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). بتفاعلك مع نقطة النهاية هذه، فإنك توافق على جمعنا لهذه المعلومات وتسجيلها واستخدامها وعلى [شروط خدمة النسخة التجريبية من واجهة NVIDIA API](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (نقاط نهاية NVIDIA المجانية): للاستخدام التجريبي فقط — لا ترسل بيانات شخصية أو سرية. يُسجَّل استخدامك لأغراض أمنية ولتحسين منتجات وخدمات NVIDIA. بيانات الجلسة المُسجَّلة لأغراض التحسين غير مرتبطة بهويتك أو بأي مُعرِّف دائم. لمزيد من المعلومات حول ممارسات معالجة البيانات لدينا، راجع [سياسة الخصوصية](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). بتفاعلك مع نقطة النهاية هذه، فإنك توافق على جمعنا لهذه المعلومات وتسجيلها واستخدامها وعلى [شروط خدمة النسخة التجريبية من واجهة NVIDIA API](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). diff --git a/packages/web/src/content/docs/bs/zen.mdx b/packages/web/src/content/docs/bs/zen.mdx index a38341ae1793..5ed6bb9f8cdf 100644 --- a/packages/web/src/content/docs/bs/zen.mdx +++ b/packages/web/src/content/docs/bs/zen.mdx @@ -118,7 +118,6 @@ Našim modelima možete pristupiti i preko sljedećih API endpointa. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -148,7 +147,6 @@ Podržavamo pay-as-you-go model. Ispod su cijene **po 1M tokena**. | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -234,7 +232,6 @@ Naknade za kreditne kartice prosljeđujemo po stvarnom trošku (4.4% + $0.30 po Besplatni modeli: - MiMo-V2.5 Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. -- Hy3 Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. - Ling 3.0 Flash Fin Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. - Nemotron 3 Ultra Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. - Nemotron 3.5 Lightning Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. @@ -297,7 +294,6 @@ i ne koriste vaše podatke za treniranje modela, uz sljedeće izuzetke: - Big Pickle: Tokom besplatnog perioda, prikupljeni podaci mogu se koristiti za poboljšanje modela. - MiMo-V2.5 Free: Tokom besplatnog perioda, prikupljeni podaci mogu se koristiti za poboljšanje modela. -- Hy3 Free: Tokom besplatnog perioda, prikupljeni podaci mogu se koristiti za poboljšanje modela. - Ling 3.0 Flash Fin Free: Tokom besplatnog perioda, prikupljeni podaci mogu se koristiti za poboljšanje modela. - Nemotron 3 Ultra Free (besplatni NVIDIA endpointi): Samo za probnu upotrebu — nemojte slati lične ili povjerljive podatke. Vaše korištenje se bilježi radi sigurnosti i poboljšanja NVIDIA proizvoda i usluga. Zabilježeni podaci sesije koji se koriste u svrhu poboljšanja nisu povezani s vašim identitetom niti bilo kojim trajnim identifikatorom. Za više informacija o našim praksama obrade podataka pogledajte našu [Politiku privatnosti](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Interakcijom s ovim endpointom pristajete na naše prikupljanje, bilježenje i korištenje takvih informacija te na [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (besplatni NVIDIA endpointi): Samo za probnu upotrebu — nemojte slati lične ili povjerljive podatke. Vaše korištenje se bilježi radi sigurnosti i poboljšanja NVIDIA proizvoda i usluga. Zabilježeni podaci sesije koji se koriste u svrhu poboljšanja nisu povezani s vašim identitetom niti bilo kojim trajnim identifikatorom. Za više informacija o našim praksama obrade podataka pogledajte našu [Politiku privatnosti](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Interakcijom s ovim endpointom pristajete na naše prikupljanje, bilježenje i korištenje takvih informacija te na [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). diff --git a/packages/web/src/content/docs/da/zen.mdx b/packages/web/src/content/docs/da/zen.mdx index f6a1831eaf13..3b07f92d3090 100644 --- a/packages/web/src/content/docs/da/zen.mdx +++ b/packages/web/src/content/docs/da/zen.mdx @@ -118,7 +118,6 @@ Du kan også få adgang til vores modeller gennem følgende API-endpoints. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -148,7 +147,6 @@ Vi understøtter en pay-as-you-go-model. Nedenfor er priserne **pr. 1M tokens**. | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -234,7 +232,6 @@ Kreditkortgebyrer videregives til kostpris (4.4% + $0.30 pr. transaktion); vi op De gratis modeller: - MiMo-V2.5 Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. -- Hy3 Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. - Ling 3.0 Flash Fin Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. - Nemotron 3 Ultra Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. - Nemotron 3.5 Lightning Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. @@ -295,7 +292,6 @@ Alle vores modeller hostes i US. Vores udbydere følger en nul-opbevaringspoliti - Big Pickle: I den gratis periode kan indsamlede data blive brugt til at forbedre modellen. - MiMo-V2.5 Free: I den gratis periode kan indsamlede data blive brugt til at forbedre modellen. -- Hy3 Free: I den gratis periode kan indsamlede data blive brugt til at forbedre modellen. - Ling 3.0 Flash Fin Free: I den gratis periode kan indsamlede data blive brugt til at forbedre modellen. - Nemotron 3 Ultra Free (gratis NVIDIA-endpoints): Kun til prøvebrug — indsend ikke personlige eller fortrolige data. Din brug logges af sikkerhedshensyn og for at forbedre NVIDIAs produkter og tjenester. De loggede sessionsdata, der bruges til forbedringsformål, er ikke knyttet til din identitet eller nogen vedvarende identifikator. For mere information om vores databehandlingspraksis, se vores [privatlivspolitik](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ved at interagere med dette endpoint giver du samtykke til vores indsamling, registrering og brug af sådanne oplysninger samt [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (gratis NVIDIA-endpoints): Kun til prøvebrug — indsend ikke personlige eller fortrolige data. Din brug logges af sikkerhedshensyn og for at forbedre NVIDIAs produkter og tjenester. De loggede sessionsdata, der bruges til forbedringsformål, er ikke knyttet til din identitet eller nogen vedvarende identifikator. For mere information om vores databehandlingspraksis, se vores [privatlivspolitik](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ved at interagere med dette endpoint giver du samtykke til vores indsamling, registrering og brug af sådanne oplysninger samt [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). diff --git a/packages/web/src/content/docs/de/zen.mdx b/packages/web/src/content/docs/de/zen.mdx index a39b0217f66e..6e4d611ea322 100644 --- a/packages/web/src/content/docs/de/zen.mdx +++ b/packages/web/src/content/docs/de/zen.mdx @@ -109,7 +109,6 @@ Du kannst auch über die folgenden API-Endpunkte auf unsere Modelle zugreifen. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -137,7 +136,6 @@ Wir unterstützen ein Pay-as-you-go-Modell. Unten findest du die Preise **pro 1M | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -223,7 +221,6 @@ Kreditkartengebühren werden zum Selbstkostenpreis weitergegeben (4.4% + $0.30 p Die kostenlosen Modelle: - MiMo-V2.5 Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. -- Hy3 Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. - Ling 3.0 Flash Fin Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. - Nemotron 3 Ultra Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. - Nemotron 3.5 Lightning Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. @@ -281,7 +278,6 @@ Alle unsere Modelle werden in den USA gehostet. Unsere Provider folgen einer Zer - Big Pickle: Während des kostenlosen Zeitraums können gesammelte Daten zur Verbesserung des Modells verwendet werden. - MiMo-V2.5 Free: Während des kostenlosen Zeitraums können gesammelte Daten zur Verbesserung des Modells verwendet werden. -- Hy3 Free: Während des kostenlosen Zeitraums können gesammelte Daten zur Verbesserung des Modells verwendet werden. - Ling 3.0 Flash Fin Free: Während des kostenlosen Zeitraums können gesammelte Daten zur Verbesserung des Modells verwendet werden. - Nemotron 3 Ultra Free (kostenlose NVIDIA-Endpunkte): Nur für Testzwecke — übermitteln Sie keine personenbezogenen oder vertraulichen Daten. Ihre Nutzung wird zu Sicherheitszwecken und zur Verbesserung der Produkte und Dienste von NVIDIA protokolliert. Die zu Verbesserungszwecken protokollierten Sitzungsdaten sind nicht mit Ihrer Identität oder einem dauerhaften Identifikator verknüpft. Weitere Informationen zu unseren Datenverarbeitungspraktiken finden Sie in unserer [Datenschutzrichtlinie](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Durch die Interaktion mit diesem Endpunkt stimmen Sie unserer Erhebung, Aufzeichnung und Nutzung solcher Informationen sowie den [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) zu. - Nemotron 3.5 Lightning Free (kostenlose NVIDIA-Endpunkte): Nur für Testzwecke — übermitteln Sie keine personenbezogenen oder vertraulichen Daten. Ihre Nutzung wird zu Sicherheitszwecken und zur Verbesserung der Produkte und Dienste von NVIDIA protokolliert. Die zu Verbesserungszwecken protokollierten Sitzungsdaten sind nicht mit Ihrer Identität oder einem dauerhaften Identifikator verknüpft. Weitere Informationen zu unseren Datenverarbeitungspraktiken finden Sie in unserer [Datenschutzrichtlinie](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Durch die Interaktion mit diesem Endpunkt stimmen Sie unserer Erhebung, Aufzeichnung und Nutzung solcher Informationen sowie den [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) zu. diff --git a/packages/web/src/content/docs/es/zen.mdx b/packages/web/src/content/docs/es/zen.mdx index c48854ac6311..046afde6cea0 100644 --- a/packages/web/src/content/docs/es/zen.mdx +++ b/packages/web/src/content/docs/es/zen.mdx @@ -118,7 +118,6 @@ También puedes acceder a nuestros modelos a través de los siguientes endpoints | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -148,7 +147,6 @@ Admitimos un modelo de pago por uso. A continuación se muestran los precios **p | --------------------------------- | ------- | ------- | ---------------- | ------------------ | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -234,7 +232,6 @@ Las comisiones de tarjeta de crédito se trasladan al costo (4.4% + $0.30 por tr Los modelos gratuitos: - MiMo-V2.5 Free está disponible en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. -- Hy3 Free está disponible en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. - Ling 3.0 Flash Fin Free está disponible en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. - Nemotron 3 Ultra Free está disponible en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. - Nemotron 3.5 Lightning Free está disponible en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. @@ -295,7 +292,6 @@ Todos nuestros modelos están alojados en US. Nuestros proveedores siguen una po - Big Pickle: Durante su período gratuito, los datos recopilados pueden usarse para mejorar el modelo. - MiMo-V2.5 Free: Durante su período gratuito, los datos recopilados pueden usarse para mejorar el modelo. -- Hy3 Free: Durante su período gratuito, los datos recopilados pueden usarse para mejorar el modelo. - Ling 3.0 Flash Fin Free: Durante su período gratuito, los datos recopilados pueden usarse para mejorar el modelo. - Nemotron 3 Ultra Free (endpoints gratuitos de NVIDIA): Solo para uso de prueba — no envíes datos personales ni confidenciales. Tu uso se registra con fines de seguridad y para mejorar los productos y servicios de NVIDIA. Los datos de sesión registrados con fines de mejora no están vinculados a tu identidad ni a ningún identificador persistente. Para obtener más información sobre nuestras prácticas de procesamiento de datos, consulta nuestra [Política de privacidad](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Al interactuar con este endpoint, aceptas que recopilemos, registremos y usemos dicha información, así como los [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (endpoints gratuitos de NVIDIA): Solo para uso de prueba — no envíes datos personales ni confidenciales. Tu uso se registra con fines de seguridad y para mejorar los productos y servicios de NVIDIA. Los datos de sesión registrados con fines de mejora no están vinculados a tu identidad ni a ningún identificador persistente. Para obtener más información sobre nuestras prácticas de procesamiento de datos, consulta nuestra [Política de privacidad](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Al interactuar con este endpoint, aceptas que recopilemos, registremos y usemos dicha información, así como los [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). diff --git a/packages/web/src/content/docs/fr/zen.mdx b/packages/web/src/content/docs/fr/zen.mdx index 1cc5b70dc4e0..2f6924fbeb91 100644 --- a/packages/web/src/content/docs/fr/zen.mdx +++ b/packages/web/src/content/docs/fr/zen.mdx @@ -109,7 +109,6 @@ Vous pouvez également accéder à nos modèles via les points de terminaison AP | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -137,7 +136,6 @@ Nous prenons en charge un modèle de paiement à l'utilisation. Vous trouverez c | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -223,7 +221,6 @@ Les frais de carte de crédit sont répercutés au prix coûtant (4.4% + $0.30 p Les modèles gratuits : - MiMo-V2.5 Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. -- Hy3 Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. - Ling 3.0 Flash Fin Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. - Nemotron 3 Ultra Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. - Nemotron 3.5 Lightning Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. @@ -281,7 +278,6 @@ Tous nos modèles sont hébergés aux US. Nos fournisseurs suivent une politique - Big Pickle : Pendant sa période gratuite, les données collectées peuvent être utilisées pour améliorer le modèle. - MiMo-V2.5 Free : Pendant sa période gratuite, les données collectées peuvent être utilisées pour améliorer le modèle. -- Hy3 Free : Pendant sa période gratuite, les données collectées peuvent être utilisées pour améliorer le modèle. - Ling 3.0 Flash Fin Free : Pendant sa période gratuite, les données collectées peuvent être utilisées pour améliorer le modèle. - Nemotron 3 Ultra Free (endpoints NVIDIA gratuits) : Réservé à un usage d'essai — n'envoyez pas de données personnelles ou confidentielles. Votre utilisation est journalisée à des fins de sécurité et pour améliorer les produits et services de NVIDIA. Les données de session journalisées à des fins d'amélioration ne sont pas liées à votre identité ni à un quelconque identifiant persistant. Pour plus d'informations sur nos pratiques de traitement des données, consultez notre [Politique de confidentialité](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). En interagissant avec cet endpoint, vous consentez à notre collecte, à notre enregistrement et à notre utilisation de ces informations ainsi qu'aux [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (endpoints NVIDIA gratuits) : Réservé à un usage d'essai — n'envoyez pas de données personnelles ou confidentielles. Votre utilisation est journalisée à des fins de sécurité et pour améliorer les produits et services de NVIDIA. Les données de session journalisées à des fins d'amélioration ne sont pas liées à votre identité ni à un quelconque identifiant persistant. Pour plus d'informations sur nos pratiques de traitement des données, consultez notre [Politique de confidentialité](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). En interagissant avec cet endpoint, vous consentez à notre collecte, à notre enregistrement et à notre utilisation de ces informations ainsi qu'aux [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). diff --git a/packages/web/src/content/docs/it/zen.mdx b/packages/web/src/content/docs/it/zen.mdx index f77f77622971..a1bf4668d991 100644 --- a/packages/web/src/content/docs/it/zen.mdx +++ b/packages/web/src/content/docs/it/zen.mdx @@ -118,7 +118,6 @@ Puoi anche accedere ai nostri modelli tramite i seguenti endpoint API. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -148,7 +147,6 @@ Supportiamo un modello pay-as-you-go. Qui sotto trovi i prezzi **per 1M token**. | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -234,7 +232,6 @@ Le commissioni della carta di credito vengono trasferite al costo (4.4% + $0.30 I modelli gratuiti: - MiMo-V2.5 Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. -- Hy3 Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. - Ling 3.0 Flash Fin Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. - Nemotron 3 Ultra Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. - Nemotron 3.5 Lightning Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. @@ -295,7 +292,6 @@ Tutti i nostri modelli sono ospitati negli US. I nostri provider seguono una pol - Big Pickle: durante il periodo gratuito, i dati raccolti possono essere usati per migliorare il modello. - MiMo-V2.5 Free: durante il periodo gratuito, i dati raccolti possono essere usati per migliorare il modello. -- Hy3 Free: durante il periodo gratuito, i dati raccolti possono essere usati per migliorare il modello. - Ling 3.0 Flash Fin Free: durante il periodo gratuito, i dati raccolti possono essere usati per migliorare il modello. - Nemotron 3 Ultra Free (endpoint NVIDIA gratuiti): solo per uso di prova — non inviare dati personali o riservati. Il tuo utilizzo viene registrato per finalità di sicurezza e per migliorare i prodotti e i servizi di NVIDIA. I dati di sessione registrati a fini di miglioramento non sono collegati alla tua identità né ad alcun identificatore persistente. Per maggiori informazioni sulle nostre pratiche di trattamento dei dati, consulta la nostra [Informativa sulla privacy](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Interagendo con questo endpoint, acconsenti alla nostra raccolta, registrazione e utilizzo di tali informazioni e ai [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (endpoint NVIDIA gratuiti): solo per uso di prova — non inviare dati personali o riservati. Il tuo utilizzo viene registrato per finalità di sicurezza e per migliorare i prodotti e i servizi di NVIDIA. I dati di sessione registrati a fini di miglioramento non sono collegati alla tua identità né ad alcun identificatore persistente. Per maggiori informazioni sulle nostre pratiche di trattamento dei dati, consulta la nostra [Informativa sulla privacy](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Interagendo con questo endpoint, acconsenti alla nostra raccolta, registrazione e utilizzo di tali informazioni e ai [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). diff --git a/packages/web/src/content/docs/ja/zen.mdx b/packages/web/src/content/docs/ja/zen.mdx index 9ccc24c2840e..1bee367888db 100644 --- a/packages/web/src/content/docs/ja/zen.mdx +++ b/packages/web/src/content/docs/ja/zen.mdx @@ -109,7 +109,6 @@ OpenCode Zen は、OpenCode のほかのプロバイダーと同じように動 | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -137,7 +136,6 @@ https://opencode.ai/zen/v1/models | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -223,7 +221,6 @@ https://opencode.ai/zen/v1/models 無料モデル: - MiMo-V2.5 Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 -- Hy3 Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 - Ling 3.0 Flash Fin Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 - Nemotron 3 Ultra Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 - Nemotron 3.5 Lightning Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 @@ -281,7 +278,6 @@ https://opencode.ai/zen/v1/models - Big Pickle: 無料提供期間中、収集されたデータがモデル改善に使われる場合があります。 - MiMo-V2.5 Free: 無料提供期間中、収集されたデータがモデル改善に使われる場合があります。 -- Hy3 Free: 無料提供期間中、収集されたデータがモデル改善に使われる場合があります。 - Ling 3.0 Flash Fin Free: 無料提供期間中、収集されたデータがモデル改善に使われる場合があります。 - Nemotron 3 Ultra Free(NVIDIA の無料エンドポイント): 試用専用です — 個人情報や機密データは送信しないでください。お客様の利用は、セキュリティ目的および NVIDIA の製品とサービスの改善のために記録されます。改善目的で記録されたセッションデータは、お客様の身元や永続的な識別子とは関連付けられません。当社のデータ処理慣行の詳細については、[プライバシーポリシー](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)をご覧ください。このエンドポイントを利用することで、お客様はそのような情報の当社による収集、記録、利用、および [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) に同意したものとみなされます。 - Nemotron 3.5 Lightning Free(NVIDIA の無料エンドポイント): 試用専用です — 個人情報や機密データは送信しないでください。お客様の利用は、セキュリティ目的および NVIDIA の製品とサービスの改善のために記録されます。改善目的で記録されたセッションデータは、お客様の身元や永続的な識別子とは関連付けられません。当社のデータ処理慣行の詳細については、[プライバシーポリシー](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)をご覧ください。このエンドポイントを利用することで、お客様はそのような情報の当社による収集、記録、利用、および [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) に同意したものとみなされます。 diff --git a/packages/web/src/content/docs/ko/zen.mdx b/packages/web/src/content/docs/ko/zen.mdx index eca5125ad515..13bbed54aafe 100644 --- a/packages/web/src/content/docs/ko/zen.mdx +++ b/packages/web/src/content/docs/ko/zen.mdx @@ -109,7 +109,6 @@ OpenCode Zen은 OpenCode의 다른 provider와 똑같이 작동합니다. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -137,7 +136,6 @@ https://opencode.ai/zen/v1/models | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -223,7 +221,6 @@ https://opencode.ai/zen/v1/models 무료 모델: - MiMo-V2.5 Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. -- Hy3 Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. - Ling 3.0 Flash Fin Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. - Nemotron 3 Ultra Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. - Nemotron 3.5 Lightning Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. @@ -281,7 +278,6 @@ https://opencode.ai/zen/v1/models - Big Pickle: 무료 제공 기간에는 수집된 데이터가 모델 개선에 사용될 수 있습니다. - MiMo-V2.5 Free: 무료 제공 기간에는 수집된 데이터가 모델 개선에 사용될 수 있습니다. -- Hy3 Free: 무료 제공 기간에는 수집된 데이터가 모델 개선에 사용될 수 있습니다. - Ling 3.0 Flash Fin Free: 무료 제공 기간에는 수집된 데이터가 모델 개선에 사용될 수 있습니다. - Nemotron 3 Ultra Free(NVIDIA 무료 엔드포인트): 평가판 전용이며 — 개인 정보나 기밀 데이터는 제출하지 마세요. 사용 내역은 보안 목적과 NVIDIA 제품 및 서비스 개선을 위해 기록됩니다. 개선 목적으로 기록된 세션 데이터는 사용자의 신원이나 영구 식별자와 연결되지 않습니다. 당사의 데이터 처리 관행에 대한 자세한 내용은 [개인정보처리방침](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)을 참조하세요. 이 엔드포인트와 상호 작용함으로써 사용자는 당사가 이러한 정보를 수집, 기록, 사용하는 것과 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)에 동의하게 됩니다. - Nemotron 3.5 Lightning Free(NVIDIA 무료 엔드포인트): 평가판 전용이며 — 개인 정보나 기밀 데이터는 제출하지 마세요. 사용 내역은 보안 목적과 NVIDIA 제품 및 서비스 개선을 위해 기록됩니다. 개선 목적으로 기록된 세션 데이터는 사용자의 신원이나 영구 식별자와 연결되지 않습니다. 당사의 데이터 처리 관행에 대한 자세한 내용은 [개인정보처리방침](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)을 참조하세요. 이 엔드포인트와 상호 작용함으로써 사용자는 당사가 이러한 정보를 수집, 기록, 사용하는 것과 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)에 동의하게 됩니다. diff --git a/packages/web/src/content/docs/nb/zen.mdx b/packages/web/src/content/docs/nb/zen.mdx index 4a48b8310cff..57ee59e75dd3 100644 --- a/packages/web/src/content/docs/nb/zen.mdx +++ b/packages/web/src/content/docs/nb/zen.mdx @@ -118,7 +118,6 @@ Du kan også få tilgang til modellene våre gjennom følgende API-endepunkter. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -148,7 +147,6 @@ Vi støtter en pay-as-you-go-modell. Nedenfor er prisene **per 1M tokens**. | --------------------------------- | ------- | ------- | ------------- | --------------- | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -234,7 +232,6 @@ Kredittkortgebyrer videreføres til kostpris (4.4% + $0.30 per transaction); vi Gratis-modellene: - MiMo-V2.5 Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. -- Hy3 Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. - Ling 3.0 Flash Fin Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. - Nemotron 3 Ultra Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. - Nemotron 3.5 Lightning Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. @@ -295,7 +292,6 @@ Alle modellene våre hostes i US. Leverandørene våre følger en policy for zer - Big Pickle: I gratisperioden kan innsamlede data brukes til å forbedre modellen. - MiMo-V2.5 Free: I gratisperioden kan innsamlede data brukes til å forbedre modellen. -- Hy3 Free: I gratisperioden kan innsamlede data brukes til å forbedre modellen. - Ling 3.0 Flash Fin Free: I gratisperioden kan innsamlede data brukes til å forbedre modellen. - Nemotron 3 Ultra Free (gratis NVIDIA-endepunkter): Kun for prøvebruk — ikke send inn personopplysninger eller konfidensielle data. Bruken din logges av sikkerhetshensyn og for å forbedre NVIDIAs produkter og tjenester. Sesjonsdataene som logges for forbedringsformål, er ikke knyttet til identiteten din eller noen vedvarende identifikator. For mer informasjon om vår databehandlingspraksis, se vår [personvernerklæring](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ved å samhandle med dette endepunktet samtykker du til at vi samler inn, registrerer og bruker slik informasjon, samt til [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (gratis NVIDIA-endepunkter): Kun for prøvebruk — ikke send inn personopplysninger eller konfidensielle data. Bruken din logges av sikkerhetshensyn og for å forbedre NVIDIAs produkter og tjenester. Sesjonsdataene som logges for forbedringsformål, er ikke knyttet til identiteten din eller noen vedvarende identifikator. For mer informasjon om vår databehandlingspraksis, se vår [personvernerklæring](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ved å samhandle med dette endepunktet samtykker du til at vi samler inn, registrerer og bruker slik informasjon, samt til [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). diff --git a/packages/web/src/content/docs/pl/zen.mdx b/packages/web/src/content/docs/pl/zen.mdx index 9698672a2a06..5ea4233d92d9 100644 --- a/packages/web/src/content/docs/pl/zen.mdx +++ b/packages/web/src/content/docs/pl/zen.mdx @@ -118,7 +118,6 @@ Możesz też uzyskać dostęp do naszych modeli przez poniższe endpointy API. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -148,7 +147,6 @@ Obsługujemy model pay-as-you-go. Poniżej znajdują się ceny **za 1M tokenów* | --------------------------------- | ------- | ------- | -------------- | -------------- | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -234,7 +232,6 @@ Opłaty za karty kredytowe są przenoszone po kosztach (4.4% + $0.30 per transac Darmowe modele: - MiMo-V2.5 Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. -- Hy3 Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. - Ling 3.0 Flash Fin Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. - Nemotron 3 Ultra Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. - Nemotron 3.5 Lightning Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. @@ -295,7 +292,6 @@ Wszystkie nasze modele są hostowane w US. Nasi dostawcy stosują politykę zero - Big Pickle: W czasie darmowego okresu zebrane dane mogą być wykorzystywane do ulepszania modelu. - MiMo-V2.5 Free: W czasie darmowego okresu zebrane dane mogą być wykorzystywane do ulepszania modelu. -- Hy3 Free: W czasie darmowego okresu zebrane dane mogą być wykorzystywane do ulepszania modelu. - Ling 3.0 Flash Fin Free: W czasie darmowego okresu zebrane dane mogą być wykorzystywane do ulepszania modelu. - Nemotron 3 Ultra Free (darmowe endpointy NVIDIA): Tylko do użytku próbnego — nie przesyłaj danych osobowych ani poufnych. Twoje korzystanie jest rejestrowane w celach bezpieczeństwa oraz w celu ulepszania produktów i usług NVIDIA. Rejestrowane dane sesji wykorzystywane do celów ulepszania nie są powiązane z Twoją tożsamością ani żadnym trwałym identyfikatorem. Aby uzyskać więcej informacji o naszych praktykach przetwarzania danych, zapoznaj się z naszą [Polityką prywatności](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Korzystając z tego endpointu, wyrażasz zgodę na gromadzenie, rejestrowanie i wykorzystywanie przez nas takich informacji oraz na [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (darmowe endpointy NVIDIA): Tylko do użytku próbnego — nie przesyłaj danych osobowych ani poufnych. Twoje korzystanie jest rejestrowane w celach bezpieczeństwa oraz w celu ulepszania produktów i usług NVIDIA. Rejestrowane dane sesji wykorzystywane do celów ulepszania nie są powiązane z Twoją tożsamością ani żadnym trwałym identyfikatorem. Aby uzyskać więcej informacji o naszych praktykach przetwarzania danych, zapoznaj się z naszą [Polityką prywatności](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Korzystając z tego endpointu, wyrażasz zgodę na gromadzenie, rejestrowanie i wykorzystywanie przez nas takich informacji oraz na [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). diff --git a/packages/web/src/content/docs/pt-br/zen.mdx b/packages/web/src/content/docs/pt-br/zen.mdx index 6ee33cd324dc..3ff1c7b8e902 100644 --- a/packages/web/src/content/docs/pt-br/zen.mdx +++ b/packages/web/src/content/docs/pt-br/zen.mdx @@ -109,7 +109,6 @@ Você também pode acessar nossos modelos pelos seguintes endpoints de API. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -137,7 +136,6 @@ Oferecemos um modelo pay-as-you-go. Abaixo estão os preços **por 1M tokens**. | --------------------------------- | ------- | ------- | ---------------- | ---------------- | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -223,7 +221,6 @@ As taxas de cartão de crédito são repassadas a preço de custo (4.4% + $0.30 Os modelos gratuitos: - MiMo-V2.5 Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. -- Hy3 Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. - Ling 3.0 Flash Fin Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. - Nemotron 3 Ultra Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. - Nemotron 3.5 Lightning Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. @@ -281,7 +278,6 @@ Todos os nossos modelos são hospedados nos US. Nossos provedores seguem uma pol - Big Pickle: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo. - MiMo-V2.5 Free: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo. -- Hy3 Free: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo. - Ling 3.0 Flash Fin Free: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo. - Nemotron 3 Ultra Free (endpoints gratuitos da NVIDIA): Apenas para uso de avaliação — não envie dados pessoais ou confidenciais. Seu uso é registrado para fins de segurança e para melhorar os produtos e serviços da NVIDIA. Os dados de sessão registrados para fins de melhoria não estão vinculados à sua identidade nem a qualquer identificador persistente. Para mais informações sobre nossas práticas de processamento de dados, consulte nossa [Política de Privacidade](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ao interagir com este endpoint, você consente com a nossa coleta, registro e uso dessas informações e com os [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (endpoints gratuitos da NVIDIA): Apenas para uso de avaliação — não envie dados pessoais ou confidenciais. Seu uso é registrado para fins de segurança e para melhorar os produtos e serviços da NVIDIA. Os dados de sessão registrados para fins de melhoria não estão vinculados à sua identidade nem a qualquer identificador persistente. Para mais informações sobre nossas práticas de processamento de dados, consulte nossa [Política de Privacidade](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ao interagir com este endpoint, você consente com a nossa coleta, registro e uso dessas informações e com os [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). diff --git a/packages/web/src/content/docs/ru/zen.mdx b/packages/web/src/content/docs/ru/zen.mdx index cda6177b9241..ddd2c29bc8d2 100644 --- a/packages/web/src/content/docs/ru/zen.mdx +++ b/packages/web/src/content/docs/ru/zen.mdx @@ -118,7 +118,6 @@ OpenCode Zen работает как любой другой провайдер | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -148,7 +147,6 @@ https://opencode.ai/zen/v1/models | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -234,7 +232,6 @@ https://opencode.ai/zen/v1/models Бесплатные модели: - MiMo-V2.5 Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. -- Hy3 Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. - Ling 3.0 Flash Fin Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. - Nemotron 3 Ultra Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. - Nemotron 3.5 Lightning Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. @@ -295,7 +292,6 @@ https://opencode.ai/zen/v1/models - Big Pickle: во время бесплатного периода собранные данные могут использоваться для улучшения модели. - MiMo-V2.5 Free: во время бесплатного периода собранные данные могут использоваться для улучшения модели. -- Hy3 Free: во время бесплатного периода собранные данные могут использоваться для улучшения модели. - Ling 3.0 Flash Fin Free: во время бесплатного периода собранные данные могут использоваться для улучшения модели. - Nemotron 3 Ultra Free (бесплатные эндпоинты NVIDIA): только для пробного использования — не отправляйте персональные или конфиденциальные данные. Использование логируется в целях безопасности и для улучшения продуктов и сервисов NVIDIA. Логируемые данные сессии, используемые в целях улучшения, не связаны с вашей личностью или каким-либо постоянным идентификатором. Подробнее о наших практиках обработки данных см. в нашей [Политике конфиденциальности](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Взаимодействуя с этим эндпоинтом, вы соглашаетесь на сбор, запись и использование нами такой информации, а также с [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (бесплатные эндпоинты NVIDIA): только для пробного использования — не отправляйте персональные или конфиденциальные данные. Использование логируется в целях безопасности и для улучшения продуктов и сервисов NVIDIA. Логируемые данные сессии, используемые в целях улучшения, не связаны с вашей личностью или каким-либо постоянным идентификатором. Подробнее о наших практиках обработки данных см. в нашей [Политике конфиденциальности](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Взаимодействуя с этим эндпоинтом, вы соглашаетесь на сбор, запись и использование нами такой информации, а также с [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). diff --git a/packages/web/src/content/docs/th/zen.mdx b/packages/web/src/content/docs/th/zen.mdx index 4788e22dd86e..c58ae2db6bfe 100644 --- a/packages/web/src/content/docs/th/zen.mdx +++ b/packages/web/src/content/docs/th/zen.mdx @@ -111,7 +111,6 @@ OpenCode Zen ทำงานเหมือน provider อื่น ๆ ใน | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -139,7 +138,6 @@ https://opencode.ai/zen/v1/models | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -225,7 +223,6 @@ https://opencode.ai/zen/v1/models โมเดลฟรี: - MiMo-V2.5 Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล -- Hy3 Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล - Ling 3.0 Flash Fin Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล - Nemotron 3 Ultra Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล - Nemotron 3.5 Lightning Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล @@ -283,7 +280,6 @@ https://opencode.ai/zen/v1/models - Big Pickle: ระหว่างช่วงที่เปิดให้ใช้ฟรี ข้อมูลที่เก็บรวบรวมอาจถูกนำไปใช้เพื่อปรับปรุงโมเดล - MiMo-V2.5 Free: ระหว่างช่วงที่เปิดให้ใช้ฟรี ข้อมูลที่เก็บรวบรวมอาจถูกนำไปใช้เพื่อปรับปรุงโมเดล -- Hy3 Free: ระหว่างช่วงที่เปิดให้ใช้ฟรี ข้อมูลที่เก็บรวบรวมอาจถูกนำไปใช้เพื่อปรับปรุงโมเดล - Ling 3.0 Flash Fin Free: ระหว่างช่วงที่เปิดให้ใช้ฟรี ข้อมูลที่เก็บรวบรวมอาจถูกนำไปใช้เพื่อปรับปรุงโมเดล - Nemotron 3 Ultra Free (endpoint ฟรีของ NVIDIA): ใช้สำหรับการทดลองเท่านั้น — โปรดอย่าส่งข้อมูลส่วนบุคคลหรือข้อมูลลับ การใช้งานของคุณจะถูกบันทึกเพื่อวัตถุประสงค์ด้านความปลอดภัยและเพื่อปรับปรุงผลิตภัณฑ์และบริการของ NVIDIA ข้อมูลเซสชันที่บันทึกไว้เพื่อวัตถุประสงค์ในการปรับปรุงจะไม่เชื่อมโยงกับตัวตนของคุณหรือตัวระบุถาวรใด ๆ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแนวปฏิบัติในการประมวลผลข้อมูลของเรา โปรดดู [นโยบายความเป็นส่วนตัว](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) ของเรา การโต้ตอบกับ endpoint นี้ถือว่าคุณยินยอมให้เราเก็บรวบรวม บันทึก และใช้ข้อมูลดังกล่าว รวมถึง [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) - Nemotron 3.5 Lightning Free (endpoint ฟรีของ NVIDIA): ใช้สำหรับการทดลองเท่านั้น — โปรดอย่าส่งข้อมูลส่วนบุคคลหรือข้อมูลลับ การใช้งานของคุณจะถูกบันทึกเพื่อวัตถุประสงค์ด้านความปลอดภัยและเพื่อปรับปรุงผลิตภัณฑ์และบริการของ NVIDIA ข้อมูลเซสชันที่บันทึกไว้เพื่อวัตถุประสงค์ในการปรับปรุงจะไม่เชื่อมโยงกับตัวตนของคุณหรือตัวระบุถาวรใด ๆ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแนวปฏิบัติในการประมวลผลข้อมูลของเรา โปรดดู [นโยบายความเป็นส่วนตัว](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) ของเรา การโต้ตอบกับ endpoint นี้ถือว่าคุณยินยอมให้เราเก็บรวบรวม บันทึก และใช้ข้อมูลดังกล่าว รวมถึง [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) diff --git a/packages/web/src/content/docs/tr/zen.mdx b/packages/web/src/content/docs/tr/zen.mdx index 0188c0961a26..13670c0f3286 100644 --- a/packages/web/src/content/docs/tr/zen.mdx +++ b/packages/web/src/content/docs/tr/zen.mdx @@ -109,7 +109,6 @@ Modellerimize aşağıdaki API uç noktaları aracılığıyla da erişebilirsin | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -137,7 +136,6 @@ Kullandıkça öde modelini destekliyoruz. Aşağıda **1M token başına** fiya | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -223,7 +221,6 @@ Kredi kartı ücretleri maliyet üzerinden yansıtılır (%4.4 + işlem başına Ücretsiz modeller: - MiMo-V2.5 Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. -- Hy3 Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. - Ling 3.0 Flash Fin Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. - Nemotron 3 Ultra Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. - Nemotron 3.5 Lightning Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. @@ -281,7 +278,6 @@ Tüm modellerimiz US'de barındırılıyor. Sağlayıcılarımız zero-retention - Big Pickle: Ücretsiz döneminde toplanan veriler modeli iyileştirmek için kullanılabilir. - MiMo-V2.5 Free: Ücretsiz döneminde toplanan veriler modeli iyileştirmek için kullanılabilir. -- Hy3 Free: Ücretsiz döneminde toplanan veriler modeli iyileştirmek için kullanılabilir. - Ling 3.0 Flash Fin Free: Ücretsiz döneminde toplanan veriler modeli iyileştirmek için kullanılabilir. - Nemotron 3 Ultra Free (ücretsiz NVIDIA uç noktaları): Yalnızca deneme amaçlıdır — kişisel veya gizli veri göndermeyin. Kullanımınız güvenlik amacıyla ve NVIDIA ürünlerini ve hizmetlerini geliştirmek için kaydedilir. Geliştirme amacıyla kaydedilen oturum verileri kimliğinizle veya herhangi bir kalıcı tanımlayıcıyla ilişkilendirilmez. Veri işleme uygulamalarımız hakkında daha fazla bilgi için [Gizlilik Politikamıza](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) bakın. Bu uç noktayla etkileşime geçerek, bu tür bilgileri toplamamıza, kaydetmemize ve kullanmamıza ve [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) koşullarına onay vermiş olursunuz. - Nemotron 3.5 Lightning Free (ücretsiz NVIDIA uç noktaları): Yalnızca deneme amaçlıdır — kişisel veya gizli veri göndermeyin. Kullanımınız güvenlik amacıyla ve NVIDIA ürünlerini ve hizmetlerini geliştirmek için kaydedilir. Geliştirme amacıyla kaydedilen oturum verileri kimliğinizle veya herhangi bir kalıcı tanımlayıcıyla ilişkilendirilmez. Veri işleme uygulamalarımız hakkında daha fazla bilgi için [Gizlilik Politikamıza](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) bakın. Bu uç noktayla etkileşime geçerek, bu tür bilgileri toplamamıza, kaydetmemize ve kullanmamıza ve [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) koşullarına onay vermiş olursunuz. diff --git a/packages/web/src/content/docs/zen.mdx b/packages/web/src/content/docs/zen.mdx index e41ab3f90277..cb737893a87f 100644 --- a/packages/web/src/content/docs/zen.mdx +++ b/packages/web/src/content/docs/zen.mdx @@ -118,7 +118,6 @@ You can also access our models through the following API endpoints. | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -148,7 +147,6 @@ We support a pay-as-you-go model. Below are the prices **per 1M tokens**. | --------------------------------- | ------ | ------- | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -234,7 +232,6 @@ Credit card fees are passed along at cost (4.4% + $0.30 per transaction); we don The free models: - MiMo-V2.5 Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. -- Hy3 Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. - Ling 3.0 Flash Fin Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. - Nemotron 3 Ultra Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. - Nemotron 3.5 Lightning Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. @@ -295,7 +292,6 @@ All our models are hosted in the US. Our providers follow a zero-retention polic - Big Pickle: During its free period, collected data may be used to improve the model. - MiMo-V2.5 Free: During its free period, collected data may be used to improve the model. -- Hy3 Free: During its free period, collected data may be used to improve the model. - Ling 3.0 Flash Fin Free: During its free period, collected data may be used to improve the model. - Nemotron 3 Ultra Free (NVIDIA free endpoints): Trial use only — do not submit personal or confidential data. Your use is logged for security purposes and to improve NVIDIA products and services. The logged session data for improvement purposes is not linked to your identity or any persistent identifier. For more information about our data processing practices, see our [Privacy Policy](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). By interacting with this endpoint, you consent to our collection, recording, and use of such information and the [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - Nemotron 3.5 Lightning Free (NVIDIA free endpoints): Trial use only — do not submit personal or confidential data. Your use is logged for security purposes and to improve NVIDIA products and services. The logged session data for improvement purposes is not linked to your identity or any persistent identifier. For more information about our data processing practices, see our [Privacy Policy](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). By interacting with this endpoint, you consent to our collection, recording, and use of such information and the [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). diff --git a/packages/web/src/content/docs/zh-cn/zen.mdx b/packages/web/src/content/docs/zh-cn/zen.mdx index 51c0549f3a47..518badf0f9c4 100644 --- a/packages/web/src/content/docs/zh-cn/zen.mdx +++ b/packages/web/src/content/docs/zh-cn/zen.mdx @@ -109,7 +109,6 @@ OpenCode Zen 的工作方式与 OpenCode 中的任何其他提供商相同。 | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -137,7 +136,6 @@ https://opencode.ai/zen/v1/models | --------------------------------- | ------ | ------- | -------- | -------- | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -223,7 +221,6 @@ https://opencode.ai/zen/v1/models 免费模型: - MiMo-V2.5 Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 -- Hy3 Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 - Ling 3.0 Flash Fin Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 - Nemotron 3 Ultra Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 - Nemotron 3.5 Lightning Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 @@ -281,7 +278,6 @@ https://opencode.ai/zen/v1/models - Big Pickle:在免费期间,收集的数据可能会被用于改进模型。 - MiMo-V2.5 Free:在免费期间,收集的数据可能会被用于改进模型。 -- Hy3 Free:在免费期间,收集的数据可能会被用于改进模型。 - Ling 3.0 Flash Fin Free:在免费期间,收集的数据可能会被用于改进模型。 - Nemotron 3 Ultra Free(NVIDIA 免费端点):仅供试用 — 请勿提交个人或机密数据。出于安全目的以及为改进 NVIDIA 产品和服务,系统会记录你的使用情况。出于改进目的而记录的会话数据不会与你的身份或任何持久标识符相关联。有关我们数据处理实践的更多信息,请参阅我们的[隐私政策](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。与此端点进行交互,即表示你同意我们收集、记录和使用此类信息,并同意 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。 - Nemotron 3.5 Lightning Free(NVIDIA 免费端点):仅供试用 — 请勿提交个人或机密数据。出于安全目的以及为改进 NVIDIA 产品和服务,系统会记录你的使用情况。出于改进目的而记录的会话数据不会与你的身份或任何持久标识符相关联。有关我们数据处理实践的更多信息,请参阅我们的[隐私政策](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。与此端点进行交互,即表示你同意我们收集、记录和使用此类信息,并同意 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。 diff --git a/packages/web/src/content/docs/zh-tw/zen.mdx b/packages/web/src/content/docs/zh-tw/zen.mdx index 501a62dbbbc4..eed177158eab 100644 --- a/packages/web/src/content/docs/zh-tw/zen.mdx +++ b/packages/web/src/content/docs/zh-tw/zen.mdx @@ -113,7 +113,6 @@ OpenCode Zen 的運作方式和 OpenCode 中的其他供應商一樣。 | Kimi K3 | kimi-k3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Hy3 Free | hy3-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -142,7 +141,6 @@ https://opencode.ai/zen/v1/models | --------------------------------- | ------ | ------- | -------- | -------- | | Big Pickle | Free | Free | Free | - | | MiMo-V2.5 Free | Free | Free | Free | - | -| Hy3 Free | Free | Free | Free | - | | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | @@ -228,7 +226,6 @@ https://opencode.ai/zen/v1/models 免費模型: - MiMo-V2.5 Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 -- Hy3 Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 - Ling 3.0 Flash Fin Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 - Nemotron 3 Ultra Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 - Nemotron 3.5 Lightning Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 @@ -287,7 +284,6 @@ https://opencode.ai/zen/v1/models - Big Pickle: 在免費期間,收集到的資料可能會用於改進模型。 - MiMo-V2.5 Free: 在免費期間,收集到的資料可能會用於改進模型。 -- Hy3 Free: 在免費期間,收集到的資料可能會用於改進模型。 - Ling 3.0 Flash Fin Free: 在免費期間,收集到的資料可能會用於改進模型。 - Nemotron 3 Ultra Free(NVIDIA 免費端點):僅供試用 — 請勿提交個人或機密資料。基於安全目的以及為了改進 NVIDIA 產品與服務,系統會記錄你的使用情況。基於改進目的而記錄的工作階段資料不會與你的身分或任何持久識別碼相關聯。有關我們資料處理實務的更多資訊,請參閱我們的[隱私政策](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。與此端點進行互動,即表示你同意我們收集、記錄與使用此類資訊,並同意 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。 - Nemotron 3.5 Lightning Free(NVIDIA 免費端點):僅供試用 — 請勿提交個人或機密資料。基於安全目的以及為了改進 NVIDIA 產品與服務,系統會記錄你的使用情況。基於改進目的而記錄的工作階段資料不會與你的身分或任何持久識別碼相關聯。有關我們資料處理實務的更多資訊,請參閱我們的[隱私政策](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。與此端點進行互動,即表示你同意我們收集、記錄與使用此類資訊,並同意 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。 From 9f69463f1d556af2b5b51d2efa1c04f5f544f911 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Mon, 31 Aug 2026 05:19:51 +0000 Subject: [PATCH 074/185] fix(app): backport session rename and tab menu fixes to v1 (#46116) Co-authored-by: Brendonovich <14191578+Brendonovich@users.noreply.github.com> --- .../app/e2e/regression/session-rename.spec.ts | 141 ++++++++++++++++++ .../subagent-child-navigation.spec.ts | 2 +- .../app/src/components/titlebar-tab-nav.tsx | 71 ++++++--- .../session/timeline/message-timeline.tsx | 4 +- 4 files changed, 196 insertions(+), 22 deletions(-) create mode 100644 packages/app/e2e/regression/session-rename.spec.ts diff --git a/packages/app/e2e/regression/session-rename.spec.ts b/packages/app/e2e/regression/session-rename.spec.ts new file mode 100644 index 000000000000..2cd97c24c1c0 --- /dev/null +++ b/packages/app/e2e/regression/session-rename.spec.ts @@ -0,0 +1,141 @@ +import { expect, test } from "@playwright/test" +import { fixture, pageMessages } from "../smoke/session-timeline.fixture" +import { mockOpenCodeServer } from "../utils/mock-server" + +test.beforeEach(async ({ page }) => { + const sessions = fixture.sessions.map((session) => ({ ...session })) + await mockOpenCodeServer(page, { + protocol: "v1", + sessions, + provider: fixture.provider, + directory: fixture.directory, + project: fixture.project, + pageMessages, + }) + await page.route(/\/session\/[^/]+(?:\?.*)?$/, async (route) => { + if (route.request().method() !== "PATCH") return route.fallback() + const id = new URL(route.request().url()).pathname.split("/").at(-1) + const session = sessions.find((item) => item.id === id) + const payload: unknown = route.request().postDataJSON() + if ( + !session || + !payload || + typeof payload !== "object" || + !("title" in payload) || + typeof payload.title !== "string" + ) + throw new Error("Invalid rename request") + session.title = payload.title + await route.fulfill({ json: session, headers: { "access-control-allow-origin": "*" } }) + }) + await page.addInitScript((directory) => { + localStorage.setItem( + "opencode.global.dat:server", + JSON.stringify({ + projects: { local: [{ worktree: directory, expanded: true }] }, + lastProject: { local: directory }, + }), + ) + }, fixture.directory) + await page.goto("/") + await page.locator('[data-component="home-session-row"]').filter({ hasText: fixture.expected.targetTitle }).click() + await expect(page.getByRole("heading", { name: fixture.expected.targetTitle, exact: true })).toBeVisible() +}) + +for (const commit of ["Enter", "blur", "click outside"]) { + test(`saves the session heading on ${commit}`, async ({ page }) => { + await page.getByRole("heading", { name: fixture.expected.targetTitle, exact: true }).click() + const input = page.locator('input[data-slot="session-title-child"]') + await expect(input).toBeFocused() + await input.fill("Renamed session") + if (commit === "Enter") await input.press("Enter") + if (commit === "blur") await input.press("Tab") + if (commit === "click outside") await page.getByRole("textbox", { name: "Prompt", exact: true }).click() + await expect(page.getByRole("heading", { name: "Renamed session", exact: true })).toBeVisible() + await expect(page.locator('[data-slot="titlebar-tabs"] a').filter({ hasText: "Renamed session" })).toBeVisible() + await page.reload() + await expect(page.getByRole("heading", { name: "Renamed session", exact: true })).toBeVisible() + }) +} + +test("cancels the session heading with Escape", async ({ page }) => { + await page.getByRole("heading", { name: fixture.expected.targetTitle, exact: true }).click() + const input = page.locator('input[data-slot="session-title-child"]') + await input.fill("Discard this title") + await input.press("Escape") + await expect(page.getByRole("heading", { name: fixture.expected.targetTitle, exact: true })).toBeVisible() + await page.reload() + await expect(page.getByRole("heading", { name: fixture.expected.targetTitle, exact: true })).toBeVisible() +}) + +test("keeps the draft when saving the session heading fails", async ({ page }) => { + await page.route(/\/session\/[^/]+(?:\?.*)?$/, (route) => { + if (route.request().method() !== "PATCH") return route.fallback() + return route.fulfill({ status: 500, headers: { "access-control-allow-origin": "*" } }) + }) + await page.getByRole("heading", { name: fixture.expected.targetTitle, exact: true }).click() + const input = page.locator('input[data-slot="session-title-child"]') + await input.fill("Retry this title") + await input.press("Tab") + await expect(page.getByText("Request failed", { exact: true })).toBeVisible() + await expect(input).toBeEnabled() + await expect(input).toHaveValue("Retry this title") + await expect( + page.locator('[data-slot="titlebar-tabs"] a').filter({ hasText: fixture.expected.targetTitle }), + ).toBeVisible() +}) + +test("does not save an empty session heading", async ({ page }) => { + await page.getByRole("heading", { name: fixture.expected.targetTitle, exact: true }).click() + const input = page.locator('input[data-slot="session-title-child"]') + await input.fill(" ") + await input.press("Tab") + await expect(page.getByRole("heading", { name: fixture.expected.targetTitle, exact: true })).toBeVisible() + await page.reload() + await expect(page.getByRole("heading", { name: fixture.expected.targetTitle, exact: true })).toBeVisible() +}) + +test("renames and closes the session tab from its context menu", async ({ page }) => { + const tab = page.locator('[data-slot="titlebar-tabs"] a').filter({ hasText: fixture.expected.targetTitle }) + await tab.click({ button: "right" }) + await expect(page.getByRole("menuitem", { name: "Rename", exact: true })).toBeVisible() + await page.keyboard.press("Escape") + await expect(page.getByRole("menuitem", { name: "Rename", exact: true })).toBeHidden() + await expect(tab).toBeFocused() + await tab.press("Shift+F10") + await page.getByRole("menuitem", { name: "Rename", exact: true }).click() + const input = page.locator('[data-slot="tab-title"][contenteditable="true"]') + await expect(input).toBeFocused() + await input.fill("Renamed from tab") + await input.press("Enter") + await expect(page.getByRole("heading", { name: "Renamed from tab", exact: true })).toBeVisible() + await page.reload() + await expect(page.getByRole("heading", { name: "Renamed from tab", exact: true })).toBeVisible() + const renamed = page.locator('[data-slot="titlebar-tabs"] a').filter({ hasText: "Renamed from tab" }) + await renamed.click({ button: "right" }) + await page.getByRole("menuitem", { name: "Close tab", exact: true }).click() + await expect(renamed).toBeHidden() + await page.getByRole("button", { name: "Home", exact: true }).click() + await expect( + page.locator('[data-component="home-session-row"]').filter({ hasText: "Renamed from tab" }), + ).toBeVisible() +}) + +test("renames an inactive tab without switching sessions", async ({ page }) => { + await page.getByRole("button", { name: "Home", exact: true }).click() + await page.locator('[data-component="home-session-row"]').filter({ hasText: fixture.expected.sourceTitle }).click() + await expect(page.getByRole("heading", { name: fixture.expected.sourceTitle, exact: true })).toBeVisible() + const tab = page.locator('[data-slot="titlebar-tabs"] a').filter({ hasText: fixture.expected.targetTitle }) + await tab.click({ button: "right" }) + await page.getByRole("menuitem", { name: "Rename", exact: true }).click() + const input = page.locator('[data-slot="tab-title"][contenteditable="true"]') + await expect(input).toBeFocused() + await input.fill("Inactive tab renamed") + await input.press("Tab") + await expect(page.getByRole("heading", { name: fixture.expected.sourceTitle, exact: true })).toBeVisible() + await expect(page).toHaveURL(new RegExp(`/session/${fixture.sourceID}$`)) + await page.locator('[data-slot="titlebar-tabs"] a').filter({ hasText: "Inactive tab renamed" }).click() + await expect(page.getByRole("heading", { name: "Inactive tab renamed", exact: true })).toBeVisible() + await page.reload() + await expect(page.getByRole("heading", { name: "Inactive tab renamed", exact: true })).toBeVisible() +}) diff --git a/packages/app/e2e/regression/subagent-child-navigation.spec.ts b/packages/app/e2e/regression/subagent-child-navigation.spec.ts index 019cc156eca1..c4ed6a78a040 100644 --- a/packages/app/e2e/regression/subagent-child-navigation.spec.ts +++ b/packages/app/e2e/regression/subagent-child-navigation.spec.ts @@ -39,7 +39,7 @@ test("shows the not found fallback when the viewed session is deleted", async ({ }) await expect(page.getByText("This session cannot be found")).toBeVisible() - await expect(page.getByRole("button", { name: "Close Tab" })).toBeVisible() + await expect(page.getByRole("button", { name: "Close Tab", exact: true })).toBeVisible() await expect(page.getByRole("heading", { name: taskDescription })).toHaveCount(0) }) diff --git a/packages/app/src/components/titlebar-tab-nav.tsx b/packages/app/src/components/titlebar-tab-nav.tsx index 65493c54dff5..b016f286a250 100644 --- a/packages/app/src/components/titlebar-tab-nav.tsx +++ b/packages/app/src/components/titlebar-tab-nav.tsx @@ -1,9 +1,11 @@ import { createEffect, createMemo, createSignal, onCleanup, Show, type Ref } from "solid-js" +import { createStore } from "solid-js/store" import { makeEventListener } from "@solid-primitives/event-listener" import { createResizeObserver } from "@solid-primitives/resize-observer" import { createMutation } from "@tanstack/solid-query" import { IconButtonV2 } from "@opencode-ai/ui/v2/icon-button-v2" import { Icon as IconV2 } from "@opencode-ai/ui/v2/icon" +import { MenuV2 } from "@opencode-ai/ui/v2/menu-v2" import { useGlobal } from "@/context/global" import { useLanguage } from "@/context/language" import { ServerConnection, serverName } from "@/context/server" @@ -33,6 +35,8 @@ export function TabNavItem(props: { pressed?: boolean hidden?: boolean }) { + const language = useLanguage() + const [menu, setMenu] = createStore({ open: false, rename: false }) const [editing, setEditing] = createSignal(false) const [titleOverflowing, setTitleOverflowing] = createSignal(false) let tabRoot!: HTMLDivElement @@ -76,7 +80,7 @@ export function TabNavItem(props: { }) const [popoverOpen, setPopoverOpen] = createSignal(false) - const previewBlocked = () => !!props.dragging || editing() || !!props.pressed || !props.session() + const previewBlocked = () => !!props.dragging || editing() || menu.open || !!props.pressed || !props.session() const measureTitleOverflow = () => { if (!titleEl || editing()) { @@ -138,9 +142,9 @@ export function TabNavItem(props: { titleEl.textContent = value }) - const openRename = (event: MouseEvent) => { - event.preventDefault() - event.stopPropagation() + const openRename = (event?: MouseEvent) => { + event?.preventDefault() + event?.stopPropagation() if (!canOpenTabRename(props.dragging, editing(), rename.isPending)) return const session = props.session() if (!session) return @@ -171,7 +175,7 @@ export function TabNavItem(props: { onCleanup(cleanup) }) - const tab = ( + const tab = () => (
    { tabRoot = el @@ -196,7 +200,11 @@ export function TabNavItem(props: { closeTab(event) }} > - - +
    } + aria-label={language.t("common.closeTab")} />
    ) return ( - { - if (value && previewBlocked()) return - setPopoverOpen(value) - }} - data={{ - projectName: projectName(), - title: props.session()?.title, - path: previewPath(), - serverName: serverLabel(), + { + setMenu("open", open) + if (open) setPopoverOpen(false) }} - /> + > + { + if (value && previewBlocked()) return + setPopoverOpen(value) + }} + data={{ + projectName: projectName(), + title: props.session()?.title, + path: previewPath(), + serverName: serverLabel(), + }} + /> + + { + if (!menu.rename) return + event.preventDefault() + setMenu("rename", false) + openRename() + }} + > + setMenu("rename", true)}> + {language.t("common.rename")} + + {language.t("common.closeTab")} + + + ) } diff --git a/packages/app/src/pages/session/timeline/message-timeline.tsx b/packages/app/src/pages/session/timeline/message-timeline.tsx index 18a153d29971..e0838825570e 100644 --- a/packages/app/src/pages/session/timeline/message-timeline.tsx +++ b/packages/app/src/pages/session/timeline/message-timeline.tsx @@ -777,6 +777,7 @@ export function MessageTimeline(props: { } const saveTitleEditor = () => { + if (!title.editing) return const id = sessionID() if (!id) return if (titleMutation.isPending) return @@ -1447,6 +1448,7 @@ export function MessageTimeline(props: { onInput={(event) => setTitle("draft", event.currentTarget.value)} onKeyDown={(event) => { event.stopPropagation() + if (event.isComposing || event.keyCode === 229) return if (event.key === "Enter") { event.preventDefault() void saveTitleEditor() @@ -1457,7 +1459,7 @@ export function MessageTimeline(props: { closeTitleEditor() } }} - onBlur={closeTitleEditor} + onBlur={saveTitleEditor} /> From 26ff3ed3d3e28830190ef53f2ff4b261852139a4 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Mon, 31 Aug 2026 12:01:31 -0400 Subject: [PATCH 075/185] fix(tui): keep home shortcuts right-aligned (#36906) Co-authored-by: Kit Langton --- packages/tui/src/component/prompt/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tui/src/component/prompt/index.tsx b/packages/tui/src/component/prompt/index.tsx index fe7f4a22f75f..0a3935ab24bd 100644 --- a/packages/tui/src/component/prompt/index.tsx +++ b/packages/tui/src/component/prompt/index.tsx @@ -1644,7 +1644,7 @@ export function Prompt(props: PromptProps) { {props.hint ?? ( - + }> {location()?.directory ?? paths.cwd} From b639de07acbf10c3fae53a564577e84dccf74612 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 31 Aug 2026 12:32:22 -0500 Subject: [PATCH 076/185] fix(stats): merge deepseek flash variants (#46446) --- packages/stats/core/src/domain/inference.test.ts | 9 +++++++++ packages/stats/core/src/domain/model-normalization.ts | 2 ++ 2 files changed, 11 insertions(+) diff --git a/packages/stats/core/src/domain/inference.test.ts b/packages/stats/core/src/domain/inference.test.ts index 5f7e0266bf60..e3b61193bb8b 100644 --- a/packages/stats/core/src/domain/inference.test.ts +++ b/packages/stats/core/src/domain/inference.test.ts @@ -50,6 +50,10 @@ describe("inference stat normalization", () => { }) test("merges renamed models under their current name", () => { + expect(statModel("deepseek-v4-flash-0731", "")).toBe("deepseek-v4-flash") + expect(statModel("deepseek-v4-flash-0731-free", "")).toBe("deepseek-v4-flash") + expect(statModel("deepseek-v4-flash-dsv4-flash-final-rnaovd", "")).toBe("deepseek-v4-flash") + expect(statModel("deepseek-v4-flash-vision-exp", "")).toBe("deepseek-v4-flash-vision-exp") expect(statModel("x-preview-f", "")).toBe("glm-5.3-flash") expect(statModel("ox-alpha", "")).toBe("glm-5.3-flash") expect(statModel("ox-alpha-free", "")).toBe("glm-5.3-flash") @@ -130,6 +134,11 @@ describe("inference stat normalization", () => { expect(queries[0]).toContain("COALESCE(NULLIF(lower(model_tier), ''), '') AS raw_tier") expect(queries[0]).toContain("WHEN lower(COALESCE(raw_tier, '')) = 'free'") expect(queries[0]).toContain("regexp_replace(NULLIF(route_model, ''), '^.*/', '')") + expect(queries[0]).toContain("= 'deepseek-v4-flash-0731' THEN 'deepseek-v4-flash'") + expect(queries[0]).toContain( + "= 'deepseek-v4-flash-dsv4-flash-final-rnaovd' THEN 'deepseek-v4-flash'", + ) + expect(queries[0]).not.toContain("= 'deepseek-v4-flash-vision-exp' THEN 'deepseek-v4-flash'") expect(queries[0]).toContain("= 'ox-alpha' THEN 'glm-5.3-flash'") expect(queries[0]).toContain("= 'x-preview-f' THEN 'glm-5.3-flash'") expect(queries[0]).toContain("OR lower(raw_model) IN ('gpt-5-nano', 'grok-code', 'big-pickle')") diff --git a/packages/stats/core/src/domain/model-normalization.ts b/packages/stats/core/src/domain/model-normalization.ts index 744d761d9039..6f2edb117d0f 100644 --- a/packages/stats/core/src/domain/model-normalization.ts +++ b/packages/stats/core/src/domain/model-normalization.ts @@ -16,6 +16,8 @@ export const MODEL_AUTHOR_RULES = [ export const EXCLUDED_MODELS = new Set(["alpha-gpt-next"]) export const FREE_MODELS = new Set(["gpt-5-nano", "grok-code", "big-pickle"]) export const MODEL_NAME_ALIASES: Record = { + "deepseek-v4-flash-0731": "deepseek-v4-flash", + "deepseek-v4-flash-dsv4-flash-final-rnaovd": "deepseek-v4-flash", "ox-alpha": "glm-5.3-flash", "x-preview-f": "glm-5.3-flash", "xiaomi/mimo-v2.5": "mimo-v2.5", From 04284921ac8f657555b5a182f5ff055f471543e4 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Mon, 31 Aug 2026 17:33:52 +0000 Subject: [PATCH 077/185] chore: generate --- packages/stats/core/src/domain/inference.test.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/stats/core/src/domain/inference.test.ts b/packages/stats/core/src/domain/inference.test.ts index e3b61193bb8b..20dbe8620558 100644 --- a/packages/stats/core/src/domain/inference.test.ts +++ b/packages/stats/core/src/domain/inference.test.ts @@ -135,9 +135,7 @@ describe("inference stat normalization", () => { expect(queries[0]).toContain("WHEN lower(COALESCE(raw_tier, '')) = 'free'") expect(queries[0]).toContain("regexp_replace(NULLIF(route_model, ''), '^.*/', '')") expect(queries[0]).toContain("= 'deepseek-v4-flash-0731' THEN 'deepseek-v4-flash'") - expect(queries[0]).toContain( - "= 'deepseek-v4-flash-dsv4-flash-final-rnaovd' THEN 'deepseek-v4-flash'", - ) + expect(queries[0]).toContain("= 'deepseek-v4-flash-dsv4-flash-final-rnaovd' THEN 'deepseek-v4-flash'") expect(queries[0]).not.toContain("= 'deepseek-v4-flash-vision-exp' THEN 'deepseek-v4-flash'") expect(queries[0]).toContain("= 'ox-alpha' THEN 'glm-5.3-flash'") expect(queries[0]).toContain("= 'x-preview-f' THEN 'glm-5.3-flash'") From ba790579eab13db3bd5404f9ca5a8d3f424478fa Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Mon, 31 Aug 2026 21:32:58 -0400 Subject: [PATCH 078/185] docs on proper usage of OpenCode Go --- packages/web/src/content/docs/go.mdx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index 4c5e925a9f7f..0759b6c43d21 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -89,6 +89,17 @@ The list of models may change as we test and add new ones. --- +## Where can I use it? + +OpenCode Go is designed to be used with [OpenCode](https://opencode.ai) and other +popular coding agents that produce a similar types of requests. + +Traffic is monitored for abusive traffic that degrades the experience for other users. + +To ensure your account does not get flagged, make sure the tool you're using +- does not generate abusive traffic +- properly identifies itself (no broad user agents) + ## Usage limits OpenCode Go includes the following limits: From 2386fcec753c49c55c8df026edde8e822c924925 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Tue, 1 Sep 2026 01:35:29 +0000 Subject: [PATCH 079/185] chore: generate --- packages/web/src/content/docs/go.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index 0759b6c43d21..29d79983e374 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -97,6 +97,7 @@ popular coding agents that produce a similar types of requests. Traffic is monitored for abusive traffic that degrades the experience for other users. To ensure your account does not get flagged, make sure the tool you're using + - does not generate abusive traffic - properly identifies itself (no broad user agents) From 5c5c709feed2705fd00227f1d0718db6390016ca Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Mon, 31 Aug 2026 21:16:05 -0500 Subject: [PATCH 080/185] fix(tui): pin diff highlights query (#46519) Co-authored-by: rekram1-node Co-authored-by: Andreas Holt <6665487+AndreasHolt@users.noreply.github.com> --- packages/tui/src/parsers-config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tui/src/parsers-config.ts b/packages/tui/src/parsers-config.ts index 0450c4d2eab2..fcb064e0bf07 100644 --- a/packages/tui/src/parsers-config.ts +++ b/packages/tui/src/parsers-config.ts @@ -302,7 +302,7 @@ export default { wasm: "https://github.com/tree-sitter-grammars/tree-sitter-diff/releases/download/v0.1.0/tree-sitter-diff.wasm", queries: { highlights: [ - "https://raw.githubusercontent.com/tree-sitter-grammars/tree-sitter-diff/master/queries/highlights.scm", + "https://raw.githubusercontent.com/tree-sitter-grammars/tree-sitter-diff/2520c3f934b3179bb540d23e0ef45f75304b5fed/queries/highlights.scm", ], }, }, From f7da00f35ef9ab6ce6356aaafd8159033bc467f8 Mon Sep 17 00:00:00 2001 From: Kyle Altendorf Date: Mon, 31 Aug 2026 22:37:19 -0400 Subject: [PATCH 081/185] fix(opencode): omit empty apply patch move path (#45329) --- packages/opencode/src/tool/apply_patch.ts | 2 +- .../opencode/test/tool/apply_patch.test.ts | 22 ++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/tool/apply_patch.ts b/packages/opencode/src/tool/apply_patch.ts index f9201be8a7db..3f89a63974b0 100644 --- a/packages/opencode/src/tool/apply_patch.ts +++ b/packages/opencode/src/tool/apply_patch.ts @@ -198,7 +198,7 @@ export const ApplyPatchTool = Tool.define( patch: change.diff, additions: change.additions, deletions: change.deletions, - movePath: change.movePath, + ...(change.movePath ? { movePath: change.movePath } : {}), })) // Check permissions if needed diff --git a/packages/opencode/test/tool/apply_patch.test.ts b/packages/opencode/test/tool/apply_patch.test.ts index e394d8084f9a..742036154b5f 100644 --- a/packages/opencode/test/tool/apply_patch.test.ts +++ b/packages/opencode/test/tool/apply_patch.test.ts @@ -1,8 +1,9 @@ import { describe, expect } from "bun:test" import path from "path" import * as fs from "fs/promises" +import { PermissionV1 } from "@opencode-ai/core/v1/permission" import { LayerNode } from "@opencode-ai/core/effect/layer-node" -import { Cause, Effect, Exit, Layer } from "effect" +import { Cause, Effect, Exit, Layer, Schema } from "effect" import { ApplyPatchTool } from "../../src/tool/apply_patch" import { LSP } from "@/lsp/lsp" import { FSUtil } from "@opencode-ai/core/fs-util" @@ -107,6 +108,25 @@ describe("tool.apply_patch freeform", () => { }), ) + it.instance( + "produces JSON-encodable permission metadata", + () => + Effect.gen(function* () { + const { ctx, calls } = makeCtx() + yield* execute({ patchText: "*** Begin Patch\n*** Add File: new.txt\n+created\n*** End Patch" }, ctx) + + expect(() => { + const request = Schema.encodeUnknownSync(PermissionV1.Request)({ + id: PermissionV1.ID.ascending(), + sessionID: baseCtx.sessionID, + ...calls[0], + }) + Schema.encodeUnknownSync(Schema.Json)(request) + }).not.toThrow() + }), + { git: true }, + ) + it.instance( "applies add/update/delete in one patch", () => From be3b703a7b61953aa70c7a049fca6cc71471ef8d Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Mon, 31 Aug 2026 22:44:53 -0400 Subject: [PATCH 082/185] fix(web): restore documentation list markers --- packages/web/src/styles/custom.css | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/web/src/styles/custom.css b/packages/web/src/styles/custom.css index 04331dd6ae0b..095e4a371d72 100644 --- a/packages/web/src/styles/custom.css +++ b/packages/web/src/styles/custom.css @@ -267,12 +267,6 @@ strong { font-weight: 500 !important; } -ul, -ol { - list-style: none !important; - padding: 0 !important; -} - .sl-markdown-content .tab > [role="tab"][aria-selected="true"] { border-color: var(--color-text-strong); } From 1ead9e3d7f02661176fd46d7bcac7f6b7be3b52d Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Mon, 31 Aug 2026 22:45:34 -0400 Subject: [PATCH 083/185] fix(web): number Go usage requirements --- packages/web/src/content/docs/go.mdx | 4 ++-- packages/web/src/styles/custom.css | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index 29d79983e374..7ad23efa8bf8 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -98,8 +98,8 @@ Traffic is monitored for abusive traffic that degrades the experience for other To ensure your account does not get flagged, make sure the tool you're using -- does not generate abusive traffic -- properly identifies itself (no broad user agents) +1\. does not generate abusive traffic +2\. properly identifies itself (no broad user agents) ## Usage limits diff --git a/packages/web/src/styles/custom.css b/packages/web/src/styles/custom.css index 095e4a371d72..04331dd6ae0b 100644 --- a/packages/web/src/styles/custom.css +++ b/packages/web/src/styles/custom.css @@ -267,6 +267,12 @@ strong { font-weight: 500 !important; } +ul, +ol { + list-style: none !important; + padding: 0 !important; +} + .sl-markdown-content .tab > [role="tab"][aria-selected="true"] { border-color: var(--color-text-strong); } From ebece6efd7b11401cf1e7390b5a22991b6608cc4 Mon Sep 17 00:00:00 2001 From: Jack Date: Tue, 1 Sep 2026 15:11:17 +0800 Subject: [PATCH 084/185] docs(web): update Qwen3.7 Max Go usage (#46555) --- packages/web/src/content/docs/ar/go.mdx | 4 ++-- packages/web/src/content/docs/bs/go.mdx | 4 ++-- packages/web/src/content/docs/da/go.mdx | 4 ++-- packages/web/src/content/docs/de/go.mdx | 4 ++-- packages/web/src/content/docs/es/go.mdx | 4 ++-- packages/web/src/content/docs/fr/go.mdx | 4 ++-- packages/web/src/content/docs/go.mdx | 4 ++-- packages/web/src/content/docs/it/go.mdx | 4 ++-- packages/web/src/content/docs/ja/go.mdx | 4 ++-- packages/web/src/content/docs/ko/go.mdx | 4 ++-- packages/web/src/content/docs/nb/go.mdx | 4 ++-- packages/web/src/content/docs/pl/go.mdx | 4 ++-- packages/web/src/content/docs/pt-br/go.mdx | 4 ++-- packages/web/src/content/docs/ru/go.mdx | 4 ++-- packages/web/src/content/docs/th/go.mdx | 4 ++-- packages/web/src/content/docs/tr/go.mdx | 4 ++-- packages/web/src/content/docs/zh-cn/go.mdx | 4 ++-- packages/web/src/content/docs/zh-tw/go.mdx | 4 ++-- 18 files changed, 36 insertions(+), 36 deletions(-) diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx index 23e95b346026..f927fce25cd5 100644 --- a/packages/web/src/content/docs/ar/go.mdx +++ b/packages/web/src/content/docs/ar/go.mdx @@ -110,7 +110,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -168,7 +168,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index 1200b785a33c..08792e787d76 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -120,7 +120,7 @@ Tabela ispod pruža procijenjeni broj zahtjeva na osnovu tipičnih obrazaca kori | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -178,7 +178,7 @@ Procjene se također zasnivaju na sljedećim cijenama po 1M tokena i mjesečnoj | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx index 925e8c51761e..efcddab1198a 100644 --- a/packages/web/src/content/docs/da/go.mdx +++ b/packages/web/src/content/docs/da/go.mdx @@ -120,7 +120,7 @@ Tabellen nedenfor giver et estimeret antal anmodninger baseret på typiske Go-fo | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -178,7 +178,7 @@ Estimaterne er også baseret på følgende priser pr. 1M tokens og det månedlig | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx index 941c439d75a9..f15dfd411469 100644 --- a/packages/web/src/content/docs/de/go.mdx +++ b/packages/web/src/content/docs/de/go.mdx @@ -112,7 +112,7 @@ Die folgende Tabelle zeigt eine geschätzte Anzahl von Anfragen basierend auf ty | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -170,7 +170,7 @@ Die Schätzungen basieren außerdem auf den folgenden Preisen pro 1M Tokens und | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index c5b40f679ef4..e32c3038d743 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -120,7 +120,7 @@ La siguiente tabla proporciona una cantidad estimada de peticiones basada en los | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -178,7 +178,7 @@ Las estimaciones también se basan en los siguientes precios por 1M tokens y en | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx index f47bf643b11c..6f08343c4ae9 100644 --- a/packages/web/src/content/docs/fr/go.mdx +++ b/packages/web/src/content/docs/fr/go.mdx @@ -110,7 +110,7 @@ Le tableau ci-dessous fournit une estimation du nombre de requêtes basée sur d | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -168,7 +168,7 @@ Les estimations sont également basées sur les prix suivants par 1M tokens et s | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index 7ad23efa8bf8..f6430f0c4610 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -132,7 +132,7 @@ The table below provides an estimated request count based on typical Go usage pa | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -190,7 +190,7 @@ The estimates are also based on the following prices per 1M tokens and the month | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx index 634a1d89850b..10697cfb944d 100644 --- a/packages/web/src/content/docs/it/go.mdx +++ b/packages/web/src/content/docs/it/go.mdx @@ -118,7 +118,7 @@ La tabella seguente fornisce una stima del conteggio delle richieste in base a p | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -176,7 +176,7 @@ Le stime si basano anche sui seguenti prezzi per 1M token e sull'utilizzo mensil | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx index fdfbb5ab90c4..e8e83effcc28 100644 --- a/packages/web/src/content/docs/ja/go.mdx +++ b/packages/web/src/content/docs/ja/go.mdx @@ -110,7 +110,7 @@ OpenCode Goには以下の制限が含まれています: | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -168,7 +168,7 @@ OpenCode Goには以下の制限が含まれています: | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx index 41d6f227d372..5e4857073315 100644 --- a/packages/web/src/content/docs/ko/go.mdx +++ b/packages/web/src/content/docs/ko/go.mdx @@ -110,7 +110,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -168,7 +168,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx index cb802b371d78..6edf6c24e8cc 100644 --- a/packages/web/src/content/docs/nb/go.mdx +++ b/packages/web/src/content/docs/nb/go.mdx @@ -120,7 +120,7 @@ Tabellen nedenfor gir et estimert antall forespørsler basert på typiske bruksm | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -178,7 +178,7 @@ Estimatene er også basert på følgende priser per 1M tokens og den månedlige | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx index 2acddfffb0b8..7cd50ed39cf1 100644 --- a/packages/web/src/content/docs/pl/go.mdx +++ b/packages/web/src/content/docs/pl/go.mdx @@ -114,7 +114,7 @@ Poniższa tabela przedstawia szacunkową liczbę żądań na podstawie typowych | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -172,7 +172,7 @@ Szacunki opierają się również na następujących cenach za 1M tokenów oraz | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index 291ce76e8f7d..cc0bd44cd4b7 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -120,7 +120,7 @@ A tabela abaixo fornece uma contagem estimada de requisições com base nos padr | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -178,7 +178,7 @@ As estimativas também se baseiam nos seguintes preços por 1M tokens e no uso m | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx index f6f04d416230..c8b7e6aba6a5 100644 --- a/packages/web/src/content/docs/ru/go.mdx +++ b/packages/web/src/content/docs/ru/go.mdx @@ -120,7 +120,7 @@ OpenCode Go включает следующие лимиты: | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -178,7 +178,7 @@ OpenCode Go включает следующие лимиты: | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx index eb98cda3e073..436c0339fb2c 100644 --- a/packages/web/src/content/docs/th/go.mdx +++ b/packages/web/src/content/docs/th/go.mdx @@ -110,7 +110,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -168,7 +168,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx index c54cd4d800be..7f9ae374699a 100644 --- a/packages/web/src/content/docs/tr/go.mdx +++ b/packages/web/src/content/docs/tr/go.mdx @@ -110,7 +110,7 @@ Aşağıdaki tablo, tipik Go kullanım modellerine dayalı tahmini bir istek say | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -168,7 +168,7 @@ Tahminler ayrıca 1M token başına aşağıdaki fiyatlara ve her modelle birlik | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx index 6cdada1776fb..35fe8356af68 100644 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ b/packages/web/src/content/docs/zh-cn/go.mdx @@ -110,7 +110,7 @@ OpenCode Go 包含以下限制: | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -168,7 +168,7 @@ OpenCode Go 包含以下限制: | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx index 010715b8049b..edf39e593095 100644 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ b/packages/web/src/content/docs/zh-tw/go.mdx @@ -110,7 +110,7 @@ OpenCode Go 包含以下限制: | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | -| Qwen3.7 Max | 340 | 840 | 1,690 | +| Qwen3.7 Max | 170 | 420 | 840 | | Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | | Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | | DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 | @@ -168,7 +168,7 @@ OpenCode Go 包含以下限制: | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $60 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | | Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | | Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | | Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | From 5341a5e442679f96fe152aac91c31509f4dd5430 Mon Sep 17 00:00:00 2001 From: Victor Navarro Date: Tue, 1 Sep 2026 18:20:52 +0200 Subject: [PATCH 085/185] feat(console): add workspace migration timestamp (#46627) --- .../migration.sql | 1 + .../snapshot.json | 3259 +++++++++++++++++ .../console/core/src/schema/workspace.sql.ts | 3 +- 3 files changed, 3262 insertions(+), 1 deletion(-) create mode 100644 packages/console/core/migrations/20260901161032_workspace_migrated_at/migration.sql create mode 100644 packages/console/core/migrations/20260901161032_workspace_migrated_at/snapshot.json diff --git a/packages/console/core/migrations/20260901161032_workspace_migrated_at/migration.sql b/packages/console/core/migrations/20260901161032_workspace_migrated_at/migration.sql new file mode 100644 index 000000000000..87918c7305f5 --- /dev/null +++ b/packages/console/core/migrations/20260901161032_workspace_migrated_at/migration.sql @@ -0,0 +1 @@ +ALTER TABLE `workspace` ADD `migrated_at` timestamp(3); diff --git a/packages/console/core/migrations/20260901161032_workspace_migrated_at/snapshot.json b/packages/console/core/migrations/20260901161032_workspace_migrated_at/snapshot.json new file mode 100644 index 000000000000..1f19f7df0524 --- /dev/null +++ b/packages/console/core/migrations/20260901161032_workspace_migrated_at/snapshot.json @@ -0,0 +1,3259 @@ +{ + "version": "6", + "dialect": "mysql", + "id": "3e952a24-4137-4944-b7fa-e39e71061235", + "prevIds": [ + "e365c1d7-fb02-44ad-b681-87bb51d01964" + ], + "ddl": [ + { + "name": "account", + "entityType": "tables" + }, + { + "name": "auth", + "entityType": "tables" + }, + { + "name": "benchmark", + "entityType": "tables" + }, + { + "name": "billing", + "entityType": "tables" + }, + { + "name": "coupon", + "entityType": "tables" + }, + { + "name": "lite", + "entityType": "tables" + }, + { + "name": "payment", + "entityType": "tables" + }, + { + "name": "subscription", + "entityType": "tables" + }, + { + "name": "usage", + "entityType": "tables" + }, + { + "name": "ip_rate_limit", + "entityType": "tables" + }, + { + "name": "ip", + "entityType": "tables" + }, + { + "name": "key_rate_limit", + "entityType": "tables" + }, + { + "name": "model_sticky_provider", + "entityType": "tables" + }, + { + "name": "model_tpm_rate_limit", + "entityType": "tables" + }, + { + "name": "model_tps_rate_limit", + "entityType": "tables" + }, + { + "name": "key", + "entityType": "tables" + }, + { + "name": "model", + "entityType": "tables" + }, + { + "name": "provider", + "entityType": "tables" + }, + { + "name": "referral_code", + "entityType": "tables" + }, + { + "name": "referral_reward", + "entityType": "tables" + }, + { + "name": "referral", + "entityType": "tables" + }, + { + "name": "user", + "entityType": "tables" + }, + { + "name": "workspace", + "entityType": "tables" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "account" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "account" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "account" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "account" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "auth" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "auth" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "auth" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "auth" + }, + { + "type": "enum('email','github','google')", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "provider", + "entityType": "columns", + "table": "auth" + }, + { + "type": "varchar(255)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "subject", + "entityType": "columns", + "table": "auth" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "account_id", + "entityType": "columns", + "table": "auth" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "benchmark" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "benchmark" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "benchmark" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "benchmark" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "model", + "entityType": "columns", + "table": "benchmark" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "agent", + "entityType": "columns", + "table": "benchmark" + }, + { + "type": "mediumtext", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "result", + "entityType": "columns", + "table": "benchmark" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "billing" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "workspace_id", + "entityType": "columns", + "table": "billing" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "billing" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "billing" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "billing" + }, + { + "type": "varchar(255)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "customer_id", + "entityType": "columns", + "table": "billing" + }, + { + "type": "varchar(255)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "payment_method_id", + "entityType": "columns", + "table": "billing" + }, + { + "type": "varchar(32)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "payment_method_type", + "entityType": "columns", + "table": "billing" + }, + { + "type": "varchar(4)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "payment_method_last4", + "entityType": "columns", + "table": "billing" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "balance", + "entityType": "columns", + "table": "billing" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "monthly_limit", + "entityType": "columns", + "table": "billing" + }, + { + "type": "bigint", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "monthly_usage", + "entityType": "columns", + "table": "billing" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_monthly_usage_updated", + "entityType": "columns", + "table": "billing" + }, + { + "type": "boolean", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "reload", + "entityType": "columns", + "table": "billing" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "reload_trigger", + "entityType": "columns", + "table": "billing" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "reload_amount", + "entityType": "columns", + "table": "billing" + }, + { + "type": "varchar(255)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "reload_error", + "entityType": "columns", + "table": "billing" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_reload_error", + "entityType": "columns", + "table": "billing" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_reload_locked_till", + "entityType": "columns", + "table": "billing" + }, + { + "type": "json", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "subscription", + "entityType": "columns", + "table": "billing" + }, + { + "type": "varchar(28)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "subscription_id", + "entityType": "columns", + "table": "billing" + }, + { + "type": "enum('20','100','200')", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "subscription_plan", + "entityType": "columns", + "table": "billing" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_subscription_booked", + "entityType": "columns", + "table": "billing" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_subscription_selected", + "entityType": "columns", + "table": "billing" + }, + { + "type": "varchar(28)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "lite_subscription_id", + "entityType": "columns", + "table": "billing" + }, + { + "type": "json", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "lite", + "entityType": "columns", + "table": "billing" + }, + { + "type": "varchar(255)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "email", + "entityType": "columns", + "table": "coupon" + }, + { + "type": "enum('BUILDATHON','GO1MONTH50','GOFREEMONTH','GO3MONTHS100','GO6MONTHS100','GO12MONTHS100')", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "type", + "entityType": "columns", + "table": "coupon" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_redeemed", + "entityType": "columns", + "table": "coupon" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "lite" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "workspace_id", + "entityType": "columns", + "table": "lite" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "lite" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "lite" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "lite" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "user_id", + "entityType": "columns", + "table": "lite" + }, + { + "type": "bigint", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "rolling_usage", + "entityType": "columns", + "table": "lite" + }, + { + "type": "bigint", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "weekly_usage", + "entityType": "columns", + "table": "lite" + }, + { + "type": "bigint", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "monthly_usage", + "entityType": "columns", + "table": "lite" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_rolling_updated", + "entityType": "columns", + "table": "lite" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_weekly_updated", + "entityType": "columns", + "table": "lite" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_monthly_updated", + "entityType": "columns", + "table": "lite" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "payment" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "workspace_id", + "entityType": "columns", + "table": "payment" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "payment" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "payment" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "payment" + }, + { + "type": "varchar(255)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "customer_id", + "entityType": "columns", + "table": "payment" + }, + { + "type": "varchar(255)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "invoice_id", + "entityType": "columns", + "table": "payment" + }, + { + "type": "varchar(255)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "payment_id", + "entityType": "columns", + "table": "payment" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "amount", + "entityType": "columns", + "table": "payment" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_refunded", + "entityType": "columns", + "table": "payment" + }, + { + "type": "json", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "enrichment", + "entityType": "columns", + "table": "payment" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "subscription" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "workspace_id", + "entityType": "columns", + "table": "subscription" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "subscription" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "subscription" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "subscription" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "user_id", + "entityType": "columns", + "table": "subscription" + }, + { + "type": "bigint", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "rolling_usage", + "entityType": "columns", + "table": "subscription" + }, + { + "type": "bigint", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "fixed_usage", + "entityType": "columns", + "table": "subscription" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_rolling_updated", + "entityType": "columns", + "table": "subscription" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_fixed_updated", + "entityType": "columns", + "table": "subscription" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "usage" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "workspace_id", + "entityType": "columns", + "table": "usage" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "usage" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "usage" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "usage" + }, + { + "type": "varchar(255)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "model", + "entityType": "columns", + "table": "usage" + }, + { + "type": "varchar(255)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "provider", + "entityType": "columns", + "table": "usage" + }, + { + "type": "int", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "input_tokens", + "entityType": "columns", + "table": "usage" + }, + { + "type": "int", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "output_tokens", + "entityType": "columns", + "table": "usage" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "reasoning_tokens", + "entityType": "columns", + "table": "usage" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "cache_read_tokens", + "entityType": "columns", + "table": "usage" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "cache_write_5m_tokens", + "entityType": "columns", + "table": "usage" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "cache_write_1h_tokens", + "entityType": "columns", + "table": "usage" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "cost", + "entityType": "columns", + "table": "usage" + }, + { + "type": "varchar(30)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "key_id", + "entityType": "columns", + "table": "usage" + }, + { + "type": "varchar(30)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "session_id", + "entityType": "columns", + "table": "usage" + }, + { + "type": "json", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "enrichment", + "entityType": "columns", + "table": "usage" + }, + { + "type": "varchar(45)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "ip", + "entityType": "columns", + "table": "ip_rate_limit" + }, + { + "type": "varchar(10)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "interval", + "entityType": "columns", + "table": "ip_rate_limit" + }, + { + "type": "int", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "count", + "entityType": "columns", + "table": "ip_rate_limit" + }, + { + "type": "varchar(45)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "ip", + "entityType": "columns", + "table": "ip" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "ip" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "ip" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "ip" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "usage", + "entityType": "columns", + "table": "ip" + }, + { + "type": "varchar(255)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "key", + "entityType": "columns", + "table": "key_rate_limit" + }, + { + "type": "varchar(40)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "interval", + "entityType": "columns", + "table": "key_rate_limit" + }, + { + "type": "int", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "count", + "entityType": "columns", + "table": "key_rate_limit" + }, + { + "type": "varchar(255)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "model_sticky_provider" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "model_sticky_provider" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "model_sticky_provider" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "model_sticky_provider" + }, + { + "type": "varchar(255)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "provider_id", + "entityType": "columns", + "table": "model_sticky_provider" + }, + { + "type": "varchar(255)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "model_tpm_rate_limit" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "interval", + "entityType": "columns", + "table": "model_tpm_rate_limit" + }, + { + "type": "int", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "count", + "entityType": "columns", + "table": "model_tpm_rate_limit" + }, + { + "type": "varchar(255)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "model_tps_rate_limit" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "interval", + "entityType": "columns", + "table": "model_tps_rate_limit" + }, + { + "type": "int", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "qualify", + "entityType": "columns", + "table": "model_tps_rate_limit" + }, + { + "type": "int", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "unqualify", + "entityType": "columns", + "table": "model_tps_rate_limit" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "key" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "workspace_id", + "entityType": "columns", + "table": "key" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "key" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "key" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "key" + }, + { + "type": "varchar(255)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "name", + "entityType": "columns", + "table": "key" + }, + { + "type": "varchar(255)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "key", + "entityType": "columns", + "table": "key" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "user_id", + "entityType": "columns", + "table": "key" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_used", + "entityType": "columns", + "table": "key" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "model" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "workspace_id", + "entityType": "columns", + "table": "model" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "model" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "model" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "model" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "model", + "entityType": "columns", + "table": "model" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "provider" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "workspace_id", + "entityType": "columns", + "table": "provider" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "provider" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "provider" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "provider" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "provider", + "entityType": "columns", + "table": "provider" + }, + { + "type": "text", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "credentials", + "entityType": "columns", + "table": "provider" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "workspace_id", + "entityType": "columns", + "table": "referral_code" + }, + { + "type": "varchar(10)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "code", + "entityType": "columns", + "table": "referral_code" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "referral_code" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "referral_code" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "referral_code" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "workspace_id", + "entityType": "columns", + "table": "referral_reward" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "referral_id", + "entityType": "columns", + "table": "referral_reward" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "referral_reward" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "referral_reward" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "referral_reward" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "amount", + "entityType": "columns", + "table": "referral_reward" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_applied", + "entityType": "columns", + "table": "referral_reward" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "referral" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "workspace_id", + "entityType": "columns", + "table": "referral" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "referral" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "referral" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "referral" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "invitee_account_id", + "entityType": "columns", + "table": "referral" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "user" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "workspace_id", + "entityType": "columns", + "table": "user" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "user" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "user" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "user" + }, + { + "type": "varchar(30)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "account_id", + "entityType": "columns", + "table": "user" + }, + { + "type": "varchar(255)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "email", + "entityType": "columns", + "table": "user" + }, + { + "type": "varchar(255)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "name", + "entityType": "columns", + "table": "user" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_seen", + "entityType": "columns", + "table": "user" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "color", + "entityType": "columns", + "table": "user" + }, + { + "type": "enum('admin','member')", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "role", + "entityType": "columns", + "table": "user" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "monthly_limit", + "entityType": "columns", + "table": "user" + }, + { + "type": "bigint", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "monthly_usage", + "entityType": "columns", + "table": "user" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_monthly_usage_updated", + "entityType": "columns", + "table": "user" + }, + { + "type": "varchar(30)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "varchar(255)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "slug", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "varchar(255)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "name", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "json", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "region", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "boolean", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "allow_training", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "boolean", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "is_blocked", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "boolean", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "is_flagged_by_anthropic", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "boolean", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "is_flagged_by_openai", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "migrated_at", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "timestamp(3)", + "notNull": true, + "autoIncrement": false, + "default": "(CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3))", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "timestamp(3)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "time_deleted", + "entityType": "columns", + "table": "workspace" + }, + { + "columns": [ + "id" + ], + "name": "PRIMARY", + "table": "account", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "name": "PRIMARY", + "table": "auth", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "name": "PRIMARY", + "table": "benchmark", + "entityType": "pks" + }, + { + "columns": [ + "workspace_id", + "id" + ], + "name": "PRIMARY", + "table": "billing", + "entityType": "pks" + }, + { + "columns": [ + "email", + "type" + ], + "name": "PRIMARY", + "table": "coupon", + "entityType": "pks" + }, + { + "columns": [ + "workspace_id", + "id" + ], + "name": "PRIMARY", + "table": "lite", + "entityType": "pks" + }, + { + "columns": [ + "workspace_id", + "id" + ], + "name": "PRIMARY", + "table": "payment", + "entityType": "pks" + }, + { + "columns": [ + "workspace_id", + "id" + ], + "name": "PRIMARY", + "table": "subscription", + "entityType": "pks" + }, + { + "columns": [ + "workspace_id", + "id" + ], + "name": "PRIMARY", + "table": "usage", + "entityType": "pks" + }, + { + "columns": [ + "ip", + "interval" + ], + "name": "PRIMARY", + "table": "ip_rate_limit", + "entityType": "pks" + }, + { + "columns": [ + "ip" + ], + "name": "PRIMARY", + "table": "ip", + "entityType": "pks" + }, + { + "columns": [ + "key", + "interval" + ], + "name": "PRIMARY", + "table": "key_rate_limit", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "name": "PRIMARY", + "table": "model_sticky_provider", + "entityType": "pks" + }, + { + "columns": [ + "id", + "interval" + ], + "name": "PRIMARY", + "table": "model_tpm_rate_limit", + "entityType": "pks" + }, + { + "columns": [ + "id", + "interval" + ], + "name": "PRIMARY", + "table": "model_tps_rate_limit", + "entityType": "pks" + }, + { + "columns": [ + "workspace_id", + "id" + ], + "name": "PRIMARY", + "table": "key", + "entityType": "pks" + }, + { + "columns": [ + "workspace_id", + "id" + ], + "name": "PRIMARY", + "table": "model", + "entityType": "pks" + }, + { + "columns": [ + "workspace_id", + "id" + ], + "name": "PRIMARY", + "table": "provider", + "entityType": "pks" + }, + { + "columns": [ + "workspace_id" + ], + "name": "PRIMARY", + "table": "referral_code", + "entityType": "pks" + }, + { + "columns": [ + "workspace_id", + "referral_id" + ], + "name": "PRIMARY", + "table": "referral_reward", + "entityType": "pks" + }, + { + "columns": [ + "workspace_id", + "id" + ], + "name": "PRIMARY", + "table": "referral", + "entityType": "pks" + }, + { + "columns": [ + "workspace_id", + "id" + ], + "name": "PRIMARY", + "table": "user", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "name": "PRIMARY", + "table": "workspace", + "entityType": "pks" + }, + { + "columns": [ + { + "value": "provider", + "isExpression": false + }, + { + "value": "subject", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "provider", + "entityType": "indexes", + "table": "auth" + }, + { + "columns": [ + { + "value": "account_id", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "account_id", + "entityType": "indexes", + "table": "auth" + }, + { + "columns": [ + { + "value": "time_created", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "time_created", + "entityType": "indexes", + "table": "benchmark" + }, + { + "columns": [ + { + "value": "customer_id", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "global_customer_id", + "entityType": "indexes", + "table": "billing" + }, + { + "columns": [ + { + "value": "subscription_id", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "global_subscription_id", + "entityType": "indexes", + "table": "billing" + }, + { + "columns": [ + { + "value": "lite_subscription_id", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "global_lite_subscription_id", + "entityType": "indexes", + "table": "billing" + }, + { + "columns": [ + { + "value": "workspace_id", + "isExpression": false + }, + { + "value": "user_id", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "workspace_user_id", + "entityType": "indexes", + "table": "lite" + }, + { + "columns": [ + { + "value": "workspace_id", + "isExpression": false + }, + { + "value": "user_id", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "workspace_user_id", + "entityType": "indexes", + "table": "subscription" + }, + { + "columns": [ + { + "value": "workspace_id", + "isExpression": false + }, + { + "value": "time_created", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "usage_time_created", + "entityType": "indexes", + "table": "usage" + }, + { + "columns": [ + { + "value": "key", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "global_key", + "entityType": "indexes", + "table": "key" + }, + { + "columns": [ + { + "value": "workspace_id", + "isExpression": false + }, + { + "value": "model", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "model_workspace_model", + "entityType": "indexes", + "table": "model" + }, + { + "columns": [ + { + "value": "workspace_id", + "isExpression": false + }, + { + "value": "provider", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "workspace_provider", + "entityType": "indexes", + "table": "provider" + }, + { + "columns": [ + { + "value": "code", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "code", + "entityType": "indexes", + "table": "referral_code" + }, + { + "columns": [ + { + "value": "referral_id", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "referral_id", + "entityType": "indexes", + "table": "referral_reward" + }, + { + "columns": [ + { + "value": "invitee_account_id", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "invitee_account_id", + "entityType": "indexes", + "table": "referral" + }, + { + "columns": [ + { + "value": "workspace_id", + "isExpression": false + }, + { + "value": "account_id", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "user_account_id", + "entityType": "indexes", + "table": "user" + }, + { + "columns": [ + { + "value": "workspace_id", + "isExpression": false + }, + { + "value": "email", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "user_email", + "entityType": "indexes", + "table": "user" + }, + { + "columns": [ + { + "value": "account_id", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "global_account_id", + "entityType": "indexes", + "table": "user" + }, + { + "columns": [ + { + "value": "email", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "global_email", + "entityType": "indexes", + "table": "user" + }, + { + "columns": [ + { + "value": "slug", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "slug", + "entityType": "indexes", + "table": "workspace" + } + ], + "renames": [] +} diff --git a/packages/console/core/src/schema/workspace.sql.ts b/packages/console/core/src/schema/workspace.sql.ts index 3497979dc7d8..c71f76bd49de 100644 --- a/packages/console/core/src/schema/workspace.sql.ts +++ b/packages/console/core/src/schema/workspace.sql.ts @@ -1,5 +1,5 @@ import { boolean, json, primaryKey, mysqlTable, uniqueIndex, varchar } from "drizzle-orm/mysql-core" -import { timestamps, ulid } from "../drizzle/types" +import { timestamps, ulid, utc } from "../drizzle/types" export const WorkspaceTable = mysqlTable( "workspace", @@ -12,6 +12,7 @@ export const WorkspaceTable = mysqlTable( is_blocked: boolean(), is_flagged_by_anthropic: boolean(), is_flagged_by_openai: boolean(), + migrated_at: utc("migrated_at"), ...timestamps, }, (table) => [uniqueIndex("slug").on(table.slug)], From 1ce281b7abd1a2ee75dd4c9057da1d120200da67 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Tue, 1 Sep 2026 12:12:11 -0500 Subject: [PATCH 086/185] fix(stats): prevent comparison legend collapse --- packages/stats/app/src/routes/index.css | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/stats/app/src/routes/index.css b/packages/stats/app/src/routes/index.css index 3b6fa273f72a..2b8acb39029e 100644 --- a/packages/stats/app/src/routes/index.css +++ b/packages/stats/app/src/routes/index.css @@ -6126,6 +6126,7 @@ body { grid-template-columns: 6px minmax(0, 1fr); gap: 12px; align-items: start; + align-self: stretch; min-width: 0; } @@ -6145,7 +6146,8 @@ body { [data-page="stats"] [data-slot="compare-radar-legend"] small { font-size: 13px; line-height: 18px; - overflow-wrap: anywhere; + overflow-wrap: break-word; + word-break: normal; } [data-page="stats"] [data-slot="compare-radar-legend"] strong { From df6aecdbc50f08679e3ae81fa2b84ac89ec4ff14 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Tue, 1 Sep 2026 17:14:51 +0000 Subject: [PATCH 087/185] chore: generate --- .../snapshot.json | 112 ++++-------------- 1 file changed, 24 insertions(+), 88 deletions(-) diff --git a/packages/console/core/migrations/20260901161032_workspace_migrated_at/snapshot.json b/packages/console/core/migrations/20260901161032_workspace_migrated_at/snapshot.json index 1f19f7df0524..e81037d44227 100644 --- a/packages/console/core/migrations/20260901161032_workspace_migrated_at/snapshot.json +++ b/packages/console/core/migrations/20260901161032_workspace_migrated_at/snapshot.json @@ -2,9 +2,7 @@ "version": "6", "dialect": "mysql", "id": "3e952a24-4137-4944-b7fa-e39e71061235", - "prevIds": [ - "e365c1d7-fb02-44ad-b681-87bb51d01964" - ], + "prevIds": ["e365c1d7-fb02-44ad-b681-87bb51d01964"], "ddl": [ { "name": "account", @@ -2703,201 +2701,139 @@ "table": "workspace" }, { - "columns": [ - "id" - ], + "columns": ["id"], "name": "PRIMARY", "table": "account", "entityType": "pks" }, { - "columns": [ - "id" - ], + "columns": ["id"], "name": "PRIMARY", "table": "auth", "entityType": "pks" }, { - "columns": [ - "id" - ], + "columns": ["id"], "name": "PRIMARY", "table": "benchmark", "entityType": "pks" }, { - "columns": [ - "workspace_id", - "id" - ], + "columns": ["workspace_id", "id"], "name": "PRIMARY", "table": "billing", "entityType": "pks" }, { - "columns": [ - "email", - "type" - ], + "columns": ["email", "type"], "name": "PRIMARY", "table": "coupon", "entityType": "pks" }, { - "columns": [ - "workspace_id", - "id" - ], + "columns": ["workspace_id", "id"], "name": "PRIMARY", "table": "lite", "entityType": "pks" }, { - "columns": [ - "workspace_id", - "id" - ], + "columns": ["workspace_id", "id"], "name": "PRIMARY", "table": "payment", "entityType": "pks" }, { - "columns": [ - "workspace_id", - "id" - ], + "columns": ["workspace_id", "id"], "name": "PRIMARY", "table": "subscription", "entityType": "pks" }, { - "columns": [ - "workspace_id", - "id" - ], + "columns": ["workspace_id", "id"], "name": "PRIMARY", "table": "usage", "entityType": "pks" }, { - "columns": [ - "ip", - "interval" - ], + "columns": ["ip", "interval"], "name": "PRIMARY", "table": "ip_rate_limit", "entityType": "pks" }, { - "columns": [ - "ip" - ], + "columns": ["ip"], "name": "PRIMARY", "table": "ip", "entityType": "pks" }, { - "columns": [ - "key", - "interval" - ], + "columns": ["key", "interval"], "name": "PRIMARY", "table": "key_rate_limit", "entityType": "pks" }, { - "columns": [ - "id" - ], + "columns": ["id"], "name": "PRIMARY", "table": "model_sticky_provider", "entityType": "pks" }, { - "columns": [ - "id", - "interval" - ], + "columns": ["id", "interval"], "name": "PRIMARY", "table": "model_tpm_rate_limit", "entityType": "pks" }, { - "columns": [ - "id", - "interval" - ], + "columns": ["id", "interval"], "name": "PRIMARY", "table": "model_tps_rate_limit", "entityType": "pks" }, { - "columns": [ - "workspace_id", - "id" - ], + "columns": ["workspace_id", "id"], "name": "PRIMARY", "table": "key", "entityType": "pks" }, { - "columns": [ - "workspace_id", - "id" - ], + "columns": ["workspace_id", "id"], "name": "PRIMARY", "table": "model", "entityType": "pks" }, { - "columns": [ - "workspace_id", - "id" - ], + "columns": ["workspace_id", "id"], "name": "PRIMARY", "table": "provider", "entityType": "pks" }, { - "columns": [ - "workspace_id" - ], + "columns": ["workspace_id"], "name": "PRIMARY", "table": "referral_code", "entityType": "pks" }, { - "columns": [ - "workspace_id", - "referral_id" - ], + "columns": ["workspace_id", "referral_id"], "name": "PRIMARY", "table": "referral_reward", "entityType": "pks" }, { - "columns": [ - "workspace_id", - "id" - ], + "columns": ["workspace_id", "id"], "name": "PRIMARY", "table": "referral", "entityType": "pks" }, { - "columns": [ - "workspace_id", - "id" - ], + "columns": ["workspace_id", "id"], "name": "PRIMARY", "table": "user", "entityType": "pks" }, { - "columns": [ - "id" - ], + "columns": ["id"], "name": "PRIMARY", "table": "workspace", "entityType": "pks" From 216ba8f05f72ad502f3a807c5513ac2e93d02586 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Tue, 1 Sep 2026 13:39:45 -0500 Subject: [PATCH 088/185] fix(opencode): stop Azure model discovery from logging to stdout (#46646) --- packages/opencode/src/plugin/azure.ts | 22 ++--- packages/opencode/test/plugin/azure.test.ts | 102 +++++++++++++++----- 2 files changed, 88 insertions(+), 36 deletions(-) diff --git a/packages/opencode/src/plugin/azure.ts b/packages/opencode/src/plugin/azure.ts index 33a164f372d9..7a663093fbc4 100644 --- a/packages/opencode/src/plugin/azure.ts +++ b/packages/opencode/src/plugin/azure.ts @@ -5,7 +5,7 @@ import { InstallationVersion } from "@opencode-ai/core/installation/version" import { which } from "@opencode-ai/core/util/which" import type { Hooks } from "@opencode-ai/plugin" import type { Provider } from "@opencode-ai/sdk/v2" -import { Effect, Schema } from "effect" +import { Schema } from "effect" import { OAUTH_DUMMY_KEY } from "../auth" import { Process } from "../util/process" @@ -69,9 +69,9 @@ export async function AzureAuthPlugin(): Promise { export function createAzureAuthHooks( run: AzureCommand, - request: (input: RequestInfo | URL, init?: RequestInit) => Promise = fetch, - accounts: readonly AzureAccount[] = [], - available = true, + request: (input: RequestInfo | URL, init?: RequestInit) => Promise, + accounts: readonly AzureAccount[], + available: boolean, ): Hooks { const tokens = new Map() async function token(scope: string) { @@ -128,17 +128,13 @@ export function createAzureAuthHooks( id: "azure", async models(provider, context) { if (context.auth?.type !== "oauth") return provider.models + // Discovery shells out to the Azure CLI, so skip it when the CLI is missing. + if (!available) return provider.models const resource = context.auth.accountId if (!resource) return {} - return discoverAzureModels(provider.models, resource, run).catch((error: unknown) => { - Effect.runSync( - Effect.logWarning("Azure model discovery failed", { - resource, - error: error instanceof Error ? error.message : String(error), - }), - ) - return provider.models - }) + // This hook runs outside the app's Effect runtime, so logging here would go to the + // console. Fall back to the configured models silently. + return discoverAzureModels(provider.models, resource, run).catch(() => provider.models) }, }, auth: { diff --git a/packages/opencode/test/plugin/azure.test.ts b/packages/opencode/test/plugin/azure.test.ts index 11e7f3a2c3e0..66444965d8e3 100644 --- a/packages/opencode/test/plugin/azure.test.ts +++ b/packages/opencode/test/plugin/azure.test.ts @@ -241,7 +241,7 @@ describe("plugin.azure", () => { test("keeps the existing API-key method and adds Entra ID", () => { delete process.env.AZURE_RESOURCE_NAME - const hooks = createAzureAuthHooks(azureShell([])) + const hooks = createAzureAuthHooks(azureShell([]), fetch, [], true) expect(hooks.auth?.provider).toBe("azure") expect(hooks.provider?.id).toBe("azure") @@ -272,10 +272,15 @@ describe("plugin.azure", () => { test("lists Azure CLI resources and allows entering another resource", () => { delete process.env.AZURE_RESOURCE_NAME - const hooks = createAzureAuthHooks(azureShell([]), fetch, [ - { name: "first-resource", resourceGroup: "first-group" }, - { name: "second-resource", resourceGroup: "second-group" }, - ]) + const hooks = createAzureAuthHooks( + azureShell([]), + fetch, + [ + { name: "first-resource", resourceGroup: "first-group" }, + { name: "second-resource", resourceGroup: "second-group" }, + ], + true, + ) expect(oauthMethod(hooks).prompts).toEqual([ { @@ -299,9 +304,12 @@ describe("plugin.azure", () => { }) test("uses the selected Azure CLI resource", async () => { - const hooks = createAzureAuthHooks(azureShell([]), fetch, [ - { name: "selected-resource", resourceGroup: "selected-group" }, - ]) + const hooks = createAzureAuthHooks( + azureShell([]), + fetch, + [{ name: "selected-resource", resourceGroup: "selected-group" }], + true, + ) const authorization = await oauthMethod(hooks).authorize({ resourceSelection: "selected-resource" }) if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") @@ -309,7 +317,12 @@ describe("plugin.azure", () => { }) test("uses a manually entered Azure resource that was not listed", async () => { - const hooks = createAzureAuthHooks(azureShell([]), fetch, [{ name: "listed-resource", resourceGroup: "group" }]) + const hooks = createAzureAuthHooks( + azureShell([]), + fetch, + [{ name: "listed-resource", resourceGroup: "group" }], + true, + ) const authorization = await oauthMethod(hooks).authorize({ resourceSelection: "__manual__", resourceName: "unlisted-resource", @@ -321,7 +334,7 @@ describe("plugin.azure", () => { test("checks Azure CLI and stores the resource name", async () => { const scopes: string[] = [] - const hooks = createAzureAuthHooks(azureShell(scopes)) + const hooks = createAzureAuthHooks(azureShell(scopes), fetch, [], true) const authorization = await oauthMethod(hooks).authorize({ resourceName: "test-resource" }) if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") @@ -335,10 +348,15 @@ describe("plugin.azure", () => { }) test("supports Azure CLI versions that only provide expiresOn", async () => { - const hooks = createAzureAuthHooks(async () => ({ - accessToken: "legacy-token", - expiresOn: new Date(Date.now() + 60 * 60 * 1000).toISOString(), - })) + const hooks = createAzureAuthHooks( + async () => ({ + accessToken: "legacy-token", + expiresOn: new Date(Date.now() + 60 * 60 * 1000).toISOString(), + }), + fetch, + [], + true, + ) const authorization = await oauthMethod(hooks).authorize({ resourceName: "test-resource" }) if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") @@ -346,7 +364,7 @@ describe("plugin.azure", () => { }) test("rejects Azure CLI tokens without a usable expiration", async () => { - const hooks = createAzureAuthHooks(async () => ({ accessToken: "invalid-token" })) + const hooks = createAzureAuthHooks(async () => ({ accessToken: "invalid-token" }), fetch, [], true) const authorization = await oauthMethod(hooks).authorize({ resourceName: "test-resource" }) if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") @@ -379,6 +397,9 @@ describe("plugin.azure", () => { ], commands, ), + fetch, + [], + true, ) const list = hooks.provider?.models if (!list) throw new Error("Azure provider model hook is missing") @@ -410,6 +431,9 @@ describe("plugin.azure", () => { [{ name: "gpt-production", properties: { model: { name: "gpt-5-mini" }, provisioningState: "Succeeded" } }], commands, ), + fetch, + [], + true, ) const list = hooks.provider?.models if (!list) throw new Error("Azure provider model hook is missing") @@ -433,6 +457,9 @@ describe("plugin.azure", () => { ], [], ), + fetch, + [], + true, ) const list = hooks.provider?.models if (!list) throw new Error("Azure provider model hook is missing") @@ -446,9 +473,14 @@ describe("plugin.azure", () => { }) test("keeps configured models available when Azure discovery fails", async () => { - const hooks = createAzureAuthHooks(async () => { - throw new Error("Azure CLI failed") - }) + const hooks = createAzureAuthHooks( + async () => { + throw new Error("Azure CLI failed") + }, + fetch, + [], + true, + ) const list = hooks.provider?.models if (!list) throw new Error("Azure provider model hook is missing") @@ -456,9 +488,28 @@ describe("plugin.azure", () => { expect(await list({ ...provider, models: catalog }, { auth: oauth })).toBe(catalog) }) + test("skips model discovery when the Azure CLI is unavailable", async () => { + const calls: string[][] = [] + const hooks = createAzureAuthHooks( + async (args) => { + calls.push(args) + throw new Error("spawn az ENOENT") + }, + fetch, + [], + false, + ) + const list = hooks.provider?.models + if (!list) throw new Error("Azure provider model hook is missing") + + const catalog = models("gpt-5-mini") + expect(await list({ ...provider, models: catalog }, { auth: oauth })).toBe(catalog) + expect(calls).toEqual([]) + }) + test("does not change API-key loading", async () => { const scopes: string[] = [] - const hooks = createAzureAuthHooks(azureShell(scopes)) + const hooks = createAzureAuthHooks(azureShell(scopes), fetch, [], true) const catalog = models("gpt-5-mini") const list = hooks.provider?.models if (!list) throw new Error("Azure provider model hook is missing") @@ -471,10 +522,15 @@ describe("plugin.azure", () => { test("uses Azure CLI bearer tokens for Azure inference endpoints", async () => { const scopes: string[] = [] const requests: Headers[] = [] - const hooks = createAzureAuthHooks(azureShell(scopes), async (_input, init) => { - requests.push(new Headers(init?.headers)) - return new Response(null, { status: 200 }) - }) + const hooks = createAzureAuthHooks( + azureShell(scopes), + async (_input, init) => { + requests.push(new Headers(init?.headers)) + return new Response(null, { status: 200 }) + }, + [], + true, + ) const options = await loader(hooks)(async () => oauth, provider) const request = customFetch(options) From 2da5a4b034cbe71149f9f9caa147a41ab2ea0c2f Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Tue, 1 Sep 2026 13:47:49 -0500 Subject: [PATCH 089/185] refactor(tui): use OpenTUI Dynamic in session view (#46649) --- packages/tui/src/routes/session/index.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/tui/src/routes/session/index.tsx b/packages/tui/src/routes/session/index.tsx index cbdaf0cfa0c7..866a381f0698 100644 --- a/packages/tui/src/routes/session/index.tsx +++ b/packages/tui/src/routes/session/index.tsx @@ -14,7 +14,6 @@ import { untrack, useContext, } from "solid-js" -import { Dynamic } from "solid-js/web" import path from "node:path" import { mkdir, writeFile } from "node:fs/promises" import { useRoute, useRouteData } from "../../context/route" @@ -40,7 +39,7 @@ import type { import { useLocal } from "../../context/local" import { Locale } from "../../util/locale" import { webSearchProviderLabel } from "../../util/tool-display" -import { useRenderer, useTerminalDimensions, type JSX } from "@opentui/solid" +import { Dynamic, useRenderer, useTerminalDimensions, type JSX } from "@opentui/solid" import { useSDK } from "../../context/sdk" import { useEditorContext } from "../../context/editor" import { openEditor } from "../../editor" From 55c54d14b846acd601854aaf82cb97210a458bf6 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Tue, 1 Sep 2026 13:50:55 -0500 Subject: [PATCH 090/185] chore: use native runtime conditions in development (#46644) --- CONTRIBUTING.md | 2 +- package.json | 2 +- packages/app/AGENTS.md | 2 +- packages/opencode/package.json | 4 ++-- packages/opencode/test/lib/cli-process.ts | 8 ++++---- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1ab14a7b628a..a9c545efb896 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -157,7 +157,7 @@ Caveats: - If `spawn` does not work for you, you can debug the server separately: - Debug server: `bun run --inspect=ws://localhost:6499/ --cwd packages/opencode ./src/index.ts serve --port 4096`, then attach TUI with `opencode attach http://localhost:4096` - - Debug TUI: `bun run --inspect=ws://localhost:6499/ --cwd packages/opencode --conditions=browser ./src/index.ts` + - Debug TUI: `bun run --inspect=ws://localhost:6499/ --cwd packages/opencode ./src/index.ts` Other tips and tricks: diff --git a/package.json b/package.json index 0f11d0c3966a..07144ccbdee2 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "type": "module", "packageManager": "bun@1.3.14", "scripts": { - "dev": "bun run --cwd packages/opencode --conditions=browser src/index.ts", + "dev": "bun run --cwd packages/opencode src/index.ts", "dev:desktop": "bun --cwd packages/desktop dev", "dev:web": "bun --cwd packages/app dev", "dev:console": "ulimit -n 10240 2>/dev/null; bun run --cwd packages/console/app dev", diff --git a/packages/app/AGENTS.md b/packages/app/AGENTS.md index 72a973ebd40c..5638ea8e6d1a 100644 --- a/packages/app/AGENTS.md +++ b/packages/app/AGENTS.md @@ -11,7 +11,7 @@ - `opencode dev web` proxies `https://app.opencode.ai`, so local UI/CSS changes will not show there. - For local UI changes, run the backend and app dev servers separately. -- Backend (from `packages/opencode`): `bun run --conditions=browser ./src/index.ts serve --port 4096` +- Backend (from `packages/opencode`): `bun run ./src/index.ts serve --port 4096` - App (from `packages/app`): `bun dev -- --port 4444` - Open `http://localhost:4444` to verify UI changes (it targets the backend at `http://localhost:4096`). diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 45c6110363ec..de2582da2e48 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -12,8 +12,8 @@ "bench:test": "bun run script/bench-test-suite.ts", "profile:test": "bun run script/profile-test-files.ts", "build": "bun run script/build.ts", - "dev": "bun run --conditions=browser ./src/index.ts", - "dev:temporary": "bun run --conditions=browser ./src/temporary.ts" + "dev": "bun run ./src/index.ts", + "dev:temporary": "bun run ./src/temporary.ts" }, "bin": { "opencode": "./bin/opencode" diff --git a/packages/opencode/test/lib/cli-process.ts b/packages/opencode/test/lib/cli-process.ts index 12e8d9c866a5..a4d3b36c1dae 100644 --- a/packages/opencode/test/lib/cli-process.ts +++ b/packages/opencode/test/lib/cli-process.ts @@ -211,7 +211,7 @@ export function withCliFixture( // on `Bun.stdin.text()` (see src/cli/cmd/run.ts — non-TTY stdin is // consumed as the prompt). The old Process.run wrapper defaulted to // ignore; ChildProcess.make defaults to pipe, so we set it explicitly. - const command = ChildProcess.make("bun", ["run", "--conditions=browser", cliEntry, ...args], { + const command = ChildProcess.make("bun", ["run", cliEntry, ...args], { cwd: home, env: { ...env, ...opts?.env }, extendEnv: true, @@ -283,7 +283,7 @@ export function withCliFixture( const options = runOpts(opts) const proc = yield* Effect.acquireRelease( Effect.sync(() => - Bun.spawn(["bun", "run", "--conditions=browser", cliEntry, ...runArgs(message, opts)], { + Bun.spawn(["bun", "run", cliEntry, ...runArgs(message, opts)], { cwd: home, env: { ...process.env, ...env, ...options?.env }, stdin: "ignore", @@ -324,7 +324,7 @@ export function withCliFixture( // as a finalizer error during test teardown. const proc = yield* Effect.acquireRelease( Effect.sync(() => - Bun.spawn(["bun", "run", "--conditions=browser", cliEntry, ...argv], { + Bun.spawn(["bun", "run", cliEntry, ...argv], { cwd: home, env: { ...process.env, ...env, ...opts?.env }, stdout: "pipe", @@ -395,7 +395,7 @@ export function withCliFixture( // Either way we await proc.exited so the test scope doesn't leak. const proc = yield* Effect.acquireRelease( Effect.sync(() => - Bun.spawn(["bun", "run", "--conditions=browser", cliEntry, ...argv], { + Bun.spawn(["bun", "run", cliEntry, ...argv], { cwd: opts?.cwd ?? home, env: { ...process.env, ...env, ...opts?.env }, stdin: "pipe", From 4502ee568ed5aabf6dade6a9d79ecd9b069e597e Mon Sep 17 00:00:00 2001 From: KevinZhou Date: Wed, 2 Sep 2026 02:52:35 +0800 Subject: [PATCH 091/185] fix(core): bump @ai-sdk/amazon-bedrock to 4.0.166 for reasoning and replay fixes (#45520) Co-authored-by: Aiden Cline --- bun.lock | 12 ++++++------ packages/core/package.json | 2 +- packages/opencode/package.json | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bun.lock b/bun.lock index 71049cb1ac29..44ff5fab77b7 100644 --- a/bun.lock +++ b/bun.lock @@ -295,7 +295,7 @@ }, "dependencies": { "@ai-sdk/alibaba": "1.0.17", - "@ai-sdk/amazon-bedrock": "4.0.158", + "@ai-sdk/amazon-bedrock": "4.0.166", "@ai-sdk/anthropic": "3.0.82", "@ai-sdk/azure": "3.0.88", "@ai-sdk/cerebras": "2.0.41", @@ -570,7 +570,7 @@ "@actions/github": "6.0.1", "@agentclientprotocol/sdk": "0.21.0", "@ai-sdk/alibaba": "1.0.17", - "@ai-sdk/amazon-bedrock": "4.0.158", + "@ai-sdk/amazon-bedrock": "4.0.166", "@ai-sdk/anthropic": "3.0.82", "@ai-sdk/azure": "3.0.88", "@ai-sdk/cerebras": "2.0.60", @@ -1168,7 +1168,7 @@ "@ai-sdk/alibaba": ["@ai-sdk/alibaba@1.0.17", "", { "dependencies": { "@ai-sdk/openai-compatible": "2.0.41", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ZbE+U5bWz2JBc5DERLowx5+TKbjGBE93LqKZAWvuEn7HOSQMraxFMZuc0ST335QZJAyfBOzh7m1mPQ+y7EaaoA=="], - "@ai-sdk/amazon-bedrock": ["@ai-sdk/amazon-bedrock@4.0.158", "", { "dependencies": { "@ai-sdk/anthropic": "3.0.111", "@ai-sdk/openai": "3.0.98", "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.46", "@smithy/eventstream-codec": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "aws4fetch": "^1.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-yZebHEszUzPLsK+Rq5sVZJkJj7EYDgY+Lz36IGf/RSkSC5LOMDbVKoQ55S8xNzJqVjUDqlWuZiQzg40HQslmCw=="], + "@ai-sdk/amazon-bedrock": ["@ai-sdk/amazon-bedrock@4.0.166", "", { "dependencies": { "@ai-sdk/anthropic": "3.0.115", "@ai-sdk/openai": "3.0.105", "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.50", "@smithy/eventstream-codec": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "aws4fetch": "^1.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-HzzQb+ks+WmRcnnT9uBdJAxaqSXz3CWgmLSe9hePAkELPzTl/nAIJh2fb2+UsTD0n9OzZfBb25k68CIxraKkoA=="], "@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.82", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-WKKou2wbhGGYV8PSALAPyV2YY4nfCqCPkyBzYtJtDA9yCcIFwsbtkTNgg7bqtLCVzeEsY7wwxRoCWy+EMfrw/A=="], @@ -5626,13 +5626,13 @@ "@ai-sdk/alibaba/@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@2.0.41", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-kNAGINk71AlOXx10Dq/PXw4t/9XjdK8uxfpVElRwtSFMdeSiLVt58p9TPx4/FJD+hxZuVhvxYj9r42osxWq79g=="], - "@ai-sdk/amazon-bedrock/@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.111", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.46" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-atgBW8jZPr/KuaKX5FvDIHuXBI8VCol6kVeoD4P0657+VXR73QsLogXQVN/Zt5FHtq9WzpdIZseCJiXPqkgwwA=="], + "@ai-sdk/amazon-bedrock/@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.115", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.50" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-S1oAUCVaB2Fr6LtMDfa9EmVlDVczpRodYc3IKdLD2z4r0s/pX+zwjqlhiwhS1FsCS2jVx8EnSyBtuPuOzF094A=="], - "@ai-sdk/amazon-bedrock/@ai-sdk/openai": ["@ai-sdk/openai@3.0.98", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.46" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-nAvp8pVOUJ3znJHRzZs54Y7CJQSikOW1Ty7LTdtQT+/pgtAwqhuKd8oaXbiW2xQaYBdH2i8o9AcEpcUdXIyF+g=="], + "@ai-sdk/amazon-bedrock/@ai-sdk/openai": ["@ai-sdk/openai@3.0.105", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.50" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-umx95F8gqGuhPdoW+4ofq83fuSN6aMHwISxvY6dZU51Iix5ZKId0FNru+0FQeu+xfFUrVNmf3vYQNc2FLN85xA=="], "@ai-sdk/amazon-bedrock/@ai-sdk/provider": ["@ai-sdk/provider@3.0.15", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-XeZW1CcDF2GMbH4wejW6xBRI2QCOgnkVYUnxoeDadB1mf85riL2bMUeDoh+6gJ/r4mjNfzUPW8OjLjvwTP0u1Q=="], - "@ai-sdk/amazon-bedrock/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.46", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8", "undici": "^6.28.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-tEtld97plCFiYevsJuOkGkeuhQndeMWFBVrJS4AjnbD5AqrNSXRCe0p+BZ3Cju/sxDeeZ9ym3q9YUV8fASA7aQ=="], + "@ai-sdk/amazon-bedrock/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.50", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8", "undici": "^6.28.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-YAcB+7M1JhAYsHorTrWyldCyZihjCKr/QRXH2vFrara/+lwqNE7q5KzoucKLZ7ktFiUonhnhFhRoiymsq/2K2Q=="], "@ai-sdk/amazon-bedrock/@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.14", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.1", "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-erZq0nOIpzfeZdCyzZjdJb4nVSKLUmSkaQUVkRGQTXs30gyUGeKnrYEg+Xe1W5gE3aReS7IgsvANwVPxSzY6Pw=="], diff --git a/packages/core/package.json b/packages/core/package.json index 37afa0b65b2c..ffd49ce5be85 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -62,7 +62,7 @@ }, "dependencies": { "@ai-sdk/alibaba": "1.0.17", - "@ai-sdk/amazon-bedrock": "4.0.158", + "@ai-sdk/amazon-bedrock": "4.0.166", "@ai-sdk/anthropic": "3.0.82", "@ai-sdk/azure": "3.0.88", "@ai-sdk/cerebras": "2.0.41", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index de2582da2e48..ac50498dee32 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -56,7 +56,7 @@ "@actions/github": "6.0.1", "@agentclientprotocol/sdk": "0.21.0", "@ai-sdk/alibaba": "1.0.17", - "@ai-sdk/amazon-bedrock": "4.0.158", + "@ai-sdk/amazon-bedrock": "4.0.166", "@ai-sdk/anthropic": "3.0.82", "@ai-sdk/azure": "3.0.88", "@ai-sdk/cerebras": "2.0.60", From dc8753f82a175f5f3588fe9c1f8d7398351193ca Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Tue, 1 Sep 2026 19:11:11 +0000 Subject: [PATCH 092/185] chore: update nix node_modules hashes --- nix/hashes.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nix/hashes.json b/nix/hashes.json index 8ad745661434..2d4e1dd3efa4 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,8 +1,8 @@ { "nodeModules": { - "x86_64-linux": "sha256-Sz806ltZYh+09hLqdqZAxSUlhJMk8bg50oHHoykNa/Y=", - "aarch64-linux": "sha256-dDSLsgah0NKAJLVczh25KOzLl10xhhSbO7WKac1qbJI=", - "aarch64-darwin": "sha256-xZZ5d4i4Ek+X7kvyGN96gbRwXK45j3bsWhPW1kILawI=", - "x86_64-darwin": "sha256-hYTHDIbNF4PZuuSz7z4NZv870FcstVYrMuhGIiFapEY=" + "x86_64-linux": "sha256-6E/2HDZzT8lCFXDUWRfbD856aJgL9tmZBRkYMi63x5w=", + "aarch64-linux": "sha256-I0PTrqH6EIEbtNkS0+yVFk056maDR5iy2gtIHAv1Leg=", + "aarch64-darwin": "sha256-Uq8igYVnbU9X03ear64twODH2f8Hewl3MPdmsfCZjHI=", + "x86_64-darwin": "sha256-6yWfwZVOSiSxA3DxeDd5WAVlN5QBDIdyZXp3uQSN5Bk=" } } From 3f39a329c3d52ed66405c4bc6293b9ed08fe9ab6 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Tue, 1 Sep 2026 14:32:26 -0500 Subject: [PATCH 093/185] feat(opencode): tolerate Anthropic thinking block binding (#46653) --- bun.lock | 31 +- package.json | 5 +- packages/core/package.json | 2 +- packages/opencode/package.json | 2 +- packages/opencode/src/provider/transform.ts | 37 +- packages/opencode/src/session/processor.ts | 14 + .../opencode/test/provider/transform.test.ts | 195 +++++++ .../@ai-sdk%2Famazon-bedrock@4.0.166.patch | 144 +++++ patches/@ai-sdk%2Fanthropic@3.0.111.patch | 528 ++++++++++++++++++ 9 files changed, 934 insertions(+), 24 deletions(-) create mode 100644 patches/@ai-sdk%2Famazon-bedrock@4.0.166.patch create mode 100644 patches/@ai-sdk%2Fanthropic@3.0.111.patch diff --git a/bun.lock b/bun.lock index 44ff5fab77b7..3d8037e6fc8a 100644 --- a/bun.lock +++ b/bun.lock @@ -296,7 +296,7 @@ "dependencies": { "@ai-sdk/alibaba": "1.0.17", "@ai-sdk/amazon-bedrock": "4.0.166", - "@ai-sdk/anthropic": "3.0.82", + "@ai-sdk/anthropic": "3.0.111", "@ai-sdk/azure": "3.0.88", "@ai-sdk/cerebras": "2.0.41", "@ai-sdk/cohere": "3.0.27", @@ -571,7 +571,7 @@ "@agentclientprotocol/sdk": "0.21.0", "@ai-sdk/alibaba": "1.0.17", "@ai-sdk/amazon-bedrock": "4.0.166", - "@ai-sdk/anthropic": "3.0.82", + "@ai-sdk/anthropic": "3.0.111", "@ai-sdk/azure": "3.0.88", "@ai-sdk/cerebras": "2.0.60", "@ai-sdk/cohere": "3.0.27", @@ -1066,10 +1066,12 @@ "gcp-metadata@8.1.2": "patches/gcp-metadata@8.1.2.patch", "@standard-community/standard-openapi@0.2.9": "patches/@standard-community%2Fstandard-openapi@0.2.9.patch", "effect@4.0.0-beta.83": "patches/effect@4.0.0-beta.83.patch", + "@ai-sdk/anthropic@3.0.111": "patches/@ai-sdk%2Fanthropic@3.0.111.patch", "@ai-sdk/mistral@3.0.51": "patches/@ai-sdk%2Fmistral@3.0.51.patch", "@silvia-odwyer/photon-node@0.3.4": "patches/@silvia-odwyer%2Fphoton-node@0.3.4.patch", - "@npmcli/agent@4.0.2": "patches/@npmcli%2Fagent@4.0.2.patch", "solid-js@1.9.10": "patches/solid-js@1.9.10.patch", + "@npmcli/agent@4.0.2": "patches/@npmcli%2Fagent@4.0.2.patch", + "@ai-sdk/amazon-bedrock@4.0.166": "patches/@ai-sdk%2Famazon-bedrock@4.0.166.patch", "@ai-sdk/groq@3.0.31": "patches/@ai-sdk%2Fgroq@3.0.31.patch", "@ai-sdk/google@3.0.73": "patches/@ai-sdk%2Fgoogle@3.0.73.patch", "pacote@21.5.0": "patches/pacote@21.5.0.patch", @@ -1077,6 +1079,7 @@ "@ai-sdk/openai-compatible@2.0.41": "patches/@ai-sdk%2Fopenai-compatible@2.0.41.patch", }, "overrides": { + "@ai-sdk/anthropic": "3.0.111", "@opentui/core": "catalog:", "@opentui/keymap": "catalog:", "@opentui/solid": "catalog:", @@ -1170,7 +1173,7 @@ "@ai-sdk/amazon-bedrock": ["@ai-sdk/amazon-bedrock@4.0.166", "", { "dependencies": { "@ai-sdk/anthropic": "3.0.115", "@ai-sdk/openai": "3.0.105", "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.50", "@smithy/eventstream-codec": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "aws4fetch": "^1.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-HzzQb+ks+WmRcnnT9uBdJAxaqSXz3CWgmLSe9hePAkELPzTl/nAIJh2fb2+UsTD0n9OzZfBb25k68CIxraKkoA=="], - "@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.82", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-WKKou2wbhGGYV8PSALAPyV2YY4nfCqCPkyBzYtJtDA9yCcIFwsbtkTNgg7bqtLCVzeEsY7wwxRoCWy+EMfrw/A=="], + "@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.111", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.46" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-atgBW8jZPr/KuaKX5FvDIHuXBI8VCol6kVeoD4P0657+VXR73QsLogXQVN/Zt5FHtq9WzpdIZseCJiXPqkgwwA=="], "@ai-sdk/azure": ["@ai-sdk/azure@3.0.88", "", { "dependencies": { "@ai-sdk/deepseek": "2.0.47", "@ai-sdk/openai": "3.0.84", "@ai-sdk/provider": "3.0.14", "@ai-sdk/provider-utils": "4.0.38" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-RRjZkB1lYplh8dpBarnvkl1j7sYLHsyXua7erL3oNcMK7fHcl4bPO5C7iQhD1O/DqD/zCceDifnege1s+8yEvw=="], @@ -5626,8 +5629,6 @@ "@ai-sdk/alibaba/@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@2.0.41", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-kNAGINk71AlOXx10Dq/PXw4t/9XjdK8uxfpVElRwtSFMdeSiLVt58p9TPx4/FJD+hxZuVhvxYj9r42osxWq79g=="], - "@ai-sdk/amazon-bedrock/@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.115", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.50" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-S1oAUCVaB2Fr6LtMDfa9EmVlDVczpRodYc3IKdLD2z4r0s/pX+zwjqlhiwhS1FsCS2jVx8EnSyBtuPuOzF094A=="], - "@ai-sdk/amazon-bedrock/@ai-sdk/openai": ["@ai-sdk/openai@3.0.105", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.50" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-umx95F8gqGuhPdoW+4ofq83fuSN6aMHwISxvY6dZU51Iix5ZKId0FNru+0FQeu+xfFUrVNmf3vYQNc2FLN85xA=="], "@ai-sdk/amazon-bedrock/@ai-sdk/provider": ["@ai-sdk/provider@3.0.15", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-XeZW1CcDF2GMbH4wejW6xBRI2QCOgnkVYUnxoeDadB1mf85riL2bMUeDoh+6gJ/r4mjNfzUPW8OjLjvwTP0u1Q=="], @@ -5638,9 +5639,9 @@ "@ai-sdk/amazon-bedrock/@smithy/util-utf8": ["@smithy/util-utf8@4.2.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw=="], - "@ai-sdk/anthropic/@ai-sdk/provider": ["@ai-sdk/provider@3.0.10", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-Q3BZ27qfpYqnCYGvE3vt+Qi6LGOF9R5Nmzn+9JoM1lCRsD9mYaIhfJLkSunN48nfGXJ6n+XNV0J/XVpqGQl7Dw=="], + "@ai-sdk/anthropic/@ai-sdk/provider": ["@ai-sdk/provider@3.0.15", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-XeZW1CcDF2GMbH4wejW6xBRI2QCOgnkVYUnxoeDadB1mf85riL2bMUeDoh+6gJ/r4mjNfzUPW8OjLjvwTP0u1Q=="], - "@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.27", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ubkAJ+xODouwtmN1tYlvTPphH1hPOBfZaEQe8U7skGvFAnIRs9PPpsq57bC2+Ky/MB4yzhd6YOsxTAx9sGpazw=="], + "@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.46", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8", "undici": "^6.28.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-tEtld97plCFiYevsJuOkGkeuhQndeMWFBVrJS4AjnbD5AqrNSXRCe0p+BZ3Cju/sxDeeZ9ym3q9YUV8fASA7aQ=="], "@ai-sdk/azure/@ai-sdk/openai": ["@ai-sdk/openai@3.0.84", "", { "dependencies": { "@ai-sdk/provider": "3.0.14", "@ai-sdk/provider-utils": "4.0.38" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-cmgbeJL0bbY0yTJH4/AdmP5E7MjWRL9G8UdhIi0JlV/So03o82ORJofW8OzwCZPTORVQblFbpZXYGDcUd9NdUQ=="], @@ -5676,8 +5677,6 @@ "@ai-sdk/google/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.27", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ubkAJ+xODouwtmN1tYlvTPphH1hPOBfZaEQe8U7skGvFAnIRs9PPpsq57bC2+Ky/MB4yzhd6YOsxTAx9sGpazw=="], - "@ai-sdk/google-vertex/@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.110", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.45" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-rNkamQCeAUOUGr5Npg5pXZyYFH4fS1U6Mbdy3dF/NNBEI3D2Chc/ruRrwNegP0gfpX3cllP3O4jSibGBbWPZ7A=="], - "@ai-sdk/google-vertex/@ai-sdk/google": ["@ai-sdk/google@3.0.108", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.45" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-kwvYpRNghqt0VRKE7Hx1UWZQCUJJFqUITj24baxy+ApS0Hru0PkBJHD75a36Wc+e6e+wHcKR2MconTeJiBZigA=="], "@ai-sdk/google-vertex/@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@2.0.67", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.45" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-glcEJC2mBXJKj7joFI0fRhcbdDYKTBgXMPcT6Vcnlym67tTzuNG9pFx3zblxVv8TdOxhojJja5zGG19yeGJxuA=="], @@ -6160,8 +6159,6 @@ "ai-gateway-provider/@ai-sdk/amazon-bedrock": ["@ai-sdk/amazon-bedrock@4.0.153", "", { "dependencies": { "@ai-sdk/anthropic": "3.0.110", "@ai-sdk/openai": "3.0.96", "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.45", "@smithy/eventstream-codec": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "aws4fetch": "^1.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-iEXrLgWylCHJmznqlKLU3CqRh8UWibv+illrwmsk136FVBBvyXiGnpQrI1pGWCScVLQjBQSFQu7GJDkUEomf/A=="], - "ai-gateway-provider/@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.110", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.45" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-rNkamQCeAUOUGr5Npg5pXZyYFH4fS1U6Mbdy3dF/NNBEI3D2Chc/ruRrwNegP0gfpX3cllP3O4jSibGBbWPZ7A=="], - "ai-gateway-provider/@ai-sdk/cerebras": ["@ai-sdk/cerebras@2.0.60", "", { "dependencies": { "@ai-sdk/openai-compatible": "2.0.54", "@ai-sdk/provider": "3.0.12", "@ai-sdk/provider-utils": "4.0.33" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-Rnok3cThg6awBwaDSyiZpgRpbV7pqxGYrA89LODCo5cuEHeP2h0AM0lLHP7zIkclAdXfOm4wldKi/S2T/DGCOw=="], "ai-gateway-provider/@ai-sdk/cohere": ["@ai-sdk/cohere@3.0.54", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@ai-sdk/provider-utils": "4.0.45" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-cXLjIsSzUriPHe704IH6d+ipJ/OvczTB700p9Zma7DPgQzvxG/diyr8q/2LEsbTRiTopiKhky8dn1PJNQcJToQ=="], @@ -6576,6 +6573,8 @@ "@ai-sdk/anthropic/@ai-sdk/provider-utils/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + "@ai-sdk/anthropic/@ai-sdk/provider-utils/undici": ["undici@6.28.0", "", {}, "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA=="], + "@ai-sdk/azure/@ai-sdk/provider-utils/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], "@ai-sdk/cerebras/@ai-sdk/provider-utils/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], @@ -6984,10 +6983,6 @@ "ai-gateway-provider/@ai-sdk/amazon-bedrock/@smithy/util-utf8": ["@smithy/util-utf8@4.2.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw=="], - "ai-gateway-provider/@ai-sdk/anthropic/@ai-sdk/provider": ["@ai-sdk/provider@3.0.15", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-XeZW1CcDF2GMbH4wejW6xBRI2QCOgnkVYUnxoeDadB1mf85riL2bMUeDoh+6gJ/r4mjNfzUPW8OjLjvwTP0u1Q=="], - - "ai-gateway-provider/@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.45", "", { "dependencies": { "@ai-sdk/provider": "3.0.15", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8", "undici": "^5.29.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-7u5B/E2uZmU65SlJhhQGFHZwRCN0xOz4HHtFc4sEGV9PHbX3fGiEiZBpc/SABay1dGeJgK3VD60rvLGoWdWPXA=="], - "ai-gateway-provider/@ai-sdk/cerebras/@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@2.0.54", "", { "dependencies": { "@ai-sdk/provider": "3.0.12", "@ai-sdk/provider-utils": "4.0.33" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-OyXt0zK8y2/ZIyWlbxTv2r1M7AK227S+Gl4BYOEF42q0wz1n5m4fwR8L4Fy/MQ4Ho6xje47MPsFcRdIqIyP6Rw=="], "ai-gateway-provider/@ai-sdk/cerebras/@ai-sdk/provider": ["@ai-sdk/provider@3.0.12", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-sj9DWTJ2Ze0WR9qsiOPqoqzNx3OxL6iMxHImbhvoe9qOspekbzxNDMiJ4TIGfYHYh9w4OmBjz3prvqhzTi96+Q=="], @@ -7434,10 +7429,6 @@ "ai-gateway-provider/@ai-sdk/amazon-bedrock/@ai-sdk/provider-utils/undici": ["undici@5.29.0", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="], - "ai-gateway-provider/@ai-sdk/anthropic/@ai-sdk/provider-utils/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], - - "ai-gateway-provider/@ai-sdk/anthropic/@ai-sdk/provider-utils/undici": ["undici@5.29.0", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="], - "ai-gateway-provider/@ai-sdk/cerebras/@ai-sdk/provider-utils/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], "ai-gateway-provider/@ai-sdk/cohere/@ai-sdk/provider-utils/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], diff --git a/package.json b/package.json index 07144ccbdee2..dc4a813c5050 100644 --- a/package.json +++ b/package.json @@ -137,6 +137,7 @@ "electron" ], "overrides": { + "@ai-sdk/anthropic": "3.0.111", "@opentui/core": "catalog:", "@opentui/keymap": "catalog:", "@opentui/solid": "catalog:", @@ -160,6 +161,8 @@ "effect@4.0.0-beta.83": "patches/effect@4.0.0-beta.83.patch", "@tanstack/virtual-core@3.17.3": "patches/@tanstack%2Fvirtual-core@3.17.3.patch", "@ai-sdk/openai-compatible@2.0.41": "patches/@ai-sdk%2Fopenai-compatible@2.0.41.patch", - "@ai-sdk/groq@3.0.31": "patches/@ai-sdk%2Fgroq@3.0.31.patch" + "@ai-sdk/groq@3.0.31": "patches/@ai-sdk%2Fgroq@3.0.31.patch", + "@ai-sdk/anthropic@3.0.111": "patches/@ai-sdk%2Fanthropic@3.0.111.patch", + "@ai-sdk/amazon-bedrock@4.0.166": "patches/@ai-sdk%2Famazon-bedrock@4.0.166.patch" } } diff --git a/packages/core/package.json b/packages/core/package.json index ffd49ce5be85..7ba2346dd1fb 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -63,7 +63,7 @@ "dependencies": { "@ai-sdk/alibaba": "1.0.17", "@ai-sdk/amazon-bedrock": "4.0.166", - "@ai-sdk/anthropic": "3.0.82", + "@ai-sdk/anthropic": "3.0.111", "@ai-sdk/azure": "3.0.88", "@ai-sdk/cerebras": "2.0.41", "@ai-sdk/cohere": "3.0.27", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index ac50498dee32..d81bbebae53f 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -57,7 +57,7 @@ "@agentclientprotocol/sdk": "0.21.0", "@ai-sdk/alibaba": "1.0.17", "@ai-sdk/amazon-bedrock": "4.0.166", - "@ai-sdk/anthropic": "3.0.82", + "@ai-sdk/anthropic": "3.0.111", "@ai-sdk/azure": "3.0.88", "@ai-sdk/cerebras": "2.0.60", "@ai-sdk/cohere": "3.0.27", diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 28a5beb9abac..1244963e846f 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -684,6 +684,41 @@ function anthropicOmitsThinking(apiId: string) { return anthropicUsesModernAdaptiveThinking(apiId) } +// Opus 5, Sonnet 5, Fable 5.x, and Mythos 5.x think without a `thinking` parameter. +function anthropicThinksByDefault(apiId: string) { + const version = /claude-(?:[a-z]+-)?(\d+)(?:[.-](\d{1,2}))?(?:[.@-]|$)/i.exec(apiId) + if (!version) return false + return Number(version[1]) >= 5 +} + +// Fable 5.1 binds each thinking signature to the system prompt, tool list, and +// messages above it, and rejects the request when any of that changes. opencode +// re-renders parts of that prefix between turns (system prompt, tools, compaction), +// so ask the API to drop the affected blocks instead of failing the request. +// Models that do not run the check accept the field, so it is safe on every Claude. +// The patched AI SDK adds the thinking-binding-controls beta whenever it is set. +const ANTHROPIC_BLOCK_BINDING = { prefixMismatchBehavior: "drop_block" } + +function anthropicBlockBinding(model: Provider.Model, options: { [x: string]: any }) { + if (!model.api.id.toLowerCase().includes("claude")) return options + const byDefault = anthropicThinksByDefault(model.api.id) + switch (model.api.npm) { + case "@ai-sdk/anthropic": + case "@ai-sdk/google-vertex/anthropic": { + const thinking = options.thinking ?? (byDefault ? { type: "adaptive" } : undefined) + if (!thinking || (thinking.type !== "adaptive" && thinking.type !== "enabled")) return options + return { ...options, thinking: { ...thinking, blockBinding: ANTHROPIC_BLOCK_BINDING } } + } + case "@ai-sdk/amazon-bedrock": { + const reasoningConfig = options.reasoningConfig ?? (byDefault ? { type: "adaptive" } : undefined) + if (!reasoningConfig || (reasoningConfig.type !== "adaptive" && reasoningConfig.type !== "enabled")) + return options + return { ...options, reasoningConfig: { ...reasoningConfig, blockBinding: ANTHROPIC_BLOCK_BINDING } } + } + } + return options +} + function googleThinkingLevelEfforts(apiId: string) { const id = apiId.toLowerCase() if (!id.includes("gemini-3")) return ["low", "high"] @@ -1363,7 +1398,7 @@ export function providerOptions(model: Provider.Model, options: { [x: string]: a usesOpenAIReasoningGate && (model.capabilities.reasoning || options.reasoningEffort !== undefined || options.reasoningSummary !== undefined) ? { ...options, forceReasoning: true } - : options + : anthropicBlockBinding(model, options) if (model.api.npm === "@ai-sdk/gateway") { // Gateway providerOptions are split across two namespaces: diff --git a/packages/opencode/src/session/processor.ts b/packages/opencode/src/session/processor.ts index 20aa8a8404d8..9f8530929c15 100644 --- a/packages/opencode/src/session/processor.ts +++ b/packages/opencode/src/session/processor.ts @@ -435,6 +435,20 @@ const layer = Layer.effect( case "step-finish": { const completedSnapshot = yield* snapshot.track() yield* Effect.forEach(Object.keys(ctx.reasoningMap), finishReasoning) + // Anthropic reports thinking blocks it removed before the model saw the + // prompt. Prefix mismatches mean opencode changed history behind a signed + // block; log them so the churn can be tracked down. + const dropped = isRecord(value.providerMetadata?.anthropic) + ? value.providerMetadata.anthropic.inputTransformations + : undefined + if (Array.isArray(dropped) && dropped.length > 0) { + yield* Effect.logWarning("thinking blocks dropped by provider", { + sessionID: ctx.sessionID, + messageID: ctx.assistantMessage.id, + model: ctx.model.id, + transformations: JSON.stringify(dropped), + }) + } const usage = Session.getUsage({ model: ctx.model, usage: value.usage ?? new Usage({}), diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index 9245e3a57d2c..ed85f6920acf 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -7,6 +7,8 @@ import { ModelV2 } from "@opencode-ai/core/model" import { ModelsDev } from "@opencode-ai/core/models-dev" import { generateText, jsonSchema, type ModelMessage } from "ai" import { createAmazonBedrock } from "@ai-sdk/amazon-bedrock" +import { createAnthropic } from "@ai-sdk/anthropic" +import { createVertexAnthropic } from "@ai-sdk/google-vertex/anthropic" describe("ProviderTransform.options - setCacheKey", () => { const sessionID = "test-session-123" @@ -845,6 +847,199 @@ describe("ProviderTransform.providerOptions", () => { }) }) + describe("anthropic thinking block binding", () => { + const binding = { prefixMismatchBehavior: "drop_block" } + const claude = (npm: string, id: string) => + createModel({ providerID: "custom", api: { id, url: "https://example.com", npm } }) + + test("adds blockBinding to explicit adaptive thinking on @ai-sdk/anthropic", () => { + const model = claude("@ai-sdk/anthropic", "claude-opus-4-7") + expect(ProviderTransform.providerOptions(model, { thinking: { type: "adaptive" }, effort: "high" })).toEqual({ + anthropic: { thinking: { type: "adaptive", blockBinding: binding }, effort: "high" }, + }) + }) + + test("adds blockBinding to explicit enabled thinking", () => { + const model = claude("@ai-sdk/anthropic", "claude-sonnet-4-5") + expect(ProviderTransform.providerOptions(model, { thinking: { type: "enabled", budgetTokens: 4000 } })).toEqual({ + anthropic: { thinking: { type: "enabled", budgetTokens: 4000, blockBinding: binding } }, + }) + }) + + test("injects adaptive thinking for models that think by default when no variant is set", () => { + for (const id of ["claude-fable-5-1", "claude-mythos-5-1", "claude-opus-5", "claude-sonnet-5"]) { + const model = claude("@ai-sdk/anthropic", id) + expect(ProviderTransform.providerOptions(model, {})).toEqual({ + anthropic: { thinking: { type: "adaptive", blockBinding: binding } }, + }) + } + }) + + test("does not inject thinking for models that are off by default", () => { + for (const id of ["claude-opus-4-7", "claude-opus-4-5", "claude-sonnet-4-6", "claude-haiku-4-5"]) { + const model = claude("@ai-sdk/anthropic", id) + expect(ProviderTransform.providerOptions(model, {})).toEqual({ anthropic: {} }) + } + }) + + test("leaves disabled thinking alone", () => { + const model = claude("@ai-sdk/anthropic", "claude-sonnet-5") + expect(ProviderTransform.providerOptions(model, { thinking: { type: "disabled" } })).toEqual({ + anthropic: { thinking: { type: "disabled" } }, + }) + }) + + test("applies to vertex anthropic", () => { + const model = claude("@ai-sdk/google-vertex/anthropic", "claude-fable-5-1") + expect(ProviderTransform.providerOptions(model, { thinking: { type: "adaptive" }, effort: "max" })).toEqual({ + anthropic: { thinking: { type: "adaptive", blockBinding: binding }, effort: "max" }, + }) + }) + + test("applies to bedrock reasoningConfig", () => { + const model = claude("@ai-sdk/amazon-bedrock", "us.anthropic.claude-fable-5-1-v1:0") + expect( + ProviderTransform.providerOptions(model, { reasoningConfig: { type: "adaptive", maxReasoningEffort: "high" } }), + ).toEqual({ + bedrock: { reasoningConfig: { type: "adaptive", maxReasoningEffort: "high", blockBinding: binding } }, + }) + expect(ProviderTransform.providerOptions(model, {})).toEqual({ + bedrock: { reasoningConfig: { type: "adaptive", blockBinding: binding } }, + }) + }) + + test("does not touch bedrock non-anthropic models", () => { + const model = claude("@ai-sdk/amazon-bedrock", "amazon.nova-pro-v1:0") + expect(ProviderTransform.providerOptions(model, { reasoningConfig: { type: "enabled" } })).toEqual({ + bedrock: { reasoningConfig: { type: "enabled" } }, + }) + }) + + test("does not touch non-claude models on anthropic-compatible transports", () => { + const model = claude("@ai-sdk/anthropic", "kimi-k2-thinking") + expect(ProviderTransform.providerOptions(model, { thinking: { type: "adaptive" } })).toEqual({ + anthropic: { thinking: { type: "adaptive" } }, + }) + }) + + test("reaches the anthropic wire as block_binding plus beta header", async () => { + const model = claude("@ai-sdk/anthropic", "claude-fable-5-1") + let sent: { headers: Headers; body: any } | undefined + const provider = createAnthropic({ + apiKey: "test-key", + fetch: Object.assign( + async (...args: Parameters) => { + sent = { headers: new Headers(args[1]?.headers), body: JSON.parse(String(args[1]?.body)) } + return Response.json({ + type: "message", + id: "msg_1", + model: "claude-fable-5-1", + role: "assistant", + content: [{ type: "text", text: "ok" }], + stop_reason: "end_turn", + usage: { input_tokens: 1, output_tokens: 1 }, + input_transformations: [ + { type: "thinking_dropped", path: "messages.1.content.0", reason: "prefix_binding_mismatch" }, + ], + }) + }, + { preconnect: () => undefined }, + ), + }) + const result = await generateText({ + model: provider("claude-fable-5-1"), + prompt: "hi", + providerOptions: ProviderTransform.providerOptions(model, {}), + }) + expect(sent?.body.thinking).toEqual({ + type: "adaptive", + block_binding: { prefix_mismatch_behavior: "drop_block" }, + }) + expect(sent?.headers.get("anthropic-beta")?.split(",")).toContain("thinking-binding-controls-2026-08-01") + expect(result.providerMetadata?.anthropic?.inputTransformations).toEqual([ + { type: "thinking_dropped", path: "messages.1.content.0", reason: "prefix_binding_mismatch" }, + ]) + }) + + test("reaches the vertex anthropic wire as block_binding plus beta header", async () => { + const model = claude("@ai-sdk/google-vertex/anthropic", "claude-fable-5-1") + let sent: { url: string; headers: Headers; body: any } | undefined + const provider = createVertexAnthropic({ + project: "test-project", + location: "global", + generateAuthToken: async () => "test-token", + fetch: Object.assign( + async (...args: Parameters) => { + sent = { + url: String(args[0]), + headers: new Headers(args[1]?.headers), + body: JSON.parse(String(args[1]?.body)), + } + return Response.json({ + type: "message", + id: "msg_1", + model: "claude-fable-5-1", + role: "assistant", + content: [{ type: "text", text: "ok" }], + stop_reason: "end_turn", + usage: { input_tokens: 1, output_tokens: 1 }, + }) + }, + { preconnect: () => undefined }, + ), + }) + await generateText({ + model: provider("claude-fable-5-1"), + prompt: "hi", + providerOptions: ProviderTransform.providerOptions(model, {}), + }) + // Same wire shape Anthropic's own Vertex SDK produces: rawPredict URL, model moved + // out of the body, anthropic_version added, betas carried in the anthropic-beta header. + expect(sent?.url).toBe( + "https://aiplatform.googleapis.com/v1/projects/test-project/locations/global/publishers/anthropic/models/claude-fable-5-1:rawPredict", + ) + expect(sent?.body.model).toBeUndefined() + expect(sent?.body.anthropic_version).toBe("vertex-2023-10-16") + expect(sent?.body.thinking).toEqual({ + type: "adaptive", + block_binding: { prefix_mismatch_behavior: "drop_block" }, + }) + expect(sent?.headers.get("anthropic-beta")?.split(",")).toContain("thinking-binding-controls-2026-08-01") + }) + + test("reaches the bedrock wire as additionalModelRequestFields", async () => { + const model = claude("@ai-sdk/amazon-bedrock", "us.anthropic.claude-fable-5-1-v1:0") + let body: any + const provider = createAmazonBedrock({ + apiKey: "test-key", + region: "us-east-1", + fetch: Object.assign( + async (...args: Parameters) => { + body = JSON.parse(String(args[1]?.body)) + return Response.json({ + output: { message: { role: "assistant", content: [{ text: "ok" }] } }, + stopReason: "end_turn", + usage: { inputTokens: 1, outputTokens: 1, totalTokens: 2 }, + }) + }, + { preconnect: () => undefined }, + ), + }) + await generateText({ + model: provider("us.anthropic.claude-fable-5-1-v1:0"), + prompt: "hi", + providerOptions: ProviderTransform.providerOptions(model, { + reasoningConfig: { type: "adaptive", maxReasoningEffort: "high" }, + }), + }) + expect(body.additionalModelRequestFields.thinking).toEqual({ + type: "adaptive", + block_binding: { prefix_mismatch_behavior: "drop_block" }, + }) + expect(body.additionalModelRequestFields.anthropic_beta).toContain("thinking-binding-controls-2026-08-01") + }) + }) + test("forces reasoning for explicit effort even when model is not marked reasoning-capable", () => { const model = createModel({ capabilities: { diff --git a/patches/@ai-sdk%2Famazon-bedrock@4.0.166.patch b/patches/@ai-sdk%2Famazon-bedrock@4.0.166.patch new file mode 100644 index 000000000000..96fd15106e46 --- /dev/null +++ b/patches/@ai-sdk%2Famazon-bedrock@4.0.166.patch @@ -0,0 +1,144 @@ +diff --git a/dist/index.d.mts b/dist/index.d.mts +index d194ae227fd1223ba44c8c5157b1bb72b1bab273..2e046db0a365c27659ffcec08782c7c26845c1fa 100644 +--- a/dist/index.d.mts ++++ b/dist/index.d.mts +@@ -61,6 +61,12 @@ declare const amazonBedrockLanguageModelOptions: z.ZodObject<{ + omitted: "omitted"; + summarized: "summarized"; + }>>; ++ blockBinding: z.ZodOptional; ++ }, z.core.$strip>>; + }, z.core.$strip>>; + anthropicBeta: z.ZodOptional>; + serviceTier: z.ZodOptional>; ++ blockBinding: z.ZodOptional; ++ }, z.core.$strip>>; + }, z.core.$strip>>; + anthropicBeta: z.ZodOptional>; + serviceTier: z.ZodOptional 0 || bedrockOptions.anthropicBeta) { + const existingBetas = (_g = bedrockOptions.anthropicBeta) != null ? _g : []; + const mergedBetas = betas.size > 0 ? [...existingBetas, ...Array.from(betas)] : existingBetas; +@@ -1050,7 +1057,12 @@ var BedrockChatLanguageModel = class { + ...bedrockOptions.additionalModelRequestFields, + thinking: { + type: "enabled", +- budget_tokens: thinkingBudget ++ budget_tokens: thinkingBudget, ++ ...thinkingBlockBinding != null && { ++ block_binding: { ++ prefix_mismatch_behavior: thinkingBlockBinding.prefixMismatchBehavior ++ } ++ } + } + }; + } else if (thinkingType === "adaptive") { +@@ -1058,7 +1070,12 @@ var BedrockChatLanguageModel = class { + ...bedrockOptions.additionalModelRequestFields, + thinking: { + type: "adaptive", +- ...thinkingDisplay != null && { display: thinkingDisplay } ++ ...thinkingDisplay != null && { display: thinkingDisplay }, ++ ...thinkingBlockBinding != null && { ++ block_binding: { ++ prefix_mismatch_behavior: thinkingBlockBinding.prefixMismatchBehavior ++ } ++ } + } + }; + } +diff --git a/dist/index.mjs b/dist/index.mjs +index 5a669504cb3b21f20788956bc9c22529c1498c35..000114dfe76cba25ddfe693f042232810026c229 100644 +--- a/dist/index.mjs ++++ b/dist/index.mjs +@@ -84,7 +84,10 @@ var amazonBedrockLanguageModelOptions = z.object({ + ]).optional(), + budgetTokens: z.number().optional(), + maxReasoningEffort: z.enum(["low", "medium", "high", "xhigh", "max"]).optional(), +- display: z.enum(["omitted", "summarized"]).optional() ++ display: z.enum(["omitted", "summarized"]).optional(), ++ blockBinding: z.object({ ++ prefixMismatchBehavior: z.enum(["error", "drop_block"]) ++ }).optional() + }).optional(), + /** + * Anthropic beta features to enable +@@ -1024,6 +1027,10 @@ var BedrockChatLanguageModel = class { + ...additionalTools + }; + } ++ const thinkingBlockBinding = isAnthropicModel && isThinkingEnabled ? (bedrockOptions.reasoningConfig == null ? void 0 : bedrockOptions.reasoningConfig.blockBinding) : void 0; ++ if (thinkingBlockBinding != null) { ++ betas.add("thinking-binding-controls-2026-08-01"); ++ } + if (betas.size > 0 || bedrockOptions.anthropicBeta) { + const existingBetas = (_g = bedrockOptions.anthropicBeta) != null ? _g : []; + const mergedBetas = betas.size > 0 ? [...existingBetas, ...Array.from(betas)] : existingBetas; +@@ -1054,7 +1061,12 @@ var BedrockChatLanguageModel = class { + ...bedrockOptions.additionalModelRequestFields, + thinking: { + type: "enabled", +- budget_tokens: thinkingBudget ++ budget_tokens: thinkingBudget, ++ ...thinkingBlockBinding != null && { ++ block_binding: { ++ prefix_mismatch_behavior: thinkingBlockBinding.prefixMismatchBehavior ++ } ++ } + } + }; + } else if (thinkingType === "adaptive") { +@@ -1062,7 +1074,12 @@ var BedrockChatLanguageModel = class { + ...bedrockOptions.additionalModelRequestFields, + thinking: { + type: "adaptive", +- ...thinkingDisplay != null && { display: thinkingDisplay } ++ ...thinkingDisplay != null && { display: thinkingDisplay }, ++ ...thinkingBlockBinding != null && { ++ block_binding: { ++ prefix_mismatch_behavior: thinkingBlockBinding.prefixMismatchBehavior ++ } ++ } + } + }; + } diff --git a/patches/@ai-sdk%2Fanthropic@3.0.111.patch b/patches/@ai-sdk%2Fanthropic@3.0.111.patch new file mode 100644 index 000000000000..82003f9c2088 --- /dev/null +++ b/patches/@ai-sdk%2Fanthropic@3.0.111.patch @@ -0,0 +1,528 @@ +diff --git a/dist/index.d.mts b/dist/index.d.mts +index a66d061f466c89a57efec33f37b7daabaaba2892..15f1b2aca0c0b43e5e1f8baddd2669c074912d18 100644 +--- a/dist/index.d.mts ++++ b/dist/index.d.mts +@@ -211,9 +211,21 @@ declare const anthropicLanguageModelOptions: z.ZodObject<{ + omitted: "omitted"; + summarized: "summarized"; + }>>; ++ blockBinding: z.ZodOptional; ++ }, z.core.$strip>>; + }, z.core.$strip>, z.ZodObject<{ + type: z.ZodLiteral<"enabled">; + budgetTokens: z.ZodOptional; ++ blockBinding: z.ZodOptional; ++ }, z.core.$strip>>; + }, z.core.$strip>, z.ZodObject<{ + type: z.ZodLiteral<"disabled">; + }, z.core.$strip>]>>; +diff --git a/dist/index.d.ts b/dist/index.d.ts +index a66d061f466c89a57efec33f37b7daabaaba2892..15f1b2aca0c0b43e5e1f8baddd2669c074912d18 100644 +--- a/dist/index.d.ts ++++ b/dist/index.d.ts +@@ -211,9 +211,21 @@ declare const anthropicLanguageModelOptions: z.ZodObject<{ + omitted: "omitted"; + summarized: "summarized"; + }>>; ++ blockBinding: z.ZodOptional; ++ }, z.core.$strip>>; + }, z.core.$strip>, z.ZodObject<{ + type: z.ZodLiteral<"enabled">; + budgetTokens: z.ZodOptional; ++ blockBinding: z.ZodOptional; ++ }, z.core.$strip>>; + }, z.core.$strip>, z.ZodObject<{ + type: z.ZodLiteral<"disabled">; + }, z.core.$strip>]>>; +diff --git a/dist/index.js b/dist/index.js +index 88c1aa865339baa320cf80ec543bed865825bc61..5006e82b0edd9676d1650cc94ecb573a2810acce 100644 +--- a/dist/index.js ++++ b/dist/index.js +@@ -85,6 +85,13 @@ var anthropicMessagesResponseSchema = (0, import_provider_utils2.lazySchema)( + type: import_v42.z.literal("message"), + id: import_v42.z.string().nullish(), + model: import_v42.z.string().nullish(), ++ input_transformations: import_v42.z.array( ++ import_v42.z.looseObject({ ++ type: import_v42.z.string(), ++ path: import_v42.z.string().nullish(), ++ reason: import_v42.z.string().nullish() ++ }) ++ ).nullish(), + content: import_v42.z.array( + import_v42.z.discriminatedUnion("type", [ + import_v42.z.object({ +@@ -424,6 +431,13 @@ var anthropicMessagesChunkSchema = (0, import_provider_utils2.lazySchema)( + id: import_v42.z.string().nullish(), + model: import_v42.z.string().nullish(), + role: import_v42.z.string().nullish(), ++ input_transformations: import_v42.z.array( ++ import_v42.z.looseObject({ ++ type: import_v42.z.string(), ++ path: import_v42.z.string().nullish(), ++ reason: import_v42.z.string().nullish() ++ }) ++ ).nullish(), + usage: import_v42.z.looseObject({ + input_tokens: import_v42.z.number(), + cache_creation_input_tokens: import_v42.z.number().nullish(), +@@ -923,12 +937,18 @@ var anthropicLanguageModelOptions = import_v43.z.object({ + * - `"omitted"`: Thinking blocks are present but text is empty (default for Opus 4.7+). + * - `"summarized"`: Thinking content is returned. Required to see reasoning output. + */ +- display: import_v43.z.enum(["omitted", "summarized"]).optional() ++ display: import_v43.z.enum(["omitted", "summarized"]).optional(), ++ blockBinding: import_v43.z.object({ ++ prefixMismatchBehavior: import_v43.z.enum(["error", "drop_block"]) ++ }).optional() + }), + import_v43.z.object({ + /** for models before Opus 4.6, except Sonnet 4.6 still supports it */ + type: import_v43.z.literal("enabled"), +- budgetTokens: import_v43.z.number().optional() ++ budgetTokens: import_v43.z.number().optional(), ++ blockBinding: import_v43.z.object({ ++ prefixMismatchBehavior: import_v43.z.enum(["error", "drop_block"]) ++ }).optional() + }), + import_v43.z.object({ + type: import_v43.z.literal("disabled") +@@ -3568,6 +3588,7 @@ var AnthropicMessagesLanguageModel = class { + const sendThinking = isThinking || thinkingType === "disabled"; + let thinkingBudget = thinkingType === "enabled" ? (_g = anthropicOptions == null ? void 0 : anthropicOptions.thinking) == null ? void 0 : _g.budgetTokens : void 0; + const thinkingDisplay = thinkingType === "adaptive" ? (_h = anthropicOptions == null ? void 0 : anthropicOptions.thinking) == null ? void 0 : _h.display : void 0; ++ const thinkingBlockBinding = isThinking ? (anthropicOptions == null ? void 0 : anthropicOptions.thinking) == null ? void 0 : anthropicOptions.thinking.blockBinding : void 0; + const maxTokens = maxOutputTokens != null ? maxOutputTokens : maxOutputTokensForModel; + const baseArgs = { + // model id: +@@ -3583,7 +3604,12 @@ var AnthropicMessagesLanguageModel = class { + thinking: { + type: thinkingType, + ...thinkingBudget != null && { budget_tokens: thinkingBudget }, +- ...thinkingDisplay != null && { display: thinkingDisplay } ++ ...thinkingDisplay != null && { display: thinkingDisplay }, ++ ...thinkingBlockBinding != null && { ++ block_binding: { ++ prefix_mismatch_behavior: thinkingBlockBinding.prefixMismatchBehavior ++ } ++ } + } + }, + ...((anthropicOptions == null ? void 0 : anthropicOptions.effort) || (anthropicOptions == null ? void 0 : anthropicOptions.taskBudget) || useStructuredOutput && (responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null) && { +@@ -3798,6 +3824,9 @@ var AnthropicMessagesLanguageModel = class { + } else if ((anthropicOptions == null ? void 0 : anthropicOptions.fallbacks) && anthropicOptions.fallbacks.length > 0) { + betas.add("server-side-fallback-2026-06-01"); + } ++ if (thinkingBlockBinding != null) { ++ betas.add("thinking-binding-controls-2026-08-01"); ++ } + const defaultEagerInputStreaming = stream && ((_j = anthropicOptions == null ? void 0 : anthropicOptions.toolStreaming) != null ? _j : true); + const { + tools: anthropicTools2, +@@ -4364,6 +4393,7 @@ var AnthropicMessagesLanguageModel = class { + cacheCreationInputTokens: (_a2 = response.usage.cache_creation_input_tokens) != null ? _a2 : null, + stopSequence: (_b2 = response.stop_sequence) != null ? _b2 : null, + ...stopDetails != null ? { stopDetails } : {}, ++ ...response.input_transformations != null ? { inputTransformations: response.input_transformations } : {}, + iterations: response.usage.iterations ? response.usage.iterations.map( + (iter) => ({ + type: iter.type, +@@ -4453,6 +4483,7 @@ var AnthropicMessagesLanguageModel = class { + let cacheCreationInputTokens = null; + let stopSequence = null; + let stopDetails = void 0; ++ let inputTransformations = void 0; + let container = null; + let isJsonResponseFromTool = false; + let isMessageOpen = false; +@@ -5111,6 +5142,9 @@ var AnthropicMessagesLanguageModel = class { + isMessageOpen = true; + activeMessageId = value.message.id; + usage.input_tokens = value.message.usage.input_tokens; ++ if (value.message.input_transformations != null) { ++ inputTransformations = value.message.input_transformations; ++ } + usage.cache_read_input_tokens = (_e = value.message.usage.cache_read_input_tokens) != null ? _e : 0; + usage.cache_creation_input_tokens = (_f = value.message.usage.cache_creation_input_tokens) != null ? _f : 0; + rawUsage = { +@@ -5231,6 +5265,7 @@ var AnthropicMessagesLanguageModel = class { + cacheCreationInputTokens, + stopSequence, + ...stopDetails != null ? { stopDetails } : {}, ++ ...inputTransformations != null ? { inputTransformations } : {}, + iterations: usage.iterations ? usage.iterations.map( + (iter) => ({ + type: iter.type, +diff --git a/dist/index.mjs b/dist/index.mjs +index 593b030c7f2adbe0cd38556b7a74f5ede6a5435e..1fa36ccb119715df3cd00976e479c679c66d2261 100644 +--- a/dist/index.mjs ++++ b/dist/index.mjs +@@ -85,6 +85,13 @@ var anthropicMessagesResponseSchema = lazySchema2( + type: z2.literal("message"), + id: z2.string().nullish(), + model: z2.string().nullish(), ++ input_transformations: z2.array( ++ z2.looseObject({ ++ type: z2.string(), ++ path: z2.string().nullish(), ++ reason: z2.string().nullish() ++ }) ++ ).nullish(), + content: z2.array( + z2.discriminatedUnion("type", [ + z2.object({ +@@ -424,6 +431,13 @@ var anthropicMessagesChunkSchema = lazySchema2( + id: z2.string().nullish(), + model: z2.string().nullish(), + role: z2.string().nullish(), ++ input_transformations: z2.array( ++ z2.looseObject({ ++ type: z2.string(), ++ path: z2.string().nullish(), ++ reason: z2.string().nullish() ++ }) ++ ).nullish(), + usage: z2.looseObject({ + input_tokens: z2.number(), + cache_creation_input_tokens: z2.number().nullish(), +@@ -923,12 +937,18 @@ var anthropicLanguageModelOptions = z3.object({ + * - `"omitted"`: Thinking blocks are present but text is empty (default for Opus 4.7+). + * - `"summarized"`: Thinking content is returned. Required to see reasoning output. + */ +- display: z3.enum(["omitted", "summarized"]).optional() ++ display: z3.enum(["omitted", "summarized"]).optional(), ++ blockBinding: z3.object({ ++ prefixMismatchBehavior: z3.enum(["error", "drop_block"]) ++ }).optional() + }), + z3.object({ + /** for models before Opus 4.6, except Sonnet 4.6 still supports it */ + type: z3.literal("enabled"), +- budgetTokens: z3.number().optional() ++ budgetTokens: z3.number().optional(), ++ blockBinding: z3.object({ ++ prefixMismatchBehavior: z3.enum(["error", "drop_block"]) ++ }).optional() + }), + z3.object({ + type: z3.literal("disabled") +@@ -3620,6 +3640,7 @@ var AnthropicMessagesLanguageModel = class { + const sendThinking = isThinking || thinkingType === "disabled"; + let thinkingBudget = thinkingType === "enabled" ? (_g = anthropicOptions == null ? void 0 : anthropicOptions.thinking) == null ? void 0 : _g.budgetTokens : void 0; + const thinkingDisplay = thinkingType === "adaptive" ? (_h = anthropicOptions == null ? void 0 : anthropicOptions.thinking) == null ? void 0 : _h.display : void 0; ++ const thinkingBlockBinding = isThinking ? (anthropicOptions == null ? void 0 : anthropicOptions.thinking) == null ? void 0 : anthropicOptions.thinking.blockBinding : void 0; + const maxTokens = maxOutputTokens != null ? maxOutputTokens : maxOutputTokensForModel; + const baseArgs = { + // model id: +@@ -3635,7 +3656,12 @@ var AnthropicMessagesLanguageModel = class { + thinking: { + type: thinkingType, + ...thinkingBudget != null && { budget_tokens: thinkingBudget }, +- ...thinkingDisplay != null && { display: thinkingDisplay } ++ ...thinkingDisplay != null && { display: thinkingDisplay }, ++ ...thinkingBlockBinding != null && { ++ block_binding: { ++ prefix_mismatch_behavior: thinkingBlockBinding.prefixMismatchBehavior ++ } ++ } + } + }, + ...((anthropicOptions == null ? void 0 : anthropicOptions.effort) || (anthropicOptions == null ? void 0 : anthropicOptions.taskBudget) || useStructuredOutput && (responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null) && { +@@ -3850,6 +3876,9 @@ var AnthropicMessagesLanguageModel = class { + } else if ((anthropicOptions == null ? void 0 : anthropicOptions.fallbacks) && anthropicOptions.fallbacks.length > 0) { + betas.add("server-side-fallback-2026-06-01"); + } ++ if (thinkingBlockBinding != null) { ++ betas.add("thinking-binding-controls-2026-08-01"); ++ } + const defaultEagerInputStreaming = stream && ((_j = anthropicOptions == null ? void 0 : anthropicOptions.toolStreaming) != null ? _j : true); + const { + tools: anthropicTools2, +@@ -4416,6 +4445,7 @@ var AnthropicMessagesLanguageModel = class { + cacheCreationInputTokens: (_a2 = response.usage.cache_creation_input_tokens) != null ? _a2 : null, + stopSequence: (_b2 = response.stop_sequence) != null ? _b2 : null, + ...stopDetails != null ? { stopDetails } : {}, ++ ...response.input_transformations != null ? { inputTransformations: response.input_transformations } : {}, + iterations: response.usage.iterations ? response.usage.iterations.map( + (iter) => ({ + type: iter.type, +@@ -4505,6 +4535,7 @@ var AnthropicMessagesLanguageModel = class { + let cacheCreationInputTokens = null; + let stopSequence = null; + let stopDetails = void 0; ++ let inputTransformations = void 0; + let container = null; + let isJsonResponseFromTool = false; + let isMessageOpen = false; +@@ -5163,6 +5194,9 @@ var AnthropicMessagesLanguageModel = class { + isMessageOpen = true; + activeMessageId = value.message.id; + usage.input_tokens = value.message.usage.input_tokens; ++ if (value.message.input_transformations != null) { ++ inputTransformations = value.message.input_transformations; ++ } + usage.cache_read_input_tokens = (_e = value.message.usage.cache_read_input_tokens) != null ? _e : 0; + usage.cache_creation_input_tokens = (_f = value.message.usage.cache_creation_input_tokens) != null ? _f : 0; + rawUsage = { +@@ -5283,6 +5317,7 @@ var AnthropicMessagesLanguageModel = class { + cacheCreationInputTokens, + stopSequence, + ...stopDetails != null ? { stopDetails } : {}, ++ ...inputTransformations != null ? { inputTransformations } : {}, + iterations: usage.iterations ? usage.iterations.map( + (iter) => ({ + type: iter.type, +diff --git a/dist/internal/index.js b/dist/internal/index.js +index 701ca5a333d83d384f682667b9976b7f72b0de37..ce53d0c9fe5c00a092b0347b45d61d8ce9c3a79a 100644 +--- a/dist/internal/index.js ++++ b/dist/internal/index.js +@@ -79,6 +79,13 @@ var anthropicMessagesResponseSchema = (0, import_provider_utils2.lazySchema)( + type: import_v42.z.literal("message"), + id: import_v42.z.string().nullish(), + model: import_v42.z.string().nullish(), ++ input_transformations: import_v42.z.array( ++ import_v42.z.looseObject({ ++ type: import_v42.z.string(), ++ path: import_v42.z.string().nullish(), ++ reason: import_v42.z.string().nullish() ++ }) ++ ).nullish(), + content: import_v42.z.array( + import_v42.z.discriminatedUnion("type", [ + import_v42.z.object({ +@@ -418,6 +425,13 @@ var anthropicMessagesChunkSchema = (0, import_provider_utils2.lazySchema)( + id: import_v42.z.string().nullish(), + model: import_v42.z.string().nullish(), + role: import_v42.z.string().nullish(), ++ input_transformations: import_v42.z.array( ++ import_v42.z.looseObject({ ++ type: import_v42.z.string(), ++ path: import_v42.z.string().nullish(), ++ reason: import_v42.z.string().nullish() ++ }) ++ ).nullish(), + usage: import_v42.z.looseObject({ + input_tokens: import_v42.z.number(), + cache_creation_input_tokens: import_v42.z.number().nullish(), +@@ -917,12 +931,18 @@ var anthropicLanguageModelOptions = import_v43.z.object({ + * - `"omitted"`: Thinking blocks are present but text is empty (default for Opus 4.7+). + * - `"summarized"`: Thinking content is returned. Required to see reasoning output. + */ +- display: import_v43.z.enum(["omitted", "summarized"]).optional() ++ display: import_v43.z.enum(["omitted", "summarized"]).optional(), ++ blockBinding: import_v43.z.object({ ++ prefixMismatchBehavior: import_v43.z.enum(["error", "drop_block"]) ++ }).optional() + }), + import_v43.z.object({ + /** for models before Opus 4.6, except Sonnet 4.6 still supports it */ + type: import_v43.z.literal("enabled"), +- budgetTokens: import_v43.z.number().optional() ++ budgetTokens: import_v43.z.number().optional(), ++ blockBinding: import_v43.z.object({ ++ prefixMismatchBehavior: import_v43.z.enum(["error", "drop_block"]) ++ }).optional() + }), + import_v43.z.object({ + type: import_v43.z.literal("disabled") +@@ -3562,6 +3582,7 @@ var AnthropicMessagesLanguageModel = class { + const sendThinking = isThinking || thinkingType === "disabled"; + let thinkingBudget = thinkingType === "enabled" ? (_g = anthropicOptions == null ? void 0 : anthropicOptions.thinking) == null ? void 0 : _g.budgetTokens : void 0; + const thinkingDisplay = thinkingType === "adaptive" ? (_h = anthropicOptions == null ? void 0 : anthropicOptions.thinking) == null ? void 0 : _h.display : void 0; ++ const thinkingBlockBinding = isThinking ? (anthropicOptions == null ? void 0 : anthropicOptions.thinking) == null ? void 0 : anthropicOptions.thinking.blockBinding : void 0; + const maxTokens = maxOutputTokens != null ? maxOutputTokens : maxOutputTokensForModel; + const baseArgs = { + // model id: +@@ -3577,7 +3598,12 @@ var AnthropicMessagesLanguageModel = class { + thinking: { + type: thinkingType, + ...thinkingBudget != null && { budget_tokens: thinkingBudget }, +- ...thinkingDisplay != null && { display: thinkingDisplay } ++ ...thinkingDisplay != null && { display: thinkingDisplay }, ++ ...thinkingBlockBinding != null && { ++ block_binding: { ++ prefix_mismatch_behavior: thinkingBlockBinding.prefixMismatchBehavior ++ } ++ } + } + }, + ...((anthropicOptions == null ? void 0 : anthropicOptions.effort) || (anthropicOptions == null ? void 0 : anthropicOptions.taskBudget) || useStructuredOutput && (responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null) && { +@@ -3792,6 +3818,9 @@ var AnthropicMessagesLanguageModel = class { + } else if ((anthropicOptions == null ? void 0 : anthropicOptions.fallbacks) && anthropicOptions.fallbacks.length > 0) { + betas.add("server-side-fallback-2026-06-01"); + } ++ if (thinkingBlockBinding != null) { ++ betas.add("thinking-binding-controls-2026-08-01"); ++ } + const defaultEagerInputStreaming = stream && ((_j = anthropicOptions == null ? void 0 : anthropicOptions.toolStreaming) != null ? _j : true); + const { + tools: anthropicTools2, +@@ -4358,6 +4387,7 @@ var AnthropicMessagesLanguageModel = class { + cacheCreationInputTokens: (_a2 = response.usage.cache_creation_input_tokens) != null ? _a2 : null, + stopSequence: (_b2 = response.stop_sequence) != null ? _b2 : null, + ...stopDetails != null ? { stopDetails } : {}, ++ ...response.input_transformations != null ? { inputTransformations: response.input_transformations } : {}, + iterations: response.usage.iterations ? response.usage.iterations.map( + (iter) => ({ + type: iter.type, +@@ -4447,6 +4477,7 @@ var AnthropicMessagesLanguageModel = class { + let cacheCreationInputTokens = null; + let stopSequence = null; + let stopDetails = void 0; ++ let inputTransformations = void 0; + let container = null; + let isJsonResponseFromTool = false; + let isMessageOpen = false; +@@ -5105,6 +5136,9 @@ var AnthropicMessagesLanguageModel = class { + isMessageOpen = true; + activeMessageId = value.message.id; + usage.input_tokens = value.message.usage.input_tokens; ++ if (value.message.input_transformations != null) { ++ inputTransformations = value.message.input_transformations; ++ } + usage.cache_read_input_tokens = (_e = value.message.usage.cache_read_input_tokens) != null ? _e : 0; + usage.cache_creation_input_tokens = (_f = value.message.usage.cache_creation_input_tokens) != null ? _f : 0; + rawUsage = { +@@ -5225,6 +5259,7 @@ var AnthropicMessagesLanguageModel = class { + cacheCreationInputTokens, + stopSequence, + ...stopDetails != null ? { stopDetails } : {}, ++ ...inputTransformations != null ? { inputTransformations } : {}, + iterations: usage.iterations ? usage.iterations.map( + (iter) => ({ + type: iter.type, +diff --git a/dist/internal/index.mjs b/dist/internal/index.mjs +index c11f29fa42a9ce6a5681d43c609020f1f4a616da..df7f7a01992a56826eb809e6cdfb1e50a87a1b90 100644 +--- a/dist/internal/index.mjs ++++ b/dist/internal/index.mjs +@@ -69,6 +69,13 @@ var anthropicMessagesResponseSchema = lazySchema2( + type: z2.literal("message"), + id: z2.string().nullish(), + model: z2.string().nullish(), ++ input_transformations: z2.array( ++ z2.looseObject({ ++ type: z2.string(), ++ path: z2.string().nullish(), ++ reason: z2.string().nullish() ++ }) ++ ).nullish(), + content: z2.array( + z2.discriminatedUnion("type", [ + z2.object({ +@@ -408,6 +415,13 @@ var anthropicMessagesChunkSchema = lazySchema2( + id: z2.string().nullish(), + model: z2.string().nullish(), + role: z2.string().nullish(), ++ input_transformations: z2.array( ++ z2.looseObject({ ++ type: z2.string(), ++ path: z2.string().nullish(), ++ reason: z2.string().nullish() ++ }) ++ ).nullish(), + usage: z2.looseObject({ + input_tokens: z2.number(), + cache_creation_input_tokens: z2.number().nullish(), +@@ -907,12 +921,18 @@ var anthropicLanguageModelOptions = z3.object({ + * - `"omitted"`: Thinking blocks are present but text is empty (default for Opus 4.7+). + * - `"summarized"`: Thinking content is returned. Required to see reasoning output. + */ +- display: z3.enum(["omitted", "summarized"]).optional() ++ display: z3.enum(["omitted", "summarized"]).optional(), ++ blockBinding: z3.object({ ++ prefixMismatchBehavior: z3.enum(["error", "drop_block"]) ++ }).optional() + }), + z3.object({ + /** for models before Opus 4.6, except Sonnet 4.6 still supports it */ + type: z3.literal("enabled"), +- budgetTokens: z3.number().optional() ++ budgetTokens: z3.number().optional(), ++ blockBinding: z3.object({ ++ prefixMismatchBehavior: z3.enum(["error", "drop_block"]) ++ }).optional() + }), + z3.object({ + type: z3.literal("disabled") +@@ -3604,6 +3624,7 @@ var AnthropicMessagesLanguageModel = class { + const sendThinking = isThinking || thinkingType === "disabled"; + let thinkingBudget = thinkingType === "enabled" ? (_g = anthropicOptions == null ? void 0 : anthropicOptions.thinking) == null ? void 0 : _g.budgetTokens : void 0; + const thinkingDisplay = thinkingType === "adaptive" ? (_h = anthropicOptions == null ? void 0 : anthropicOptions.thinking) == null ? void 0 : _h.display : void 0; ++ const thinkingBlockBinding = isThinking ? (anthropicOptions == null ? void 0 : anthropicOptions.thinking) == null ? void 0 : anthropicOptions.thinking.blockBinding : void 0; + const maxTokens = maxOutputTokens != null ? maxOutputTokens : maxOutputTokensForModel; + const baseArgs = { + // model id: +@@ -3619,7 +3640,12 @@ var AnthropicMessagesLanguageModel = class { + thinking: { + type: thinkingType, + ...thinkingBudget != null && { budget_tokens: thinkingBudget }, +- ...thinkingDisplay != null && { display: thinkingDisplay } ++ ...thinkingDisplay != null && { display: thinkingDisplay }, ++ ...thinkingBlockBinding != null && { ++ block_binding: { ++ prefix_mismatch_behavior: thinkingBlockBinding.prefixMismatchBehavior ++ } ++ } + } + }, + ...((anthropicOptions == null ? void 0 : anthropicOptions.effort) || (anthropicOptions == null ? void 0 : anthropicOptions.taskBudget) || useStructuredOutput && (responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null) && { +@@ -3834,6 +3860,9 @@ var AnthropicMessagesLanguageModel = class { + } else if ((anthropicOptions == null ? void 0 : anthropicOptions.fallbacks) && anthropicOptions.fallbacks.length > 0) { + betas.add("server-side-fallback-2026-06-01"); + } ++ if (thinkingBlockBinding != null) { ++ betas.add("thinking-binding-controls-2026-08-01"); ++ } + const defaultEagerInputStreaming = stream && ((_j = anthropicOptions == null ? void 0 : anthropicOptions.toolStreaming) != null ? _j : true); + const { + tools: anthropicTools2, +@@ -4400,6 +4429,7 @@ var AnthropicMessagesLanguageModel = class { + cacheCreationInputTokens: (_a2 = response.usage.cache_creation_input_tokens) != null ? _a2 : null, + stopSequence: (_b2 = response.stop_sequence) != null ? _b2 : null, + ...stopDetails != null ? { stopDetails } : {}, ++ ...response.input_transformations != null ? { inputTransformations: response.input_transformations } : {}, + iterations: response.usage.iterations ? response.usage.iterations.map( + (iter) => ({ + type: iter.type, +@@ -4489,6 +4519,7 @@ var AnthropicMessagesLanguageModel = class { + let cacheCreationInputTokens = null; + let stopSequence = null; + let stopDetails = void 0; ++ let inputTransformations = void 0; + let container = null; + let isJsonResponseFromTool = false; + let isMessageOpen = false; +@@ -5147,6 +5178,9 @@ var AnthropicMessagesLanguageModel = class { + isMessageOpen = true; + activeMessageId = value.message.id; + usage.input_tokens = value.message.usage.input_tokens; ++ if (value.message.input_transformations != null) { ++ inputTransformations = value.message.input_transformations; ++ } + usage.cache_read_input_tokens = (_e = value.message.usage.cache_read_input_tokens) != null ? _e : 0; + usage.cache_creation_input_tokens = (_f = value.message.usage.cache_creation_input_tokens) != null ? _f : 0; + rawUsage = { +@@ -5267,6 +5301,7 @@ var AnthropicMessagesLanguageModel = class { + cacheCreationInputTokens, + stopSequence, + ...stopDetails != null ? { stopDetails } : {}, ++ ...inputTransformations != null ? { inputTransformations } : {}, + iterations: usage.iterations ? usage.iterations.map( + (iter) => ({ + type: iter.type, From 2961956c7462a9a709a2b9979c1fb197fb4b3038 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Tue, 1 Sep 2026 19:53:04 +0000 Subject: [PATCH 094/185] chore: update nix node_modules hashes --- nix/hashes.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nix/hashes.json b/nix/hashes.json index 2d4e1dd3efa4..5f39124feac6 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,8 +1,8 @@ { "nodeModules": { - "x86_64-linux": "sha256-6E/2HDZzT8lCFXDUWRfbD856aJgL9tmZBRkYMi63x5w=", - "aarch64-linux": "sha256-I0PTrqH6EIEbtNkS0+yVFk056maDR5iy2gtIHAv1Leg=", - "aarch64-darwin": "sha256-Uq8igYVnbU9X03ear64twODH2f8Hewl3MPdmsfCZjHI=", - "x86_64-darwin": "sha256-6yWfwZVOSiSxA3DxeDd5WAVlN5QBDIdyZXp3uQSN5Bk=" + "x86_64-linux": "sha256-SUPMcgdvUuLkQL3LKVTrQ+WshrJzDMJLpLIfHXWihmU=", + "aarch64-linux": "sha256-d72i9zY0wEB2vpndBxq6SXHktYquFUzKwxl5mXiJRwI=", + "aarch64-darwin": "sha256-zEJ9/hygXRBAH2GeBFdXtwQnd12K/0bBoptmLb6r7cU=", + "x86_64-darwin": "sha256-Wl9sB67IGuo3vpBCh7Ihsr9578NbqybERRIWTJkX1rw=" } } From af1f9e626989cdfc79fc5f230912425b5a3a3aa4 Mon Sep 17 00:00:00 2001 From: Filip <34747899+neriousy@users.noreply.github.com> Date: Tue, 1 Sep 2026 21:53:43 +0200 Subject: [PATCH 095/185] remove azure discovery stuff (#46666) --- packages/opencode/src/plugin/azure.ts | 141 +-------- packages/opencode/test/plugin/azure.test.ts | 316 ++------------------ packages/web/src/content/docs/providers.mdx | 6 +- 3 files changed, 24 insertions(+), 439 deletions(-) diff --git a/packages/opencode/src/plugin/azure.ts b/packages/opencode/src/plugin/azure.ts index 7a663093fbc4..6916aaaf3a65 100644 --- a/packages/opencode/src/plugin/azure.ts +++ b/packages/opencode/src/plugin/azure.ts @@ -1,10 +1,6 @@ -import { readFile } from "node:fs/promises" -import { homedir } from "node:os" -import { join } from "node:path" import { InstallationVersion } from "@opencode-ai/core/installation/version" import { which } from "@opencode-ai/core/util/which" import type { Hooks } from "@opencode-ai/plugin" -import type { Provider } from "@opencode-ai/sdk/v2" import { Schema } from "effect" import { OAUTH_DUMMY_KEY } from "../auth" import { Process } from "../util/process" @@ -19,58 +15,16 @@ const AzureCliToken = Schema.Struct({ expiresOn: Schema.optional(Schema.NonEmptyString), }) const decodeAzureCliToken = Schema.decodeUnknownPromise(AzureCliToken) -const decodeAzureProfile = Schema.decodeUnknownPromise( - Schema.fromJsonString(Schema.Struct({ subscriptions: Schema.Array(Schema.Unknown) })), -) - -const decodeAzureAccounts = Schema.decodeUnknownPromise( - Schema.Array( - Schema.Struct({ - name: Schema.NonEmptyString, - resourceGroup: Schema.NonEmptyString, - }), - ), -) - -const decodeAzureDeployments = Schema.decodeUnknownPromise( - Schema.Array( - Schema.Struct({ - name: Schema.NonEmptyString, - properties: Schema.Struct({ - model: Schema.Struct({ - name: Schema.NonEmptyString, - }), - provisioningState: Schema.NonEmptyString, - }), - }), - ), -) - type AzureCommand = (args: string[]) => Promise -type AzureAccount = { readonly name: string; readonly resourceGroup: string } export async function AzureAuthPlugin(): Promise { const available = Boolean(which("az")) - // Avoid launching Azure CLI on unrelated commands just because the executable is installed. - const signedIn = available - ? await readFile(join(process.env.AZURE_CONFIG_DIR ?? join(homedir(), ".azure"), "azureProfile.json"), "utf8") - .then((text) => decodeAzureProfile(text.replace(/^\uFEFF/, ""))) - .then((profile) => profile.subscriptions.length > 0) - .catch(() => false) - : false - const accounts = - !process.env.AZURE_RESOURCE_NAME && !process.env.AZURE_RESOURCE_GROUP && signedIn - ? await runAzure(["cognitiveservices", "account", "list", "--output", "json", "--only-show-errors"]) - .then(decodeAzureAccounts) - .catch(() => []) - : [] - return createAzureAuthHooks(runAzure, fetch, accounts, available) + return createAzureAuthHooks(runAzure, fetch, available) } export function createAzureAuthHooks( run: AzureCommand, request: (input: RequestInfo | URL, init?: RequestInit) => Promise, - accounts: readonly AzureAccount[], available: boolean, ): Hooks { const tokens = new Map() @@ -97,46 +51,7 @@ export function createAzureAuthHooks( placeholder: "e.g. my-models", }) } - const oauthPrompts = - accounts.length > 0 && !process.env.AZURE_RESOURCE_NAME - ? [ - { - type: "select" as const, - key: "resourceSelection", - message: "Select Azure resource", - options: [ - ...accounts.map((account) => ({ - label: account.name, - value: account.name, - hint: account.resourceGroup, - })), - { label: "Enter another resource name", value: "__manual__" }, - ], - }, - { - type: "text" as const, - key: "resourceName", - message: "Enter Azure Resource Name", - placeholder: "e.g. my-models", - when: { key: "resourceSelection", op: "eq" as const, value: "__manual__" }, - }, - ] - : prompts - const hooks: Hooks = { - provider: { - id: "azure", - async models(provider, context) { - if (context.auth?.type !== "oauth") return provider.models - // Discovery shells out to the Azure CLI, so skip it when the CLI is missing. - if (!available) return provider.models - const resource = context.auth.accountId - if (!resource) return {} - // This hook runs outside the app's Effect runtime, so logging here would go to the - // console. Fall back to the configured models silently. - return discoverAzureModels(provider.models, resource, run).catch(() => provider.models) - }, - }, auth: { provider: "azure", async loader(getAuth) { @@ -164,17 +79,14 @@ export function createAzureAuthHooks( { type: "oauth", label: "Microsoft Entra ID (Azure CLI)", - prompts: oauthPrompts, + prompts, async authorize(inputs) { return { url: "", instructions: "Sign in with `az login` before continuing.", method: "auto", callback: async () => { - const resourceName = - inputs?.resourceName ?? - (inputs?.resourceSelection === "__manual__" ? undefined : inputs?.resourceSelection) ?? - process.env.AZURE_RESOURCE_NAME + const resourceName = inputs?.resourceName ?? process.env.AZURE_RESOURCE_NAME if (!resourceName) throw new Error("Azure Resource Name is required") await token(AZURE_COGNITIVE_SERVICES_SCOPE) @@ -201,53 +113,6 @@ async function runAzure(args: string[]): Promise { return JSON.parse(result.stdout.toString()) } -async function discoverAzureModels(models: Provider["models"], resourceName: string, run: AzureCommand) { - const resourceGroup = process.env.AZURE_RESOURCE_GROUP - const account = resourceGroup - ? { name: resourceName, resourceGroup } - : ( - await decodeAzureAccounts( - await run(["cognitiveservices", "account", "list", "--output", "json", "--only-show-errors"]), - ) - ).find((account) => account.name.toLowerCase() === resourceName.toLowerCase()) - if (!account) throw new Error(`Azure resource "${resourceName}" was not found in the active subscription`) - - const deployments = await decodeAzureDeployments( - await run([ - "cognitiveservices", - "account", - "deployment", - "list", - "--name", - account.name, - "--resource-group", - account.resourceGroup, - "--output", - "json", - "--only-show-errors", - ]), - ) - const found = new Map() - deployments.forEach((deployment) => { - if (deployment.properties.provisioningState !== "Succeeded") return - const modelID = Object.keys(models).find( - (modelID) => modelID.toLowerCase() === deployment.properties.model.name.toLowerCase(), - ) - if (!modelID) return - const id = found.has(modelID) ? deployment.name : modelID - found.set(id, { - ...models[modelID], - id, - name: id === modelID ? models[modelID].name : `${models[modelID].name} (${deployment.name})`, - api: { - ...models[modelID].api, - id: deployment.name, - }, - }) - }) - return Object.fromEntries(found) -} - function scopeForRequest(input: RequestInfo | URL) { const url = new URL(input instanceof Request ? input.url : input) if (url.hostname.endsWith(".services.ai.azure.com") && !url.pathname.startsWith("/models")) { diff --git a/packages/opencode/test/plugin/azure.test.ts b/packages/opencode/test/plugin/azure.test.ts index 66444965d8e3..2dcdfb0399e9 100644 --- a/packages/opencode/test/plugin/azure.test.ts +++ b/packages/opencode/test/plugin/azure.test.ts @@ -11,17 +11,11 @@ import { Process } from "../../src/util/process" import { which } from "@opencode-ai/core/util/which" const resourceName = process.env.AZURE_RESOURCE_NAME -const resourceGroup = process.env.AZURE_RESOURCE_GROUP -const azureConfig = process.env.AZURE_CONFIG_DIR const originalPath = process.env.PATH afterEach(() => { if (resourceName === undefined) delete process.env.AZURE_RESOURCE_NAME else process.env.AZURE_RESOURCE_NAME = resourceName - if (resourceGroup === undefined) delete process.env.AZURE_RESOURCE_GROUP - else process.env.AZURE_RESOURCE_GROUP = resourceGroup - if (azureConfig === undefined) delete process.env.AZURE_CONFIG_DIR - else process.env.AZURE_CONFIG_DIR = azureConfig if (originalPath === undefined) delete process.env.PATH else process.env.PATH = originalPath }) @@ -64,37 +58,6 @@ function customFetch(options: Record) { } } -function models(...ids: string[]): Provider["models"] { - return Object.fromEntries( - ids.map((id) => [ - id, - { - id, - providerID: "azure", - name: id, - family: "", - api: { id, url: "", npm: "@ai-sdk/azure" }, - status: "active", - headers: {}, - options: {}, - cost: { input: 0, output: 0, cache: { read: 0, write: 0 } }, - limit: { context: 0, output: 0 }, - capabilities: { - temperature: true, - reasoning: false, - attachment: false, - toolcall: true, - input: { text: true, audio: false, image: false, video: false, pdf: false }, - output: { text: true, audio: false, image: false, video: false, pdf: false }, - interleaved: false, - }, - release_date: "", - variants: {}, - }, - ]), - ) -} - function azureShell(scopes: string[]) { return async (args: string[]) => { const scope = args[args.indexOf("--scope") + 1] @@ -106,14 +69,6 @@ function azureShell(scopes: string[]) { } } -function discoveryShell(accounts: unknown, deployments: unknown, commands: string[]) { - return async (args: string[]) => { - const command = ["az", ...args].join(" ") - commands.push(command) - return command.includes("deployment list") ? deployments : accounts - } -} - async function azureCli(dir: string) { const bin = path.join(dir, "azure cli") const calls = path.join(dir, "calls.jsonl") @@ -127,7 +82,7 @@ async function azureCli(dir: string) { fs.appendFileSync(${JSON.stringify(calls)}, JSON.stringify(args) + "\\n") console.log(JSON.stringify(args.includes("get-access-token") ? { accessToken: "test-token", expires_on: Math.floor(Date.now() / 1000) + 3600 } - : args.includes("deployment") ? [] : [{ name: "test-resource", resourceGroup: "test group & value" }])) + : [])) `, ) const executable = path.join(bin, process.platform === "win32" ? "az.cmd" : "az") @@ -162,7 +117,6 @@ describe("plugin.azure", () => { const entry = path.join(tmp.path, "azure.mjs") await Bun.write(entry, bundle.outputs[0]) const cli = await azureCli(tmp.path) - await Bun.write(path.join(tmp.path, "azureProfile.json"), '\uFEFF{"subscriptions":[{}]}') for (const installed of [false, true]) { const result = await Process.run( [ @@ -174,23 +128,21 @@ describe("plugin.azure", () => { import { AzureAuthPlugin } from ${JSON.stringify(pathToFileURL(entry).href)} assert.equal(typeof Bun, "undefined") delete process.env.AZURE_RESOURCE_NAME - delete process.env.AZURE_RESOURCE_GROUP const hooks = await AzureAuthPlugin({ $: undefined }) assert.equal(hooks.auth.provider, "azure") assert.deepEqual(hooks.auth.methods.map((method) => method.type), ${JSON.stringify(installed ? ["api", "oauth"] : ["api"])}) if (${installed}) { const method = hooks.auth.methods.find((method) => method.type === "oauth") - assert.equal(method.prompts[0].type, "select") - const authorization = await method.authorize({ resourceSelection: "test-resource" }) + assert.equal(method.prompts[0].type, "text") + const authorization = await method.authorize({ resourceName: "test-resource" }) const auth = await authorization.callback() assert.equal(auth.type, "success") assert.equal(auth.accountId, "test-resource") - assert.deepEqual(await hooks.provider.models({ models: {} }, { auth: { ...auth, type: "oauth" } }), {}) } `, ], { - env: { PATH: installed ? cli.bin : tmp.path, XDG_DATA_HOME: tmp.path, AZURE_CONFIG_DIR: tmp.path }, + env: { PATH: installed ? cli.bin : tmp.path, XDG_DATA_HOME: tmp.path }, nothrow: true, }, ) @@ -198,53 +150,27 @@ describe("plugin.azure", () => { expect(result.code).toBe(0) } expect(await cli.calls()).toEqual([ - ["cognitiveservices", "account", "list", "--output", "json", "--only-show-errors"], ["account", "get-access-token", "--scope", "https://cognitiveservices.azure.com/.default", "--output", "json"], - ["cognitiveservices", "account", "list", "--output", "json", "--only-show-errors"], - [ - "cognitiveservices", - "account", - "deployment", - "list", - "--name", - "test-resource", - "--resource-group", - "test group & value", - "--output", - "json", - "--only-show-errors", - ], ]) }) - for (const profile of [ - { name: "missing", content: undefined, signedIn: false }, - { name: "logged out", content: '{"subscriptions":[]}', signedIn: false }, - { name: "signed in with BOM", content: '\uFEFF{"subscriptions":[{}]}', signedIn: true }, - ]) { - test(`only lists resources for a cached Azure login (${profile.name})`, async () => { - await using tmp = await tmpdir() - const cli = await azureCli(tmp.path) - process.env.PATH = cli.bin - process.env.AZURE_CONFIG_DIR = path.join(tmp.path, "azure-cli") - if (profile.content) - await Bun.write(path.join(process.env.AZURE_CONFIG_DIR, "azureProfile.json"), profile.content) - delete process.env.AZURE_RESOURCE_NAME - delete process.env.AZURE_RESOURCE_GROUP - const hooks = await AzureAuthPlugin() + test("does not invoke Azure CLI during initialization", async () => { + await using tmp = await tmpdir() + const cli = await azureCli(tmp.path) + process.env.PATH = cli.bin + delete process.env.AZURE_RESOURCE_NAME + + const hooks = await AzureAuthPlugin() - expect(await cli.calls()).toHaveLength(profile.signedIn ? 1 : 0) - expect(hooks.auth?.methods.some((method) => method.type === "oauth")).toBe(true) - if (profile.signedIn) expect(oauthMethod(hooks).prompts?.[0].type).toBe("select") - }) - } + expect(await cli.calls()).toEqual([]) + expect(oauthMethod(hooks).prompts?.[0].type).toBe("text") + }) test("keeps the existing API-key method and adds Entra ID", () => { delete process.env.AZURE_RESOURCE_NAME - const hooks = createAzureAuthHooks(azureShell([]), fetch, [], true) + const hooks = createAzureAuthHooks(azureShell([]), fetch, true) expect(hooks.auth?.provider).toBe("azure") - expect(hooks.provider?.id).toBe("azure") expect(hooks.auth?.methods.map((method) => [method.type, method.label])).toEqual([ ["api", "API key"], ["oauth", "Microsoft Entra ID (Azure CLI)"], @@ -265,76 +191,14 @@ describe("plugin.azure", () => { }) test("hides Azure CLI authentication when the Azure CLI is not installed", () => { - const hooks = createAzureAuthHooks(azureShell([]), fetch, [], false) + const hooks = createAzureAuthHooks(azureShell([]), fetch, false) expect(hooks.auth?.methods.map((method) => method.type)).toEqual(["api"]) }) - test("lists Azure CLI resources and allows entering another resource", () => { - delete process.env.AZURE_RESOURCE_NAME - const hooks = createAzureAuthHooks( - azureShell([]), - fetch, - [ - { name: "first-resource", resourceGroup: "first-group" }, - { name: "second-resource", resourceGroup: "second-group" }, - ], - true, - ) - - expect(oauthMethod(hooks).prompts).toEqual([ - { - type: "select", - key: "resourceSelection", - message: "Select Azure resource", - options: [ - { label: "first-resource", value: "first-resource", hint: "first-group" }, - { label: "second-resource", value: "second-resource", hint: "second-group" }, - { label: "Enter another resource name", value: "__manual__" }, - ], - }, - { - type: "text", - key: "resourceName", - message: "Enter Azure Resource Name", - placeholder: "e.g. my-models", - when: { key: "resourceSelection", op: "eq", value: "__manual__" }, - }, - ]) - }) - - test("uses the selected Azure CLI resource", async () => { - const hooks = createAzureAuthHooks( - azureShell([]), - fetch, - [{ name: "selected-resource", resourceGroup: "selected-group" }], - true, - ) - const authorization = await oauthMethod(hooks).authorize({ resourceSelection: "selected-resource" }) - if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") - - expect(await authorization.callback()).toMatchObject({ type: "success", accountId: "selected-resource" }) - }) - - test("uses a manually entered Azure resource that was not listed", async () => { - const hooks = createAzureAuthHooks( - azureShell([]), - fetch, - [{ name: "listed-resource", resourceGroup: "group" }], - true, - ) - const authorization = await oauthMethod(hooks).authorize({ - resourceSelection: "__manual__", - resourceName: "unlisted-resource", - }) - if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") - - expect(await authorization.callback()).toMatchObject({ type: "success", accountId: "unlisted-resource" }) - }) - test("checks Azure CLI and stores the resource name", async () => { const scopes: string[] = [] - const hooks = createAzureAuthHooks(azureShell(scopes), fetch, [], true) + const hooks = createAzureAuthHooks(azureShell(scopes), fetch, true) const authorization = await oauthMethod(hooks).authorize({ resourceName: "test-resource" }) if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") @@ -354,7 +218,6 @@ describe("plugin.azure", () => { expiresOn: new Date(Date.now() + 60 * 60 * 1000).toISOString(), }), fetch, - [], true, ) const authorization = await oauthMethod(hooks).authorize({ resourceName: "test-resource" }) @@ -364,158 +227,18 @@ describe("plugin.azure", () => { }) test("rejects Azure CLI tokens without a usable expiration", async () => { - const hooks = createAzureAuthHooks(async () => ({ accessToken: "invalid-token" }), fetch, [], true) + const hooks = createAzureAuthHooks(async () => ({ accessToken: "invalid-token" }), fetch, true) const authorization = await oauthMethod(hooks).authorize({ resourceName: "test-resource" }) if (authorization.method !== "auto") throw new Error("Unexpected Azure authorization method") await expect(authorization.callback()).rejects.toThrow("Azure CLI returned an invalid token expiration") }) - test("discovers deployed models through Azure CLI", async () => { - delete process.env.AZURE_RESOURCE_GROUP - const commands: string[] = [] - const hooks = createAzureAuthHooks( - discoveryShell( - [{ name: "test-resource", resourceGroup: "test-group" }], - [ - { - name: "gpt-production", - properties: { model: { name: "gpt-5-mini" }, provisioningState: "Succeeded" }, - }, - { - name: "DeepSeek-V4-Flash", - properties: { model: { name: "DeepSeek-V4-Flash" }, provisioningState: "Succeeded" }, - }, - { - name: "phi-production", - properties: { model: { name: "Phi-4-mini-instruct" }, provisioningState: "Succeeded" }, - }, - { - name: "gpt-5-nano", - properties: { model: { name: "gpt-5-nano" }, provisioningState: "Creating" }, - }, - ], - commands, - ), - fetch, - [], - true, - ) - const list = hooks.provider?.models - if (!list) throw new Error("Azure provider model hook is missing") - - const result = await list( - { - ...provider, - models: models("gpt-5-mini", "deepseek-v4-flash", "phi-4-mini", "phi-4-mini-instruct", "gpt-5-nano"), - }, - { auth: oauth }, - ) - - expect(Object.keys(result)).toEqual(["gpt-5-mini", "deepseek-v4-flash", "phi-4-mini-instruct"]) - expect(result["gpt-5-mini"].api.id).toBe("gpt-production") - expect(result["deepseek-v4-flash"].api.id).toBe("DeepSeek-V4-Flash") - expect(result["phi-4-mini-instruct"].api.id).toBe("phi-production") - expect(commands).toEqual([ - "az cognitiveservices account list --output json --only-show-errors", - "az cognitiveservices account deployment list --name test-resource --resource-group test-group --output json --only-show-errors", - ]) - }) - - test("discovers models directly when the resource group is configured", async () => { - process.env.AZURE_RESOURCE_GROUP = "restricted-group" - const commands: string[] = [] - const hooks = createAzureAuthHooks( - discoveryShell( - [], - [{ name: "gpt-production", properties: { model: { name: "gpt-5-mini" }, provisioningState: "Succeeded" } }], - commands, - ), - fetch, - [], - true, - ) - const list = hooks.provider?.models - if (!list) throw new Error("Azure provider model hook is missing") - - const result = await list({ ...provider, models: models("gpt-5-mini") }, { auth: oauth }) - - expect(result["gpt-5-mini"].api.id).toBe("gpt-production") - expect(commands).toEqual([ - "az cognitiveservices account deployment list --name test-resource --resource-group restricted-group --output json --only-show-errors", - ]) - }) - - test("preserves multiple deployments of the same model", async () => { - delete process.env.AZURE_RESOURCE_GROUP - const hooks = createAzureAuthHooks( - discoveryShell( - [{ name: "test-resource", resourceGroup: "test-group" }], - [ - { name: "gpt-production", properties: { model: { name: "gpt-5-mini" }, provisioningState: "Succeeded" } }, - { name: "gpt-staging", properties: { model: { name: "gpt-5-mini" }, provisioningState: "Succeeded" } }, - ], - [], - ), - fetch, - [], - true, - ) - const list = hooks.provider?.models - if (!list) throw new Error("Azure provider model hook is missing") - - const result = await list({ ...provider, models: models("gpt-5-mini") }, { auth: oauth }) - - expect(Object.keys(result)).toEqual(["gpt-5-mini", "gpt-staging"]) - expect(result["gpt-5-mini"].api.id).toBe("gpt-production") - expect(result["gpt-staging"].api.id).toBe("gpt-staging") - expect(result["gpt-staging"].name).toBe("gpt-5-mini (gpt-staging)") - }) - - test("keeps configured models available when Azure discovery fails", async () => { - const hooks = createAzureAuthHooks( - async () => { - throw new Error("Azure CLI failed") - }, - fetch, - [], - true, - ) - const list = hooks.provider?.models - if (!list) throw new Error("Azure provider model hook is missing") - - const catalog = models("gpt-5-mini") - expect(await list({ ...provider, models: catalog }, { auth: oauth })).toBe(catalog) - }) - - test("skips model discovery when the Azure CLI is unavailable", async () => { - const calls: string[][] = [] - const hooks = createAzureAuthHooks( - async (args) => { - calls.push(args) - throw new Error("spawn az ENOENT") - }, - fetch, - [], - false, - ) - const list = hooks.provider?.models - if (!list) throw new Error("Azure provider model hook is missing") - - const catalog = models("gpt-5-mini") - expect(await list({ ...provider, models: catalog }, { auth: oauth })).toBe(catalog) - expect(calls).toEqual([]) - }) - test("does not change API-key loading", async () => { const scopes: string[] = [] - const hooks = createAzureAuthHooks(azureShell(scopes), fetch, [], true) - const catalog = models("gpt-5-mini") - const list = hooks.provider?.models - if (!list) throw new Error("Azure provider model hook is missing") + const hooks = createAzureAuthHooks(azureShell(scopes), fetch, true) expect(await loader(hooks)(async () => ({ type: "api", key: "test-key" }), provider)).toEqual({}) - expect(await list({ ...provider, models: catalog }, { auth: { type: "api", key: "test-key" } })).toBe(catalog) expect(scopes).toEqual([]) }) @@ -528,7 +251,6 @@ describe("plugin.azure", () => { requests.push(new Headers(init?.headers)) return new Response(null, { status: 200 }) }, - [], true, ) const options = await loader(hooks)(async () => oauth, provider) diff --git a/packages/web/src/content/docs/providers.mdx b/packages/web/src/content/docs/providers.mdx index 877f91c4e245..a1d01079f160 100644 --- a/packages/web/src/content/docs/providers.mdx +++ b/packages/web/src/content/docs/providers.mdx @@ -459,7 +459,7 @@ If you encounter "I'm sorry, but I cannot assist with that request" errors, try #### Microsoft Entra ID (Azure CLI) -You can use your Azure CLI session instead of an API key. [Install the Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli), run `az login`, then run `/connect`, select **Azure**, and choose **Microsoft Entra ID (Azure CLI)**. OpenCode lists the Resources visible to your Azure CLI session and their Resource groups. Select a Resource, or choose **Enter another resource name** to enter one manually. If resource listing is unavailable, OpenCode asks for the name directly. Use `az login --tenant TENANT_ID` if the Resource belongs to a different tenant. +You can use your Azure CLI session instead of an API key. [Install the Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli), run `az login`, then run `/connect`, select **Azure**, and choose **Microsoft Entra ID (Azure CLI)**. Enter the Azure Resource name when prompted. Use `az login --tenant TENANT_ID` if the Resource belongs to a different tenant. Find the Resource name by opening your Azure OpenAI or Foundry Resource in the [Azure portal](https://portal.azure.com/) or [Microsoft Foundry](https://ai.azure.com/). It is also the first part of the endpoint: `my-models` in `https://my-models.openai.azure.com/` or `https://my-models.services.ai.azure.com/`. If your identity can list Resources, you can also find their names and Resource groups with: @@ -469,9 +469,7 @@ az cognitiveservices account list \ --output table ``` -OpenCode finds the Resource group and discovers its deployed models from the active Azure CLI subscription. Run `az account set --subscription NAME_OR_ID` first if the Resource is in a different subscription. Set `AZURE_RESOURCE_GROUP` to skip listing the subscription and query a known Resource directly. - -Model discovery requires Azure control-plane permissions, which are separate from inference permissions. If your identity cannot list deployments, OpenCode keeps the Azure model catalog available instead. Select a model whose name matches your deployment, or configure its deployment name explicitly: +OpenCode does not query Azure management APIs or discover deployments. Select a model whose catalog name matches your deployment, or configure its deployment name explicitly: ```json title="opencode.json" { From 1542195217be56f29f73cb10a852499f6ef2e688 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Tue, 1 Sep 2026 14:57:55 -0500 Subject: [PATCH 096/185] fix(opencode): allow none reasoning effort in Bedrock SDK (#46671) --- .../opencode/test/provider/transform.test.ts | 38 +++++++++++++++++- .../@ai-sdk%2Famazon-bedrock@4.0.166.patch | 40 ++++++++++++++----- 2 files changed, 67 insertions(+), 11 deletions(-) diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index ed85f6920acf..4d346d8871a2 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -6,7 +6,7 @@ import { ProviderV2 } from "@opencode-ai/core/provider" import { ModelV2 } from "@opencode-ai/core/model" import { ModelsDev } from "@opencode-ai/core/models-dev" import { generateText, jsonSchema, type ModelMessage } from "ai" -import { createAmazonBedrock } from "@ai-sdk/amazon-bedrock" +import { createAmazonBedrock, type AmazonBedrockLanguageModelOptions } from "@ai-sdk/amazon-bedrock" import { createAnthropic } from "@ai-sdk/anthropic" import { createVertexAnthropic } from "@ai-sdk/google-vertex/anthropic" @@ -3717,6 +3717,42 @@ describe("ProviderTransform.reasoningVariants", () => { ) }) + test.each(["luna", "sol", "terra"])("serializes Bedrock GPT-5.6 %s none effort", async (name) => { + const item = target("@ai-sdk/amazon-bedrock", `global.openai.gpt-5.6-${name}`) + const variants = ProviderTransform.reasoningVariants( + model([{ type: "effort", values: ["none", "low", "medium", "high", "xhigh", "max"] }]), + item, + ) + for (const effort of ["low", "medium", "high", "xhigh", "max"]) { + expect(variants?.[effort]).toEqual({ reasoningConfig: { type: "enabled", maxReasoningEffort: effort } }) + } + expect(variants?.none).toEqual({ + reasoningConfig: { type: "enabled", maxReasoningEffort: "none" }, + } satisfies AmazonBedrockLanguageModelOptions) + const sent: unknown[] = [] + const provider = createAmazonBedrock({ + apiKey: "test-key", + region: "us-east-1", + fetch: Object.assign( + async (...args: Parameters) => { + sent.push(JSON.parse(String(args[1]?.body))) + return Response.json({ + output: { message: { role: "assistant", content: [{ text: "ok" }] } }, + stopReason: "end_turn", + usage: { inputTokens: 1, outputTokens: 1, totalTokens: 2 }, + }) + }, + { preconnect: () => undefined }, + ), + }) + await generateText({ + model: provider(item.api.id), + prompt: "hi", + providerOptions: ProviderTransform.providerOptions(item, variants?.none ?? {}), + }) + expect(sent).toEqual([expect.objectContaining({ additionalModelRequestFields: { reasoning: { effort: "none" } } })]) + }) + test("combines effort with extended thinking for Claude Opus 4.5", () => { expect( ProviderTransform.reasoningVariants( diff --git a/patches/@ai-sdk%2Famazon-bedrock@4.0.166.patch b/patches/@ai-sdk%2Famazon-bedrock@4.0.166.patch index 96fd15106e46..388b306daaba 100644 --- a/patches/@ai-sdk%2Famazon-bedrock@4.0.166.patch +++ b/patches/@ai-sdk%2Famazon-bedrock@4.0.166.patch @@ -1,8 +1,16 @@ diff --git a/dist/index.d.mts b/dist/index.d.mts -index d194ae227fd1223ba44c8c5157b1bb72b1bab273..2e046db0a365c27659ffcec08782c7c26845c1fa 100644 +index d194ae227fd1223ba44c8c5157b1bb72b1bab273..db7fdb1b6f4e617baa40539ccef718735d2e9e81 100644 --- a/dist/index.d.mts +++ b/dist/index.d.mts -@@ -61,6 +61,12 @@ declare const amazonBedrockLanguageModelOptions: z.ZodObject<{ +@@ -51,6 +51,7 @@ declare const amazonBedrockLanguageModelOptions: z.ZodObject<{ + type: z.ZodOptional, z.ZodLiteral<"disabled">, z.ZodLiteral<"adaptive">]>>; + budgetTokens: z.ZodOptional; + maxReasoningEffort: z.ZodOptional>; @@ -16,10 +24,18 @@ index d194ae227fd1223ba44c8c5157b1bb72b1bab273..2e046db0a365c27659ffcec08782c7c2 anthropicBeta: z.ZodOptional>; serviceTier: z.ZodOptional, z.ZodLiteral<"disabled">, z.ZodLiteral<"adaptive">]>>; + budgetTokens: z.ZodOptional; + maxReasoningEffort: z.ZodOptional>; @@ -33,14 +49,16 @@ index d194ae227fd1223ba44c8c5157b1bb72b1bab273..2e046db0a365c27659ffcec08782c7c2 anthropicBeta: z.ZodOptional>; serviceTier: z.ZodOptional Date: Tue, 1 Sep 2026 14:59:45 -0500 Subject: [PATCH 097/185] test(opencode): guard patched dependency versions (#46673) --- package.json | 1 - .../test/patched-dependencies.test.ts | 29 +++++++++++++++++ patches/@ff-labs%2Ffff-bun@0.9.3.patch | 31 ------------------- 3 files changed, 29 insertions(+), 32 deletions(-) create mode 100644 packages/opencode/test/patched-dependencies.test.ts delete mode 100644 patches/@ff-labs%2Ffff-bun@0.9.3.patch diff --git a/package.json b/package.json index dc4a813c5050..8d58ace1b453 100644 --- a/package.json +++ b/package.json @@ -146,7 +146,6 @@ }, "patchedDependencies": { "@dnd-kit/dom@0.5.0": "patches/@dnd-kit%2Fdom@0.5.0.patch", - "@ff-labs/fff-bun@0.9.3": "patches/@ff-labs%2Ffff-bun@0.9.3.patch", "@npmcli/agent@4.0.2": "patches/@npmcli%2Fagent@4.0.2.patch", "@silvia-odwyer/photon-node@0.3.4": "patches/@silvia-odwyer%2Fphoton-node@0.3.4.patch", "@standard-community/standard-openapi@0.2.9": "patches/@standard-community%2Fstandard-openapi@0.2.9.patch", diff --git a/packages/opencode/test/patched-dependencies.test.ts b/packages/opencode/test/patched-dependencies.test.ts new file mode 100644 index 000000000000..5405401bbe64 --- /dev/null +++ b/packages/opencode/test/patched-dependencies.test.ts @@ -0,0 +1,29 @@ +import { describe, expect, test } from "bun:test" +import path from "path" + +// Bun applies a patch only to the exact `name@version` named in +// `patchedDependencies`. Bumping the dependency without regenerating the patch +// does not fail `bun install`; the patch just stops applying and the runtime +// silently loses whatever the patch fixed. This pins the two together for the +// packages that ship in the CLI. +const root = path.resolve(import.meta.dir, "../../..") +const workspaces = ["packages/opencode", "packages/core"] +const patched = (await Bun.file(path.join(root, "package.json")).json()).patchedDependencies as Record + +describe("patched dependencies", () => { + for (const key of Object.keys(patched)) { + const at = key.lastIndexOf("@") + const name = key.slice(0, at) + const version = key.slice(at + 1) + + test(`${key} matches the installed version`, async () => { + expect(await Bun.file(path.join(root, patched[key])).exists()).toBe(true) + for (const workspace of workspaces) { + const file = Bun.file(path.join(root, workspace, "node_modules", name, "package.json")) + if (!(await file.exists())) continue + const installed = (await file.json()).version as string + expect(installed, `${workspace} resolves ${name}@${installed}; patch is for ${version}`).toBe(version) + } + }) + } +}) diff --git a/patches/@ff-labs%2Ffff-bun@0.9.3.patch b/patches/@ff-labs%2Ffff-bun@0.9.3.patch deleted file mode 100644 index 23a7dd54fb15..000000000000 --- a/patches/@ff-labs%2Ffff-bun@0.9.3.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff --git a/src/download.ts b/src/download.ts -index 3454256..6dca25a 100644 ---- a/src/download.ts -+++ b/src/download.ts -@@ -7,7 +7,7 @@ - */ - -+declare const FFF_LIBC: "gnu" | "musl"; - import { existsSync } from "node:fs"; --import { createRequire } from "node:module"; - import { dirname, join } from "node:path"; - import { fileURLToPath } from "node:url"; - import { getLibFilename, getNpmPackageName } from "./platform"; -@@ -54,14 +54,10 @@ export function binaryExists(): boolean { - * in the same directory. - */ - function resolveFromNpmPackage(): string | null { -- const packageName = getNpmPackageName(); -- - try { -- // Use createRequire to resolve the platform package's location -- const require = createRequire(join(getPackageDir(), "package.json")); -- const packageJsonPath = require.resolve(`${packageName}/package.json`); -- const packageDir = dirname(packageJsonPath); -- const binaryPath = join(packageDir, getLibFilename()); -+ const binaryPath = require( -+ `@ff-labs/fff-bin-${process.platform === "linux" ? `linux-${process.arch}-${typeof FFF_LIBC === "string" ? FFF_LIBC : getNpmPackageName().endsWith("musl") ? "musl" : "gnu"}` : `${process.platform}-${process.arch}`}/${process.platform === "win32" ? "fff_c.dll" : process.platform === "darwin" ? "libfff_c.dylib" : "libfff_c.so"}`, -+ ); - - if (existsSync(binaryPath)) { - return binaryPath; From 765ae641d765fa21b2a68e2ed9fd23e8247cdb85 Mon Sep 17 00:00:00 2001 From: "Roscoe A. Bartlett" Date: Tue, 1 Sep 2026 16:17:03 -0400 Subject: [PATCH 098/185] fix(core): Fix for incorrect time.start reset in tool call logging (#32574) (#32596) --- packages/opencode/src/session/tools.ts | 2 +- packages/opencode/test/session/tools.test.ts | 163 +++++++++++++++++++ 2 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 packages/opencode/test/session/tools.test.ts diff --git a/packages/opencode/src/session/tools.ts b/packages/opencode/src/session/tools.ts index 0f401c7562fa..99f7aec4fdfd 100644 --- a/packages/opencode/src/session/tools.ts +++ b/packages/opencode/src/session/tools.ts @@ -74,7 +74,7 @@ export const resolve = Effect.fn("SessionTools.resolve")(function* (input: { metadata: val.metadata, status: "running", input: args, - time: { start: Date.now() }, + time: match.state.status === "running" ? match.state.time : { start: Date.now() }, }, } }), diff --git a/packages/opencode/test/session/tools.test.ts b/packages/opencode/test/session/tools.test.ts new file mode 100644 index 000000000000..53d28de16966 --- /dev/null +++ b/packages/opencode/test/session/tools.test.ts @@ -0,0 +1,163 @@ +import { expect } from "bun:test" +import { ModelV2 } from "@opencode-ai/core/model" +import { ProviderV2 } from "@opencode-ai/core/provider" +import { SessionV1 } from "@opencode-ai/core/v1/session" +import { Agent } from "@/agent/agent" +import { MCP } from "@/mcp" +import { Permission } from "@/permission" +import { Provider } from "@/provider/provider" +import { Session } from "@/session/session" +import { MessageID, PartID, SessionID } from "@/session/schema" +import { SessionProcessor } from "@/session/processor" +import { SessionTools } from "@/session/tools" +import { Tool } from "@/tool/tool" +import { ToolRegistry } from "@/tool/registry" +import { Truncate } from "@/tool/truncate" +import { Plugin } from "@/plugin" +import { Effect, Layer, Schema } from "effect" +import { testEffect } from "../lib/effect" + +const callID = "call-test" +const sessionID = SessionID.make("ses_test") +const messageID = MessageID.ascending() +const partID = PartID.ascending() + +const agent: Agent.Info = { + name: "build", + mode: "primary", + options: {}, + permission: [{ permission: "*", pattern: "*", action: "allow" }], +} + +const model = { + providerID: ProviderV2.ID.make("test"), + api: { id: "test-model" }, +} as Provider.Model + +function fakeMcp() { + return MCP.Service.of({ + tools: () => Effect.succeed({}), + } as Partial as MCP.Interface) +} + +const fakePlugin = Plugin.Service.of({ + init: () => Effect.void, + list: () => Effect.succeed([]), + trigger: (_name, _input, output) => Effect.succeed(output), +} satisfies Plugin.Interface) + +const fakePermission = Permission.Service.of({ + ask: () => Effect.void, + reply: () => Effect.void, + list: () => Effect.succeed([]), +} satisfies Permission.Interface) + +const fakeTruncate = Truncate.Service.of({ + cleanup: () => Effect.void, + write: () => Effect.succeed("output.txt"), + output: (text: string) => Effect.succeed({ content: text, truncated: false }), + limits: () => Effect.succeed({ maxLines: 2000, maxBytes: 50 * 1024 }), +} satisfies Truncate.Interface) + +const layer = Layer.mergeAll( + Layer.succeed(Plugin.Service, fakePlugin), + Layer.succeed(Permission.Service, fakePermission), + Layer.succeed(MCP.Service, fakeMcp()), + Layer.succeed(Truncate.Service, fakeTruncate), + Layer.succeed( + ToolRegistry.Service, + ToolRegistry.Service.of({ + ids: () => Effect.succeed(["timing"]), + all: () => Effect.succeed([]), + named: () => Effect.die("unused"), + tools: () => + Effect.succeed([ + { + id: "timing", + description: "updates metadata more than once", + parameters: Schema.Struct({}), + jsonSchema: { type: "object", properties: {} }, + execute: (_args, ctx) => + Effect.gen(function* () { + yield* ctx.metadata({ metadata: { output: "first" } }) + yield* ctx.metadata({ metadata: { output: "second" } }) + return { title: "timing", metadata: {}, output: "done" } + }), + } satisfies Tool.Def, + ]), + }), + ), +) + +const it = testEffect(layer) + +it.effect("preserves running tool start time across metadata updates", () => + Effect.gen(function* () { + const state: SessionV1.ToolPart = { + id: partID, + sessionID, + messageID, + type: "tool", + tool: "timing", + callID, + state: { + status: "running", + input: {}, + time: { start: 100 }, + }, + } + const updates: number[] = [] + const processor = { + message: { + id: messageID, + sessionID, + role: "assistant", + parentID: MessageID.ascending(), + agent: "build", + mode: "build", + path: { cwd: "/tmp", root: "/tmp" }, + cost: 0, + tokens: { input: 0, output: 0, reasoning: 0, cache: { read: 0, write: 0 } }, + modelID: ModelV2.ID.make("test-model"), + providerID: ProviderV2.ID.make("test"), + time: { created: 1 }, + } satisfies SessionV1.Assistant, + updateToolCall: (_toolCallID, update) => + Effect.sync(() => { + const next = update(state) + state.state = next.state + if (state.state.status === "running") updates.push(state.state.time.start) + return state + }), + completeToolCall: () => Effect.void, + } satisfies Pick + + const tools = yield* SessionTools.resolve({ + agent, + model, + session: { id: sessionID, permission: [] } as Session.Info, + processor, + bypassAgentCheck: false, + messages: [], + promptOps: {} as never, + }) + const execute = tools.timing.execute + if (!execute) throw new Error("timing tool is missing execute") + + yield* Effect.promise(() => + execute( + {}, + { + toolCallId: callID, + abortSignal: new AbortController().signal, + }, + ), + ) + + expect(updates).toEqual([100, 100]) + expect(state.state.status).toBe("running") + if (state.state.status === "running") { + expect(state.state.time.start).toBe(100) + } + }), +) From c10d6767c952615bd465373718087394cca82b92 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Tue, 1 Sep 2026 20:18:42 +0000 Subject: [PATCH 099/185] chore: update nix node_modules hashes --- nix/hashes.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nix/hashes.json b/nix/hashes.json index 5f39124feac6..94526422c6d4 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,8 +1,8 @@ { "nodeModules": { - "x86_64-linux": "sha256-SUPMcgdvUuLkQL3LKVTrQ+WshrJzDMJLpLIfHXWihmU=", - "aarch64-linux": "sha256-d72i9zY0wEB2vpndBxq6SXHktYquFUzKwxl5mXiJRwI=", - "aarch64-darwin": "sha256-zEJ9/hygXRBAH2GeBFdXtwQnd12K/0bBoptmLb6r7cU=", - "x86_64-darwin": "sha256-Wl9sB67IGuo3vpBCh7Ihsr9578NbqybERRIWTJkX1rw=" + "x86_64-linux": "sha256-xxfesqajP1GI/XdzCIM8hHHOdhWBrjfKkQxDpC2qRKE=", + "aarch64-linux": "sha256-T9HxvCNwt7St6VQsEqLMCSVu7jgTnQjdo824LRzi+t4=", + "aarch64-darwin": "sha256-vo0ALiy0tGnp8YVqNwGS8lsXKUmvkRiKPUacbQhZMHs=", + "x86_64-darwin": "sha256-cToGEEFCm4HX4xLfVNYEwugoUhCKVXAbH+uSI2cVo4w=" } } From 86387e90b28f76cde17674406fc99e19c063d5e1 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:24:30 -0500 Subject: [PATCH 100/185] test(opencode): fix session tools test typecheck and runtime (#46677) --- packages/opencode/test/session/tools.test.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/opencode/test/session/tools.test.ts b/packages/opencode/test/session/tools.test.ts index 53d28de16966..f365f684e6c3 100644 --- a/packages/opencode/test/session/tools.test.ts +++ b/packages/opencode/test/session/tools.test.ts @@ -14,6 +14,7 @@ import { Tool } from "@/tool/tool" import { ToolRegistry } from "@/tool/registry" import { Truncate } from "@/tool/truncate" import { Plugin } from "@/plugin" +import { RuntimeFlags } from "@/effect/runtime-flags" import { Effect, Layer, Schema } from "effect" import { testEffect } from "../lib/effect" @@ -37,6 +38,7 @@ const model = { function fakeMcp() { return MCP.Service.of({ tools: () => Effect.succeed({}), + clients: () => Effect.succeed({}), } as Partial as MCP.Interface) } @@ -64,6 +66,7 @@ const layer = Layer.mergeAll( Layer.succeed(Permission.Service, fakePermission), Layer.succeed(MCP.Service, fakeMcp()), Layer.succeed(Truncate.Service, fakeTruncate), + RuntimeFlags.layer(), Layer.succeed( ToolRegistry.Service, ToolRegistry.Service.of({ @@ -135,7 +138,7 @@ it.effect("preserves running tool start time across metadata updates", () => const tools = yield* SessionTools.resolve({ agent, model, - session: { id: sessionID, permission: [] } as Session.Info, + session: { id: sessionID, permission: [] } as unknown as Session.Info, processor, bypassAgentCheck: false, messages: [], @@ -150,6 +153,7 @@ it.effect("preserves running tool start time across metadata updates", () => { toolCallId: callID, abortSignal: new AbortController().signal, + messages: [], }, ), ) From 8100c68b507b53aac6b891edbc3040a6011d8969 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Tue, 1 Sep 2026 16:00:24 -0500 Subject: [PATCH 101/185] fix(app): bump happy-dom to fix GC-dependent MutationObserver flake (#46675) --- bun.lock | 8 +++++--- packages/app/package.json | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/bun.lock b/bun.lock index 3d8037e6fc8a..9249b5cc0da1 100644 --- a/bun.lock +++ b/bun.lock @@ -78,7 +78,7 @@ "tailwindcss": "catalog:", }, "devDependencies": { - "@happy-dom/global-registrator": "20.0.11", + "@happy-dom/global-registrator": "20.12.0", "@playwright/test": "catalog:", "@sentry/vite-plugin": "catalog:", "@tailwindcss/vite": "catalog:", @@ -1661,7 +1661,7 @@ "@graphql-typed-document-node/core": ["@graphql-typed-document-node/core@3.2.0", "", { "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ=="], - "@happy-dom/global-registrator": ["@happy-dom/global-registrator@20.0.11", "", { "dependencies": { "@types/node": "^20.0.0", "happy-dom": "^20.0.11" } }, "sha512-GqNqiShBT/lzkHTMC/slKBrvN0DsD4Di8ssBk4aDaVgEn+2WMzE6DXxq701ndSXj7/0cJ8mNT71pM7Bnrr6JRw=="], + "@happy-dom/global-registrator": ["@happy-dom/global-registrator@20.12.0", "", { "dependencies": { "@types/node": ">=20.0.0", "happy-dom": "^20.12.0" } }, "sha512-BUE55Rew3oMwBzwCwmUnV+Oxk51V3xolM39Ts6kGiBXNELjujiESwk9qc99JRr6cVrj3OTd9MJ5zQ2fpn+jy6g=="], "@hey-api/codegen-core": ["@hey-api/codegen-core@0.5.5", "", { "dependencies": { "@hey-api/types": "0.1.2", "ansi-colors": "4.1.3", "c12": "3.3.3", "color-support": "1.1.3" }, "peerDependencies": { "typescript": ">=5.5.3" } }, "sha512-f2ZHucnA2wBGAY8ipB4wn/mrEYW+WUxU2huJmUvfDO6AE2vfILSHeF3wCO39Pz4wUYPoAWZByaauftLrOfC12Q=="], @@ -3239,6 +3239,8 @@ "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + "buffer-image-size": ["buffer-image-size@0.6.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ=="], + "buffers": ["buffers@0.1.1", "", {}, "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ=="], "builder-util": ["builder-util@26.15.0", "", { "dependencies": { "@types/debug": "^4.1.6", "builder-util-runtime": "9.7.0", "chalk": "^4.1.2", "cross-spawn": "^7.0.6", "debug": "^4.3.4", "fs-extra": "^10.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", "js-yaml": "^4.1.0", "sanitize-filename": "^1.6.3", "source-map-support": "^0.5.19", "stat-mode": "^1.0.0", "temp-file": "^3.4.0", "tiny-async-pool": "1.3.0" } }, "sha512-dUx+HxVbiNsNQ4mGe1PyoC/tBmsHwBNDLdBuqWCj+rhHFE9lHgrXiGYKAM1uNlznhAaUSyMlms84VeSSr3gOBA=="], @@ -3877,7 +3879,7 @@ "h3": ["h3@2.0.1-rc.4", "", { "dependencies": { "rou3": "^0.7.8", "srvx": "^0.9.1" }, "peerDependencies": { "crossws": "^0.4.1" }, "optionalPeers": ["crossws"] }, "sha512-vZq8pEUp6THsXKXrUXX44eOqfChic2wVQ1GlSzQCBr7DeFBkfIZAo2WyNND4GSv54TAa0E4LYIK73WSPdgKUgw=="], - "happy-dom": ["happy-dom@20.9.0", "", { "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", "@types/ws": "^8.18.1", "entities": "^7.0.1", "whatwg-mimetype": "^3.0.0", "ws": "^8.18.3" } }, "sha512-GZZ9mKe8r646NUAf/zemnGbjYh4Bt8/MqASJY+pSm5ZDtc3YQox+4gsLI7yi1hba6o+eCsGxpHn5+iEVn31/FQ=="], + "happy-dom": ["happy-dom@20.12.0", "", { "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", "@types/ws": "^8.18.1", "buffer-image-size": "^0.6.4", "entities": "^7.0.1", "whatwg-mimetype": "^3.0.0", "ws": "^8.21.0" } }, "sha512-7uMYJu2SEwwL8vVcKp0C0lnt6d2LSGGe+T+oY79PiCJNNSgFpbxW8n5KuzpDQvrU4mt+fYiK1+Jy7Z2v39YR6g=="], "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], diff --git a/packages/app/package.json b/packages/app/package.json index e0a1d076e73d..aa7cf38ce4eb 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -32,7 +32,7 @@ }, "license": "MIT", "devDependencies": { - "@happy-dom/global-registrator": "20.0.11", + "@happy-dom/global-registrator": "20.12.0", "@playwright/test": "catalog:", "@sentry/vite-plugin": "catalog:", "@tailwindcss/vite": "catalog:", From 8ff796f13373394499378697002327e222dcc8fa Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Tue, 1 Sep 2026 21:18:22 +0000 Subject: [PATCH 102/185] chore: update nix node_modules hashes --- nix/hashes.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nix/hashes.json b/nix/hashes.json index 94526422c6d4..7b7a6081a5d5 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,8 +1,8 @@ { "nodeModules": { - "x86_64-linux": "sha256-xxfesqajP1GI/XdzCIM8hHHOdhWBrjfKkQxDpC2qRKE=", - "aarch64-linux": "sha256-T9HxvCNwt7St6VQsEqLMCSVu7jgTnQjdo824LRzi+t4=", - "aarch64-darwin": "sha256-vo0ALiy0tGnp8YVqNwGS8lsXKUmvkRiKPUacbQhZMHs=", - "x86_64-darwin": "sha256-cToGEEFCm4HX4xLfVNYEwugoUhCKVXAbH+uSI2cVo4w=" + "x86_64-linux": "sha256-SVvFPO+KuS67+6XGPhaB3cIuc3XUyM0XVccy5v8afS4=", + "aarch64-linux": "sha256-HJRrSu5u0TEg214d2RAbM1C+nmrxvIR/d7JlSBOGb9I=", + "aarch64-darwin": "sha256-ytmHSdC0PVGAJSbpt/+YwL5ySF3w6r/9uZpZACPppkI=", + "x86_64-darwin": "sha256-ma7K4K+xn7Jz3+YPA/n8ly1o308UNoM/DO9Z8yZSAKE=" } } From 8e0f1c253b6b7292b419505af849d06747c0e049 Mon Sep 17 00:00:00 2001 From: opencode Date: Tue, 1 Sep 2026 21:52:12 +0000 Subject: [PATCH 103/185] sync release versions for v1.18.26 --- bun.lock | 56 ++++++++++----------- packages/app/package.json | 2 +- packages/cli/package.json | 2 +- packages/codemode/package.json | 2 +- packages/console/app/package.json | 2 +- packages/console/core/package.json | 2 +- packages/console/function/package.json | 2 +- packages/console/mail/package.json | 2 +- packages/console/support/package.json | 2 +- packages/core/package.json | 2 +- packages/desktop/package.json | 2 +- packages/effect-drizzle-sqlite/package.json | 2 +- packages/effect-sqlite-node/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/function/package.json | 2 +- packages/http-recorder/package.json | 2 +- packages/llm/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- packages/server/package.json | 2 +- packages/session-ui/package.json | 2 +- packages/slack/package.json | 2 +- packages/stats/app/package.json | 2 +- packages/stats/core/package.json | 2 +- packages/stats/server/package.json | 2 +- packages/tui/package.json | 2 +- packages/ui/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 30 files changed, 57 insertions(+), 57 deletions(-) diff --git a/bun.lock b/bun.lock index 9249b5cc0da1..adce8d3bb71d 100644 --- a/bun.lock +++ b/bun.lock @@ -29,7 +29,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@corvu/drawer": "catalog:", "@dnd-kit/abstract": "0.5.0", @@ -96,7 +96,7 @@ }, "packages/cli": { "name": "@opencode-ai/cli", - "version": "1.18.25", + "version": "1.18.26", "bin": { "lildax": "./bin/lildax.cjs", }, @@ -144,7 +144,7 @@ }, "packages/codemode": { "name": "@opencode-ai/codemode", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "acorn": "8.15.0", "effect": "catalog:", @@ -158,7 +158,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -195,7 +195,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -222,7 +222,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@ai-sdk/anthropic": "3.0.82", "@ai-sdk/openai": "3.0.48", @@ -245,7 +245,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -269,7 +269,7 @@ }, "packages/console/support": { "name": "@opencode-ai/console-support", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@opencode-ai/console-core": "workspace:*", @@ -289,7 +289,7 @@ }, "packages/core": { "name": "@opencode-ai/core", - "version": "1.18.25", + "version": "1.18.26", "bin": { "opencode": "./bin/opencode", }, @@ -383,7 +383,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@zip.js/zip.js": "2.7.62", "drizzle-orm": "catalog:", @@ -437,7 +437,7 @@ }, "packages/effect-drizzle-sqlite": { "name": "@opencode-ai/effect-drizzle-sqlite", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "drizzle-orm": "catalog:", "effect": "catalog:", @@ -451,7 +451,7 @@ }, "packages/effect-sqlite-node": { "name": "@opencode-ai/effect-sqlite-node", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "effect": "catalog:", }, @@ -463,7 +463,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@hono/standard-validator": "catalog:", "@opencode-ai/core": "workspace:*", @@ -495,7 +495,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -511,7 +511,7 @@ }, "packages/http-recorder": { "name": "@opencode-ai/http-recorder", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@effect/platform-node": "4.0.0-beta.83", "@effect/platform-node-shared": "4.0.0-beta.83", @@ -542,7 +542,7 @@ }, "packages/llm": { "name": "@opencode-ai/llm", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@opencode-ai/schema": "workspace:*", "@smithy/eventstream-codec": "4.2.14", @@ -561,7 +561,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.18.25", + "version": "1.18.26", "bin": { "opencode": "./bin/opencode", }, @@ -692,7 +692,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@ai-sdk/provider": "3.0.8", "@opencode-ai/sdk": "workspace:*", @@ -768,7 +768,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "cross-spawn": "catalog:", }, @@ -783,7 +783,7 @@ }, "packages/server": { "name": "@opencode-ai/server", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/protocol": "workspace:*", @@ -798,7 +798,7 @@ }, "packages/session-ui": { "name": "@opencode-ai/session-ui", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/client": "file:../app/vendor/opencode-ai-client-1.17.13-v2.tgz", @@ -838,7 +838,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -851,7 +851,7 @@ }, "packages/stats/app": { "name": "@opencode-ai/stats-app", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@ibm/plex": "6.4.1", "@kobalte/core": "catalog:", @@ -878,7 +878,7 @@ }, "packages/stats/core": { "name": "@opencode-ai/stats-core", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@aws-sdk/client-athena": "3.933.0", "@planetscale/database": "1.19.0", @@ -897,7 +897,7 @@ }, "packages/stats/server": { "name": "@opencode-ai/stats-server", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@aws-sdk/client-firehose": "3.933.0", "@effect/platform-node": "catalog:", @@ -939,7 +939,7 @@ }, "packages/tui": { "name": "@opencode-ai/tui", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/plugin": "workspace:*", @@ -966,7 +966,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@kobalte/core": "catalog:", "@pierre/diffs": "catalog:", @@ -1017,7 +1017,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/app/package.json b/packages/app/package.json index aa7cf38ce4eb..26dd36bcb15b 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.18.25", + "version": "1.18.26", "description": "", "type": "module", "exports": { diff --git a/packages/cli/package.json b/packages/cli/package.json index 207967c19c01..dcc5b55ab3ba 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/cli", - "version": "1.18.25", + "version": "1.18.26", "type": "module", "license": "MIT", "bin": { diff --git a/packages/codemode/package.json b/packages/codemode/package.json index 400451efca64..23d9cf8412de 100644 --- a/packages/codemode/package.json +++ b/packages/codemode/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/codemode", - "version": "1.18.25", + "version": "1.18.26", "description": "Effect-native confined code execution over schema-described tools", "private": true, "type": "module", diff --git a/packages/console/app/package.json b/packages/console/app/package.json index 8e03034d621a..19fdec8598cf 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.18.25", + "version": "1.18.26", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index 0ce0fa748339..b1f79b25ab66 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/console-core", - "version": "1.18.25", + "version": "1.18.26", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 734a3efe345e..702df201f0b4 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.18.25", + "version": "1.18.26", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index a859c292f0f4..a58ea72148a2 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.18.25", + "version": "1.18.26", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/console/support/package.json b/packages/console/support/package.json index c68e83fcdf37..1fe427465a65 100644 --- a/packages/console/support/package.json +++ b/packages/console/support/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-support", - "version": "1.18.25", + "version": "1.18.26", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/core/package.json b/packages/core/package.json index 7ba2346dd1fb..ce620bc85baf 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.25", + "version": "1.18.26", "name": "@opencode-ai/core", "type": "module", "license": "MIT", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index d4d2532c522f..27d16283efb8 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.18.25", + "version": "1.18.26", "type": "module", "license": "MIT", "homepage": "https://opencode.ai", diff --git a/packages/effect-drizzle-sqlite/package.json b/packages/effect-drizzle-sqlite/package.json index eb8103695c4e..904b305ccc4c 100644 --- a/packages/effect-drizzle-sqlite/package.json +++ b/packages/effect-drizzle-sqlite/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.25", + "version": "1.18.26", "name": "@opencode-ai/effect-drizzle-sqlite", "type": "module", "license": "MIT", diff --git a/packages/effect-sqlite-node/package.json b/packages/effect-sqlite-node/package.json index 829aab45fab8..99e1f172b2a2 100644 --- a/packages/effect-sqlite-node/package.json +++ b/packages/effect-sqlite-node/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.25", + "version": "1.18.26", "name": "@opencode-ai/effect-sqlite-node", "type": "module", "license": "MIT", diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index 6e70986db787..dde092a8b7bc 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.18.25", + "version": "1.18.26", "private": true, "type": "module", "license": "MIT", diff --git a/packages/function/package.json b/packages/function/package.json index 1c0931b39538..4f3b6332ca55 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.18.25", + "version": "1.18.26", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/http-recorder/package.json b/packages/http-recorder/package.json index b7041f7225d7..f4d119f193d5 100644 --- a/packages/http-recorder/package.json +++ b/packages/http-recorder/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.25", + "version": "1.18.26", "name": "@opencode-ai/http-recorder", "description": "Record and replay Effect HTTP client traffic with deterministic cassettes", "type": "module", diff --git a/packages/llm/package.json b/packages/llm/package.json index e7b93f1fda7a..9826e2a5d519 100644 --- a/packages/llm/package.json +++ b/packages/llm/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.25", + "version": "1.18.26", "name": "@opencode-ai/llm", "type": "module", "license": "MIT", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index d81bbebae53f..00edea054927 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.25", + "version": "1.18.26", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 60c3cad95fb3..a822e45a2e14 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/plugin", - "version": "1.18.25", + "version": "1.18.26", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index 66b07a349f6a..e808bcae5a0d 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/sdk", - "version": "1.18.25", + "version": "1.18.26", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index 7c65eedadade..0ed32b1dd480 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/server", - "version": "1.18.25", + "version": "1.18.26", "private": true, "type": "module", "license": "MIT", diff --git a/packages/session-ui/package.json b/packages/session-ui/package.json index 16a2d88151e0..80f4cc5bc512 100644 --- a/packages/session-ui/package.json +++ b/packages/session-ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/session-ui", - "version": "1.18.25", + "version": "1.18.26", "private": true, "type": "module", "license": "MIT", diff --git a/packages/slack/package.json b/packages/slack/package.json index ecaa750fd542..c7c7a3455c66 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.18.25", + "version": "1.18.26", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/stats/app/package.json b/packages/stats/app/package.json index a53fca609a3e..5ed324bf5a92 100644 --- a/packages/stats/app/package.json +++ b/packages/stats/app/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-app", - "version": "1.18.25", + "version": "1.18.26", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/core/package.json b/packages/stats/core/package.json index 5d333cfce322..c21dc5b74f4a 100644 --- a/packages/stats/core/package.json +++ b/packages/stats/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-core", - "version": "1.18.25", + "version": "1.18.26", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/server/package.json b/packages/stats/server/package.json index 0681be86c3e7..ab9b7d140bd5 100644 --- a/packages/stats/server/package.json +++ b/packages/stats/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-server", - "version": "1.18.25", + "version": "1.18.26", "private": true, "type": "module", "license": "MIT", diff --git a/packages/tui/package.json b/packages/tui/package.json index d208dfa62655..2bfdaf4d3111 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/tui", - "version": "1.18.25", + "version": "1.18.26", "private": true, "type": "module", "license": "MIT", diff --git a/packages/ui/package.json b/packages/ui/package.json index dc3052a6cd0d..995e8be52d1d 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.18.25", + "version": "1.18.26", "type": "module", "license": "MIT", "repository": { diff --git a/packages/web/package.json b/packages/web/package.json index 5552d1fffeb1..135e663abfbc 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -2,7 +2,7 @@ "name": "@opencode-ai/web", "type": "module", "license": "MIT", - "version": "1.18.25", + "version": "1.18.26", "scripts": { "dev": "astro dev", "dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev", diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index de3b012f3ec9..1cd570242976 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "opencode", "displayName": "opencode", "description": "opencode for VS Code", - "version": "1.18.25", + "version": "1.18.26", "publisher": "sst-dev", "repository": { "type": "git", From 82b665075b0c89e36938931087920e1b36b1c49e Mon Sep 17 00:00:00 2001 From: Jack Date: Wed, 2 Sep 2026 11:54:40 +0800 Subject: [PATCH 104/185] docs(zen): add Claude Fable 5.1 (#46728) --- packages/web/src/content/docs/ar/zen.mdx | 2 ++ packages/web/src/content/docs/bs/zen.mdx | 2 ++ packages/web/src/content/docs/da/zen.mdx | 2 ++ packages/web/src/content/docs/de/zen.mdx | 2 ++ packages/web/src/content/docs/es/zen.mdx | 2 ++ packages/web/src/content/docs/fr/zen.mdx | 2 ++ packages/web/src/content/docs/it/zen.mdx | 2 ++ packages/web/src/content/docs/ja/zen.mdx | 2 ++ packages/web/src/content/docs/ko/zen.mdx | 2 ++ packages/web/src/content/docs/nb/zen.mdx | 2 ++ packages/web/src/content/docs/pl/zen.mdx | 2 ++ packages/web/src/content/docs/pt-br/zen.mdx | 2 ++ packages/web/src/content/docs/ru/zen.mdx | 2 ++ packages/web/src/content/docs/th/zen.mdx | 2 ++ packages/web/src/content/docs/tr/zen.mdx | 2 ++ packages/web/src/content/docs/zen.mdx | 2 ++ packages/web/src/content/docs/zh-cn/zen.mdx | 2 ++ packages/web/src/content/docs/zh-tw/zen.mdx | 2 ++ 18 files changed, 36 insertions(+) diff --git a/packages/web/src/content/docs/ar/zen.mdx b/packages/web/src/content/docs/ar/zen.mdx index ff8c3d2157f7..588fc5e2aa7f 100644 --- a/packages/web/src/content/docs/ar/zen.mdx +++ b/packages/web/src/content/docs/ar/zen.mdx @@ -75,6 +75,7 @@ OpenCode Zen هي بوابة AI تتيح لك الوصول إلى هذه الن | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -162,6 +163,7 @@ https://opencode.ai/zen/v1/models | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/bs/zen.mdx b/packages/web/src/content/docs/bs/zen.mdx index 5ed6bb9f8cdf..2799c460f8db 100644 --- a/packages/web/src/content/docs/bs/zen.mdx +++ b/packages/web/src/content/docs/bs/zen.mdx @@ -80,6 +80,7 @@ Našim modelima možete pristupiti i preko sljedećih API endpointa. | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -169,6 +170,7 @@ Podržavamo pay-as-you-go model. Ispod su cijene **po 1M tokena**. | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/da/zen.mdx b/packages/web/src/content/docs/da/zen.mdx index 3b07f92d3090..6d7b92d8e3e3 100644 --- a/packages/web/src/content/docs/da/zen.mdx +++ b/packages/web/src/content/docs/da/zen.mdx @@ -80,6 +80,7 @@ Du kan også få adgang til vores modeller gennem følgende API-endpoints. | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -169,6 +170,7 @@ Vi understøtter en pay-as-you-go-model. Nedenfor er priserne **pr. 1M tokens**. | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/de/zen.mdx b/packages/web/src/content/docs/de/zen.mdx index 6e4d611ea322..775c1c4bf058 100644 --- a/packages/web/src/content/docs/de/zen.mdx +++ b/packages/web/src/content/docs/de/zen.mdx @@ -71,6 +71,7 @@ Du kannst auch über die folgenden API-Endpunkte auf unsere Modelle zugreifen. | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -158,6 +159,7 @@ Wir unterstützen ein Pay-as-you-go-Modell. Unten findest du die Preise **pro 1M | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/es/zen.mdx b/packages/web/src/content/docs/es/zen.mdx index 046afde6cea0..2be708275691 100644 --- a/packages/web/src/content/docs/es/zen.mdx +++ b/packages/web/src/content/docs/es/zen.mdx @@ -80,6 +80,7 @@ También puedes acceder a nuestros modelos a través de los siguientes endpoints | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -169,6 +170,7 @@ Admitimos un modelo de pago por uso. A continuación se muestran los precios **p | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/fr/zen.mdx b/packages/web/src/content/docs/fr/zen.mdx index 2f6924fbeb91..25465cc1dbda 100644 --- a/packages/web/src/content/docs/fr/zen.mdx +++ b/packages/web/src/content/docs/fr/zen.mdx @@ -71,6 +71,7 @@ Vous pouvez également accéder à nos modèles via les points de terminaison AP | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -158,6 +159,7 @@ Nous prenons en charge un modèle de paiement à l'utilisation. Vous trouverez c | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/it/zen.mdx b/packages/web/src/content/docs/it/zen.mdx index a1bf4668d991..6e9748a25451 100644 --- a/packages/web/src/content/docs/it/zen.mdx +++ b/packages/web/src/content/docs/it/zen.mdx @@ -80,6 +80,7 @@ Puoi anche accedere ai nostri modelli tramite i seguenti endpoint API. | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -169,6 +170,7 @@ Supportiamo un modello pay-as-you-go. Qui sotto trovi i prezzi **per 1M token**. | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/ja/zen.mdx b/packages/web/src/content/docs/ja/zen.mdx index 1bee367888db..d13665c72c5a 100644 --- a/packages/web/src/content/docs/ja/zen.mdx +++ b/packages/web/src/content/docs/ja/zen.mdx @@ -71,6 +71,7 @@ OpenCode Zen は、OpenCode のほかのプロバイダーと同じように動 | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -158,6 +159,7 @@ https://opencode.ai/zen/v1/models | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/ko/zen.mdx b/packages/web/src/content/docs/ko/zen.mdx index 13bbed54aafe..20a7235b1956 100644 --- a/packages/web/src/content/docs/ko/zen.mdx +++ b/packages/web/src/content/docs/ko/zen.mdx @@ -71,6 +71,7 @@ OpenCode Zen은 OpenCode의 다른 provider와 똑같이 작동합니다. | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -158,6 +159,7 @@ https://opencode.ai/zen/v1/models | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/nb/zen.mdx b/packages/web/src/content/docs/nb/zen.mdx index 57ee59e75dd3..b1737b9e3d25 100644 --- a/packages/web/src/content/docs/nb/zen.mdx +++ b/packages/web/src/content/docs/nb/zen.mdx @@ -80,6 +80,7 @@ Du kan også få tilgang til modellene våre gjennom følgende API-endepunkter. | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -169,6 +170,7 @@ Vi støtter en pay-as-you-go-modell. Nedenfor er prisene **per 1M tokens**. | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/pl/zen.mdx b/packages/web/src/content/docs/pl/zen.mdx index 5ea4233d92d9..a9820e0e09a8 100644 --- a/packages/web/src/content/docs/pl/zen.mdx +++ b/packages/web/src/content/docs/pl/zen.mdx @@ -80,6 +80,7 @@ Możesz też uzyskać dostęp do naszych modeli przez poniższe endpointy API. | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -169,6 +170,7 @@ Obsługujemy model pay-as-you-go. Poniżej znajdują się ceny **za 1M tokenów* | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/pt-br/zen.mdx b/packages/web/src/content/docs/pt-br/zen.mdx index 3ff1c7b8e902..13e02615dc5f 100644 --- a/packages/web/src/content/docs/pt-br/zen.mdx +++ b/packages/web/src/content/docs/pt-br/zen.mdx @@ -71,6 +71,7 @@ Você também pode acessar nossos modelos pelos seguintes endpoints de API. | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -158,6 +159,7 @@ Oferecemos um modelo pay-as-you-go. Abaixo estão os preços **por 1M tokens**. | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/ru/zen.mdx b/packages/web/src/content/docs/ru/zen.mdx index ddd2c29bc8d2..df95a0425b14 100644 --- a/packages/web/src/content/docs/ru/zen.mdx +++ b/packages/web/src/content/docs/ru/zen.mdx @@ -80,6 +80,7 @@ OpenCode Zen работает как любой другой провайдер | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -169,6 +170,7 @@ https://opencode.ai/zen/v1/models | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/th/zen.mdx b/packages/web/src/content/docs/th/zen.mdx index c58ae2db6bfe..49f7968bc662 100644 --- a/packages/web/src/content/docs/th/zen.mdx +++ b/packages/web/src/content/docs/th/zen.mdx @@ -73,6 +73,7 @@ OpenCode Zen ทำงานเหมือน provider อื่น ๆ ใน | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -160,6 +161,7 @@ https://opencode.ai/zen/v1/models | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/tr/zen.mdx b/packages/web/src/content/docs/tr/zen.mdx index 13670c0f3286..95520602212d 100644 --- a/packages/web/src/content/docs/tr/zen.mdx +++ b/packages/web/src/content/docs/tr/zen.mdx @@ -71,6 +71,7 @@ Modellerimize aşağıdaki API uç noktaları aracılığıyla da erişebilirsin | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -158,6 +159,7 @@ Kullandıkça öde modelini destekliyoruz. Aşağıda **1M token başına** fiya | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/zen.mdx b/packages/web/src/content/docs/zen.mdx index cb737893a87f..afea76e62349 100644 --- a/packages/web/src/content/docs/zen.mdx +++ b/packages/web/src/content/docs/zen.mdx @@ -80,6 +80,7 @@ You can also access our models through the following API endpoints. | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -169,6 +170,7 @@ We support a pay-as-you-go model. Below are the prices **per 1M tokens**. | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/zh-cn/zen.mdx b/packages/web/src/content/docs/zh-cn/zen.mdx index 518badf0f9c4..d520d1f1b39c 100644 --- a/packages/web/src/content/docs/zh-cn/zen.mdx +++ b/packages/web/src/content/docs/zh-cn/zen.mdx @@ -71,6 +71,7 @@ OpenCode Zen 的工作方式与 OpenCode 中的任何其他提供商相同。 | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -158,6 +159,7 @@ https://opencode.ai/zen/v1/models | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | diff --git a/packages/web/src/content/docs/zh-tw/zen.mdx b/packages/web/src/content/docs/zh-tw/zen.mdx index eed177158eab..4c8ff7cb0117 100644 --- a/packages/web/src/content/docs/zh-tw/zen.mdx +++ b/packages/web/src/content/docs/zh-tw/zen.mdx @@ -75,6 +75,7 @@ OpenCode Zen 的運作方式和 OpenCode 中的其他供應商一樣。 | GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | +| Claude Fable 5.1 | claude-fable-5-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 5 | claude-opus-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | @@ -163,6 +164,7 @@ https://opencode.ai/zen/v1/models | DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | | DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | | DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | +| Claude Fable 5.1 | $10.00 | $50.00 | $0.25 | $12.50 | | Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | | Claude Opus 5 | $5.00 | $25.00 | $0.50 | $6.25 | | Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.25 | From 69c172e8a7c0086887b1f93ed5a162f14b6aa0c5 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 2 Sep 2026 06:28:47 +0200 Subject: [PATCH 105/185] fix(provider): handle SSE reader cancel rejections (#44944) --- packages/core/src/aisdk.ts | 2 +- packages/opencode/src/provider/provider.ts | 2 +- packages/opencode/test/server/httpapi-v2-pty.test.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core/src/aisdk.ts b/packages/core/src/aisdk.ts index b604dac664b6..a1a973b82197 100644 --- a/packages/core/src/aisdk.ts +++ b/packages/core/src/aisdk.ts @@ -35,7 +35,7 @@ function wrapSSE(res: Response, ms: number, ctl: AbortController) { const id = setTimeout(() => { const err = new Error("SSE read timed out") ctl.abort(err) - void reader.cancel(err) + reader.cancel(err).catch(() => {}) reject(err) }, ms) diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index b5980f15873b..2c69d8fba9bc 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -46,7 +46,7 @@ function wrapSSE(res: Response, ms: number, ctl: AbortController) { const id = setTimeout(() => { const err = new ProviderError.ResponseStreamError("SSE read timed out") ctl.abort(err) - void reader.cancel(err) + reader.cancel(err).catch(() => {}) reject(err) }, ms) diff --git a/packages/opencode/test/server/httpapi-v2-pty.test.ts b/packages/opencode/test/server/httpapi-v2-pty.test.ts index ef05dfe1eaa1..ea4b02dc8352 100644 --- a/packages/opencode/test/server/httpapi-v2-pty.test.ts +++ b/packages/opencode/test/server/httpapi-v2-pty.test.ts @@ -81,7 +81,7 @@ describe("v2 pty HttpApi", () => { expect(body.data.title).toBe("v2") // The canonical surface keeps exited sessions observable with their exit code. - const deadline = Date.now() + 5_000 + const deadline = Date.now() + 20_000 let info: { status: string; exitCode?: number } | undefined while (Date.now() < deadline) { const found = await request(`/api/pty/${body.data.id}`, tmp.path) From 50efc055de282e0e54a87ccebb8e2054cc45efd2 Mon Sep 17 00:00:00 2001 From: Victor Navarro Date: Wed, 2 Sep 2026 17:52:15 +0200 Subject: [PATCH 106/185] feat(console): keep migrated teams on the new Console (#46830) --- infra/console.ts | 10 ++++ packages/console/app/src/context/auth.ts | 19 ++++++- .../console/app/src/lib/inference-proxy.ts | 55 +++++++++++++++++++ packages/console/app/src/middleware.ts | 10 +++- .../workspace/[id]/billing/reload-section.tsx | 34 +++++++----- .../routes/workspace/[id]/model-section.tsx | 2 +- 6 files changed, 112 insertions(+), 18 deletions(-) create mode 100644 packages/console/app/src/lib/inference-proxy.ts diff --git a/infra/console.ts b/infra/console.ts index 79556f5e0c7c..764807d978fb 100644 --- a/infra/console.ts +++ b/infra/console.ts @@ -221,6 +221,15 @@ const STRIPE_PUBLISHABLE_KEY = new sst.Secret("STRIPE_PUBLISHABLE_KEY") const AUTH_API_URL = new sst.Linkable("AUTH_API_URL", { properties: { value: auth.url.apply((url) => url!) }, }) +// Preview branches have independent databases; do not send their workspaces to shared dev. +const migrationDomain = + $app.stage === "production" ? "opencode.ai" : $app.stage === "dev" ? "dev.opencode.ai" : undefined +const consoleMigration = new sst.Linkable("ConsoleMigration", { + properties: { + consoleUrl: migrationDomain ? `https://${migrationDomain}/console` : "", + inferenceUrl: migrationDomain ? `https://${migrationDomain}/inference` : "", + }, +}) const STRIPE_WEBHOOK_SECRET = new sst.Linkable("STRIPE_WEBHOOK_SECRET", { properties: { value: stripeWebhook.secret }, }) @@ -255,6 +264,7 @@ new sst.cloudflare.x.SolidStart("Console", { SECRET.UpstashRedisRestUrl, SECRET.UpstashRedisRestToken, AUTH_API_URL, + consoleMigration, STRIPE_WEBHOOK_SECRET, SECRET.SupportApiKey, DISCORD_INCIDENT_WEBHOOK_URL, diff --git a/packages/console/app/src/context/auth.ts b/packages/console/app/src/context/auth.ts index aed07a630f8c..90669d764703 100644 --- a/packages/console/app/src/context/auth.ts +++ b/packages/console/app/src/context/auth.ts @@ -1,6 +1,7 @@ import { getRequestEvent } from "solid-js/web" import { and, Database, eq, inArray, isNull, sql } from "@opencode-ai/console-core/drizzle/index.js" import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" +import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" import { redirect } from "@solidjs/router" import { Actor } from "@opencode-ai/console-core/actor.js" @@ -79,8 +80,15 @@ export const getActor = async (workspace?: string): Promise => { if (accounts.length) { const user = await Database.use((tx) => tx - .select() + .select({ + id: UserTable.id, + workspaceID: UserTable.workspaceID, + accountID: UserTable.accountID, + role: UserTable.role, + migratedAt: WorkspaceTable.migrated_at, + }) .from(UserTable) + .innerJoin(WorkspaceTable, eq(WorkspaceTable.id, UserTable.workspaceID)) .where( and( eq(UserTable.workspaceID, workspace), @@ -93,6 +101,15 @@ export const getActor = async (workspace?: string): Promise => { .then((x) => x[0]), ) if (user) { + if (user.migratedAt) { + const destination = Resource.ConsoleMigration.consoleUrl + if (!destination) throw new Error("New Console URL is not configured") + evt.response.headers.set("Cache-Control", "no-store") + throw redirect(`${destination}/login`, { + status: evt.request.method === "GET" || evt.request.method === "HEAD" ? 302 : 303, + headers: { "Cache-Control": "no-store" }, + }) + } await Database.use((tx) => tx .update(UserTable) diff --git a/packages/console/app/src/lib/inference-proxy.ts b/packages/console/app/src/lib/inference-proxy.ts new file mode 100644 index 000000000000..a6614e80f075 --- /dev/null +++ b/packages/console/app/src/lib/inference-proxy.ts @@ -0,0 +1,55 @@ +import { Resource } from "@opencode-ai/console-resource" +import { Database, eq } from "@opencode-ai/console-core/drizzle/index.js" +import { KeyTable } from "@opencode-ai/console-core/schema/key.sql.js" +import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" + +const paths: Record = { + "GET /zen/v1/models": "/openai/v1/models", + "POST /zen/v1/chat/completions": "/openai/v1/chat/completions", + "POST /zen/v1/responses": "/openai/v1/responses", + "POST /zen/v1/messages": "/anthropic/v1/messages", +} + +export async function proxyInference(request: Request, clientIP?: string): Promise { + const url = new URL(request.url) + const path = + paths[`${request.method} ${url.pathname}`] ?? + (request.method === "POST" && + /^\/zen\/v1\/models\/[^/]+:(?:generateContent|streamGenerateContent)$/.test(url.pathname) + ? url.pathname.replace("/zen/v1/models/", "/google/v1beta/models/") + : undefined) + if (!path) return undefined + + const key = path.startsWith("/anthropic/") + ? request.headers.get("x-api-key") + : path.startsWith("/google/") + ? request.headers.get("x-goog-api-key") + : request.headers.get("authorization")?.split(" ")[1] + if (!key || key === "public") return undefined + + // Routing only; the destination owns authentication and revocation after cutover. + const workspace = await Database.use((tx) => + tx + .select({ migratedAt: WorkspaceTable.migrated_at }) + .from(KeyTable) + .innerJoin(WorkspaceTable, eq(WorkspaceTable.id, KeyTable.workspaceID)) + .where(eq(KeyTable.key, key)) + .limit(1) + .then((rows) => rows[0]), + ) + if (!workspace?.migratedAt) return undefined + + const destination = new URL(Resource.ConsoleMigration.inferenceUrl) + destination.pathname = `${destination.pathname.replace(/\/$/, "")}${path}` + destination.search = url.search + destination.hash = "" + + const forwarded = new Request(destination, request) + forwarded.headers.set("authorization", `Bearer ${key}`) + const ip = request.headers.get("cf-connecting-ip") ?? clientIP + if (ip) forwarded.headers.set("x-real-ip", ip) + const requestID = request.headers.get("x-opencode-request-id") ?? request.headers.get("x-opencode-request") + if (requestID) forwarded.headers.set("x-opencode-request-id", requestID) + + return fetch(forwarded, { redirect: "error" }) +} diff --git a/packages/console/app/src/middleware.ts b/packages/console/app/src/middleware.ts index d7b4f066c3d5..e768afa4f37f 100644 --- a/packages/console/app/src/middleware.ts +++ b/packages/console/app/src/middleware.ts @@ -2,9 +2,10 @@ import { createMiddleware } from "@solidjs/start/middleware" import { LOCALE_HEADER, cookie, fromPathname, strip } from "~/lib/language" import { normalizeReferralCode, referralCookie } from "~/lib/referral-invite" import { sanitizeServerActionRequest } from "~/lib/server-action" +import { proxyInference } from "~/lib/inference-proxy" export default createMiddleware({ - onRequest(event) { + async onRequest(event) { event.request = sanitizeServerActionRequest(event.request) const url = new URL(event.request.url) @@ -19,5 +20,12 @@ export default createMiddleware({ const referralCode = normalizeReferralCode(url.searchParams.get("ref")) if (referralCode) event.response.headers.append("set-cookie", referralCookie(referralCode)) + + return proxyInference(event.request, event.clientAddress).catch(() => + Response.json( + { error: { type: "api_error", message: "Inference routing is unavailable. Please retry later." } }, + { status: 503, headers: { "Cache-Control": "no-store" } }, + ), + ) }, }) diff --git a/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx index c9a72c08791f..f1b9bb933a7f 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx @@ -38,21 +38,25 @@ const setReload = action(async (form: FormData) => { } return json( - await Database.use((tx) => - tx - .update(BillingTable) - .set({ - reload: reloadValue, - ...(reloadAmount !== null ? { reloadAmount } : {}), - ...(reloadTrigger !== null ? { reloadTrigger } : {}), - ...(reloadValue - ? { - reloadError: null, - timeReloadError: null, - } - : {}), - }) - .where(eq(BillingTable.workspaceID, workspaceID)), + await withActor( + () => + Database.use((tx) => + tx + .update(BillingTable) + .set({ + reload: reloadValue, + ...(reloadAmount !== null ? { reloadAmount } : {}), + ...(reloadTrigger !== null ? { reloadTrigger } : {}), + ...(reloadValue + ? { + reloadError: null, + timeReloadError: null, + } + : {}), + }) + .where(eq(BillingTable.workspaceID, workspaceID)), + ), + workspaceID, ), { revalidate: queryBillingInfo.key }, ) diff --git a/packages/console/app/src/routes/workspace/[id]/model-section.tsx b/packages/console/app/src/routes/workspace/[id]/model-section.tsx index 96c91889c1f0..433e0f9863dd 100644 --- a/packages/console/app/src/routes/workspace/[id]/model-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/model-section.tsx @@ -88,7 +88,7 @@ const updateModel = action(async (form: FormData) => { if (!workspaceID) return { error: formError.workspaceRequired } const enabled = (form.get("enabled") as string | null) === "true" return json( - withActor(async () => { + await withActor(async () => { if (enabled) { await Model.disable({ model }) } else { From 77aec36da1a5fcd0e652f45aec2db49cbf1081f4 Mon Sep 17 00:00:00 2001 From: Jack Date: Thu, 3 Sep 2026 00:04:37 +0800 Subject: [PATCH 107/185] feat(console): add Muse Spark 1.3 and Gemini 3.8 Flash (#46836) --- .../app/src/component/limits-graph.tsx | 4 +-- .../console/app/src/lib/request-country.ts | 7 ++++- packages/console/app/src/routes/go/index.css | 2 +- packages/console/app/src/routes/go/index.tsx | 8 +++++ .../routes/workspace/[id]/go/lite-section.tsx | 1 + .../app/src/routes/zen/util/handler.ts | 3 +- .../src/routes/zen/util/trainingConsent.ts | 3 ++ .../console/app/test/museSparkPolicy.test.ts | 31 +++++++++++++++++++ packages/web/src/content/docs/ar/go.mdx | 7 +++++ packages/web/src/content/docs/ar/zen.mdx | 6 ++++ packages/web/src/content/docs/bs/go.mdx | 7 +++++ packages/web/src/content/docs/bs/zen.mdx | 6 ++++ packages/web/src/content/docs/da/go.mdx | 7 +++++ packages/web/src/content/docs/da/zen.mdx | 6 ++++ packages/web/src/content/docs/de/go.mdx | 7 +++++ packages/web/src/content/docs/de/zen.mdx | 6 ++++ packages/web/src/content/docs/es/go.mdx | 7 +++++ packages/web/src/content/docs/es/zen.mdx | 6 ++++ packages/web/src/content/docs/fr/go.mdx | 7 +++++ packages/web/src/content/docs/fr/zen.mdx | 6 ++++ packages/web/src/content/docs/go.mdx | 7 +++++ packages/web/src/content/docs/it/go.mdx | 7 +++++ packages/web/src/content/docs/it/zen.mdx | 6 ++++ packages/web/src/content/docs/ja/go.mdx | 7 +++++ packages/web/src/content/docs/ja/zen.mdx | 6 ++++ packages/web/src/content/docs/ko/go.mdx | 7 +++++ packages/web/src/content/docs/ko/zen.mdx | 6 ++++ packages/web/src/content/docs/nb/go.mdx | 7 +++++ packages/web/src/content/docs/nb/zen.mdx | 6 ++++ packages/web/src/content/docs/pl/go.mdx | 7 +++++ packages/web/src/content/docs/pl/zen.mdx | 6 ++++ packages/web/src/content/docs/pt-br/go.mdx | 7 +++++ packages/web/src/content/docs/pt-br/zen.mdx | 6 ++++ packages/web/src/content/docs/ru/go.mdx | 7 +++++ packages/web/src/content/docs/ru/zen.mdx | 6 ++++ packages/web/src/content/docs/th/go.mdx | 7 +++++ packages/web/src/content/docs/th/zen.mdx | 6 ++++ packages/web/src/content/docs/tr/go.mdx | 7 +++++ packages/web/src/content/docs/tr/zen.mdx | 6 ++++ packages/web/src/content/docs/zen.mdx | 6 ++++ packages/web/src/content/docs/zh-cn/go.mdx | 7 +++++ packages/web/src/content/docs/zh-cn/zen.mdx | 6 ++++ packages/web/src/content/docs/zh-tw/go.mdx | 7 +++++ packages/web/src/content/docs/zh-tw/zen.mdx | 6 ++++ 44 files changed, 288 insertions(+), 5 deletions(-) create mode 100644 packages/console/app/src/routes/zen/util/trainingConsent.ts create mode 100644 packages/console/app/test/museSparkPolicy.test.ts diff --git a/packages/console/app/src/component/limits-graph.tsx b/packages/console/app/src/component/limits-graph.tsx index 376e23f9c7ca..9fc15b359673 100644 --- a/packages/console/app/src/component/limits-graph.tsx +++ b/packages/console/app/src/component/limits-graph.tsx @@ -54,7 +54,7 @@ export function LimitsGraph(props: { href: string }) { { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", req: 7600 }, { id: "longcat-2.0", name: "LongCat-2.0", req: 11400 }, { id: "mimo-v2.5", name: "MiMo-V2.5", req: 30100 }, - { id: "muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", req: 45300, edge: true }, + { id: "muse-spark-1.3-contributor", name: "Muse Spark 1.3 Contributor", req: 45300, edge: true }, ].map((model, index) => ({ ...model, d: `${50 + index * 25}ms` })) const bonuses = graph.filter((model) => model.baseReq) @@ -232,7 +232,7 @@ export function LimitsGraph(props: { href: string }) { {"infinite" in m ? "\u221e" : m.req.toLocaleString()} )} {m.name} - {m.id === "muse-spark-1.2-contributor" && ( + {m.id === "muse-spark-1.3-contributor" && ( ( diff --git a/packages/console/app/src/lib/request-country.ts b/packages/console/app/src/lib/request-country.ts index 2eb2e22d6ac5..5806fc2f64ac 100644 --- a/packages/console/app/src/lib/request-country.ts +++ b/packages/console/app/src/lib/request-country.ts @@ -31,7 +31,12 @@ export function countryFromRequest(request: Request | undefined) { export function isModelCountryRestricted(model: string, country: string | undefined) { return ( - ["muse-spark-1.2-contributor", "muse-spark-1.2-contributor-free"].includes(model) && + [ + "muse-spark-1.3-contributor", + "muse-spark-1.3-contributor-free", + "muse-spark-1.2-contributor", + "muse-spark-1.2-contributor-free", + ].includes(model) && country !== undefined && MUSE_SPARK_BLOCKED_COUNTRIES.has(country.toUpperCase()) ) diff --git a/packages/console/app/src/routes/go/index.css b/packages/console/app/src/routes/go/index.css index 724fa381e9a7..8193441c941c 100644 --- a/packages/console/app/src/routes/go/index.css +++ b/packages/console/app/src/routes/go/index.css @@ -1035,7 +1035,7 @@ body { gap: 3px 8px; } - &[data-model="muse-spark-1.2-contributor"] { + &[data-model="muse-spark-1.3-contributor"] { transform: translateY(11px); [data-regions] { diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index 6b356ccafa10..72fc71a3b4d7 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -43,6 +43,7 @@ const models = [ { name: "Qwen3.6 Plus", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "MiniMax M3", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "MiniMax M2.7", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, + { name: "Muse Spark 1.3 Contributor", training: "go.faq.a5.used", retention: "go.faq.a5.notZdr" }, { name: "Muse Spark 1.2 Contributor", training: "go.faq.a5.used", retention: "go.faq.a5.notZdr" }, { name: "DeepSeek V4 Pro", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "DeepSeek V4 Flash", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, @@ -331,6 +332,13 @@ export default function Home() { .

    +

    + Muse Spark 1.3 Contributor: {i18n.t("go.faq.a5.museRetention")}{" "} + + {i18n.t("go.faq.a5.learnMore")} + + . +

    Muse Spark 1.2 Contributor: {i18n.t("go.faq.a5.museRetention")}{" "} diff --git a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx index 3a0ebe361aec..35cdd500cf3b 100644 --- a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx @@ -652,6 +652,7 @@ export function LiteSection(props: { lite: LiteSubscription | undefined }) {

  • LongCat-2.0
  • MiniMax M3
  • MiniMax M2.7
  • +
  • Muse Spark 1.3 Contributor
  • Muse Spark 1.2 Contributor
  • Qwen3.8 Max
  • Qwen3.8 Flash
  • diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index ae129018b7a9..6f24c8e4bd94 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -49,6 +49,7 @@ import { Workspace } from "@opencode-ai/console-core/workspace.js" import { countryFromRequest, isModelCountryRestricted } from "~/lib/request-country" import { isPeakPricing } from "./pricing" import { prepareRequestBody } from "./requestBody" +import { requiresGoTrainingConsent } from "./trainingConsent" type ZenData = Awaited> type PreparedBody = Awaited> @@ -125,7 +126,7 @@ export async function handler( if ( authInfo && opts.modelList === "lite" && - modelInfo.id === "muse-spark-1.2-contributor" && + requiresGoTrainingConsent(modelInfo.id) && !authInfo.allowTraining ) throw new DataPolicyError( diff --git a/packages/console/app/src/routes/zen/util/trainingConsent.ts b/packages/console/app/src/routes/zen/util/trainingConsent.ts new file mode 100644 index 000000000000..adb726f97865 --- /dev/null +++ b/packages/console/app/src/routes/zen/util/trainingConsent.ts @@ -0,0 +1,3 @@ +export function requiresGoTrainingConsent(model: string) { + return ["muse-spark-1.3-contributor", "muse-spark-1.2-contributor"].includes(model) +} diff --git a/packages/console/app/test/museSparkPolicy.test.ts b/packages/console/app/test/museSparkPolicy.test.ts new file mode 100644 index 000000000000..e1d92b704d72 --- /dev/null +++ b/packages/console/app/test/museSparkPolicy.test.ts @@ -0,0 +1,31 @@ +import { describe, expect, test } from "bun:test" +import { isModelCountryRestricted } from "../src/lib/request-country" +import { requiresGoTrainingConsent } from "../src/routes/zen/util/trainingConsent" + +describe("Muse Spark model policies", () => { + test.each([ + "muse-spark-1.3-contributor", + "muse-spark-1.3-contributor-free", + "muse-spark-1.2-contributor", + "muse-spark-1.2-contributor-free", + ])("restricts %s in blocked countries", (model) => { + expect(isModelCountryRestricted(model, "CN")).toBe(true) + expect(isModelCountryRestricted(model, "US")).toBe(false) + }) + + test("does not apply the country restriction to similar model IDs", () => { + expect(isModelCountryRestricted("muse-spark-1.3-contributor-preview", "CN")).toBe(false) + }) + + test.each(["muse-spark-1.3-contributor", "muse-spark-1.2-contributor"])( + "requires Go training consent for %s", + (model) => { + expect(requiresGoTrainingConsent(model)).toBe(true) + }, + ) + + test("does not require Go training consent for the free or similar model IDs", () => { + expect(requiresGoTrainingConsent("muse-spark-1.3-contributor-free")).toBe(false) + expect(requiresGoTrainingConsent("muse-spark-1.3-contributor-preview")).toBe(false) + }) +}) diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx index f927fce25cd5..fff712bd68ed 100644 --- a/packages/web/src/content/docs/ar/go.mdx +++ b/packages/web/src/content/docs/ar/go.mdx @@ -63,6 +63,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([مناطق محدودة](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([مناطق محدودة](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -107,6 +108,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -133,6 +135,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر - DeepSeek V4 Flash Vision Exp — ‏410 input، و71,300 cached، و310 output tokens لكل طلب - MiniMax M3 — ‏510 input، و56,000 cached، و190 output tokens لكل طلب - MiniMax M2.7 — ‏300 input، و55,000 cached، و125 output tokens لكل طلب +- Muse Spark 1.3 Contributor — ‏620 input، و71,400 cached، و300 output tokens لكل طلب - Muse Spark 1.2 Contributor — ‏620 input، و71,400 cached، و300 output tokens لكل طلب - Qwen3.8 Max — ‏420 input، و66,000 cached، و200 output tokens لكل طلب - Qwen3.8 Flash — ‏600 input، و58,000 cached، و200 output tokens لكل طلب @@ -165,6 +168,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -238,6 +242,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -284,6 +289,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | غير مستخدَمة | 0 أيام | | MiniMax M3 | غير مستخدَمة | 0 أيام | | MiniMax M2.7 | غير مستخدَمة | 0 أيام | +| Muse Spark 1.3 Contributor | نعم | ليست ZDR | | Muse Spark 1.2 Contributor | نعم | ليست ZDR | | DeepSeek V4 Pro | غير مستخدَمة | 0 أيام | | DeepSeek V4 Flash | غير مستخدَمة | 0 أيام | @@ -293,6 +299,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** تعطّل ZDR ميزات API مهمة تعتمد على البيانات المخزنة، بما في ذلك Responses API ذات الحالة، وFiles and Collections، وBatch API. [اعرف المزيد](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** تُنشأ سجلات مراقبة إساءة الاستخدام لكل استخدام لميزات API، ويُحتفظ بها لمدة تصل إلى 30 يومًا. [اعرف المزيد](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). +- **Muse Spark 1.3 Contributor:** أسعار توكنات مخفّضة للغاية مقابل منح الإذن باستخدام مطالباتك وإكمالات النموذج لتدريب نماذج Meta المستقبلية. يقتصر التوفر على المناطق التي تسمح بها [سياسة الاستخدام الجغرافي](https://ai.developer.meta.com/legal/geographic-use-policy) الخاصة بـ Meta. [اعرف المزيد](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **Muse Spark 1.2 Contributor:** أسعار توكنات مخفّضة للغاية مقابل منح الإذن باستخدام مطالباتك وإكمالات النموذج لتدريب نماذج Meta المستقبلية. يقتصر التوفر على المناطق التي تسمح بها [سياسة الاستخدام الجغرافي](https://ai.developer.meta.com/legal/geographic-use-policy) الخاصة بـ Meta. [اعرف المزيد](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** تُجدَّد اتفاقية ZDR شهريًا. الاتفاقية الحالية سارية حتى 31 أغسطس 2026. diff --git a/packages/web/src/content/docs/ar/zen.mdx b/packages/web/src/content/docs/ar/zen.mdx index 588fc5e2aa7f..0fc9c6f83219 100644 --- a/packages/web/src/content/docs/ar/zen.mdx +++ b/packages/web/src/content/docs/ar/zen.mdx @@ -86,6 +86,7 @@ OpenCode Zen هي بوابة AI تتيح لك الوصول إلى هذه الن | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -117,6 +118,7 @@ OpenCode Zen هي بوابة AI تتيح لك الوصول إلى هذه الن | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | يستخدم [معرّف النموذج](/docs/config/#models) في إعدادات OpenCode الصيغة `opencode/`. على سبيل المثال، بالنسبة إلى GPT 5.5، ستستخدم `opencode/gpt-5.5` في إعداداتك. @@ -144,6 +146,7 @@ https://opencode.ai/zen/v1/models | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -175,6 +178,7 @@ https://opencode.ai/zen/v1/models | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -231,6 +235,7 @@ https://opencode.ai/zen/v1/models - Nemotron 3 Ultra Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. - Nemotron 3.5 Lightning Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. - Big Pickle نموذج خفي ومتاح مجانا على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. +- Muse Spark 1.3 Contributor Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. - Muse Spark 1.2 Contributor Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج.
    تواصل معنا إذا كانت لديك أي أسئلة. @@ -289,6 +294,7 @@ https://opencode.ai/zen/v1/models - Nemotron 3.5 Lightning Free (نقاط نهاية NVIDIA المجانية): للاستخدام التجريبي فقط — لا ترسل بيانات شخصية أو سرية. يُسجَّل استخدامك لأغراض أمنية ولتحسين منتجات وخدمات NVIDIA. بيانات الجلسة المُسجَّلة لأغراض التحسين غير مرتبطة بهويتك أو بأي مُعرِّف دائم. لمزيد من المعلومات حول ممارسات معالجة البيانات لدينا، راجع [سياسة الخصوصية](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). بتفاعلك مع نقطة النهاية هذه، فإنك توافق على جمعنا لهذه المعلومات وتسجيلها واستخدامها وعلى [شروط خدمة النسخة التجريبية من واجهة NVIDIA API](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: يتم الاحتفاظ بالطلبات لمدة 30 يوما وفقا لـ [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). - Anthropic APIs: يتم الاحتفاظ بالطلبات لمدة 30 يوما وفقا لـ [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). +- Muse Spark 1.3 Contributor Free: أسعار توكنات مخفّضة للغاية مقابل منح الإذن باستخدام مطالباتك وإكمالاتك لتدريب نماذج Meta المستقبلية. [اعرف المزيد](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free: أسعار توكنات مخفّضة للغاية مقابل منح الإذن باستخدام مطالباتك وإكمالاتك لتدريب نماذج Meta المستقبلية. [اعرف المزيد](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index 08792e787d76..d6e8034bb250 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -73,6 +73,7 @@ Trenutna lista modela uključuje: - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([ograničene regije](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([ograničene regije](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -117,6 +118,7 @@ Tabela ispod pruža procijenjeni broj zahtjeva na osnovu tipičnih obrazaca kori | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -143,6 +145,7 @@ Procjene se zasnivaju na zapaženim obrascima zahtjeva: - DeepSeek V4 Flash Vision Exp — 410 ulaznih, 71,300 keširanih, 310 izlaznih tokena po zahtjevu - MiniMax M3 — 510 ulaznih, 56,000 keširanih, 190 izlaznih tokena po zahtjevu - MiniMax M2.7 — 300 ulaznih, 55,000 keširanih, 125 izlaznih tokena po zahtjevu +- Muse Spark 1.3 Contributor — 620 ulaznih, 71,400 keširanih, 300 izlaznih tokena po zahtjevu - Muse Spark 1.2 Contributor — 620 ulaznih, 71,400 keširanih, 300 izlaznih tokena po zahtjevu - Qwen3.8 Max — 420 ulaznih, 66,000 keširanih, 200 izlaznih tokena po zahtjevu - Qwen3.8 Flash — 600 ulaznih, 58,000 keširanih, 200 izlaznih tokena po zahtjevu @@ -175,6 +178,7 @@ Procjene se također zasnivaju na sljedećim cijenama po 1M tokena i mjesečnoj | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -250,6 +254,7 @@ Također možete pristupiti Go modelima putem sljedećih API endpointa. | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -298,6 +303,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | Ne koristi se | 0 dana | | MiniMax M3 | Ne koristi se | 0 dana | | MiniMax M2.7 | Ne koristi se | 0 dana | +| Muse Spark 1.3 Contributor | Da | Nije ZDR | | Muse Spark 1.2 Contributor | Da | Nije ZDR | | DeepSeek V4 Pro | Ne koristi se | 0 dana | | DeepSeek V4 Flash | Ne koristi se | 0 dana | @@ -307,6 +313,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDR onemogućava važne API funkcije koje zavise od pohranjenih podataka, uključujući Responses API s očuvanjem stanja, Files and Collections i Batch API. [Saznajte više](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Zapisi o nadzoru zloupotrebe generišu se za svako korištenje API funkcija i čuvaju do 30 dana. [Saznajte više](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). +- **Muse Spark 1.3 Contributor:** Znatno snižene cijene tokena u zamjenu za dopuštenje da se vaši promptovi i odgovori modela koriste za treniranje budućih Meta modela. Dostupnost je ograničena na regije dopuštene [Pravilima geografskog korištenja](https://ai.developer.meta.com/legal/geographic-use-policy) kompanije Meta. [Saznajte više](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **Muse Spark 1.2 Contributor:** Znatno snižene cijene tokena u zamjenu za dopuštenje da se vaši promptovi i odgovori modela koriste za treniranje budućih Meta modela. Dostupnost je ograničena na regije dopuštene [Pravilima geografskog korištenja](https://ai.developer.meta.com/legal/geographic-use-policy) kompanije Meta. [Saznajte više](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** ZDR sporazum obnavlja se mjesečno. Trenutni sporazum važi do 31. augusta 2026. diff --git a/packages/web/src/content/docs/bs/zen.mdx b/packages/web/src/content/docs/bs/zen.mdx index 2799c460f8db..7d511c8e5645 100644 --- a/packages/web/src/content/docs/bs/zen.mdx +++ b/packages/web/src/content/docs/bs/zen.mdx @@ -91,6 +91,7 @@ Našim modelima možete pristupiti i preko sljedećih API endpointa. | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -122,6 +123,7 @@ Našim modelima možete pristupiti i preko sljedećih API endpointa. | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | [model id](/docs/config/#models) u vašoj OpenCode konfiguraciji koristi format @@ -151,6 +153,7 @@ Podržavamo pay-as-you-go model. Ispod su cijene **po 1M tokena**. | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -182,6 +185,7 @@ Podržavamo pay-as-you-go model. Ispod su cijene **po 1M tokena**. | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -238,6 +242,7 @@ Besplatni modeli: - Nemotron 3 Ultra Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. - Nemotron 3.5 Lightning Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. - Big Pickle je stealth model koji je besplatan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. +- Muse Spark 1.3 Contributor Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. - Muse Spark 1.2 Contributor Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. Kontaktirajte nas ako imate bilo kakvih pitanja. @@ -301,6 +306,7 @@ i ne koriste vaše podatke za treniranje modela, uz sljedeće izuzetke: - Nemotron 3.5 Lightning Free (besplatni NVIDIA endpointi): Samo za probnu upotrebu — nemojte slati lične ili povjerljive podatke. Vaše korištenje se bilježi radi sigurnosti i poboljšanja NVIDIA proizvoda i usluga. Zabilježeni podaci sesije koji se koriste u svrhu poboljšanja nisu povezani s vašim identitetom niti bilo kojim trajnim identifikatorom. Za više informacija o našim praksama obrade podataka pogledajte našu [Politiku privatnosti](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Interakcijom s ovim endpointom pristajete na naše prikupljanje, bilježenje i korištenje takvih informacija te na [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: Requests are retained for 30 days in accordance with [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). - Anthropic APIs: Requests are retained for 30 days in accordance with [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). +- Muse Spark 1.3 Contributor Free: Znatno snižene cijene tokena u zamjenu za dozvolu da se vaši promptovi i odgovori koriste za treniranje budućih Meta modela. [Saznajte više](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free: Znatno snižene cijene tokena u zamjenu za dozvolu da se vaši promptovi i odgovori koriste za treniranje budućih Meta modela. [Saznajte više](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx index efcddab1198a..a4d33dd2e8c9 100644 --- a/packages/web/src/content/docs/da/go.mdx +++ b/packages/web/src/content/docs/da/go.mdx @@ -73,6 +73,7 @@ Den nuværende liste over modeller inkluderer: - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([begrænsede regioner](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([begrænsede regioner](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -117,6 +118,7 @@ Tabellen nedenfor giver et estimeret antal anmodninger baseret på typiske Go-fo | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -143,6 +145,7 @@ Estimaterne er baseret på observerede anmodningsmønstre: - DeepSeek V4 Flash Vision Exp — 410 input, 71.300 cachelagrede, 310 output-tokens pr. anmodning - MiniMax M3 — 510 input, 56.000 cachelagrede, 190 output-tokens pr. anmodning - MiniMax M2.7 — 300 input, 55.000 cachelagrede, 125 output-tokens pr. anmodning +- Muse Spark 1.3 Contributor — 620 input, 71.400 cachelagrede, 300 output-tokens pr. anmodning - Muse Spark 1.2 Contributor — 620 input, 71.400 cachelagrede, 300 output-tokens pr. anmodning - Qwen3.8 Max — 420 input, 66.000 cachelagrede, 200 output-tokens pr. anmodning - Qwen3.8 Flash — 600 input, 58.000 cachelagrede, 200 output-tokens pr. anmodning @@ -175,6 +178,7 @@ Estimaterne er også baseret på følgende priser pr. 1M tokens og det månedlig | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -250,6 +254,7 @@ Du kan også få adgang til Go-modeller gennem følgende API-endpoints. | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -298,6 +303,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | Ikke brugt | 0 dage | | MiniMax M3 | Ikke brugt | 0 dage | | MiniMax M2.7 | Ikke brugt | 0 dage | +| Muse Spark 1.3 Contributor | Ja | Ikke ZDR | | Muse Spark 1.2 Contributor | Ja | Ikke ZDR | | DeepSeek V4 Pro | Ikke brugt | 0 dage | | DeepSeek V4 Flash | Ikke brugt | 0 dage | @@ -307,6 +313,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDR deaktiverer vigtige API-funktioner, der afhænger af lagrede data, herunder den tilstandsbevarende Responses API, Files and Collections og Batch API. [Læs mere](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Logfiler til overvågning af misbrug genereres ved al brug af API-funktioner og opbevares i op til 30 dage. [Læs mere](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). +- **Muse Spark 1.3 Contributor:** Kraftigt nedsatte tokenpriser til gengæld for tilladelse til at bruge dine prompts og modelsvar til at træne fremtidige Meta-modeller. Tilgængeligheden er begrænset til regioner, der er tilladt i henhold til [politikken for geografisk brug](https://ai.developer.meta.com/legal/geographic-use-policy) fra Meta. [Læs mere](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **Muse Spark 1.2 Contributor:** Kraftigt nedsatte tokenpriser til gengæld for tilladelse til at bruge dine prompts og modelsvar til at træne fremtidige Meta-modeller. Tilgængeligheden er begrænset til regioner, der er tilladt i henhold til [politikken for geografisk brug](https://ai.developer.meta.com/legal/geographic-use-policy) fra Meta. [Læs mere](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** ZDR-aftalen fornyes månedligt. Den nuværende aftale er gyldig til og med 31. august 2026. diff --git a/packages/web/src/content/docs/da/zen.mdx b/packages/web/src/content/docs/da/zen.mdx index 6d7b92d8e3e3..74d7b6fff12e 100644 --- a/packages/web/src/content/docs/da/zen.mdx +++ b/packages/web/src/content/docs/da/zen.mdx @@ -91,6 +91,7 @@ Du kan også få adgang til vores modeller gennem følgende API-endpoints. | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -122,6 +123,7 @@ Du kan også få adgang til vores modeller gennem følgende API-endpoints. | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | [model id](/docs/config/#models) i din OpenCode-konfiguration @@ -151,6 +153,7 @@ Vi understøtter en pay-as-you-go-model. Nedenfor er priserne **pr. 1M tokens**. | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -182,6 +185,7 @@ Vi understøtter en pay-as-you-go-model. Nedenfor er priserne **pr. 1M tokens**. | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -238,6 +242,7 @@ De gratis modeller: - Nemotron 3 Ultra Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. - Nemotron 3.5 Lightning Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. - Big Pickle er en stealth-model, som er gratis på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. +- Muse Spark 1.3 Contributor Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. - Muse Spark 1.2 Contributor Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. Kontakt os, hvis du har spørgsmål. @@ -299,6 +304,7 @@ Alle vores modeller hostes i US. Vores udbydere følger en nul-opbevaringspoliti - Nemotron 3.5 Lightning Free (gratis NVIDIA-endpoints): Kun til prøvebrug — indsend ikke personlige eller fortrolige data. Din brug logges af sikkerhedshensyn og for at forbedre NVIDIAs produkter og tjenester. De loggede sessionsdata, der bruges til forbedringsformål, er ikke knyttet til din identitet eller nogen vedvarende identifikator. For mere information om vores databehandlingspraksis, se vores [privatlivspolitik](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ved at interagere med dette endpoint giver du samtykke til vores indsamling, registrering og brug af sådanne oplysninger samt [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: Anmodninger opbevares i 30 dage i overensstemmelse med [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). - Anthropic APIs: Anmodninger opbevares i 30 dage i overensstemmelse med [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). +- Muse Spark 1.3 Contributor Free: Kraftigt nedsatte tokenpriser til gengæld for tilladelse til at bruge dine prompts og svar til at træne fremtidige Meta-modeller. [Læs mere](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free: Kraftigt nedsatte tokenpriser til gengæld for tilladelse til at bruge dine prompts og svar til at træne fremtidige Meta-modeller. [Læs mere](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx index f15dfd411469..fa284e851070 100644 --- a/packages/web/src/content/docs/de/go.mdx +++ b/packages/web/src/content/docs/de/go.mdx @@ -65,6 +65,7 @@ Die aktuelle Liste der Modelle umfasst: - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([begrenzte Regionen](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([begrenzte Regionen](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -109,6 +110,7 @@ Die folgende Tabelle zeigt eine geschätzte Anzahl von Anfragen basierend auf ty | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -135,6 +137,7 @@ Die Schätzungen basieren auf beobachteten Anfragemustern: - DeepSeek V4 Flash Vision Exp — 410 Input-, 71.300 Cached-, 310 Output-Tokens pro Anfrage - MiniMax M3 — 510 Input-, 56.000 Cached-, 190 Output-Tokens pro Anfrage - MiniMax M2.7 — 300 Input-, 55.000 Cached-, 125 Output-Tokens pro Anfrage +- Muse Spark 1.3 Contributor — 620 Input-, 71.400 Cached-, 300 Output-Tokens pro Anfrage - Muse Spark 1.2 Contributor — 620 Input-, 71.400 Cached-, 300 Output-Tokens pro Anfrage - Qwen3.8 Max — 420 Input-, 66.000 Cached-, 200 Output-Tokens pro Anfrage - Qwen3.8 Flash — 600 Input-, 58.000 Cached-, 200 Output-Tokens pro Anfrage @@ -167,6 +170,7 @@ Die Schätzungen basieren außerdem auf den folgenden Preisen pro 1M Tokens und | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -240,6 +244,7 @@ Du kannst auf die Go-Modelle auch über die folgenden API-Endpunkte zugreifen. | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -286,6 +291,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | Nicht verwendet | 0 Tage | | MiniMax M3 | Nicht verwendet | 0 Tage | | MiniMax M2.7 | Nicht verwendet | 0 Tage | +| Muse Spark 1.3 Contributor | Ja | Kein ZDR | | Muse Spark 1.2 Contributor | Ja | Kein ZDR | | DeepSeek V4 Pro | Nicht verwendet | 0 Tage | | DeepSeek V4 Flash | Nicht verwendet | 0 Tage | @@ -295,6 +301,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDR deaktiviert wichtige API-Funktionen, die von gespeicherten Daten abhängen, einschließlich der zustandsbehafteten Responses API, Files and Collections und der Batch API. [Mehr erfahren](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Für die Nutzung aller API-Funktionen werden Protokolle zur Missbrauchsüberwachung erstellt und bis zu 30 Tage lang aufbewahrt. [Mehr erfahren](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). +- **Muse Spark 1.3 Contributor:** Stark vergünstigte Tokenpreise im Gegenzug für die Erlaubnis, deine Prompts und Vervollständigungen zum Trainieren zukünftiger Meta-Modelle zu verwenden. Die Verfügbarkeit ist auf Regionen beschränkt, die gemäß der [Richtlinie zur geografischen Nutzung](https://ai.developer.meta.com/legal/geographic-use-policy) von Meta zulässig sind. [Mehr erfahren](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **Muse Spark 1.2 Contributor:** Stark vergünstigte Tokenpreise im Gegenzug für die Erlaubnis, deine Prompts und Vervollständigungen zum Trainieren zukünftiger Meta-Modelle zu verwenden. Die Verfügbarkeit ist auf Regionen beschränkt, die gemäß der [Richtlinie zur geografischen Nutzung](https://ai.developer.meta.com/legal/geographic-use-policy) von Meta zulässig sind. [Mehr erfahren](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** Die ZDR-Vereinbarung wird monatlich erneuert. Die aktuelle Vereinbarung gilt bis einschließlich 31. August 2026. diff --git a/packages/web/src/content/docs/de/zen.mdx b/packages/web/src/content/docs/de/zen.mdx index 775c1c4bf058..c50fbac775c6 100644 --- a/packages/web/src/content/docs/de/zen.mdx +++ b/packages/web/src/content/docs/de/zen.mdx @@ -82,6 +82,7 @@ Du kannst auch über die folgenden API-Endpunkte auf unsere Modelle zugreifen. | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -113,6 +114,7 @@ Du kannst auch über die folgenden API-Endpunkte auf unsere Modelle zugreifen. | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | Die [Model-ID](/docs/config/#models) in deiner OpenCode-Konfiguration verwendet das Format `opencode/`. Für GPT 5.5 würdest du zum Beispiel `opencode/gpt-5.5` in deiner Konfiguration verwenden. @@ -140,6 +142,7 @@ Wir unterstützen ein Pay-as-you-go-Modell. Unten findest du die Preise **pro 1M | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -171,6 +174,7 @@ Wir unterstützen ein Pay-as-you-go-Modell. Unten findest du die Preise **pro 1M | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -227,6 +231,7 @@ Die kostenlosen Modelle: - Nemotron 3 Ultra Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. - Nemotron 3.5 Lightning Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. - Big Pickle ist ein Stealth-Modell, das für begrenzte Zeit kostenlos auf OpenCode verfügbar ist. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. +- Muse Spark 1.3 Contributor Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. - Muse Spark 1.2 Contributor Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. Kontaktiere uns, wenn du Fragen hast. @@ -285,6 +290,7 @@ Alle unsere Modelle werden in den USA gehostet. Unsere Provider folgen einer Zer - Nemotron 3.5 Lightning Free (kostenlose NVIDIA-Endpunkte): Nur für Testzwecke — übermitteln Sie keine personenbezogenen oder vertraulichen Daten. Ihre Nutzung wird zu Sicherheitszwecken und zur Verbesserung der Produkte und Dienste von NVIDIA protokolliert. Die zu Verbesserungszwecken protokollierten Sitzungsdaten sind nicht mit Ihrer Identität oder einem dauerhaften Identifikator verknüpft. Weitere Informationen zu unseren Datenverarbeitungspraktiken finden Sie in unserer [Datenschutzrichtlinie](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Durch die Interaktion mit diesem Endpunkt stimmen Sie unserer Erhebung, Aufzeichnung und Nutzung solcher Informationen sowie den [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) zu. - OpenAI APIs: Anfragen werden in Übereinstimmung mit [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) 30 Tage lang gespeichert. - Anthropic APIs: Anfragen werden in Übereinstimmung mit [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage) 30 Tage lang gespeichert. +- Muse Spark 1.3 Contributor Free: Stark vergünstigte Token-Preise im Austausch für die Erlaubnis, deine Prompts und Completions zum Trainieren zukünftiger Meta-Modelle zu verwenden. [Mehr erfahren](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free: Stark vergünstigte Token-Preise im Austausch für die Erlaubnis, deine Prompts und Completions zum Trainieren zukünftiger Meta-Modelle zu verwenden. [Mehr erfahren](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index e32c3038d743..8df4fa1f6f4b 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -73,6 +73,7 @@ La lista actual de modelos incluye: - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([regiones limitadas](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([regiones limitadas](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -117,6 +118,7 @@ La siguiente tabla proporciona una cantidad estimada de peticiones basada en los | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -143,6 +145,7 @@ Las estimaciones se basan en los patrones de peticiones observados: - DeepSeek V4 Flash Vision Exp — 410 tokens de entrada, 71,300 en caché, 310 tokens de salida por petición - MiniMax M3 — 510 tokens de entrada, 56,000 en caché, 190 tokens de salida por petición - MiniMax M2.7 — 300 tokens de entrada, 55,000 en caché, 125 tokens de salida por petición +- Muse Spark 1.3 Contributor — 620 tokens de entrada, 71,400 en caché, 300 tokens de salida por petición - Muse Spark 1.2 Contributor — 620 tokens de entrada, 71,400 en caché, 300 tokens de salida por petición - Qwen3.8 Max — 420 tokens de entrada, 66,000 en caché, 200 tokens de salida por petición - Qwen3.8 Flash — 600 tokens de entrada, 58,000 en caché, 200 tokens de salida por petición @@ -175,6 +178,7 @@ Las estimaciones también se basan en los siguientes precios por 1M tokens y en | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -250,6 +254,7 @@ También puedes acceder a los modelos de Go a través de los siguientes endpoint | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -298,6 +303,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | No utilizado | 0 días | | MiniMax M3 | No utilizado | 0 días | | MiniMax M2.7 | No utilizado | 0 días | +| Muse Spark 1.3 Contributor | Sí | Sin ZDR | | Muse Spark 1.2 Contributor | Sí | Sin ZDR | | DeepSeek V4 Pro | No utilizado | 0 días | | DeepSeek V4 Flash | No utilizado | 0 días | @@ -307,6 +313,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDR deshabilita funciones importantes de la API que dependen de datos almacenados, incluidas la Responses API con estado, Files and Collections y la Batch API. [Más información](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Se generan registros de supervisión de abusos para todo el uso de funciones de la API y se conservan durante un máximo de 30 días. [Más información](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). +- **Muse Spark 1.3 Contributor:** Precios de tokens muy reducidos a cambio de permitir que tus prompts y las respuestas generadas se utilicen para entrenar futuros modelos de Meta. La disponibilidad está limitada a las regiones permitidas por la [Política de uso geográfico](https://ai.developer.meta.com/legal/geographic-use-policy) de Meta. [Más información](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **Muse Spark 1.2 Contributor:** Precios de tokens muy reducidos a cambio de permitir que tus prompts y las respuestas generadas se utilicen para entrenar futuros modelos de Meta. La disponibilidad está limitada a las regiones permitidas por la [Política de uso geográfico](https://ai.developer.meta.com/legal/geographic-use-policy) de Meta. [Más información](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** El acuerdo de ZDR se renueva mensualmente. El acuerdo actual es válido hasta el 31 de agosto de 2026. diff --git a/packages/web/src/content/docs/es/zen.mdx b/packages/web/src/content/docs/es/zen.mdx index 2be708275691..83f0ef13dcdf 100644 --- a/packages/web/src/content/docs/es/zen.mdx +++ b/packages/web/src/content/docs/es/zen.mdx @@ -91,6 +91,7 @@ También puedes acceder a nuestros modelos a través de los siguientes endpoints | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -122,6 +123,7 @@ También puedes acceder a nuestros modelos a través de los siguientes endpoints | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | El [identificador del modelo](/docs/config/#models) en tu configuración de OpenCode @@ -151,6 +153,7 @@ Admitimos un modelo de pago por uso. A continuación se muestran los precios **p | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -182,6 +185,7 @@ Admitimos un modelo de pago por uso. A continuación se muestran los precios **p | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -238,6 +242,7 @@ Los modelos gratuitos: - Nemotron 3 Ultra Free está disponible en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. - Nemotron 3.5 Lightning Free está disponible en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. - Big Pickle es un modelo stealth que es gratuito en OpenCode por tiempo limitado. El equipo está usando este tiempo para recopilar comentarios y mejorar el modelo. +- Muse Spark 1.3 Contributor Free está disponible en OpenCode por tiempo limitado. El equipo está aprovechando este período para recopilar comentarios y mejorar el modelo. - Muse Spark 1.2 Contributor Free está disponible en OpenCode por tiempo limitado. El equipo está aprovechando este período para recopilar comentarios y mejorar el modelo. Contáctanos si tienes alguna pregunta. @@ -299,6 +304,7 @@ Todos nuestros modelos están alojados en US. Nuestros proveedores siguen una po - Nemotron 3.5 Lightning Free (endpoints gratuitos de NVIDIA): Solo para uso de prueba — no envíes datos personales ni confidenciales. Tu uso se registra con fines de seguridad y para mejorar los productos y servicios de NVIDIA. Los datos de sesión registrados con fines de mejora no están vinculados a tu identidad ni a ningún identificador persistente. Para obtener más información sobre nuestras prácticas de procesamiento de datos, consulta nuestra [Política de privacidad](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Al interactuar con este endpoint, aceptas que recopilemos, registremos y usemos dicha información, así como los [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: Las solicitudes se conservan durante 30 días de acuerdo con [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). - Anthropic APIs: Las solicitudes se conservan durante 30 días de acuerdo con [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). +- Muse Spark 1.3 Contributor Free: Tarifas de tokens con grandes descuentos a cambio de permiso para usar tus prompts y respuestas para entrenar futuros modelos de Meta. [Más información](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free: Tarifas de tokens con grandes descuentos a cambio de permiso para usar tus prompts y respuestas para entrenar futuros modelos de Meta. [Más información](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx index 6f08343c4ae9..b9770115d6c9 100644 --- a/packages/web/src/content/docs/fr/go.mdx +++ b/packages/web/src/content/docs/fr/go.mdx @@ -63,6 +63,7 @@ La liste actuelle des modèles comprend : - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([régions limitées](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([régions limitées](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -107,6 +108,7 @@ Le tableau ci-dessous fournit une estimation du nombre de requêtes basée sur d | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -133,6 +135,7 @@ Les estimations sont basées sur les schémas de requêtes observés : - DeepSeek V4 Flash Vision Exp — 410 tokens en entrée, 71,300 en cache, 310 tokens en sortie par requête - MiniMax M3 — 510 tokens en entrée, 56,000 en cache, 190 tokens en sortie par requête - MiniMax M2.7 — 300 tokens en entrée, 55,000 en cache, 125 tokens en sortie par requête +- Muse Spark 1.3 Contributor — 620 tokens en entrée, 71,400 en cache, 300 tokens en sortie par requête - Muse Spark 1.2 Contributor — 620 tokens en entrée, 71,400 en cache, 300 tokens en sortie par requête - Qwen3.8 Max — 420 tokens en entrée, 66,000 en cache, 200 tokens en sortie par requête - Qwen3.8 Flash — 600 tokens en entrée, 58,000 en cache, 200 tokens en sortie par requête @@ -165,6 +168,7 @@ Les estimations sont également basées sur les prix suivants par 1M tokens et s | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -238,6 +242,7 @@ Vous pouvez également accéder aux modèles Go via les points de terminaison d' | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -284,6 +289,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | Non utilisé | 0 jour | | MiniMax M3 | Non utilisé | 0 jour | | MiniMax M2.7 | Non utilisé | 0 jour | +| Muse Spark 1.3 Contributor | Oui | Pas de ZDR | | Muse Spark 1.2 Contributor | Oui | Pas de ZDR | | DeepSeek V4 Pro | Non utilisé | 0 jour | | DeepSeek V4 Flash | Non utilisé | 0 jour | @@ -293,6 +299,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** Le ZDR désactive d’importantes fonctionnalités API qui dépendent des données stockées, notamment Responses API avec état, Files and Collections et Batch API. [En savoir plus](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Des journaux de surveillance des abus sont générés pour toute utilisation des fonctionnalités API et conservés pendant un maximum de 30 jours. [En savoir plus](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). +- **Muse Spark 1.3 Contributor:** Des tarifs de tokens fortement réduits en échange de l’autorisation d’utiliser vos prompts et vos complétions pour entraîner de futurs modèles Meta. La disponibilité est limitée aux régions autorisées par la [Politique d’utilisation géographique](https://ai.developer.meta.com/legal/geographic-use-policy) de Meta. [En savoir plus](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **Muse Spark 1.2 Contributor:** Des tarifs de tokens fortement réduits en échange de l’autorisation d’utiliser vos prompts et vos complétions pour entraîner de futurs modèles Meta. La disponibilité est limitée aux régions autorisées par la [Politique d’utilisation géographique](https://ai.developer.meta.com/legal/geographic-use-policy) de Meta. [En savoir plus](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** L’accord ZDR est renouvelé chaque mois. L’accord actuel est valable jusqu’au 31 août 2026. diff --git a/packages/web/src/content/docs/fr/zen.mdx b/packages/web/src/content/docs/fr/zen.mdx index 25465cc1dbda..fb7312af3a02 100644 --- a/packages/web/src/content/docs/fr/zen.mdx +++ b/packages/web/src/content/docs/fr/zen.mdx @@ -82,6 +82,7 @@ Vous pouvez également accéder à nos modèles via les points de terminaison AP | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -113,6 +114,7 @@ Vous pouvez également accéder à nos modèles via les points de terminaison AP | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | Le [model id](/docs/config/#models) dans votre configuration OpenCode utilise le format `opencode/`. Par exemple, pour GPT 5.5, vous utiliseriez `opencode/gpt-5.5` dans votre configuration. @@ -140,6 +142,7 @@ Nous prenons en charge un modèle de paiement à l'utilisation. Vous trouverez c | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -171,6 +174,7 @@ Nous prenons en charge un modèle de paiement à l'utilisation. Vous trouverez c | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -227,6 +231,7 @@ Les modèles gratuits : - Nemotron 3 Ultra Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. - Nemotron 3.5 Lightning Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. - Big Pickle est un modèle stealth gratuit sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. +- Muse Spark 1.3 Contributor Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. - Muse Spark 1.2 Contributor Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. Contactez-nous si vous avez des questions. @@ -285,6 +290,7 @@ Tous nos modèles sont hébergés aux US. Nos fournisseurs suivent une politique - Nemotron 3.5 Lightning Free (endpoints NVIDIA gratuits) : Réservé à un usage d'essai — n'envoyez pas de données personnelles ou confidentielles. Votre utilisation est journalisée à des fins de sécurité et pour améliorer les produits et services de NVIDIA. Les données de session journalisées à des fins d'amélioration ne sont pas liées à votre identité ni à un quelconque identifiant persistant. Pour plus d'informations sur nos pratiques de traitement des données, consultez notre [Politique de confidentialité](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). En interagissant avec cet endpoint, vous consentez à notre collecte, à notre enregistrement et à notre utilisation de ces informations ainsi qu'aux [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs : Les requêtes sont conservées pendant 30 jours conformément à [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). - Anthropic APIs : Les requêtes sont conservées pendant 30 jours conformément à [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). +- Muse Spark 1.3 Contributor Free : Tarification des tokens fortement réduite en échange de l'autorisation d'utiliser vos prompts et complétions pour entraîner les futurs modèles Meta. [En savoir plus](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free : Tarification des tokens fortement réduite en échange de l'autorisation d'utiliser vos prompts et complétions pour entraîner les futurs modèles Meta. [En savoir plus](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index f6430f0c4610..58bb121b777e 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -73,6 +73,7 @@ The current list of models includes: - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([limited regions](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([limited regions](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -129,6 +130,7 @@ The table below provides an estimated request count based on typical Go usage pa | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -155,6 +157,7 @@ The estimates are based on observed request patterns: - DeepSeek V4 Flash Vision Exp — 410 input, 71,300 cached, 310 output tokens per request - MiniMax M3 — 510 input, 56,000 cached, 190 output tokens per request - MiniMax M2.7 — 300 input, 55,000 cached, 125 output tokens per request +- Muse Spark 1.3 Contributor — 620 input, 71,400 cached, 300 output tokens per request - Muse Spark 1.2 Contributor — 620 input, 71,400 cached, 300 output tokens per request - MiMo-V2.5 — 830 input, 71,500 cached, 295 output tokens per request - MiMo-V2.5-Pro — 790 input, 86,000 cached, 305 output tokens per request @@ -187,6 +190,7 @@ The estimates are also based on the following prices per 1M tokens and the month | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -262,6 +266,7 @@ You can also access Go models through the following API endpoints. | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -310,6 +315,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | Not used | 0 days | | MiniMax M3 | Not used | 0 days | | MiniMax M2.7 | Not used | 0 days | +| Muse Spark 1.3 Contributor | Yes | Not ZDR | | Muse Spark 1.2 Contributor | Yes | Not ZDR | | DeepSeek V4 Pro | Not used | 0 days\* | | DeepSeek V4 Flash | Not used | 0 days\* | @@ -319,6 +325,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDR disables important API features that depend on stored data, including the stateful Responses API, Files and Collections, and the Batch API. [Learn more](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Abuse monitoring logs are generated for all API feature usage and retained for up to 30 days. [Learn more](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). +- **Muse Spark 1.3 Contributor:** Heavily discounted token pricing in exchange for permission to use your prompts and completions to train future Meta models. Availability is limited to regions permitted by Meta's [Geographic Use Policy](https://ai.developer.meta.com/legal/geographic-use-policy). [Learn more](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **Muse Spark 1.2 Contributor:** Heavily discounted token pricing in exchange for permission to use your prompts and completions to train future Meta models. Availability is limited to regions permitted by Meta's [Geographic Use Policy](https://ai.developer.meta.com/legal/geographic-use-policy). [Learn more](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek:** ZDR agreement is renewed monthly. The current agreement is valid through August 31, 2026. diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx index 10697cfb944d..b4e294369009 100644 --- a/packages/web/src/content/docs/it/go.mdx +++ b/packages/web/src/content/docs/it/go.mdx @@ -71,6 +71,7 @@ L'elenco attuale dei modelli include: - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([regioni limitate](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([regioni limitate](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -115,6 +116,7 @@ La tabella seguente fornisce una stima del conteggio delle richieste in base a p | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -141,6 +143,7 @@ Le stime si basano sui pattern di richieste osservati: - DeepSeek V4 Flash Vision Exp — 410 di input, 71.300 in cache, 310 token di output per richiesta - MiniMax M3 — 510 di input, 56.000 in cache, 190 token di output per richiesta - MiniMax M2.7 — 300 di input, 55.000 in cache, 125 token di output per richiesta +- Muse Spark 1.3 Contributor — 620 di input, 71.400 in cache, 300 token di output per richiesta - Muse Spark 1.2 Contributor — 620 di input, 71.400 in cache, 300 token di output per richiesta - Qwen3.8 Max — 420 di input, 66.000 in cache, 200 token di output per richiesta - Qwen3.8 Flash — 600 di input, 58.000 in cache, 200 token di output per richiesta @@ -173,6 +176,7 @@ Le stime si basano anche sui seguenti prezzi per 1M token e sull'utilizzo mensil | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -248,6 +252,7 @@ Puoi anche accedere ai modelli Go tramite i seguenti endpoint API. | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -296,6 +301,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | Non utilizzato | 0 giorni | | MiniMax M3 | Non utilizzato | 0 giorni | | MiniMax M2.7 | Non utilizzato | 0 giorni | +| Muse Spark 1.3 Contributor | Sì | Non ZDR | | Muse Spark 1.2 Contributor | Sì | Non ZDR | | DeepSeek V4 Pro | Non utilizzato | 0 giorni | | DeepSeek V4 Flash | Non utilizzato | 0 giorni | @@ -305,6 +311,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDR disabilita importanti funzionalità API che dipendono dai dati archiviati, tra cui la Responses API con stato, Files and Collections e Batch API. [Scopri di più](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** I log di monitoraggio degli abusi vengono generati per l'utilizzo di tutte le funzionalità API e conservati per un massimo di 30 giorni. [Scopri di più](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). +- **Muse Spark 1.3 Contributor:** Prezzi dei token fortemente scontati in cambio dell'autorizzazione a utilizzare i tuoi prompt e completamenti per addestrare futuri modelli Meta. La disponibilità è limitata alle regioni consentite dalla [Politica sull'uso geografico](https://ai.developer.meta.com/legal/geographic-use-policy) di Meta. [Scopri di più](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **Muse Spark 1.2 Contributor:** Prezzi dei token fortemente scontati in cambio dell'autorizzazione a utilizzare i tuoi prompt e completamenti per addestrare futuri modelli Meta. La disponibilità è limitata alle regioni consentite dalla [Politica sull'uso geografico](https://ai.developer.meta.com/legal/geographic-use-policy) di Meta. [Scopri di più](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** L'accordo ZDR viene rinnovato mensilmente. L'accordo attuale è valido fino al 31 agosto 2026. diff --git a/packages/web/src/content/docs/it/zen.mdx b/packages/web/src/content/docs/it/zen.mdx index 6e9748a25451..b2b5ee75e8d4 100644 --- a/packages/web/src/content/docs/it/zen.mdx +++ b/packages/web/src/content/docs/it/zen.mdx @@ -91,6 +91,7 @@ Puoi anche accedere ai nostri modelli tramite i seguenti endpoint API. | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -122,6 +123,7 @@ Puoi anche accedere ai nostri modelli tramite i seguenti endpoint API. | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | Il [model id](/docs/config/#models) nella config di OpenCode @@ -151,6 +153,7 @@ Supportiamo un modello pay-as-you-go. Qui sotto trovi i prezzi **per 1M token**. | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -182,6 +185,7 @@ Supportiamo un modello pay-as-you-go. Qui sotto trovi i prezzi **per 1M token**. | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -238,6 +242,7 @@ I modelli gratuiti: - Nemotron 3 Ultra Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. - Nemotron 3.5 Lightning Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. - Big Pickle è un modello stealth che è gratuito su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. +- Muse Spark 1.3 Contributor Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. - Muse Spark 1.2 Contributor Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. Contattaci se hai domande. @@ -299,6 +304,7 @@ Tutti i nostri modelli sono ospitati negli US. I nostri provider seguono una pol - Nemotron 3.5 Lightning Free (endpoint NVIDIA gratuiti): solo per uso di prova — non inviare dati personali o riservati. Il tuo utilizzo viene registrato per finalità di sicurezza e per migliorare i prodotti e i servizi di NVIDIA. I dati di sessione registrati a fini di miglioramento non sono collegati alla tua identità né ad alcun identificatore persistente. Per maggiori informazioni sulle nostre pratiche di trattamento dei dati, consulta la nostra [Informativa sulla privacy](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Interagendo con questo endpoint, acconsenti alla nostra raccolta, registrazione e utilizzo di tali informazioni e ai [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: le richieste vengono conservate per 30 giorni in conformità con [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). - Anthropic APIs: le richieste vengono conservate per 30 giorni in conformità con [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). +- Muse Spark 1.3 Contributor Free: prezzi dei token fortemente scontati in cambio dell'autorizzazione a utilizzare i tuoi prompt e completamenti per addestrare i futuri modelli Meta. [Scopri di più](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free: prezzi dei token fortemente scontati in cambio dell'autorizzazione a utilizzare i tuoi prompt e completamenti per addestrare i futuri modelli Meta. [Scopri di più](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx index e8e83effcc28..bb2c59bf0ff5 100644 --- a/packages/web/src/content/docs/ja/go.mdx +++ b/packages/web/src/content/docs/ja/go.mdx @@ -63,6 +63,7 @@ OpenCode Goをサブスクライブできるのは、1つのワークスペー - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([一部の地域に限定](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([一部の地域に限定](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -107,6 +108,7 @@ OpenCode Goには以下の制限が含まれています: | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -133,6 +135,7 @@ OpenCode Goには以下の制限が含まれています: - DeepSeek V4 Flash Vision Exp — リクエストあたり 入力 410トークン、キャッシュ 71,300トークン、出力 310トークン - MiniMax M3 — リクエストあたり 入力 510トークン、キャッシュ 56,000トークン、出力 190トークン - MiniMax M2.7 — リクエストあたり 入力 300トークン、キャッシュ 55,000トークン、出力 125トークン +- Muse Spark 1.3 Contributor — リクエストあたり 入力 620トークン、キャッシュ 71,400トークン、出力 300トークン - Muse Spark 1.2 Contributor — リクエストあたり 入力 620トークン、キャッシュ 71,400トークン、出力 300トークン - Qwen3.8 Max — リクエストあたり 入力 420トークン、キャッシュ 66,000トークン、出力 200トークン - Qwen3.8 Flash — リクエストあたり 入力 600トークン、キャッシュ 58,000トークン、出力 200トークン @@ -165,6 +168,7 @@ OpenCode Goには以下の制限が含まれています: | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -238,6 +242,7 @@ Goでは月額$10を支払い、その6倍の利用枠を提供することを | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -284,6 +289,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | 使用なし | 0日 | | MiniMax M3 | 使用なし | 0日 | | MiniMax M2.7 | 使用なし | 0日 | +| Muse Spark 1.3 Contributor | はい | ZDRではない | | Muse Spark 1.2 Contributor | はい | ZDRではない | | DeepSeek V4 Pro | 使用なし | 0日 | | DeepSeek V4 Flash | 使用なし | 0日 | @@ -293,6 +299,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDRでは、保存データに依存する重要なAPI機能(ステートフルなResponses API、Files and Collections、Batch APIなど)が無効になります。[詳しく見る](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 - **GPT 5.6 Luna:** 不正使用監視ログはすべてのAPI機能の使用時に生成され、最大30日間保持されます。[詳しく見る](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring)。 +- **Muse Spark 1.3 Contributor:** 将来のMetaモデルのトレーニングにプロンプトと生成結果を使用する許可と引き換えに、トークン料金が大幅に割引されます。利用できるのは、Metaの[地域別利用ポリシー](https://ai.developer.meta.com/legal/geographic-use-policy)で許可されている地域に限られます。[詳しく見る](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 - **Muse Spark 1.2 Contributor:** 将来のMetaモデルのトレーニングにプロンプトと生成結果を使用する許可と引き換えに、トークン料金が大幅に割引されます。利用できるのは、Metaの[地域別利用ポリシー](https://ai.developer.meta.com/legal/geographic-use-policy)で許可されている地域に限られます。[詳しく見る](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 - **DeepSeek V4 Flash:** ZDR契約は毎月更新されます。現在の契約は2026年8月31日まで有効です。 diff --git a/packages/web/src/content/docs/ja/zen.mdx b/packages/web/src/content/docs/ja/zen.mdx index d13665c72c5a..65d06b0195f2 100644 --- a/packages/web/src/content/docs/ja/zen.mdx +++ b/packages/web/src/content/docs/ja/zen.mdx @@ -82,6 +82,7 @@ OpenCode Zen は、OpenCode のほかのプロバイダーと同じように動 | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -113,6 +114,7 @@ OpenCode Zen は、OpenCode のほかのプロバイダーと同じように動 | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | OpenCode 設定で使う [model id](/docs/config/#models) は `opencode/` 形式です。たとえば、GPT 5.5 では設定に `opencode/gpt-5.5` を使用します。 @@ -140,6 +142,7 @@ https://opencode.ai/zen/v1/models | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -171,6 +174,7 @@ https://opencode.ai/zen/v1/models | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -227,6 +231,7 @@ https://opencode.ai/zen/v1/models - Nemotron 3 Ultra Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 - Nemotron 3.5 Lightning Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 - Big Pickle はステルスモデルで、期間限定で OpenCode で無料提供されています。チームはこの期間中にフィードバックを集め、モデルを改善しています。 +- Muse Spark 1.3 Contributor Free は期間限定で OpenCode で利用できます。チームはこの期間を活用してフィードバックを収集し、モデルを改善しています。 - Muse Spark 1.2 Contributor Free は期間限定で OpenCode で利用できます。チームはこの期間を活用してフィードバックを収集し、モデルを改善しています。 ご不明な点があれば、お問い合わせください。 @@ -285,6 +290,7 @@ https://opencode.ai/zen/v1/models - Nemotron 3.5 Lightning Free(NVIDIA の無料エンドポイント): 試用専用です — 個人情報や機密データは送信しないでください。お客様の利用は、セキュリティ目的および NVIDIA の製品とサービスの改善のために記録されます。改善目的で記録されたセッションデータは、お客様の身元や永続的な識別子とは関連付けられません。当社のデータ処理慣行の詳細については、[プライバシーポリシー](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)をご覧ください。このエンドポイントを利用することで、お客様はそのような情報の当社による収集、記録、利用、および [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) に同意したものとみなされます。 - OpenAI APIs: リクエストは [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) に従って 30 日間保持されます。 - Anthropic APIs: リクエストは [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage) に従って 30 日間保持されます。 +- Muse Spark 1.3 Contributor Free: 将来の Meta モデルのトレーニングにプロンプトと生成結果を使用する許可と引き換えに、トークン料金が大幅に割引されます。[詳しく見る](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 - Muse Spark 1.2 Contributor Free: 将来の Meta モデルのトレーニングにプロンプトと生成結果を使用する許可と引き換えに、トークン料金が大幅に割引されます。[詳しく見る](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 --- diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx index 5e4857073315..f020348bc1c9 100644 --- a/packages/web/src/content/docs/ko/go.mdx +++ b/packages/web/src/content/docs/ko/go.mdx @@ -63,6 +63,7 @@ workspace당 한 명의 멤버만 OpenCode Go를 구독할 수 있습니다. - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([일부 지역에서만 제공](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([일부 지역에서만 제공](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -107,6 +108,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -133,6 +135,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. - DeepSeek V4 Flash Vision Exp — 요청당 입력 410, 캐시 71,300, 출력 토큰 310 - MiniMax M3 — 요청당 입력 510, 캐시 56,000, 출력 토큰 190 - MiniMax M2.7 — 요청당 입력 300, 캐시 55,000, 출력 토큰 125 +- Muse Spark 1.3 Contributor — 요청당 입력 620, 캐시 71,400, 출력 토큰 300 - Muse Spark 1.2 Contributor — 요청당 입력 620, 캐시 71,400, 출력 토큰 300 - Qwen3.8 Max — 요청당 입력 420, 캐시 66,000, 출력 토큰 200 - Qwen3.8 Flash — 요청당 입력 600, 캐시 58,000, 출력 토큰 200 @@ -165,6 +168,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -238,6 +242,7 @@ Go에서는 월 $10를 지불하며, 저희는 그 6배의 사용량을 제공 | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -284,6 +289,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | 사용되지 않음 | 0일 | | MiniMax M3 | 사용되지 않음 | 0일 | | MiniMax M2.7 | 사용되지 않음 | 0일 | +| Muse Spark 1.3 Contributor | 예 | ZDR 아님 | | Muse Spark 1.2 Contributor | 예 | ZDR 아님 | | DeepSeek V4 Pro | 사용되지 않음 | 0일 | | DeepSeek V4 Flash | 사용되지 않음 | 0일 | @@ -293,6 +299,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDR은 저장된 데이터에 의존하는 중요한 API 기능(상태 저장형 Responses API, Files and Collections, Batch API 포함)을 비활성화합니다. [자세히 알아보기](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** 모든 API 기능 사용에 대해 악용 모니터링 로그가 생성되며 최대 30일 동안 보존됩니다. [자세히 알아보기](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). +- **Muse Spark 1.3 Contributor:** 향후 Meta 모델 학습에 사용자의 프롬프트와 생성 결과를 사용할 수 있도록 허용하는 대신 토큰 가격이 대폭 할인됩니다. Meta의 [지역별 사용 정책](https://ai.developer.meta.com/legal/geographic-use-policy)에서 허용하는 지역에서만 이용할 수 있습니다. [자세히 알아보기](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **Muse Spark 1.2 Contributor:** 향후 Meta 모델 학습에 사용자의 프롬프트와 생성 결과를 사용할 수 있도록 허용하는 대신 토큰 가격이 대폭 할인됩니다. Meta의 [지역별 사용 정책](https://ai.developer.meta.com/legal/geographic-use-policy)에서 허용하는 지역에서만 이용할 수 있습니다. [자세히 알아보기](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** ZDR 계약은 매월 갱신됩니다. 현재 계약은 2026년 8월 31일까지 유효합니다. diff --git a/packages/web/src/content/docs/ko/zen.mdx b/packages/web/src/content/docs/ko/zen.mdx index 20a7235b1956..3f5ab69d8ad4 100644 --- a/packages/web/src/content/docs/ko/zen.mdx +++ b/packages/web/src/content/docs/ko/zen.mdx @@ -82,6 +82,7 @@ OpenCode Zen은 OpenCode의 다른 provider와 똑같이 작동합니다. | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -113,6 +114,7 @@ OpenCode Zen은 OpenCode의 다른 provider와 똑같이 작동합니다. | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | OpenCode config에서 사용하는 [모델 ID](/docs/config/#models)는 `opencode/` 형식입니다. 예를 들어 GPT 5.5를 사용하려면 config에서 `opencode/gpt-5.5`를 사용하면 됩니다. @@ -140,6 +142,7 @@ https://opencode.ai/zen/v1/models | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -171,6 +174,7 @@ https://opencode.ai/zen/v1/models | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -227,6 +231,7 @@ https://opencode.ai/zen/v1/models - Nemotron 3 Ultra Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. - Nemotron 3.5 Lightning Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. - Big Pickle은 한정된 기간 동안 OpenCode에서 무료로 제공되는 stealth model입니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. +- Muse Spark 1.3 Contributor Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간을 활용해 피드백을 수집하고 모델을 개선하고 있습니다. - Muse Spark 1.2 Contributor Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간을 활용해 피드백을 수집하고 모델을 개선하고 있습니다. 궁금한 점이 있으면 Contact us로 문의해 주세요. @@ -285,6 +290,7 @@ https://opencode.ai/zen/v1/models - Nemotron 3.5 Lightning Free(NVIDIA 무료 엔드포인트): 평가판 전용이며 — 개인 정보나 기밀 데이터는 제출하지 마세요. 사용 내역은 보안 목적과 NVIDIA 제품 및 서비스 개선을 위해 기록됩니다. 개선 목적으로 기록된 세션 데이터는 사용자의 신원이나 영구 식별자와 연결되지 않습니다. 당사의 데이터 처리 관행에 대한 자세한 내용은 [개인정보처리방침](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)을 참조하세요. 이 엔드포인트와 상호 작용함으로써 사용자는 당사가 이러한 정보를 수집, 기록, 사용하는 것과 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)에 동의하게 됩니다. - OpenAI APIs: 요청은 [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data)에 따라 30일 동안 보관됩니다. - Anthropic APIs: 요청은 [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage)에 따라 30일 동안 보관됩니다. +- Muse Spark 1.3 Contributor Free: 대폭 할인된 토큰 가격을 제공하는 대신, 사용자의 프롬프트와 생성 결과를 향후 Meta 모델 학습에 사용할 수 있도록 허용해야 합니다. [자세히 알아보기](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free: 대폭 할인된 토큰 가격을 제공하는 대신, 사용자의 프롬프트와 생성 결과를 향후 Meta 모델 학습에 사용할 수 있도록 허용해야 합니다. [자세히 알아보기](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx index 6edf6c24e8cc..6322a03dc316 100644 --- a/packages/web/src/content/docs/nb/go.mdx +++ b/packages/web/src/content/docs/nb/go.mdx @@ -73,6 +73,7 @@ Den nåværende listen over modeller inkluderer: - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([begrensede regioner](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([begrensede regioner](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -117,6 +118,7 @@ Tabellen nedenfor gir et estimert antall forespørsler basert på typiske bruksm | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -143,6 +145,7 @@ Estimatene er basert på observerte forespørselsmønstre: - DeepSeek V4 Flash Vision Exp — 410 input, 71 300 bufret, 310 output-tokens per forespørsel - MiniMax M3 — 510 input, 56 000 bufret, 190 output-tokens per forespørsel - MiniMax M2.7 — 300 input, 55 000 bufret, 125 output-tokens per forespørsel +- Muse Spark 1.3 Contributor — 620 input, 71 400 bufret, 300 output-tokens per forespørsel - Muse Spark 1.2 Contributor — 620 input, 71 400 bufret, 300 output-tokens per forespørsel - Qwen3.8 Max — 420 input, 66 000 bufret, 200 output-tokens per forespørsel - Qwen3.8 Flash — 600 input, 58 000 bufret, 200 output-tokens per forespørsel @@ -175,6 +178,7 @@ Estimatene er også basert på følgende priser per 1M tokens og den månedlige | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -250,6 +254,7 @@ Du kan også få tilgang til Go-modeller gjennom følgende API-endepunkter. | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -298,6 +303,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | Brukes ikke | 0 dager | | MiniMax M3 | Brukes ikke | 0 dager | | MiniMax M2.7 | Brukes ikke | 0 dager | +| Muse Spark 1.3 Contributor | Ja | Ikke ZDR | | Muse Spark 1.2 Contributor | Ja | Ikke ZDR | | DeepSeek V4 Pro | Brukes ikke | 0 dager | | DeepSeek V4 Flash | Brukes ikke | 0 dager | @@ -307,6 +313,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDR deaktiverer viktige API-funksjoner som er avhengige av lagrede data, inkludert den tilstandsbaserte Responses API, Files and Collections og Batch API. [Les mer](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Logger for overvåking av misbruk genereres for all bruk av API-funksjoner og oppbevares i opptil 30 dager. [Les mer](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). +- **Muse Spark 1.3 Contributor:** Kraftig rabatterte tokenpriser i bytte mot tillatelse til å bruke ledetekstene og fullføringene dine til å trene fremtidige Meta-modeller. Tilgjengeligheten er begrenset til regioner som er tillatt i henhold til [retningslinjene for geografisk bruk](https://ai.developer.meta.com/legal/geographic-use-policy) fra Meta. [Les mer](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **Muse Spark 1.2 Contributor:** Kraftig rabatterte tokenpriser i bytte mot tillatelse til å bruke ledetekstene og fullføringene dine til å trene fremtidige Meta-modeller. Tilgjengeligheten er begrenset til regioner som er tillatt i henhold til [retningslinjene for geografisk bruk](https://ai.developer.meta.com/legal/geographic-use-policy) fra Meta. [Les mer](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** ZDR-avtalen fornyes månedlig. Den gjeldende avtalen er gyldig til og med 31. august 2026. diff --git a/packages/web/src/content/docs/nb/zen.mdx b/packages/web/src/content/docs/nb/zen.mdx index b1737b9e3d25..8c5229040b85 100644 --- a/packages/web/src/content/docs/nb/zen.mdx +++ b/packages/web/src/content/docs/nb/zen.mdx @@ -91,6 +91,7 @@ Du kan også få tilgang til modellene våre gjennom følgende API-endepunkter. | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -122,6 +123,7 @@ Du kan også få tilgang til modellene våre gjennom følgende API-endepunkter. | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | [modell-id](/docs/config/#models) i OpenCode-konfigurasjonen din @@ -151,6 +153,7 @@ Vi støtter en pay-as-you-go-modell. Nedenfor er prisene **per 1M tokens**. | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -182,6 +185,7 @@ Vi støtter en pay-as-you-go-modell. Nedenfor er prisene **per 1M tokens**. | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -238,6 +242,7 @@ Gratis-modellene: - Nemotron 3 Ultra Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. - Nemotron 3.5 Lightning Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. - Big Pickle er en stealth-modell som er gratis på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. +- Muse Spark 1.3 Contributor Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. - Muse Spark 1.2 Contributor Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. Kontakt oss hvis du har spørsmål. @@ -299,6 +304,7 @@ Alle modellene våre hostes i US. Leverandørene våre følger en policy for zer - Nemotron 3.5 Lightning Free (gratis NVIDIA-endepunkter): Kun for prøvebruk — ikke send inn personopplysninger eller konfidensielle data. Bruken din logges av sikkerhetshensyn og for å forbedre NVIDIAs produkter og tjenester. Sesjonsdataene som logges for forbedringsformål, er ikke knyttet til identiteten din eller noen vedvarende identifikator. For mer informasjon om vår databehandlingspraksis, se vår [personvernerklæring](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ved å samhandle med dette endepunktet samtykker du til at vi samler inn, registrerer og bruker slik informasjon, samt til [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: Forespørsler lagres i 30 dager i samsvar med [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). - Anthropic APIs: Forespørsler lagres i 30 dager i samsvar med [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). +- Muse Spark 1.3 Contributor Free: Sterkt rabatterte tokenpriser mot tillatelse til å bruke ledetekstene og fullføringene dine til å trene fremtidige Meta-modeller. [Les mer](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free: Sterkt rabatterte tokenpriser mot tillatelse til å bruke ledetekstene og fullføringene dine til å trene fremtidige Meta-modeller. [Les mer](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx index 7cd50ed39cf1..0fc5d893642d 100644 --- a/packages/web/src/content/docs/pl/go.mdx +++ b/packages/web/src/content/docs/pl/go.mdx @@ -67,6 +67,7 @@ Obecna lista modeli obejmuje: - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([ograniczone regiony](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([ograniczone regiony](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -111,6 +112,7 @@ Poniższa tabela przedstawia szacunkową liczbę żądań na podstawie typowych | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -137,6 +139,7 @@ Szacunki te opierają się na zaobserwowanych wzorcach żądań: - DeepSeek V4 Flash Vision Exp — 410 tokenów wejściowych, 71 300 w pamięci podręcznej, 310 tokenów wyjściowych na żądanie - MiniMax M3 — 510 tokenów wejściowych, 56 000 w pamięci podręcznej, 190 tokenów wyjściowych na żądanie - MiniMax M2.7 — 300 tokenów wejściowych, 55 000 w pamięci podręcznej, 125 tokenów wyjściowych na żądanie +- Muse Spark 1.3 Contributor — 620 tokenów wejściowych, 71 400 w pamięci podręcznej, 300 tokenów wyjściowych na żądanie - Muse Spark 1.2 Contributor — 620 tokenów wejściowych, 71 400 w pamięci podręcznej, 300 tokenów wyjściowych na żądanie - Qwen3.8 Max — 420 tokenów wejściowych, 66 000 w pamięci podręcznej, 200 tokenów wyjściowych na żądanie - Qwen3.8 Flash — 600 tokenów wejściowych, 58 000 w pamięci podręcznej, 200 tokenów wyjściowych na żądanie @@ -169,6 +172,7 @@ Szacunki opierają się również na następujących cenach za 1M tokenów oraz | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -242,6 +246,7 @@ Możesz również uzyskać dostęp do modeli Go za pośrednictwem następującyc | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -290,6 +295,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | Niewykorzystywane | 0 dni | | MiniMax M3 | Niewykorzystywane | 0 dni | | MiniMax M2.7 | Niewykorzystywane | 0 dni | +| Muse Spark 1.3 Contributor | Tak | Nie ZDR | | Muse Spark 1.2 Contributor | Tak | Nie ZDR | | DeepSeek V4 Pro | Niewykorzystywane | 0 dni | | DeepSeek V4 Flash | Niewykorzystywane | 0 dni | @@ -299,6 +305,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDR wyłącza ważne funkcje API zależne od przechowywanych danych, w tym stanowy Responses API, Files and Collections oraz Batch API. [Dowiedz się więcej](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Dzienniki monitorowania nadużyć są generowane dla każdego użycia funkcji API i przechowywane przez maksymalnie 30 dni. [Dowiedz się więcej](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). +- **Muse Spark 1.3 Contributor:** Znacznie obniżone ceny tokenów w zamian za zgodę na wykorzystanie Twoich promptów i odpowiedzi do trenowania przyszłych modeli Meta. Dostępność jest ograniczona do regionów dozwolonych przez [Zasady korzystania w poszczególnych regionach geograficznych](https://ai.developer.meta.com/legal/geographic-use-policy) firmy Meta. [Dowiedz się więcej](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **Muse Spark 1.2 Contributor:** Znacznie obniżone ceny tokenów w zamian za zgodę na wykorzystanie Twoich promptów i odpowiedzi do trenowania przyszłych modeli Meta. Dostępność jest ograniczona do regionów dozwolonych przez [Zasady korzystania w poszczególnych regionach geograficznych](https://ai.developer.meta.com/legal/geographic-use-policy) firmy Meta. [Dowiedz się więcej](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** Umowa ZDR jest odnawiana co miesiąc. Obecna umowa obowiązuje do 31 sierpnia 2026 r. diff --git a/packages/web/src/content/docs/pl/zen.mdx b/packages/web/src/content/docs/pl/zen.mdx index a9820e0e09a8..c227b5b7c4bb 100644 --- a/packages/web/src/content/docs/pl/zen.mdx +++ b/packages/web/src/content/docs/pl/zen.mdx @@ -91,6 +91,7 @@ Możesz też uzyskać dostęp do naszych modeli przez poniższe endpointy API. | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -122,6 +123,7 @@ Możesz też uzyskać dostęp do naszych modeli przez poniższe endpointy API. | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | [ID modelu](/docs/config/#models) w Twojej konfiguracji OpenCode używa formatu @@ -151,6 +153,7 @@ Obsługujemy model pay-as-you-go. Poniżej znajdują się ceny **za 1M tokenów* | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -182,6 +185,7 @@ Obsługujemy model pay-as-you-go. Poniżej znajdują się ceny **za 1M tokenów* | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -238,6 +242,7 @@ Darmowe modele: - Nemotron 3 Ultra Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. - Nemotron 3.5 Lightning Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. - Big Pickle to stealth model, który jest darmowy w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. +- Muse Spark 1.3 Contributor Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. - Muse Spark 1.2 Contributor Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. Skontaktuj się z nami, jeśli masz pytania. @@ -299,6 +304,7 @@ Wszystkie nasze modele są hostowane w US. Nasi dostawcy stosują politykę zero - Nemotron 3.5 Lightning Free (darmowe endpointy NVIDIA): Tylko do użytku próbnego — nie przesyłaj danych osobowych ani poufnych. Twoje korzystanie jest rejestrowane w celach bezpieczeństwa oraz w celu ulepszania produktów i usług NVIDIA. Rejestrowane dane sesji wykorzystywane do celów ulepszania nie są powiązane z Twoją tożsamością ani żadnym trwałym identyfikatorem. Aby uzyskać więcej informacji o naszych praktykach przetwarzania danych, zapoznaj się z naszą [Polityką prywatności](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Korzystając z tego endpointu, wyrażasz zgodę na gromadzenie, rejestrowanie i wykorzystywanie przez nas takich informacji oraz na [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: Żądania są przechowywane przez 30 dni zgodnie z [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). - Anthropic APIs: Żądania są przechowywane przez 30 dni zgodnie z [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). +- Muse Spark 1.3 Contributor Free: Znacznie obniżone ceny tokenów w zamian za zgodę na wykorzystanie Twoich promptów i odpowiedzi do trenowania przyszłych modeli Meta. [Dowiedz się więcej](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free: Znacznie obniżone ceny tokenów w zamian za zgodę na wykorzystanie Twoich promptów i odpowiedzi do trenowania przyszłych modeli Meta. [Dowiedz się więcej](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index cc0bd44cd4b7..981a94dcc5a6 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -73,6 +73,7 @@ A lista atual de modelos inclui: - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([regiões limitadas](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([regiões limitadas](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -117,6 +118,7 @@ A tabela abaixo fornece uma contagem estimada de requisições com base nos padr | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -143,6 +145,7 @@ As estimativas se baseiam nos padrões de requisições observados: - DeepSeek V4 Flash Vision Exp — 410 tokens de entrada, 71.300 em cache, 310 tokens de saída por requisição - MiniMax M3 — 510 tokens de entrada, 56.000 em cache, 190 tokens de saída por requisição - MiniMax M2.7 — 300 tokens de entrada, 55.000 em cache, 125 tokens de saída por requisição +- Muse Spark 1.3 Contributor — 620 tokens de entrada, 71.400 em cache, 300 tokens de saída por requisição - Muse Spark 1.2 Contributor — 620 tokens de entrada, 71.400 em cache, 300 tokens de saída por requisição - Qwen3.8 Max — 420 tokens de entrada, 66.000 em cache, 200 tokens de saída por requisição - Qwen3.8 Flash — 600 tokens de entrada, 58.000 em cache, 200 tokens de saída por requisição @@ -175,6 +178,7 @@ As estimativas também se baseiam nos seguintes preços por 1M tokens e no uso m | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -250,6 +254,7 @@ Você também pode acessar os modelos do Go através dos seguintes endpoints de | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -298,6 +303,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | Não usado | 0 dias | | MiniMax M3 | Não usado | 0 dias | | MiniMax M2.7 | Não usado | 0 dias | +| Muse Spark 1.3 Contributor | Sim | Não é ZDR | | Muse Spark 1.2 Contributor | Sim | Não é ZDR | | DeepSeek V4 Pro | Não usado | 0 dias | | DeepSeek V4 Flash | Não usado | 0 dias | @@ -307,6 +313,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** O ZDR desativa recursos importantes da API que dependem de dados armazenados, incluindo a Responses API com estado, Files and Collections e a Batch API. [Saiba mais](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Logs de monitoramento de abuso são gerados para todo uso de recursos da API e retidos por até 30 dias. [Saiba mais](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). +- **Muse Spark 1.3 Contributor:** Preços de tokens com grandes descontos em troca da permissão para usar seus prompts e respostas geradas para treinar futuros modelos da Meta. A disponibilidade é limitada às regiões permitidas pela [Política de Uso Geográfico](https://ai.developer.meta.com/legal/geographic-use-policy) da Meta. [Saiba mais](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **Muse Spark 1.2 Contributor:** Preços de tokens com grandes descontos em troca da permissão para usar seus prompts e respostas geradas para treinar futuros modelos da Meta. A disponibilidade é limitada às regiões permitidas pela [Política de Uso Geográfico](https://ai.developer.meta.com/legal/geographic-use-policy) da Meta. [Saiba mais](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** O acordo de ZDR é renovado mensalmente. O acordo atual é válido até 31 de agosto de 2026. diff --git a/packages/web/src/content/docs/pt-br/zen.mdx b/packages/web/src/content/docs/pt-br/zen.mdx index 13e02615dc5f..dde4069956d4 100644 --- a/packages/web/src/content/docs/pt-br/zen.mdx +++ b/packages/web/src/content/docs/pt-br/zen.mdx @@ -82,6 +82,7 @@ Você também pode acessar nossos modelos pelos seguintes endpoints de API. | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -113,6 +114,7 @@ Você também pode acessar nossos modelos pelos seguintes endpoints de API. | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | O [model id](/docs/config/#models) na sua configuração do OpenCode usa o formato `opencode/`. Por exemplo, para GPT 5.5, você usaria `opencode/gpt-5.5` na sua configuração. @@ -140,6 +142,7 @@ Oferecemos um modelo pay-as-you-go. Abaixo estão os preços **por 1M tokens**. | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -171,6 +174,7 @@ Oferecemos um modelo pay-as-you-go. Abaixo estão os preços **por 1M tokens**. | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -227,6 +231,7 @@ Os modelos gratuitos: - Nemotron 3 Ultra Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. - Nemotron 3.5 Lightning Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. - Big Pickle é um modelo stealth que está gratuito no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. +- Muse Spark 1.3 Contributor Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. - Muse Spark 1.2 Contributor Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. Entre em contato se você tiver alguma dúvida. @@ -285,6 +290,7 @@ Todos os nossos modelos são hospedados nos US. Nossos provedores seguem uma pol - Nemotron 3.5 Lightning Free (endpoints gratuitos da NVIDIA): Apenas para uso de avaliação — não envie dados pessoais ou confidenciais. Seu uso é registrado para fins de segurança e para melhorar os produtos e serviços da NVIDIA. Os dados de sessão registrados para fins de melhoria não estão vinculados à sua identidade nem a qualquer identificador persistente. Para mais informações sobre nossas práticas de processamento de dados, consulte nossa [Política de Privacidade](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ao interagir com este endpoint, você consente com a nossa coleta, registro e uso dessas informações e com os [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: As solicitações são retidas por 30 dias de acordo com [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). - Anthropic APIs: As solicitações são retidas por 30 dias de acordo com [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). +- Muse Spark 1.3 Contributor Free: Preços de tokens com grandes descontos em troca da permissão para usar seus prompts e respostas para treinar futuros modelos da Meta. [Saiba mais](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free: Preços de tokens com grandes descontos em troca da permissão para usar seus prompts e respostas para treinar futuros modelos da Meta. [Saiba mais](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx index c8b7e6aba6a5..58e4c00fed4b 100644 --- a/packages/web/src/content/docs/ru/go.mdx +++ b/packages/web/src/content/docs/ru/go.mdx @@ -73,6 +73,7 @@ OpenCode Go работает так же, как и любой другой пр - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([доступно в отдельных регионах](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([доступно в отдельных регионах](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -117,6 +118,7 @@ OpenCode Go включает следующие лимиты: | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -143,6 +145,7 @@ OpenCode Go включает следующие лимиты: - DeepSeek V4 Flash Vision Exp — 410 входных, 71,300 кешированных, 310 выходных токенов на запрос - MiniMax M3 — 510 входных, 56,000 кешированных, 190 выходных токенов на запрос - MiniMax M2.7 — 300 входных, 55,000 кешированных, 125 выходных токенов на запрос +- Muse Spark 1.3 Contributor — 620 входных, 71,400 кешированных, 300 выходных токенов на запрос - Muse Spark 1.2 Contributor — 620 входных, 71,400 кешированных, 300 выходных токенов на запрос - Qwen3.8 Max — 420 входных, 66,000 кешированных, 200 выходных токенов на запрос - Qwen3.8 Flash — 600 входных, 58,000 кешированных, 200 выходных токенов на запрос @@ -175,6 +178,7 @@ OpenCode Go включает следующие лимиты: | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -250,6 +254,7 @@ OpenCode Go включает следующие лимиты: | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -298,6 +303,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | Не используется | 0 дней | | MiniMax M3 | Не используется | 0 дней | | MiniMax M2.7 | Не используется | 0 дней | +| Muse Spark 1.3 Contributor | Да | Не ZDR | | Muse Spark 1.2 Contributor | Да | Не ZDR | | DeepSeek V4 Pro | Не используется | 0 дней | | DeepSeek V4 Flash | Не используется | 0 дней | @@ -307,6 +313,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDR отключает важные функции API, зависящие от сохраненных данных, включая Responses API с сохранением состояния, Files and Collections и Batch API. [Подробнее](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Журналы мониторинга злоупотреблений создаются при любом использовании функций API и хранятся до 30 дней. [Подробнее](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). +- **Muse Spark 1.3 Contributor:** Значительно сниженная стоимость токенов в обмен на разрешение использовать ваши промпты и ответы для обучения будущих моделей Meta. Доступность ограничена регионами, разрешёнными [Политикой географического использования](https://ai.developer.meta.com/legal/geographic-use-policy) компании Meta. [Подробнее](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **Muse Spark 1.2 Contributor:** Значительно сниженная стоимость токенов в обмен на разрешение использовать ваши промпты и ответы для обучения будущих моделей Meta. Доступность ограничена регионами, разрешёнными [Политикой географического использования](https://ai.developer.meta.com/legal/geographic-use-policy) компании Meta. [Подробнее](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** Соглашение ZDR продлевается ежемесячно. Текущее соглашение действует до 31 августа 2026 года. diff --git a/packages/web/src/content/docs/ru/zen.mdx b/packages/web/src/content/docs/ru/zen.mdx index df95a0425b14..201229454921 100644 --- a/packages/web/src/content/docs/ru/zen.mdx +++ b/packages/web/src/content/docs/ru/zen.mdx @@ -91,6 +91,7 @@ OpenCode Zen работает как любой другой провайдер | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -122,6 +123,7 @@ OpenCode Zen работает как любой другой провайдер | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | [идентификатор модели](/docs/config/#models) в вашей конфигурации OpenCode @@ -151,6 +153,7 @@ https://opencode.ai/zen/v1/models | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -182,6 +185,7 @@ https://opencode.ai/zen/v1/models | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -238,6 +242,7 @@ https://opencode.ai/zen/v1/models - Nemotron 3 Ultra Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. - Nemotron 3.5 Lightning Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. - Big Pickle — это скрытая модель, которая доступна бесплатно в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. +- Muse Spark 1.3 Contributor Free доступна в OpenCode в течение ограниченного времени. Команда использует этот период для сбора отзывов и улучшения модели. - Muse Spark 1.2 Contributor Free доступна в OpenCode в течение ограниченного времени. Команда использует этот период для сбора отзывов и улучшения модели. Свяжитесь с нами, если у вас есть вопросы. @@ -299,6 +304,7 @@ https://opencode.ai/zen/v1/models - Nemotron 3.5 Lightning Free (бесплатные эндпоинты NVIDIA): только для пробного использования — не отправляйте персональные или конфиденциальные данные. Использование логируется в целях безопасности и для улучшения продуктов и сервисов NVIDIA. Логируемые данные сессии, используемые в целях улучшения, не связаны с вашей личностью или каким-либо постоянным идентификатором. Подробнее о наших практиках обработки данных см. в нашей [Политике конфиденциальности](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Взаимодействуя с этим эндпоинтом, вы соглашаетесь на сбор, запись и использование нами такой информации, а также с [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: запросы хранятся 30 дней в соответствии с [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). - Anthropic APIs: запросы хранятся 30 дней в соответствии с [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). +- Muse Spark 1.3 Contributor Free: значительно сниженная стоимость токенов в обмен на разрешение использовать ваши запросы и ответы для обучения будущих моделей Meta. [Подробнее](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free: значительно сниженная стоимость токенов в обмен на разрешение использовать ваши запросы и ответы для обучения будущих моделей Meta. [Подробнее](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx index 436c0339fb2c..d75e6ce708c8 100644 --- a/packages/web/src/content/docs/th/go.mdx +++ b/packages/web/src/content/docs/th/go.mdx @@ -63,6 +63,7 @@ OpenCode Go ทำงานเหมือนกับผู้ให้บร - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([เฉพาะบางภูมิภาค](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([เฉพาะบางภูมิภาค](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -107,6 +108,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -133,6 +135,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: - DeepSeek V4 Flash Vision Exp — 410 input, 71,300 cached, 310 output tokens ต่อ request - MiniMax M3 — 510 input, 56,000 cached, 190 output tokens ต่อ request - MiniMax M2.7 — 300 input, 55,000 cached, 125 output tokens ต่อ request +- Muse Spark 1.3 Contributor — 620 input, 71,400 cached, 300 output tokens ต่อ request - Muse Spark 1.2 Contributor — 620 input, 71,400 cached, 300 output tokens ต่อ request - Qwen3.8 Max — 420 input, 66,000 cached, 200 output tokens ต่อ request - Qwen3.8 Flash — 600 input, 58,000 cached, 200 output tokens ต่อ request @@ -165,6 +168,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -238,6 +242,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -284,6 +289,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | ไม่นำไปใช้ | 0 วัน | | MiniMax M3 | ไม่นำไปใช้ | 0 วัน | | MiniMax M2.7 | ไม่นำไปใช้ | 0 วัน | +| Muse Spark 1.3 Contributor | ใช่ | ไม่ใช่ ZDR | | Muse Spark 1.2 Contributor | ใช่ | ไม่ใช่ ZDR | | DeepSeek V4 Pro | ไม่นำไปใช้ | 0 วัน | | DeepSeek V4 Flash | ไม่นำไปใช้ | 0 วัน | @@ -293,6 +299,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDR ปิดใช้งานฟีเจอร์ API สำคัญที่ต้องอาศัยข้อมูลที่จัดเก็บไว้ ซึ่งรวมถึง Responses API แบบมีสถานะ, Files and Collections และ Batch API [ดูข้อมูลเพิ่มเติม](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr) - **GPT 5.6 Luna:** ระบบจะสร้างบันทึกการตรวจสอบการใช้งานในทางที่ผิดสำหรับการใช้งานฟีเจอร์ API ทั้งหมด และเก็บรักษาไว้นานสูงสุด 30 วัน [ดูข้อมูลเพิ่มเติม](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring) +- **Muse Spark 1.3 Contributor:** ราคาของ token ลดลงอย่างมาก โดยแลกกับการอนุญาตให้นำพรอมต์และผลลัพธ์ที่สร้างขึ้นของคุณไปใช้ฝึกโมเดล Meta ในอนาคต การให้บริการจำกัดเฉพาะภูมิภาคที่ได้รับอนุญาตตาม[นโยบายการใช้งานตามพื้นที่ทางภูมิศาสตร์](https://ai.developer.meta.com/legal/geographic-use-policy)ของ Meta [ดูข้อมูลเพิ่มเติม](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier) - **Muse Spark 1.2 Contributor:** ราคาของ token ลดลงอย่างมาก โดยแลกกับการอนุญาตให้นำพรอมต์และผลลัพธ์ที่สร้างขึ้นของคุณไปใช้ฝึกโมเดล Meta ในอนาคต การให้บริการจำกัดเฉพาะภูมิภาคที่ได้รับอนุญาตตาม[นโยบายการใช้งานตามพื้นที่ทางภูมิศาสตร์](https://ai.developer.meta.com/legal/geographic-use-policy)ของ Meta [ดูข้อมูลเพิ่มเติม](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier) - **DeepSeek V4 Flash:** ข้อตกลง ZDR จะต่ออายุทุกเดือน ข้อตกลงปัจจุบันมีผลใช้ถึงวันที่ 31 สิงหาคม 2026 diff --git a/packages/web/src/content/docs/th/zen.mdx b/packages/web/src/content/docs/th/zen.mdx index 49f7968bc662..507430232b7d 100644 --- a/packages/web/src/content/docs/th/zen.mdx +++ b/packages/web/src/content/docs/th/zen.mdx @@ -84,6 +84,7 @@ OpenCode Zen ทำงานเหมือน provider อื่น ๆ ใน | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -115,6 +116,7 @@ OpenCode Zen ทำงานเหมือน provider อื่น ๆ ใน | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | [model id](/docs/config/#models) ใน OpenCode config ของคุณใช้รูปแบบ `opencode/` ตัวอย่างเช่น สำหรับ GPT 5.5 คุณจะใช้ `opencode/gpt-5.5` ใน config ของคุณ @@ -142,6 +144,7 @@ https://opencode.ai/zen/v1/models | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -173,6 +176,7 @@ https://opencode.ai/zen/v1/models | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -229,6 +233,7 @@ https://opencode.ai/zen/v1/models - Nemotron 3 Ultra Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล - Nemotron 3.5 Lightning Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล - Big Pickle เป็น stealth model ที่ใช้งานฟรีบน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล +- Muse Spark 1.3 Contributor Free เปิดให้ใช้งานบน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อรวบรวมความคิดเห็นและปรับปรุงโมเดล - Muse Spark 1.2 Contributor Free เปิดให้ใช้งานบน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อรวบรวมความคิดเห็นและปรับปรุงโมเดล ติดต่อเรา หากคุณมีคำถาม @@ -287,6 +292,7 @@ https://opencode.ai/zen/v1/models - Nemotron 3.5 Lightning Free (endpoint ฟรีของ NVIDIA): ใช้สำหรับการทดลองเท่านั้น — โปรดอย่าส่งข้อมูลส่วนบุคคลหรือข้อมูลลับ การใช้งานของคุณจะถูกบันทึกเพื่อวัตถุประสงค์ด้านความปลอดภัยและเพื่อปรับปรุงผลิตภัณฑ์และบริการของ NVIDIA ข้อมูลเซสชันที่บันทึกไว้เพื่อวัตถุประสงค์ในการปรับปรุงจะไม่เชื่อมโยงกับตัวตนของคุณหรือตัวระบุถาวรใด ๆ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแนวปฏิบัติในการประมวลผลข้อมูลของเรา โปรดดู [นโยบายความเป็นส่วนตัว](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) ของเรา การโต้ตอบกับ endpoint นี้ถือว่าคุณยินยอมให้เราเก็บรวบรวม บันทึก และใช้ข้อมูลดังกล่าว รวมถึง [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) - OpenAI APIs: คำขอจะถูกเก็บไว้เป็นเวลา 30 วันตาม [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). - Anthropic APIs: คำขอจะถูกเก็บไว้เป็นเวลา 30 วันตาม [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). +- Muse Spark 1.3 Contributor Free: ราคาของ token ที่ลดลงอย่างมาก แลกกับการอนุญาตให้นำ prompts และ completions ของคุณไปใช้ฝึกโมเดลของ Meta ในอนาคต [ดูข้อมูลเพิ่มเติม](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free: ราคาของ token ที่ลดลงอย่างมาก แลกกับการอนุญาตให้นำ prompts และ completions ของคุณไปใช้ฝึกโมเดลของ Meta ในอนาคต [ดูข้อมูลเพิ่มเติม](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx index 7f9ae374699a..3df4b3c333a5 100644 --- a/packages/web/src/content/docs/tr/go.mdx +++ b/packages/web/src/content/docs/tr/go.mdx @@ -63,6 +63,7 @@ Mevcut model listesi şunları içerir: - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([sınırlı bölgeler](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([sınırlı bölgeler](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -107,6 +108,7 @@ Aşağıdaki tablo, tipik Go kullanım modellerine dayalı tahmini bir istek say | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -133,6 +135,7 @@ Tahminler, gözlemlenen istek modellerine dayanır: - DeepSeek V4 Flash Vision Exp — İstek başına 410 girdi, 71.300 önbelleğe alınmış, 310 çıktı token'ı - MiniMax M3 — İstek başına 510 girdi, 56.000 önbelleğe alınmış, 190 çıktı token'ı - MiniMax M2.7 — İstek başına 300 girdi, 55.000 önbelleğe alınmış, 125 çıktı token'ı +- Muse Spark 1.3 Contributor — İstek başına 620 girdi, 71.400 önbelleğe alınmış, 300 çıktı token'ı - Muse Spark 1.2 Contributor — İstek başına 620 girdi, 71.400 önbelleğe alınmış, 300 çıktı token'ı - Qwen3.8 Max — İstek başına 420 girdi, 66.000 önbelleğe alınmış, 200 çıktı token'ı - Qwen3.8 Flash — İstek başına 600 girdi, 58.000 önbelleğe alınmış, 200 çıktı token'ı @@ -165,6 +168,7 @@ Tahminler ayrıca 1M token başına aşağıdaki fiyatlara ve her modelle birlik | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -238,6 +242,7 @@ Go modellerine aşağıdaki API uç noktaları aracılığıyla da erişebilirsi | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -284,6 +289,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | Kullanılmaz | 0 gün | | MiniMax M3 | Kullanılmaz | 0 gün | | MiniMax M2.7 | Kullanılmaz | 0 gün | +| Muse Spark 1.3 Contributor | Evet | ZDR değil | | Muse Spark 1.2 Contributor | Evet | ZDR değil | | DeepSeek V4 Pro | Kullanılmaz | 0 gün | | DeepSeek V4 Flash | Kullanılmaz | 0 gün | @@ -293,6 +299,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDR, durum bilgisi tutan Responses API, Files and Collections ve Batch API dahil olmak üzere saklanan verilere bağlı önemli API özelliklerini devre dışı bırakır. [Daha fazla bilgi](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Tüm API özelliklerinin kullanımı için kötüye kullanım izleme günlükleri oluşturulur ve 30 güne kadar saklanır. [Daha fazla bilgi](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). +- **Muse Spark 1.3 Contributor:** İstemlerinizi ve tamamlamalarınızı gelecekteki Meta modellerini eğitmek için kullanma izni karşılığında büyük ölçüde indirimli token fiyatları. Kullanılabilirlik, Meta'nın [Coğrafi Kullanım Politikası](https://ai.developer.meta.com/legal/geographic-use-policy) kapsamında izin verilen bölgelerle sınırlıdır. [Daha fazla bilgi](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **Muse Spark 1.2 Contributor:** İstemlerinizi ve tamamlamalarınızı gelecekteki Meta modellerini eğitmek için kullanma izni karşılığında büyük ölçüde indirimli token fiyatları. Kullanılabilirlik, Meta'nın [Coğrafi Kullanım Politikası](https://ai.developer.meta.com/legal/geographic-use-policy) kapsamında izin verilen bölgelerle sınırlıdır. [Daha fazla bilgi](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - **DeepSeek V4 Flash:** ZDR anlaşması aylık olarak yenilenir. Mevcut anlaşma 31 Ağustos 2026 tarihine kadar geçerlidir. diff --git a/packages/web/src/content/docs/tr/zen.mdx b/packages/web/src/content/docs/tr/zen.mdx index 95520602212d..98a58496d72f 100644 --- a/packages/web/src/content/docs/tr/zen.mdx +++ b/packages/web/src/content/docs/tr/zen.mdx @@ -82,6 +82,7 @@ Modellerimize aşağıdaki API uç noktaları aracılığıyla da erişebilirsin | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -113,6 +114,7 @@ Modellerimize aşağıdaki API uç noktaları aracılığıyla da erişebilirsin | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | OpenCode yapılandırmanızdaki [model id](/docs/config/#models) `opencode/` biçimini kullanır. Örneğin, GPT 5.5 için yapılandırmanızda `opencode/gpt-5.5` kullanırsınız. @@ -140,6 +142,7 @@ Kullandıkça öde modelini destekliyoruz. Aşağıda **1M token başına** fiya | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -171,6 +174,7 @@ Kullandıkça öde modelini destekliyoruz. Aşağıda **1M token başına** fiya | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -227,6 +231,7 @@ Kredi kartı ücretleri maliyet üzerinden yansıtılır (%4.4 + işlem başına - Nemotron 3 Ultra Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. - Nemotron 3.5 Lightning Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. - Big Pickle, sınırlı bir süre için OpenCode'da ücretsiz olan gizli bir modeldir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. +- Muse Spark 1.3 Contributor Free, sınırlı bir süre için OpenCode'da kullanılabilir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. - Muse Spark 1.2 Contributor Free, sınırlı bir süre için OpenCode'da kullanılabilir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. Sorularınız varsa bizimle iletişime geçin. @@ -285,6 +290,7 @@ Tüm modellerimiz US'de barındırılıyor. Sağlayıcılarımız zero-retention - Nemotron 3.5 Lightning Free (ücretsiz NVIDIA uç noktaları): Yalnızca deneme amaçlıdır — kişisel veya gizli veri göndermeyin. Kullanımınız güvenlik amacıyla ve NVIDIA ürünlerini ve hizmetlerini geliştirmek için kaydedilir. Geliştirme amacıyla kaydedilen oturum verileri kimliğinizle veya herhangi bir kalıcı tanımlayıcıyla ilişkilendirilmez. Veri işleme uygulamalarımız hakkında daha fazla bilgi için [Gizlilik Politikamıza](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) bakın. Bu uç noktayla etkileşime geçerek, bu tür bilgileri toplamamıza, kaydetmemize ve kullanmamıza ve [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) koşullarına onay vermiş olursunuz. - OpenAI APIs: İstekler [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) uyarınca 30 gün boyunca saklanır. - Anthropic APIs: İstekler [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage) uyarınca 30 gün boyunca saklanır. +- Muse Spark 1.3 Contributor Free: Gelecekteki Meta modellerini eğitmek için istemlerinizi ve tamamlamalarınızı kullanma izni karşılığında büyük ölçüde indirimli token fiyatlandırması. [Daha fazla bilgi](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free: Gelecekteki Meta modellerini eğitmek için istemlerinizi ve tamamlamalarınızı kullanma izni karşılığında büyük ölçüde indirimli token fiyatlandırması. [Daha fazla bilgi](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/zen.mdx b/packages/web/src/content/docs/zen.mdx index afea76e62349..c14c2365be16 100644 --- a/packages/web/src/content/docs/zen.mdx +++ b/packages/web/src/content/docs/zen.mdx @@ -91,6 +91,7 @@ You can also access our models through the following API endpoints. | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -122,6 +123,7 @@ You can also access our models through the following API endpoints. | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | The [model id](/docs/config/#models) in your OpenCode config @@ -151,6 +153,7 @@ We support a pay-as-you-go model. Below are the prices **per 1M tokens**. | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -182,6 +185,7 @@ We support a pay-as-you-go model. Below are the prices **per 1M tokens**. | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -238,6 +242,7 @@ The free models: - Nemotron 3 Ultra Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. - Nemotron 3.5 Lightning Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. - Big Pickle is a stealth model that's free on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. +- Muse Spark 1.3 Contributor Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. - Muse Spark 1.2 Contributor Free is available on OpenCode for a limited time. The team is using this time to collect feedback and improve the model. Contact us if you have any questions. @@ -299,6 +304,7 @@ All our models are hosted in the US. Our providers follow a zero-retention polic - Nemotron 3.5 Lightning Free (NVIDIA free endpoints): Trial use only — do not submit personal or confidential data. Your use is logged for security purposes and to improve NVIDIA products and services. The logged session data for improvement purposes is not linked to your identity or any persistent identifier. For more information about our data processing practices, see our [Privacy Policy](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). By interacting with this endpoint, you consent to our collection, recording, and use of such information and the [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). - OpenAI APIs: Requests are retained for 30 days in accordance with [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). - Anthropic APIs: Requests are retained for 30 days in accordance with [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). +- Muse Spark 1.3 Contributor Free: Heavily discounted token pricing in exchange for permission to use your prompts and completions to train future Meta models. [Learn more](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). - Muse Spark 1.2 Contributor Free: Heavily discounted token pricing in exchange for permission to use your prompts and completions to train future Meta models. [Learn more](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier). --- diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx index 35fe8356af68..46c981c2a480 100644 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ b/packages/web/src/content/docs/zh-cn/go.mdx @@ -63,6 +63,7 @@ OpenCode Go 的工作方式与 OpenCode 中的其他提供商一样。 - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([仅限部分地区](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([仅限部分地区](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -107,6 +108,7 @@ OpenCode Go 包含以下限制: | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -135,6 +137,7 @@ OpenCode Go 包含以下限制: - MiMo-V2.5-Pro — 每次请求 790 个输入 token,86,000 个缓存 token,305 个输出 token - MiniMax M3 — 每次请求 510 个输入 token,56,000 个缓存 token,190 个输出 token - MiniMax M2.7 — 每次请求 300 个输入 token,55,000 个缓存 token,125 个输出 token +- Muse Spark 1.3 Contributor — 每次请求 620 个输入 token,71,400 个缓存 token,300 个输出 token - Muse Spark 1.2 Contributor — 每次请求 620 个输入 token,71,400 个缓存 token,300 个输出 token - Qwen3.8 Max — 每次请求 420 个输入 token,66,000 个缓存 token,200 个输出 token - Qwen3.8 Flash — 每次请求 600 个输入 token,58,000 个缓存 token,200 个输出 token @@ -165,6 +168,7 @@ OpenCode Go 包含以下限制: | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -238,6 +242,7 @@ OpenCode Go 包含以下限制: | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -284,6 +289,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | 不使用 | 0 天 | | MiniMax M3 | 不使用 | 0 天 | | MiniMax M2.7 | 不使用 | 0 天 | +| Muse Spark 1.3 Contributor | 是 | 非 ZDR | | Muse Spark 1.2 Contributor | 是 | 非 ZDR | | DeepSeek V4 Pro | 不使用 | 0 天 | | DeepSeek V4 Flash | 不使用 | 0 天 | @@ -293,6 +299,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDR 会禁用依赖所存储数据的重要 API 功能,包括有状态的 Responses API、Files and Collections 和 Batch API。[了解更多](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 - **GPT 5.6 Luna:** 所有 API 功能的使用都会生成滥用监控日志,并最多保留 30 天。[了解更多](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring)。 +- **Muse Spark 1.3 Contributor:** 以允许使用你的提示词和补全结果训练未来的 Meta 模型为交换,token 价格可获得大幅折扣。仅在 Meta 的[地理使用政策](https://ai.developer.meta.com/legal/geographic-use-policy)允许的地区提供。[了解更多](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 - **Muse Spark 1.2 Contributor:** 以允许使用你的提示词和补全结果训练未来的 Meta 模型为交换,token 价格可获得大幅折扣。仅在 Meta 的[地理使用政策](https://ai.developer.meta.com/legal/geographic-use-policy)允许的地区提供。[了解更多](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 - **DeepSeek V4 Flash:** ZDR 协议每月续签。当前协议有效期至 2026 年 8 月 31 日。 diff --git a/packages/web/src/content/docs/zh-cn/zen.mdx b/packages/web/src/content/docs/zh-cn/zen.mdx index d520d1f1b39c..bc59a7f323e3 100644 --- a/packages/web/src/content/docs/zh-cn/zen.mdx +++ b/packages/web/src/content/docs/zh-cn/zen.mdx @@ -82,6 +82,7 @@ OpenCode Zen 的工作方式与 OpenCode 中的任何其他提供商相同。 | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -113,6 +114,7 @@ OpenCode Zen 的工作方式与 OpenCode 中的任何其他提供商相同。 | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | 在你的 OpenCode 配置中,[模型 ID](/docs/config/#models) 使用 `opencode/` 格式。例如,对于 GPT 5.5,你需要在配置中使用 `opencode/gpt-5.5`。 @@ -140,6 +142,7 @@ https://opencode.ai/zen/v1/models | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -171,6 +174,7 @@ https://opencode.ai/zen/v1/models | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -227,6 +231,7 @@ https://opencode.ai/zen/v1/models - Nemotron 3 Ultra Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 - Nemotron 3.5 Lightning Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 - Big Pickle 是一个隐身模型,目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 +- Muse Spark 1.3 Contributor Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 - Muse Spark 1.2 Contributor Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 如果你有任何问题,请联系我们。 @@ -285,6 +290,7 @@ https://opencode.ai/zen/v1/models - Nemotron 3.5 Lightning Free(NVIDIA 免费端点):仅供试用 — 请勿提交个人或机密数据。出于安全目的以及为改进 NVIDIA 产品和服务,系统会记录你的使用情况。出于改进目的而记录的会话数据不会与你的身份或任何持久标识符相关联。有关我们数据处理实践的更多信息,请参阅我们的[隐私政策](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。与此端点进行交互,即表示你同意我们收集、记录和使用此类信息,并同意 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。 - OpenAI APIs:请求会根据 [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) 保留 30 天。 - Anthropic APIs:请求会根据 [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage) 保留 30 天。 +- Muse Spark 1.3 Contributor Free:以允许使用你的提示词和补全内容训练未来的 Meta 模型为条件,享受大幅折扣的 token 价格。[了解更多](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 - Muse Spark 1.2 Contributor Free:以允许使用你的提示词和补全内容训练未来的 Meta 模型为条件,享受大幅折扣的 token 价格。[了解更多](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 --- diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx index edf39e593095..3846a5760acf 100644 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ b/packages/web/src/content/docs/zh-tw/go.mdx @@ -63,6 +63,7 @@ OpenCode Go 的運作方式與 OpenCode 中的任何其他供應商相同。 - **MiMo-V2.5-Pro** - **MiniMax M3** - **MiniMax M2.7** +- **Muse Spark 1.3 Contributor** ([僅限部分地區](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Muse Spark 1.2 Contributor** ([僅限部分地區](https://ai.developer.meta.com/legal/geographic-use-policy)) - **Qwen3.8 Max** - **Qwen3.8 Flash** @@ -107,6 +108,7 @@ OpenCode Go 包含以下限制: | MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | | MiniMax M3 | 3,200 | 8,000 | 16,000 | | MiniMax M2.7 | 3,400 | 8,500 | 17,000 | +| Muse Spark 1.3 Contributor | 45,300 | 113,300 | 226,600 | | Muse Spark 1.2 Contributor | 45,300 | 113,300 | 226,600 | | Qwen3.8 Max | 160 | 400 | 810 | | Qwen3.8 Flash | 5,400 | 13,500 | 27,000 | @@ -133,6 +135,7 @@ OpenCode Go 包含以下限制: - DeepSeek V4 Flash Vision Exp — 每次請求 410 個輸入 token、71,300 個快取 token、310 個輸出 token - MiniMax M3 — 每次請求 510 個輸入 token、56,000 個快取 token、190 個輸出 token - MiniMax M2.7 — 每次請求 300 個輸入 token、55,000 個快取 token、125 個輸出 token +- Muse Spark 1.3 Contributor — 每次請求 620 個輸入 token、71,400 個快取 token、300 個輸出 token - Muse Spark 1.2 Contributor — 每次請求 620 個輸入 token、71,400 個快取 token、300 個輸出 token - Qwen3.8 Max — 每次請求 420 個輸入 token、66,000 個快取 token、200 個輸出 token - Qwen3.8 Flash — 每次請求 600 個輸入 token、58,000 個快取 token、200 個輸出 token @@ -165,6 +168,7 @@ OpenCode Go 包含以下限制: | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | | MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | | Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | | Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | @@ -238,6 +242,7 @@ OpenCode Go 包含以下限制: | MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | +| Muse Spark 1.3 Contributor | muse-spark-1.3-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor | muse-spark-1.2-contributor | `https://opencode.ai/zen/go/v1/responses` | `@ai-sdk/openai` | | Qwen3.8 Max | qwen3.8-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Qwen3.8 Flash | qwen3.8-flash | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | @@ -284,6 +289,7 @@ https://opencode.ai/zen/go/v1/models | Qwen3.6 Plus | 不使用 | 0 天 | | MiniMax M3 | 不使用 | 0 天 | | MiniMax M2.7 | 不使用 | 0 天 | +| Muse Spark 1.3 Contributor | 是 | 非 ZDR | | Muse Spark 1.2 Contributor | 是 | 非 ZDR | | DeepSeek V4 Pro | 不使用 | 0 天 | | DeepSeek V4 Flash | 不使用 | 0 天 | @@ -293,6 +299,7 @@ https://opencode.ai/zen/go/v1/models - **Grok 4.6:** ZDR 會停用依賴儲存資料的重要 API 功能,包括具狀態的 Responses API、Files and Collections 與 Batch API。[了解更多](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 - **GPT 5.6 Luna:** 所有 API 功能的使用都會產生濫用監控日誌,並保留最多 30 天。[了解更多](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring)。 +- **Muse Spark 1.3 Contributor:** 以允許使用您的提示詞和生成結果來訓練未來的 Meta 模型為交換,token 價格可享大幅折扣。僅在 Meta 的[地理使用政策](https://ai.developer.meta.com/legal/geographic-use-policy)允許的地區提供。[了解更多](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 - **Muse Spark 1.2 Contributor:** 以允許使用您的提示詞和生成結果來訓練未來的 Meta 模型為交換,token 價格可享大幅折扣。僅在 Meta 的[地理使用政策](https://ai.developer.meta.com/legal/geographic-use-policy)允許的地區提供。[了解更多](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 - **DeepSeek V4 Flash:** ZDR 協議每月續簽。目前的協議有效至 2026 年 8 月 31 日。 diff --git a/packages/web/src/content/docs/zh-tw/zen.mdx b/packages/web/src/content/docs/zh-tw/zen.mdx index 4c8ff7cb0117..fec2540d06df 100644 --- a/packages/web/src/content/docs/zh-tw/zen.mdx +++ b/packages/web/src/content/docs/zh-tw/zen.mdx @@ -86,6 +86,7 @@ OpenCode Zen 的運作方式和 OpenCode 中的其他供應商一樣。 | Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | +| Gemini 3.8 Flash | gemini-3.8-flash | `https://opencode.ai/zen/v1/models/gemini-3.8-flash` | `@ai-sdk/google` | | Gemini 3.7 Flash | gemini-3.7-flash | `https://opencode.ai/zen/v1/models/gemini-3.7-flash` | `@ai-sdk/google` | | Gemini 3.6 Flash | gemini-3.6-flash | `https://opencode.ai/zen/v1/models/gemini-3.6-flash` | `@ai-sdk/google` | | Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | @@ -117,6 +118,7 @@ OpenCode Zen 的運作方式和 OpenCode 中的其他供應商一樣。 | Ling 3.0 Flash Fin Free | ling-3.0-flash-fin-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Nemotron 3.5 Lightning Free | nemotron-3.5-lightning-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Muse Spark 1.3 Contributor Free | muse-spark-1.3-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | | Muse Spark 1.2 Contributor Free | muse-spark-1.2-contributor-free | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` | OpenCode 設定中的 [模型 ID](/docs/config/#models) 會使用 `opencode/` @@ -145,6 +147,7 @@ https://opencode.ai/zen/v1/models | Ling 3.0 Flash Fin Free | Free | Free | Free | - | | Nemotron 3 Ultra Free | Free | Free | Free | - | | Nemotron 3.5 Lightning Free | Free | Free | Free | - | +| Muse Spark 1.3 Contributor Free | Free | Free | Free | - | | Muse Spark 1.2 Contributor Free | Free | Free | Free | - | | MiniMax M3 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | @@ -176,6 +179,7 @@ https://opencode.ai/zen/v1/models | Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 | | Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 | | Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | +| Gemini 3.8 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.7 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.6 Flash | $1.50 | $7.50 | $0.15 | - | | Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | @@ -232,6 +236,7 @@ https://opencode.ai/zen/v1/models - Nemotron 3 Ultra Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 - Nemotron 3.5 Lightning Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 - Big Pickle 是一個隱身模型,在 OpenCode 上限時免費提供。團隊正在利用這段時間收集回饋並改進模型。 +- Muse Spark 1.3 Contributor Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 - Muse Spark 1.2 Contributor Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 如果你有任何問題,請聯絡我們。 @@ -291,6 +296,7 @@ https://opencode.ai/zen/v1/models - Nemotron 3.5 Lightning Free(NVIDIA 免費端點):僅供試用 — 請勿提交個人或機密資料。基於安全目的以及為了改進 NVIDIA 產品與服務,系統會記錄你的使用情況。基於改進目的而記錄的工作階段資料不會與你的身分或任何持久識別碼相關聯。有關我們資料處理實務的更多資訊,請參閱我們的[隱私政策](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。與此端點進行互動,即表示你同意我們收集、記錄與使用此類資訊,並同意 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。 - OpenAI APIs: 請求會依據 [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) 保留 30 天。 - Anthropic APIs: 請求會依據 [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage) 保留 30 天。 +- Muse Spark 1.3 Contributor Free: 以大幅折扣的 Token 價格,換取你同意讓提示詞與補全內容用於訓練未來的 Meta 模型。[了解更多](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 - Muse Spark 1.2 Contributor Free: 以大幅折扣的 Token 價格,換取你同意讓提示詞與補全內容用於訓練未來的 Meta 模型。[了解更多](https://dev.meta.ai/docs/pricing-rate-limits#contributor-tier)。 --- From ffbdee7b17412f0dc16e35555af95780091e050a Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Wed, 2 Sep 2026 16:06:24 +0000 Subject: [PATCH 108/185] chore: generate --- packages/console/app/src/routes/zen/util/handler.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index 6f24c8e4bd94..b1aa6fe74a67 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -123,12 +123,7 @@ export async function handler( : createKeyRateLimiter(modelInfo.id, modelInfo.rateLimit, zenApiKey, input.request) await rateLimiter?.check() const authInfo = await authenticate(modelInfo, zenApiKey) - if ( - authInfo && - opts.modelList === "lite" && - requiresGoTrainingConsent(modelInfo.id) && - !authInfo.allowTraining - ) + if (authInfo && opts.modelList === "lite" && requiresGoTrainingConsent(modelInfo.id) && !authInfo.allowTraining) throw new DataPolicyError( t("zen.api.error.trainingNotAllowed", { consoleGoUrl: `https://opencode.ai/workspace/${authInfo.workspaceID}/go`, From 9a71624d2da22e5643b80b2fd78293b1fed63d4e Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Wed, 2 Sep 2026 11:30:28 -0500 Subject: [PATCH 109/185] fix(provider): scope thinking binding to Claude 5.1+ (#46848) --- packages/opencode/src/provider/transform.ts | 28 +-- .../opencode/test/provider/transform.test.ts | 174 ++++++++++++++++-- 2 files changed, 173 insertions(+), 29 deletions(-) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 1244963e846f..56099effe15c 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -684,35 +684,39 @@ function anthropicOmitsThinking(apiId: string) { return anthropicUsesModernAdaptiveThinking(apiId) } -// Opus 5, Sonnet 5, Fable 5.x, and Mythos 5.x think without a `thinking` parameter. -function anthropicThinksByDefault(apiId: string) { - const version = /claude-(?:[a-z]+-)?(\d+)(?:[.-](\d{1,2}))?(?:[.@-]|$)/i.exec(apiId) +// Default to binding controls for Claude 5.1+ as enforcement expands to later models. +// Mythos 5.1 explicitly does not run the conversation-prefix check. +// https://platform.claude.com/docs/en/build-with-claude/thinking#preserved-in-conversation +function anthropicBindsThinking(apiId: string) { + // Capture either family/version order, without reading release dates as minor versions. + const version = /claude-(?:([a-z]+)-)?(\d+)(?:[.-](\d{1,2}))?(?:-([a-z]+))?(?:[.@-]|$)/i.exec(apiId) if (!version) return false - return Number(version[1]) >= 5 + const major = Number(version[2]) + const minor = Number(version[3] ?? 0) + if (major === 5 && minor === 1 && (version[1] ?? version[4])?.toLowerCase() === "mythos") return false + return major > 5 || (major === 5 && minor >= 1) } // Fable 5.1 binds each thinking signature to the system prompt, tool list, and // messages above it, and rejects the request when any of that changes. opencode // re-renders parts of that prefix between turns (system prompt, tools, compaction), // so ask the API to drop the affected blocks instead of failing the request. -// Models that do not run the check accept the field, so it is safe on every Claude. +// Older model deployments may reject this field, even with thinking enabled. // The patched AI SDK adds the thinking-binding-controls beta whenever it is set. const ANTHROPIC_BLOCK_BINDING = { prefixMismatchBehavior: "drop_block" } function anthropicBlockBinding(model: Provider.Model, options: { [x: string]: any }) { - if (!model.api.id.toLowerCase().includes("claude")) return options - const byDefault = anthropicThinksByDefault(model.api.id) + if (!anthropicBindsThinking(model.api.id)) return options switch (model.api.npm) { case "@ai-sdk/anthropic": case "@ai-sdk/google-vertex/anthropic": { - const thinking = options.thinking ?? (byDefault ? { type: "adaptive" } : undefined) - if (!thinking || (thinking.type !== "adaptive" && thinking.type !== "enabled")) return options + const thinking = options.thinking ?? { type: "adaptive" } + if (thinking.type !== "adaptive" && thinking.type !== "enabled") return options return { ...options, thinking: { ...thinking, blockBinding: ANTHROPIC_BLOCK_BINDING } } } case "@ai-sdk/amazon-bedrock": { - const reasoningConfig = options.reasoningConfig ?? (byDefault ? { type: "adaptive" } : undefined) - if (!reasoningConfig || (reasoningConfig.type !== "adaptive" && reasoningConfig.type !== "enabled")) - return options + const reasoningConfig = options.reasoningConfig ?? { type: "adaptive" } + if (reasoningConfig.type !== "adaptive" && reasoningConfig.type !== "enabled") return options return { ...options, reasoningConfig: { ...reasoningConfig, blockBinding: ANTHROPIC_BLOCK_BINDING } } } } diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index 4d346d8871a2..bfe4a0aa9b6f 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -851,39 +851,179 @@ describe("ProviderTransform.providerOptions", () => { const binding = { prefixMismatchBehavior: "drop_block" } const claude = (npm: string, id: string) => createModel({ providerID: "custom", api: { id, url: "https://example.com", npm } }) + const sdks = [ + { npm: "@ai-sdk/anthropic", key: "anthropic", option: "thinking" }, + { npm: "@ai-sdk/google-vertex/anthropic", key: "anthropic", option: "thinking" }, + { npm: "@ai-sdk/amazon-bedrock", key: "bedrock", option: "reasoningConfig" }, + ] test("adds blockBinding to explicit adaptive thinking on @ai-sdk/anthropic", () => { - const model = claude("@ai-sdk/anthropic", "claude-opus-4-7") + const model = claude("@ai-sdk/anthropic", "claude-fable-5-1") expect(ProviderTransform.providerOptions(model, { thinking: { type: "adaptive" }, effort: "high" })).toEqual({ anthropic: { thinking: { type: "adaptive", blockBinding: binding }, effort: "high" }, }) }) - test("adds blockBinding to explicit enabled thinking", () => { - const model = claude("@ai-sdk/anthropic", "claude-sonnet-4-5") + test("leaves explicit enabled thinking on older models alone", () => { + const model = claude("@ai-sdk/anthropic", "claude-haiku-4-5") expect(ProviderTransform.providerOptions(model, { thinking: { type: "enabled", budgetTokens: 4000 } })).toEqual({ - anthropic: { thinking: { type: "enabled", budgetTokens: 4000, blockBinding: binding } }, + anthropic: { thinking: { type: "enabled", budgetTokens: 4000 } }, }) }) - test("injects adaptive thinking for models that think by default when no variant is set", () => { - for (const id of ["claude-fable-5-1", "claude-mythos-5-1", "claude-opus-5", "claude-sonnet-5"]) { - const model = claude("@ai-sdk/anthropic", id) - expect(ProviderTransform.providerOptions(model, {})).toEqual({ - anthropic: { thinking: { type: "adaptive", blockBinding: binding } }, + sdks.forEach((sdk) => { + describe(sdk.npm, () => { + test.each([ + "claude-fable-5-1", + "claude-fable-5.1", + "claude-5.1-fable", + "global.anthropic.claude-fable-5-1", + "us.anthropic.claude-fable-5-1-v1:0", + "claude-fable-5-1@default", + "CLAUDE-FABLE-5-1", + "claude-opus-5-1", + "claude-sonnet-5-2", + "claude-mythos-5-2", + "claude-mythos-5-10", + "claude-opus-6", + "claude-6-opus", + "claude-mythos-6-20270901", + ])("adds binding for %s", (id) => { + const model = claude(sdk.npm, id) + expect(ProviderTransform.providerOptions(model, {})).toEqual({ + [sdk.key]: { [sdk.option]: { type: "adaptive", blockBinding: binding } }, + }) + expect( + ProviderTransform.providerOptions(model, { [sdk.option]: { type: "adaptive", display: "summarized" } }), + ).toEqual({ + [sdk.key]: { [sdk.option]: { type: "adaptive", display: "summarized", blockBinding: binding } }, + }) + expect( + ProviderTransform.providerOptions(model, { [sdk.option]: { type: "enabled", budgetTokens: 4000 } }), + ).toEqual({ + [sdk.key]: { [sdk.option]: { type: "enabled", budgetTokens: 4000, blockBinding: binding } }, + }) + expect(ProviderTransform.providerOptions(model, { [sdk.option]: { type: "disabled" } })).toEqual({ + [sdk.key]: { [sdk.option]: { type: "disabled" } }, + }) }) - } - }) - test("does not inject thinking for models that are off by default", () => { - for (const id of ["claude-opus-4-7", "claude-opus-4-5", "claude-sonnet-4-6", "claude-haiku-4-5"]) { - const model = claude("@ai-sdk/anthropic", id) - expect(ProviderTransform.providerOptions(model, {})).toEqual({ anthropic: {} }) - } + test.each([ + "claude-haiku-4-5", + "claude-opus-4-8", + "claude-sonnet-4-6", + "claude-opus-5", + "claude-sonnet-5", + "claude-fable-5", + "claude-opus-5-0", + "claude-opus-5-20260724", + "global.anthropic.claude-opus-5", + "us.anthropic.claude-opus-5", + "claude-sonnet-5@default", + "claude-mythos-5-1", + "claude-mythos-5.1", + "claude-5.1-mythos", + "global.anthropic.claude-mythos-5-1-v1:0", + "claude-mythos-5-1@default", + "CLAUDE-MYTHOS-5-1", + "claude-future", + ])("leaves thinking unchanged for %s", (id) => { + const model = claude(sdk.npm, id) + expect(ProviderTransform.providerOptions(model, {})).toEqual({ [sdk.key]: {} }) + expect( + ProviderTransform.providerOptions(model, { [sdk.option]: { type: "adaptive", display: "summarized" } }), + ).toEqual({ [sdk.key]: { [sdk.option]: { type: "adaptive", display: "summarized" } } }) + expect( + ProviderTransform.providerOptions(model, { [sdk.option]: { type: "enabled", budgetTokens: 4000 } }), + ).toEqual({ [sdk.key]: { [sdk.option]: { type: "enabled", budgetTokens: 4000 } } }) + }) + + test.each([ + ["claude-opus-5", "default"], + ["claude-opus-5", "high"], + ["claude-sonnet-5", "default"], + ["claude-sonnet-5", "high"], + ["claude-mythos-5-1", "default"], + ["claude-mythos-5-1", "high"], + ["claude-haiku-4-5", "title"], + ])("omits binding from the %s %s request body and betas", async (id, mode) => { + const requests: Request[] = [] + const capture = Object.assign( + async (...args: Parameters) => { + requests.push(new Request(...args)) + return Response.json( + sdk.key === "bedrock" + ? { + output: { message: { role: "assistant", content: [{ text: "ok" }] } }, + stopReason: "end_turn", + usage: { inputTokens: 1, outputTokens: 1, totalTokens: 2 }, + } + : { + type: "message", + id: "msg_1", + model: "test-model", + role: "assistant", + content: [{ type: "text", text: "ok" }], + stop_reason: "end_turn", + usage: { input_tokens: 1, output_tokens: 1 }, + }, + ) + }, + { preconnect: () => undefined }, + ) + const provider = + sdk.key === "bedrock" + ? createAmazonBedrock({ apiKey: "test-key", region: "ap-southeast-1", fetch: capture }) + : sdk.npm === "@ai-sdk/google-vertex/anthropic" + ? createVertexAnthropic({ + project: "test-project", + location: "global", + generateAuthToken: async () => "test-token", + fetch: capture, + }) + : createAnthropic({ apiKey: "test-key", fetch: capture }) + const model = claude( + sdk.npm, + sdk.key === "bedrock" + ? `global.anthropic.${id}` + : sdk.npm === "@ai-sdk/google-vertex/anthropic" + ? `${id}@default` + : id, + ) + const variants = ProviderTransform.variants(model) + const options = + mode === "title" + ? ProviderTransform.smallOptions({ ...model, variants }) + : mode === "high" + ? variants.high + : {} + await generateText({ + model: provider(model.api.id), + prompt: "hi", + maxOutputTokens: 32000, + providerOptions: ProviderTransform.providerOptions(model, options), + }) + expect(requests).toHaveLength(1) + const body = await requests[0].json() + const fields = sdk.key === "bedrock" ? (body.additionalModelRequestFields ?? {}) : body + expect(fields.thinking).toEqual( + mode === "title" + ? { type: "enabled", budget_tokens: 16000 } + : mode === "high" + ? { type: "adaptive", display: "summarized" } + : undefined, + ) + expect(fields.output_config).toEqual(mode === "high" ? { effort: "high" } : undefined) + expect(fields.anthropic_beta ?? []).not.toContain("thinking-binding-controls-2026-08-01") + expect(requests[0].headers.get("anthropic-beta")?.split(",") ?? []).not.toContain( + "thinking-binding-controls-2026-08-01", + ) + }) + }) }) test("leaves disabled thinking alone", () => { - const model = claude("@ai-sdk/anthropic", "claude-sonnet-5") + const model = claude("@ai-sdk/anthropic", "claude-fable-5-1") expect(ProviderTransform.providerOptions(model, { thinking: { type: "disabled" } })).toEqual({ anthropic: { thinking: { type: "disabled" } }, }) From ef2792511deb406f3b064e05a7cc1a01979260ee Mon Sep 17 00:00:00 2001 From: Victor Navarro Date: Wed, 2 Sep 2026 18:44:43 +0200 Subject: [PATCH 110/185] fix(console): restore migrated inference proxy requests (#46854) --- packages/console/app/src/lib/inference-proxy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/console/app/src/lib/inference-proxy.ts b/packages/console/app/src/lib/inference-proxy.ts index a6614e80f075..a80db3b5e63a 100644 --- a/packages/console/app/src/lib/inference-proxy.ts +++ b/packages/console/app/src/lib/inference-proxy.ts @@ -51,5 +51,5 @@ export async function proxyInference(request: Request, clientIP?: string): Promi const requestID = request.headers.get("x-opencode-request-id") ?? request.headers.get("x-opencode-request") if (requestID) forwarded.headers.set("x-opencode-request-id", requestID) - return fetch(forwarded, { redirect: "error" }) + return fetch(forwarded, { redirect: "manual" }) } From 68abdce1a092e6302e99c2821a76071ee998d8f2 Mon Sep 17 00:00:00 2001 From: Darien Kindlund Date: Wed, 2 Sep 2026 15:15:39 -0400 Subject: [PATCH 111/185] fix(opencode): let config opt out of Anthropic thinking blockBinding (#46820) Co-authored-by: Aiden Cline --- packages/opencode/src/provider/transform.ts | 12 ++++++++++++ packages/opencode/test/provider/transform.test.ts | 15 +++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 56099effe15c..89b9c88ae3cc 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -706,17 +706,29 @@ function anthropicBindsThinking(apiId: string) { const ANTHROPIC_BLOCK_BINDING = { prefixMismatchBehavior: "drop_block" } function anthropicBlockBinding(model: Provider.Model, options: { [x: string]: any }) { + const sdk = sdkKey(model.api.npm) + const key = sdk === "bedrock" ? "reasoningConfig" : sdk === "anthropic" ? "thinking" : undefined + // Consume the OpenCode-only opt-out even on models outside the default scope. + if (key && options[key]?.blockBinding === false) { + const result = { ...options, [key]: { ...options[key] } } + delete result[key].blockBinding + if (Object.keys(result[key]).length === 0) delete result[key] + return result + } + if (!anthropicBindsThinking(model.api.id)) return options switch (model.api.npm) { case "@ai-sdk/anthropic": case "@ai-sdk/google-vertex/anthropic": { const thinking = options.thinking ?? { type: "adaptive" } if (thinking.type !== "adaptive" && thinking.type !== "enabled") return options + if (thinking.blockBinding !== undefined) return options return { ...options, thinking: { ...thinking, blockBinding: ANTHROPIC_BLOCK_BINDING } } } case "@ai-sdk/amazon-bedrock": { const reasoningConfig = options.reasoningConfig ?? { type: "adaptive" } if (reasoningConfig.type !== "adaptive" && reasoningConfig.type !== "enabled") return options + if (reasoningConfig.blockBinding !== undefined) return options return { ...options, reasoningConfig: { ...reasoningConfig, blockBinding: ANTHROPIC_BLOCK_BINDING } } } } diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index bfe4a0aa9b6f..9d767581b706 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -938,6 +938,21 @@ describe("ProviderTransform.providerOptions", () => { ).toEqual({ [sdk.key]: { [sdk.option]: { type: "enabled", budgetTokens: 4000 } } }) }) + test.each(["claude-fable-5-1", "claude-opus-5"])("honors explicit binding controls for %s", (id) => { + const model = claude(sdk.npm, id) + const options = Object.freeze({ + [sdk.option]: Object.freeze({ type: "adaptive", blockBinding: false }), + }) + expect(ProviderTransform.providerOptions(model, options)).toEqual({ + [sdk.key]: { [sdk.option]: { type: "adaptive" } }, + }) + expect(ProviderTransform.providerOptions(model, { [sdk.option]: { blockBinding: false } })).toEqual({ + [sdk.key]: {}, + }) + const custom = { [sdk.option]: { type: "adaptive", blockBinding: { prefixMismatchBehavior: "error" } } } + expect(ProviderTransform.providerOptions(model, custom)).toEqual({ [sdk.key]: custom }) + }) + test.each([ ["claude-opus-5", "default"], ["claude-opus-5", "high"], From 4eb29a64f0054672950acf789f2b09487ebfbb20 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Wed, 2 Sep 2026 15:33:15 -0500 Subject: [PATCH 112/185] fix(opencode): default chunk timeout to five minutes (#46890) --- packages/core/src/v1/config/provider.ts | 9 ++- packages/opencode/src/provider/provider.ts | 2 +- .../test/provider/header-timeout.test.ts | 73 ++++++++++++++++++- packages/sdk/js/src/v2/gen/types.gen.ts | 7 +- packages/sdk/openapi.json | 13 +++- packages/web/src/content/docs/config.mdx | 2 +- 6 files changed, 95 insertions(+), 11 deletions(-) diff --git a/packages/core/src/v1/config/provider.ts b/packages/core/src/v1/config/provider.ts index f860a2b4ac7e..2421e13de48a 100644 --- a/packages/core/src/v1/config/provider.ts +++ b/packages/core/src/v1/config/provider.ts @@ -114,9 +114,14 @@ export const Info = Schema.Struct({ description: "Timeout in milliseconds to wait for response headers. Provider integrations may set defaults. Set to false to disable timeout.", }), - chunkTimeout: Schema.optional(PositiveInt).annotate({ + chunkTimeout: Schema.optional( + Schema.Union([PositiveInt, Schema.Literal(false)]).annotate({ + description: + "Timeout in milliseconds between streamed SSE chunks for this provider (default: 300000). If no chunk arrives within this window, the request is aborted. Set to false to disable timeout.", + }), + ).annotate({ description: - "Timeout in milliseconds between streamed SSE chunks for this provider. If no chunk arrives within this window, the request is aborted.", + "Timeout in milliseconds between streamed SSE chunks for this provider (default: 300000). If no chunk arrives within this window, the request is aborted. Set to false to disable timeout.", }), }), [Schema.Record(Schema.String, Schema.Any)], diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 2c69d8fba9bc..dc43fbfbdd35 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -1792,7 +1792,7 @@ const layer = Layer.effect( if (existing) return existing const customFetch = options["fetch"] - const chunkTimeout = options["chunkTimeout"] + const chunkTimeout = options["chunkTimeout"] ?? 300_000 const headerTimeout = options["headerTimeout"] delete options["chunkTimeout"] delete options["headerTimeout"] diff --git a/packages/opencode/test/provider/header-timeout.test.ts b/packages/opencode/test/provider/header-timeout.test.ts index fc5ab04e108b..e0dd19e471db 100644 --- a/packages/opencode/test/provider/header-timeout.test.ts +++ b/packages/opencode/test/provider/header-timeout.test.ts @@ -13,6 +13,8 @@ import { Env } from "@/env" import { Plugin } from "@/plugin" import { Provider } from "@/provider/provider" import { ProviderError } from "@/provider/error" +import { MessageV2 } from "@/session/message-v2" +import { SessionRetry } from "@/session/retry" afterEach(async () => { await disposeAllInstances() @@ -46,7 +48,42 @@ it.live("headerTimeout does not abort delayed SSE body after headers arrive", () }), ) -it.live("chunkTimeout raises a response stream error when SSE body stalls", () => +it.live("default chunkTimeout is applied at fetch without changing provider options", () => + Effect.gen(function* () { + const server = yield* Effect.acquireRelease( + Effect.promise(() => delayedBodyServer(250)), + (server) => Effect.sync(() => server.server.close()), + ) + + yield* provideTmpdirInstance( + () => + Effect.gen(function* () { + const provider = yield* Provider.Service + const configured = yield* provider.getProvider(ProviderV2.ID.make("test")) + const signals: (AbortSignal | null | undefined)[] = [] + configured.options.fetch = (input: RequestInfo | URL, init?: RequestInit) => { + signals.push(init?.signal) + return fetch(input, init) + } + const model = yield* provider.getModel(ProviderV2.ID.make("test"), ModelV2.ID.make("test-model")) + const language = yield* provider.getLanguage(model) + yield* Effect.acquireRelease( + Effect.promise(() => + language.doStream({ prompt: [{ role: "user", content: [{ type: "text", text: "hello" }] }] }), + ), + (result) => Effect.promise(() => result.stream.cancel()), + ) + + expect(signals).toHaveLength(1) + expect(signals[0]).toBeInstanceOf(AbortSignal) + expect(configured.options.chunkTimeout).toBeUndefined() + }), + { config: providerConfig(server.url) }, + ) + }), +) + +it.live("configured chunkTimeout raises a retryable response stream error when SSE body stalls", () => Effect.gen(function* () { const server = yield* Effect.acquireRelease( Effect.promise(() => delayedBodyServer(250)), @@ -74,12 +111,41 @@ it.live("chunkTimeout raises a response stream error when SSE body stalls", () = } }) expect(error).toBeInstanceOf(ProviderError.ResponseStreamError) + expect( + SessionRetry.retryable(MessageV2.fromError(error, { providerID: model.providerID }), model.providerID), + ).toEqual({ message: "SSE read timed out" }) }), { config: providerConfig(server.url, { chunkTimeout: 50 }) }, ) }), ) +it.live("chunkTimeout can be disabled with false", () => + Effect.gen(function* () { + const server = yield* Effect.acquireRelease( + Effect.promise(() => delayedBodyServer(250)), + (server) => Effect.sync(() => server.server.close()), + ) + + yield* provideTmpdirInstance( + () => + Effect.gen(function* () { + const provider = yield* Provider.Service + const configured = yield* provider.getProvider(ProviderV2.ID.make("test")) + expect(configured.options.chunkTimeout).toBe(false) + const model = yield* provider.getModel(ProviderV2.ID.make("test"), ModelV2.ID.make("test-model")) + const result = streamText({ + model: yield* provider.getLanguage(model), + messages: [{ role: "user", content: "hello" }], + }) + + expect(yield* Effect.promise(() => result.text)).toBe("late") + }), + { config: providerConfig(server.url, { chunkTimeout: false }) }, + ) + }), +) + it.live("headerTimeout aborts when response headers do not arrive", () => Effect.gen(function* () { const server = yield* Effect.acquireRelease( @@ -136,7 +202,7 @@ it.live("headerTimeout is opt-in for non-OpenAI providers", () => }), ) -it.live("OpenAI Codex headerTimeout default can be disabled by config", () => +it.live("OpenAI Codex header and chunk timeout defaults can be disabled by config", () => Effect.gen(function* () { yield* withAuthContent( Effect.gen(function* () { @@ -146,8 +212,9 @@ it.live("OpenAI Codex headerTimeout default can be disabled by config", () => const provider = yield* Provider.Service const openai = yield* provider.getProvider(ProviderV2.ID.openai) expect(openai.options.headerTimeout).toBe(false) + expect(openai.options.chunkTimeout).toBe(false) }), - { config: { provider: { openai: { options: { headerTimeout: false } } } } }, + { config: { provider: { openai: { options: { headerTimeout: false, chunkTimeout: false } } } } }, ) }), ) diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 72b5e6f30ace..23d1b19649ce 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -1754,8 +1754,11 @@ export type ProviderConfig = { * Timeout in milliseconds to wait for response headers. Provider integrations may set defaults. Set to false to disable timeout. */ headerTimeout?: number | false - chunkTimeout?: number - [key: string]: unknown | string | boolean | number | false | number | false | number | undefined + /** + * Timeout in milliseconds between streamed SSE chunks for this provider (default: 300000). If no chunk arrives within this window, the request is aborted. Set to false to disable timeout. + */ + chunkTimeout?: number | false + [key: string]: unknown | string | boolean | number | false | number | false | number | false | undefined } models?: { [key: string]: { diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index 5e372b6fb6b8..d9f757993610 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -20783,8 +20783,17 @@ "description": "Timeout in milliseconds to wait for response headers. Provider integrations may set defaults. Set to false to disable timeout." }, "chunkTimeout": { - "type": "integer", - "exclusiveMinimum": 0 + "anyOf": [ + { + "type": "integer", + "exclusiveMinimum": 0 + }, + { + "type": "boolean", + "enum": [false] + } + ], + "description": "Timeout in milliseconds between streamed SSE chunks for this provider (default: 300000). If no chunk arrives within this window, the request is aborted. Set to false to disable timeout." } }, "additionalProperties": {} diff --git a/packages/web/src/content/docs/config.mdx b/packages/web/src/content/docs/config.mdx index 318f013b4119..70dc8851d357 100644 --- a/packages/web/src/content/docs/config.mdx +++ b/packages/web/src/content/docs/config.mdx @@ -392,7 +392,7 @@ Provider options can include `timeout`, `chunkTimeout`, and `setCacheKey`: ``` - `timeout` - Request timeout in milliseconds (default: 300000). Set to `false` to disable. -- `chunkTimeout` - Timeout in milliseconds between streamed response chunks. If no chunk arrives in time, the request is aborted. +- `chunkTimeout` - Timeout in milliseconds between streamed response chunks (default: 300000, or 5 minutes). If no chunk arrives in time, the request is aborted. Set to `false` to disable. - `setCacheKey` - Ensure a cache key is always set for designated provider. You can also configure [local models](/docs/models#local). [Learn more](/docs/models). From b04697366f05419e9bd7a92f841813dd976161c9 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Wed, 2 Sep 2026 16:00:54 -0500 Subject: [PATCH 113/185] fix(opencode): default header timeout to five minutes (#46903) --- packages/core/src/v1/config/provider.ts | 4 +- packages/opencode/src/provider/provider.ts | 2 +- .../test/provider/header-timeout.test.ts | 74 ++++++++++--------- packages/sdk/js/src/v2/gen/types.gen.ts | 2 +- packages/sdk/openapi.json | 2 +- packages/web/src/content/docs/config.mdx | 3 +- 6 files changed, 47 insertions(+), 40 deletions(-) diff --git a/packages/core/src/v1/config/provider.ts b/packages/core/src/v1/config/provider.ts index 2421e13de48a..5b6a8133c45e 100644 --- a/packages/core/src/v1/config/provider.ts +++ b/packages/core/src/v1/config/provider.ts @@ -108,11 +108,11 @@ export const Info = Schema.Struct({ headerTimeout: Schema.optional( Schema.Union([PositiveInt, Schema.Literal(false)]).annotate({ description: - "Timeout in milliseconds to wait for response headers. Provider integrations may set defaults. Set to false to disable timeout.", + "Timeout in milliseconds to wait for response headers (default: 300000). Set to false to disable timeout.", }), ).annotate({ description: - "Timeout in milliseconds to wait for response headers. Provider integrations may set defaults. Set to false to disable timeout.", + "Timeout in milliseconds to wait for response headers (default: 300000). Set to false to disable timeout.", }), chunkTimeout: Schema.optional( Schema.Union([PositiveInt, Schema.Literal(false)]).annotate({ diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index dc43fbfbdd35..72d5a7a59382 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -1793,7 +1793,7 @@ const layer = Layer.effect( const customFetch = options["fetch"] const chunkTimeout = options["chunkTimeout"] ?? 300_000 - const headerTimeout = options["headerTimeout"] + const headerTimeout = options["headerTimeout"] ?? 300_000 delete options["chunkTimeout"] delete options["headerTimeout"] diff --git a/packages/opencode/test/provider/header-timeout.test.ts b/packages/opencode/test/provider/header-timeout.test.ts index e0dd19e471db..38b884dc7fc1 100644 --- a/packages/opencode/test/provider/header-timeout.test.ts +++ b/packages/opencode/test/provider/header-timeout.test.ts @@ -48,40 +48,46 @@ it.live("headerTimeout does not abort delayed SSE body after headers arrive", () }), ) -it.live("default chunkTimeout is applied at fetch without changing provider options", () => - Effect.gen(function* () { - const server = yield* Effect.acquireRelease( - Effect.promise(() => delayedBodyServer(250)), - (server) => Effect.sync(() => server.server.close()), - ) +for (const timeout of ["chunkTimeout", "headerTimeout"] as const) { + it.live(`default ${timeout} is applied at fetch without changing provider options`, () => + Effect.gen(function* () { + const server = yield* Effect.acquireRelease( + Effect.promise(() => delayedBodyServer(250)), + (server) => Effect.sync(() => server.server.close()), + ) - yield* provideTmpdirInstance( - () => - Effect.gen(function* () { - const provider = yield* Provider.Service - const configured = yield* provider.getProvider(ProviderV2.ID.make("test")) - const signals: (AbortSignal | null | undefined)[] = [] - configured.options.fetch = (input: RequestInfo | URL, init?: RequestInit) => { - signals.push(init?.signal) - return fetch(input, init) - } - const model = yield* provider.getModel(ProviderV2.ID.make("test"), ModelV2.ID.make("test-model")) - const language = yield* provider.getLanguage(model) - yield* Effect.acquireRelease( - Effect.promise(() => - language.doStream({ prompt: [{ role: "user", content: [{ type: "text", text: "hello" }] }] }), - ), - (result) => Effect.promise(() => result.stream.cancel()), - ) + yield* provideTmpdirInstance( + () => + Effect.gen(function* () { + const provider = yield* Provider.Service + const configured = yield* provider.getProvider(ProviderV2.ID.make("test")) + const signals: (AbortSignal | null | undefined)[] = [] + configured.options.fetch = (input: RequestInfo | URL, init?: RequestInit) => { + signals.push(init?.signal) + return fetch(input, init) + } + const model = yield* provider.getModel(ProviderV2.ID.make("test"), ModelV2.ID.make("test-model")) + const language = yield* provider.getLanguage(model) + yield* Effect.acquireRelease( + Effect.promise(() => + language.doStream({ prompt: [{ role: "user", content: [{ type: "text", text: "hello" }] }] }), + ), + (result) => Effect.promise(() => result.stream.cancel()), + ) - expect(signals).toHaveLength(1) - expect(signals[0]).toBeInstanceOf(AbortSignal) - expect(configured.options.chunkTimeout).toBeUndefined() - }), - { config: providerConfig(server.url) }, - ) - }), -) + expect(signals).toHaveLength(1) + expect(signals[0]).toBeInstanceOf(AbortSignal) + expect(configured.options[timeout]).toBeUndefined() + }), + { + config: providerConfig(server.url, { + [timeout === "chunkTimeout" ? "headerTimeout" : "chunkTimeout"]: false, + }), + }, + ) + }), + ) +} it.live("configured chunkTimeout raises a retryable response stream error when SSE body stalls", () => Effect.gen(function* () { @@ -178,7 +184,7 @@ it.live("headerTimeout aborts when response headers do not arrive", () => }), ) -it.live("headerTimeout is opt-in for non-OpenAI providers", () => +it.live("headerTimeout can be disabled with false for non-OpenAI providers", () => Effect.gen(function* () { const server = yield* Effect.acquireRelease( Effect.promise(() => delayedHeaderServer(100)), @@ -197,7 +203,7 @@ it.live("headerTimeout is opt-in for non-OpenAI providers", () => expect(yield* Effect.promise(() => result.text)).toBe("ok") }), - { config: providerConfig(server.url) }, + { config: providerConfig(server.url, { headerTimeout: false }) }, ) }), ) diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 23d1b19649ce..f06c20cc413e 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -1751,7 +1751,7 @@ export type ProviderConfig = { */ timeout?: number | false /** - * Timeout in milliseconds to wait for response headers. Provider integrations may set defaults. Set to false to disable timeout. + * Timeout in milliseconds to wait for response headers (default: 300000). Set to false to disable timeout. */ headerTimeout?: number | false /** diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index d9f757993610..e66d14050558 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -20780,7 +20780,7 @@ "enum": [false] } ], - "description": "Timeout in milliseconds to wait for response headers. Provider integrations may set defaults. Set to false to disable timeout." + "description": "Timeout in milliseconds to wait for response headers (default: 300000). Set to false to disable timeout." }, "chunkTimeout": { "anyOf": [ diff --git a/packages/web/src/content/docs/config.mdx b/packages/web/src/content/docs/config.mdx index 70dc8851d357..22c0640f662f 100644 --- a/packages/web/src/content/docs/config.mdx +++ b/packages/web/src/content/docs/config.mdx @@ -374,7 +374,7 @@ You can configure the providers and models you want to use in your OpenCode conf The `small_model` option configures a separate model for lightweight tasks like title generation. By default, OpenCode tries to use a cheaper model if one is available from your provider, otherwise it falls back to your main model. -Provider options can include `timeout`, `chunkTimeout`, and `setCacheKey`: +Provider options can include `timeout`, `headerTimeout`, `chunkTimeout`, and `setCacheKey`: ```json title="opencode.json" { @@ -392,6 +392,7 @@ Provider options can include `timeout`, `chunkTimeout`, and `setCacheKey`: ``` - `timeout` - Request timeout in milliseconds (default: 300000). Set to `false` to disable. +- `headerTimeout` - Timeout in milliseconds to wait for response headers (default: 300000, or 5 minutes). This timer stops once headers arrive and does not limit the streamed response body. Set to `false` to disable. - `chunkTimeout` - Timeout in milliseconds between streamed response chunks (default: 300000, or 5 minutes). If no chunk arrives in time, the request is aborted. Set to `false` to disable. - `setCacheKey` - Ensure a cache key is always set for designated provider. From 05028334b27b97c227f22bda50a53c8932f9a93c Mon Sep 17 00:00:00 2001 From: opencode Date: Wed, 2 Sep 2026 21:40:57 +0000 Subject: [PATCH 114/185] sync release versions for v1.18.27 --- bun.lock | 56 ++++++++++----------- packages/app/package.json | 2 +- packages/cli/package.json | 2 +- packages/codemode/package.json | 2 +- packages/console/app/package.json | 2 +- packages/console/core/package.json | 2 +- packages/console/function/package.json | 2 +- packages/console/mail/package.json | 2 +- packages/console/support/package.json | 2 +- packages/core/package.json | 2 +- packages/desktop/package.json | 2 +- packages/effect-drizzle-sqlite/package.json | 2 +- packages/effect-sqlite-node/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/function/package.json | 2 +- packages/http-recorder/package.json | 2 +- packages/llm/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- packages/server/package.json | 2 +- packages/session-ui/package.json | 2 +- packages/slack/package.json | 2 +- packages/stats/app/package.json | 2 +- packages/stats/core/package.json | 2 +- packages/stats/server/package.json | 2 +- packages/tui/package.json | 2 +- packages/ui/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 30 files changed, 57 insertions(+), 57 deletions(-) diff --git a/bun.lock b/bun.lock index adce8d3bb71d..3cccd0d121b0 100644 --- a/bun.lock +++ b/bun.lock @@ -29,7 +29,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@corvu/drawer": "catalog:", "@dnd-kit/abstract": "0.5.0", @@ -96,7 +96,7 @@ }, "packages/cli": { "name": "@opencode-ai/cli", - "version": "1.18.26", + "version": "1.18.27", "bin": { "lildax": "./bin/lildax.cjs", }, @@ -144,7 +144,7 @@ }, "packages/codemode": { "name": "@opencode-ai/codemode", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "acorn": "8.15.0", "effect": "catalog:", @@ -158,7 +158,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -195,7 +195,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -222,7 +222,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@ai-sdk/anthropic": "3.0.82", "@ai-sdk/openai": "3.0.48", @@ -245,7 +245,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -269,7 +269,7 @@ }, "packages/console/support": { "name": "@opencode-ai/console-support", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@opencode-ai/console-core": "workspace:*", @@ -289,7 +289,7 @@ }, "packages/core": { "name": "@opencode-ai/core", - "version": "1.18.26", + "version": "1.18.27", "bin": { "opencode": "./bin/opencode", }, @@ -383,7 +383,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@zip.js/zip.js": "2.7.62", "drizzle-orm": "catalog:", @@ -437,7 +437,7 @@ }, "packages/effect-drizzle-sqlite": { "name": "@opencode-ai/effect-drizzle-sqlite", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "drizzle-orm": "catalog:", "effect": "catalog:", @@ -451,7 +451,7 @@ }, "packages/effect-sqlite-node": { "name": "@opencode-ai/effect-sqlite-node", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "effect": "catalog:", }, @@ -463,7 +463,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@hono/standard-validator": "catalog:", "@opencode-ai/core": "workspace:*", @@ -495,7 +495,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -511,7 +511,7 @@ }, "packages/http-recorder": { "name": "@opencode-ai/http-recorder", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@effect/platform-node": "4.0.0-beta.83", "@effect/platform-node-shared": "4.0.0-beta.83", @@ -542,7 +542,7 @@ }, "packages/llm": { "name": "@opencode-ai/llm", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@opencode-ai/schema": "workspace:*", "@smithy/eventstream-codec": "4.2.14", @@ -561,7 +561,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.18.26", + "version": "1.18.27", "bin": { "opencode": "./bin/opencode", }, @@ -692,7 +692,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@ai-sdk/provider": "3.0.8", "@opencode-ai/sdk": "workspace:*", @@ -768,7 +768,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "cross-spawn": "catalog:", }, @@ -783,7 +783,7 @@ }, "packages/server": { "name": "@opencode-ai/server", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/protocol": "workspace:*", @@ -798,7 +798,7 @@ }, "packages/session-ui": { "name": "@opencode-ai/session-ui", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/client": "file:../app/vendor/opencode-ai-client-1.17.13-v2.tgz", @@ -838,7 +838,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -851,7 +851,7 @@ }, "packages/stats/app": { "name": "@opencode-ai/stats-app", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@ibm/plex": "6.4.1", "@kobalte/core": "catalog:", @@ -878,7 +878,7 @@ }, "packages/stats/core": { "name": "@opencode-ai/stats-core", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@aws-sdk/client-athena": "3.933.0", "@planetscale/database": "1.19.0", @@ -897,7 +897,7 @@ }, "packages/stats/server": { "name": "@opencode-ai/stats-server", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@aws-sdk/client-firehose": "3.933.0", "@effect/platform-node": "catalog:", @@ -939,7 +939,7 @@ }, "packages/tui": { "name": "@opencode-ai/tui", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/plugin": "workspace:*", @@ -966,7 +966,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@kobalte/core": "catalog:", "@pierre/diffs": "catalog:", @@ -1017,7 +1017,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/app/package.json b/packages/app/package.json index 26dd36bcb15b..15a689c0c736 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.18.26", + "version": "1.18.27", "description": "", "type": "module", "exports": { diff --git a/packages/cli/package.json b/packages/cli/package.json index dcc5b55ab3ba..887101bf10fc 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/cli", - "version": "1.18.26", + "version": "1.18.27", "type": "module", "license": "MIT", "bin": { diff --git a/packages/codemode/package.json b/packages/codemode/package.json index 23d9cf8412de..1fa68a31d12d 100644 --- a/packages/codemode/package.json +++ b/packages/codemode/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/codemode", - "version": "1.18.26", + "version": "1.18.27", "description": "Effect-native confined code execution over schema-described tools", "private": true, "type": "module", diff --git a/packages/console/app/package.json b/packages/console/app/package.json index 19fdec8598cf..64138086b621 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.18.26", + "version": "1.18.27", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index b1f79b25ab66..3409dbd254ec 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/console-core", - "version": "1.18.26", + "version": "1.18.27", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 702df201f0b4..6f1e12c6b839 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.18.26", + "version": "1.18.27", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index a58ea72148a2..997b1d89fb8c 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.18.26", + "version": "1.18.27", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/console/support/package.json b/packages/console/support/package.json index 1fe427465a65..74511617d0d7 100644 --- a/packages/console/support/package.json +++ b/packages/console/support/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-support", - "version": "1.18.26", + "version": "1.18.27", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/core/package.json b/packages/core/package.json index ce620bc85baf..8979120a9fe8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.26", + "version": "1.18.27", "name": "@opencode-ai/core", "type": "module", "license": "MIT", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 27d16283efb8..d134d4c538ab 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.18.26", + "version": "1.18.27", "type": "module", "license": "MIT", "homepage": "https://opencode.ai", diff --git a/packages/effect-drizzle-sqlite/package.json b/packages/effect-drizzle-sqlite/package.json index 904b305ccc4c..75dfd6e73d52 100644 --- a/packages/effect-drizzle-sqlite/package.json +++ b/packages/effect-drizzle-sqlite/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.26", + "version": "1.18.27", "name": "@opencode-ai/effect-drizzle-sqlite", "type": "module", "license": "MIT", diff --git a/packages/effect-sqlite-node/package.json b/packages/effect-sqlite-node/package.json index 99e1f172b2a2..e60ad3db4ddf 100644 --- a/packages/effect-sqlite-node/package.json +++ b/packages/effect-sqlite-node/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.26", + "version": "1.18.27", "name": "@opencode-ai/effect-sqlite-node", "type": "module", "license": "MIT", diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index dde092a8b7bc..3fccb804a978 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.18.26", + "version": "1.18.27", "private": true, "type": "module", "license": "MIT", diff --git a/packages/function/package.json b/packages/function/package.json index 4f3b6332ca55..eef35ddd9584 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.18.26", + "version": "1.18.27", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/http-recorder/package.json b/packages/http-recorder/package.json index f4d119f193d5..5cf36ff2869e 100644 --- a/packages/http-recorder/package.json +++ b/packages/http-recorder/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.26", + "version": "1.18.27", "name": "@opencode-ai/http-recorder", "description": "Record and replay Effect HTTP client traffic with deterministic cassettes", "type": "module", diff --git a/packages/llm/package.json b/packages/llm/package.json index 9826e2a5d519..accb982acf9e 100644 --- a/packages/llm/package.json +++ b/packages/llm/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.26", + "version": "1.18.27", "name": "@opencode-ai/llm", "type": "module", "license": "MIT", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 00edea054927..03f5e17310f9 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.26", + "version": "1.18.27", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index a822e45a2e14..87fefc959d60 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/plugin", - "version": "1.18.26", + "version": "1.18.27", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index e808bcae5a0d..3b4572544163 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/sdk", - "version": "1.18.26", + "version": "1.18.27", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index 0ed32b1dd480..a379a5f06f25 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/server", - "version": "1.18.26", + "version": "1.18.27", "private": true, "type": "module", "license": "MIT", diff --git a/packages/session-ui/package.json b/packages/session-ui/package.json index 80f4cc5bc512..c9513628eff9 100644 --- a/packages/session-ui/package.json +++ b/packages/session-ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/session-ui", - "version": "1.18.26", + "version": "1.18.27", "private": true, "type": "module", "license": "MIT", diff --git a/packages/slack/package.json b/packages/slack/package.json index c7c7a3455c66..9f4c08c9ae28 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.18.26", + "version": "1.18.27", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/stats/app/package.json b/packages/stats/app/package.json index 5ed324bf5a92..2e71201a44c5 100644 --- a/packages/stats/app/package.json +++ b/packages/stats/app/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-app", - "version": "1.18.26", + "version": "1.18.27", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/core/package.json b/packages/stats/core/package.json index c21dc5b74f4a..5d77e8262228 100644 --- a/packages/stats/core/package.json +++ b/packages/stats/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-core", - "version": "1.18.26", + "version": "1.18.27", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/server/package.json b/packages/stats/server/package.json index ab9b7d140bd5..8bd168d494b4 100644 --- a/packages/stats/server/package.json +++ b/packages/stats/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-server", - "version": "1.18.26", + "version": "1.18.27", "private": true, "type": "module", "license": "MIT", diff --git a/packages/tui/package.json b/packages/tui/package.json index 2bfdaf4d3111..9bcdc3f131ef 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/tui", - "version": "1.18.26", + "version": "1.18.27", "private": true, "type": "module", "license": "MIT", diff --git a/packages/ui/package.json b/packages/ui/package.json index 995e8be52d1d..6bbdaa11130e 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.18.26", + "version": "1.18.27", "type": "module", "license": "MIT", "repository": { diff --git a/packages/web/package.json b/packages/web/package.json index 135e663abfbc..5c2d0acdf287 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -2,7 +2,7 @@ "name": "@opencode-ai/web", "type": "module", "license": "MIT", - "version": "1.18.26", + "version": "1.18.27", "scripts": { "dev": "astro dev", "dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev", diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index 1cd570242976..7a9b63a3c84a 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "opencode", "displayName": "opencode", "description": "opencode for VS Code", - "version": "1.18.26", + "version": "1.18.27", "publisher": "sst-dev", "repository": { "type": "git", From 8d1f8916d30f4ea1c90012a5d63b64711527c67d Mon Sep 17 00:00:00 2001 From: Vladimir Glafirov Date: Thu, 3 Sep 2026 01:18:04 +0200 Subject: [PATCH 115/185] chore: bump gitlab-ai-provider to 6.13.0 (#46914) --- bun.lock | 6 +++--- packages/core/package.json | 2 +- packages/opencode/package.json | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bun.lock b/bun.lock index 3cccd0d121b0..72544b5bbdaa 100644 --- a/bun.lock +++ b/bun.lock @@ -341,7 +341,7 @@ "drizzle-orm": "catalog:", "effect": "catalog:", "fuzzysort": "3.1.0", - "gitlab-ai-provider": "6.12.1", + "gitlab-ai-provider": "6.13.0", "glob": "13.0.5", "google-auth-library": "10.5.0", "gray-matter": "4.0.3", @@ -634,7 +634,7 @@ "drizzle-orm": "catalog:", "effect": "catalog:", "fuzzysort": "3.1.0", - "gitlab-ai-provider": "6.12.1", + "gitlab-ai-provider": "6.13.0", "glob": "13.0.5", "google-auth-library": "10.5.0", "gray-matter": "4.0.3", @@ -3845,7 +3845,7 @@ "github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="], - "gitlab-ai-provider": ["gitlab-ai-provider@6.12.1", "", { "dependencies": { "@anthropic-ai/sdk": "^0.71.0", "@anycable/core": "^0.9.2", "graphql-request": "^6.1.0", "isomorphic-ws": "^5.0.0", "openai": "^6.16.0", "socket.io-client": "^4.8.1", "vscode-jsonrpc": "^8.2.1", "zod": "^3.25.76" }, "peerDependencies": { "@ai-sdk/provider": ">=3.0.0", "@ai-sdk/provider-utils": ">=4.0.0" } }, "sha512-Qn5iHqvjG8yktI5MWaUgdRR94l7O4WtYW0CAbhsCh1Tj0Fei/DeprOYPVyf4Nht1Ix6U2PXSYM32QOHI6Z2TDw=="], + "gitlab-ai-provider": ["gitlab-ai-provider@6.13.0", "", { "dependencies": { "@anthropic-ai/sdk": "^0.71.0", "@anycable/core": "^0.9.2", "graphql-request": "^6.1.0", "isomorphic-ws": "^5.0.0", "openai": "^6.16.0", "socket.io-client": "^4.8.1", "vscode-jsonrpc": "^8.2.1", "zod": "^3.25.76" }, "peerDependencies": { "@ai-sdk/provider": ">=3.0.0", "@ai-sdk/provider-utils": ">=4.0.0" } }, "sha512-JDZhNjvoiB7xBfesNegXNDg6ItKf9M2l8/DifuIyuvYmGgaZnDDbl89QrOKSoIzAOpo/+3Om0qviBPm84nGEbg=="], "glob": ["glob@13.0.5", "", { "dependencies": { "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw=="], diff --git a/packages/core/package.json b/packages/core/package.json index 8979120a9fe8..0dbf20fc8756 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -108,7 +108,7 @@ "drizzle-orm": "catalog:", "effect": "catalog:", "fuzzysort": "3.1.0", - "gitlab-ai-provider": "6.12.1", + "gitlab-ai-provider": "6.13.0", "glob": "13.0.5", "google-auth-library": "10.5.0", "gray-matter": "4.0.3", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 03f5e17310f9..9786bd0e50fe 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -120,7 +120,7 @@ "drizzle-orm": "catalog:", "effect": "catalog:", "fuzzysort": "3.1.0", - "gitlab-ai-provider": "6.12.1", + "gitlab-ai-provider": "6.13.0", "glob": "13.0.5", "google-auth-library": "10.5.0", "gray-matter": "4.0.3", From 3a9d4e78b6b4509c2f7e91812a735e568e7f3f84 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Wed, 2 Sep 2026 23:33:47 +0000 Subject: [PATCH 116/185] chore: update nix node_modules hashes --- nix/hashes.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nix/hashes.json b/nix/hashes.json index 7b7a6081a5d5..b36141f400cf 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,8 +1,8 @@ { "nodeModules": { - "x86_64-linux": "sha256-SVvFPO+KuS67+6XGPhaB3cIuc3XUyM0XVccy5v8afS4=", - "aarch64-linux": "sha256-HJRrSu5u0TEg214d2RAbM1C+nmrxvIR/d7JlSBOGb9I=", - "aarch64-darwin": "sha256-ytmHSdC0PVGAJSbpt/+YwL5ySF3w6r/9uZpZACPppkI=", - "x86_64-darwin": "sha256-ma7K4K+xn7Jz3+YPA/n8ly1o308UNoM/DO9Z8yZSAKE=" + "x86_64-linux": "sha256-2kzFIn42mD7ZDu/+6lWctqjZ/lIVZZfjZhmF/ymhF54=", + "aarch64-linux": "sha256-4HlReGD3gYfyyfnY/FQ46Ov+g3ZGV3sBYQ9p1bS9YAY=", + "aarch64-darwin": "sha256-dkfCoH/sW9XBPZ7XhnUoE54TY1lcfNvZ5wQQLr7gKiQ=", + "x86_64-darwin": "sha256-32t1JEcibZ4OrornIgfWOGQA87FOXjrxrxlDrflh7Ss=" } } From bbe4c952d707bcb5436646de30a1ed8f0cc64b74 Mon Sep 17 00:00:00 2001 From: "Victor M. SMITH" <72023257+MVS-source@users.noreply.github.com> Date: Thu, 3 Sep 2026 03:35:18 +0200 Subject: [PATCH 117/185] docs: add Eden AI to the providers list (#43386) --- packages/web/src/content/docs/providers.mdx | 48 +++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/packages/web/src/content/docs/providers.mdx b/packages/web/src/content/docs/providers.mdx index a1d01079f160..ff2e8cfee807 100644 --- a/packages/web/src/content/docs/providers.mdx +++ b/packages/web/src/content/docs/providers.mdx @@ -874,6 +874,54 @@ Selecting a router model is a drop-in replacement for any other model — OpenCo --- +### Eden AI + +[Eden AI](https://www.edenai.co/) is an EU-based gateway that serves models from many vendors over a single OpenAI-compatible API, with a separate EU endpoint for teams that need inference to stay in the EU. + +1. Head over to the [Eden AI platform](https://app.edenai.run/user/register) to create an account and generate an API key. + +2. Run the `/connect` command and search for **Eden AI**. + + ```txt + /connect + ``` + +3. Enter your Eden AI API key. + + ```txt + ┌ API key + │ + │ + └ enter + ``` + +4. Run the `/models` command to select a model like _Mistral Large 3_ or _Claude Sonnet 5_. + + ```txt + /models + ``` + + Eden AI model ids are themselves in `vendor/model` form, so a full reference has three segments, for example `edenai/anthropic/claude-sonnet-5`. + +5. To keep requests on Eden AI's EU gateway, set its base URL. + + ```json title="opencode.json" + { + "$schema": "https://opencode.ai/config.json", + "provider": { + "edenai": { + "options": { + "baseURL": "https://api.eu.edenai.run/v3" + } + } + } + } + ``` + + The default is `https://api.edenai.run/v3`, so this swaps the global endpoint for the EU one. The EU endpoint serves the subset of the catalog that is available in the EU, so a model chosen in step 4 may not be reachable through it. + +--- + ### FrogBot 1. Head over to the [FrogBot dashboard](https://app.frogbot.ai/signup), create an account, and generate an API key. From b578b7261fc9ec4917fe272df5cc4bd8a056cd5d Mon Sep 17 00:00:00 2001 From: David Hill <1879069+iamdavidhill@users.noreply.github.com> Date: Wed, 2 Sep 2026 19:47:21 -0600 Subject: [PATCH 118/185] fix(app): increase open-in icon size (#46540) --- packages/app/src/components/session/open-in-app-v2.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/app/src/components/session/open-in-app-v2.tsx b/packages/app/src/components/session/open-in-app-v2.tsx index e26ff2e0eaba..b5291dcc32cd 100644 --- a/packages/app/src/components/session/open-in-app-v2.tsx +++ b/packages/app/src/components/session/open-in-app-v2.tsx @@ -31,7 +31,10 @@ export function OpenInAppV2(props: { directory: () => string }) { disabled={state.opening()} aria-label={language.t("session.header.open.ariaLabel", { app: state.current().label })} > - }> + } + > From f12e14cf1640cbf0dfb6b1ff425b2daaef459eec Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Thu, 3 Sep 2026 11:01:59 +0200 Subject: [PATCH 119/185] fix(app): identify desktop in Console device auth (v1) (#47000) --- packages/app/src/components/dialog-connect-provider.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/app/src/components/dialog-connect-provider.tsx b/packages/app/src/components/dialog-connect-provider.tsx index aa1f519984bb..1081310e5f21 100644 --- a/packages/app/src/components/dialog-connect-provider.tsx +++ b/packages/app/src/components/dialog-connect-provider.tsx @@ -33,6 +33,7 @@ import { ExternalLink } from "@/components/external-link" import { useServerSDK } from "@/context/server-sdk" import { useServerSync } from "@/context/server-sync" import { useLanguage } from "@/context/language" +import { usePlatform } from "@/context/platform" import { useSettings } from "@/context/settings" import { popularProviders, useProviders } from "@/hooks/use-providers" import { CustomProviderForm } from "./dialog-custom-provider" @@ -386,6 +387,7 @@ function ProviderConnection(props: { const serverSDK = useServerSDK() const params = useParams() const language = useLanguage() + const platform = usePlatform() const settings = useSettings() const newLayout = settings.general.newLayoutDesigns const providers = useProviders(() => props.directory?.()) @@ -560,6 +562,11 @@ function ProviderConnection(props: { }) .then((x) => { if (!alive.value) return + if (props.provider === "opencode" && platform.platform === "desktop") { + const url = new URL(x.data.url) + url.searchParams.set("client_id", "opencode-desktop") + x.data.url = url.href + } dispatch({ type: "auth.complete", authorization: x.data }) }) .catch((e) => { From 79d503150ca22f151afe4ea543fac8a8eb8aef53 Mon Sep 17 00:00:00 2001 From: Jack Date: Thu, 3 Sep 2026 21:52:04 +0800 Subject: [PATCH 120/185] docs(web): translate Go usage requirements (#47057) --- packages/web/src/content/docs/ar/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/bs/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/da/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/de/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/es/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/fr/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/go.mdx | 3 ++- packages/web/src/content/docs/it/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/ja/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/ko/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/nb/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/pl/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/pt-br/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/ru/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/th/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/tr/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/zh-cn/go.mdx | 12 ++++++++++++ packages/web/src/content/docs/zh-tw/go.mdx | 12 ++++++++++++ 18 files changed, 206 insertions(+), 1 deletion(-) diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx index fff712bd68ed..796e1dfa9693 100644 --- a/packages/web/src/content/docs/ar/go.mdx +++ b/packages/web/src/content/docs/ar/go.mdx @@ -80,6 +80,18 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر --- +## أين يمكنني استخدامه؟ + +صُمّم OpenCode Go للاستخدام مع [OpenCode](https://opencode.ai) وغيره من وكلاء البرمجة الشائعين الذين ينشئون أنواعًا مماثلة من الطلبات. + +تتم مراقبة حركة المرور لرصد الاستخدام المسيء الذي يؤدي إلى تدهور تجربة المستخدمين الآخرين. + +لتجنب وضع علامة على حسابك، تأكد من أن الأداة التي تستخدمها + +1\. لا تنشئ حركة مرور مسيئة +2\. تعرّف عن نفسها بشكل صحيح (من دون معرّفات وكيل مستخدم عامة) +3\. تتضمن ترويسة `x-opencode-session` حتى نتمكن من تحسين التخزين المؤقت للمطالبات + ## حدود الاستخدام يتضمن OpenCode Go الحدود التالية: diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index d6e8034bb250..c1de47ba9b52 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -90,6 +90,18 @@ Lista modela se može mijenjati dok testiramo i dodajemo nove. --- +## Gdje ga mogu koristiti? + +OpenCode Go je osmišljen za korištenje s [OpenCode-om](https://opencode.ai) i drugim popularnim agentima za programiranje koji generišu slične vrste zahtjeva. + +Saobraćaj se nadzire radi otkrivanja zloupotrebe koja narušava iskustvo drugih korisnika. + +Kako vaš račun ne bi bio označen, pobrinite se da alat koji koristite + +1\. ne generiše saobraćaj koji predstavlja zloupotrebu +2\. se ispravno identifikuje (bez generičkih User-Agent identifikatora) +3\. uključuje zaglavlje `x-opencode-session` kako bismo mogli optimizovati keširanje promptova + ## Ograničenja upotrebe OpenCode Go uključuje sljedeća ograničenja: diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx index a4d33dd2e8c9..864b56ef15e2 100644 --- a/packages/web/src/content/docs/da/go.mdx +++ b/packages/web/src/content/docs/da/go.mdx @@ -90,6 +90,18 @@ Listen over modeller kan ændre sig, efterhånden som vi tester og tilføjer nye --- +## Hvor kan jeg bruge det? + +OpenCode Go er designet til brug med [OpenCode](https://opencode.ai) og andre populære kodningsagenter, der genererer lignende typer anmodninger. + +Trafikken overvåges for misbrug, der forringer oplevelsen for andre brugere. + +For at sikre, at din konto ikke bliver markeret, skal du sørge for, at det værktøj, du bruger, + +1\. ikke genererer misbrugstrafik +2\. identificerer sig korrekt (ingen generiske User-Agent-identifikatorer) +3\. inkluderer `x-opencode-session`-headeren, så vi kan optimere prompt-caching + ## Forbrugsgrænser OpenCode Go inkluderer følgende grænser: diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx index fa284e851070..a2c33f8cfec4 100644 --- a/packages/web/src/content/docs/de/go.mdx +++ b/packages/web/src/content/docs/de/go.mdx @@ -82,6 +82,18 @@ Die Liste der Modelle kann sich ändern, während wir neue testen und hinzufüge --- +## Wo kann ich es verwenden? + +OpenCode Go wurde für die Verwendung mit [OpenCode](https://opencode.ai) und anderen beliebten Coding-Agenten entwickelt, die ähnliche Arten von Anfragen erzeugen. + +Der Datenverkehr wird auf missbräuchlichen Traffic überwacht, der das Nutzungserlebnis anderer beeinträchtigt. + +Damit dein Konto nicht markiert wird, stelle sicher, dass das von dir verwendete Tool + +1\. keinen missbräuchlichen Traffic erzeugt +2\. sich ordnungsgemäß identifiziert (keine allgemeinen User-Agents) +3\. den Header `x-opencode-session` enthält, damit wir das Prompt-Caching optimieren können + ## Nutzungslimits OpenCode Go beinhaltet die folgenden Limits: diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index 8df4fa1f6f4b..49de80c2f36d 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -90,6 +90,18 @@ La lista de modelos puede cambiar a medida que probamos y agregamos otros nuevos --- +## ¿Dónde puedo usarlo? + +OpenCode Go está diseñado para usarse con [OpenCode](https://opencode.ai) y otros agentes de programación populares que generan tipos de peticiones similares. + +El tráfico se supervisa para detectar tráfico abusivo que perjudique la experiencia de otros usuarios. + +Para evitar que tu cuenta sea marcada, asegúrate de que la herramienta que usas + +1\. no genere tráfico abusivo +2\. se identifique correctamente (sin agentes de usuario genéricos) +3\. incluya el encabezado `x-opencode-session` para que podamos optimizar el almacenamiento en caché de prompts + ## Límites de uso OpenCode Go incluye los siguientes límites: diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx index b9770115d6c9..6d3e36ed0416 100644 --- a/packages/web/src/content/docs/fr/go.mdx +++ b/packages/web/src/content/docs/fr/go.mdx @@ -80,6 +80,18 @@ La liste des modèles peut changer au fur et à mesure que nous en testons et en --- +## Où puis-je l'utiliser ? + +OpenCode Go est conçu pour être utilisé avec [OpenCode](https://opencode.ai) et d'autres agents de codage populaires qui génèrent des types de requêtes similaires. + +Le trafic est surveillé afin de détecter tout trafic abusif qui dégrade l'expérience des autres utilisateurs. + +Pour éviter que votre compte ne soit signalé, assurez-vous que l'outil que vous utilisez + +1\. ne génère pas de trafic abusif +2\. s'identifie correctement (pas d'agents utilisateur génériques) +3\. inclut l'en-tête `x-opencode-session` afin que nous puissions optimiser la mise en cache des prompts + ## Limites d'utilisation OpenCode Go inclut les limites suivantes : diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index 58bb121b777e..6ec69aa04a35 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -100,7 +100,8 @@ Traffic is monitored for abusive traffic that degrades the experience for other To ensure your account does not get flagged, make sure the tool you're using 1\. does not generate abusive traffic -2\. properly identifies itself (no broad user agents) +2\. properly identifies itself (no broad user agents)
    +3\. includes the `x-opencode-session` header so we can optimize prompt caching ## Usage limits diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx index b4e294369009..7c6dfeb78403 100644 --- a/packages/web/src/content/docs/it/go.mdx +++ b/packages/web/src/content/docs/it/go.mdx @@ -88,6 +88,18 @@ L'elenco dei modelli potrebbe cambiare man mano che ne testiamo e aggiungiamo di --- +## Dove posso usarlo? + +OpenCode Go è progettato per essere utilizzato con [OpenCode](https://opencode.ai) e altri agenti di programmazione popolari che generano tipi di richieste simili. + +Il traffico viene monitorato per rilevare traffico abusivo che compromette l'esperienza degli altri utenti. + +Per evitare che il tuo account venga segnalato, assicurati che lo strumento che utilizzi + +1\. non generi traffico abusivo +2\. si identifichi correttamente (senza user agent generici) +3\. includa l'header `x-opencode-session` in modo da consentirci di ottimizzare il caching dei prompt + ## Limiti di utilizzo OpenCode Go include i seguenti limiti: diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx index bb2c59bf0ff5..a1d09ca2b7cc 100644 --- a/packages/web/src/content/docs/ja/go.mdx +++ b/packages/web/src/content/docs/ja/go.mdx @@ -80,6 +80,18 @@ OpenCode Goをサブスクライブできるのは、1つのワークスペー --- +## どこで使用できますか? + +OpenCode Goは、[OpenCode](https://opencode.ai)や、同様の種類のリクエストを生成するその他の一般的なコーディングエージェントで使用することを想定しています。 + +他のユーザーの利用体験を損なう不正なトラフィックがないか監視されています。 + +アカウントにフラグが付けられないよう、使用するツールが以下の条件を満たしていることを確認してください。 + +1\. 不正なトラフィックを生成しない +2\. 自身を適切に識別する(汎用的すぎるユーザーエージェントを使用しない) +3\. プロンプトキャッシュを最適化できるよう、`x-opencode-session`ヘッダーを含める + ## 利用制限 OpenCode Goには以下の制限が含まれています: diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx index f020348bc1c9..7202b4caf691 100644 --- a/packages/web/src/content/docs/ko/go.mdx +++ b/packages/web/src/content/docs/ko/go.mdx @@ -80,6 +80,18 @@ workspace당 한 명의 멤버만 OpenCode Go를 구독할 수 있습니다. --- +## 어디에서 사용할 수 있나요? + +OpenCode Go는 [OpenCode](https://opencode.ai) 및 유사한 유형의 요청을 생성하는 다른 인기 코딩 에이전트와 함께 사용하도록 설계되었습니다. + +다른 사용자의 이용 경험을 저해하는 악성 트래픽이 있는지 모니터링합니다. + +계정에 플래그가 지정되지 않도록 사용 중인 도구가 다음 조건을 충족하는지 확인하세요. + +1\. 악성 트래픽을 생성하지 않음 +2\. 자체 정보를 올바르게 표시함(포괄적인 사용자 에이전트를 사용하지 않음) +3\. 프롬프트 캐싱을 최적화할 수 있도록 `x-opencode-session` 헤더를 포함함 + ## 사용 한도 OpenCode Go에는 다음과 같은 한도가 포함됩니다. diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx index 6322a03dc316..e11ce9673c3e 100644 --- a/packages/web/src/content/docs/nb/go.mdx +++ b/packages/web/src/content/docs/nb/go.mdx @@ -90,6 +90,18 @@ Listen over modeller kan endres etter hvert som vi tester og legger til nye. --- +## Hvor kan jeg bruke det? + +OpenCode Go er utviklet for bruk med [OpenCode](https://opencode.ai) og andre populære kodeagenter som genererer lignende typer forespørsler. + +Trafikken overvåkes for misbruk som forringer opplevelsen for andre brukere. + +For å sikre at kontoen din ikke blir flagget, må du sørge for at verktøyet du bruker, + +1\. ikke genererer misbrukstrafikk +2\. identifiserer seg korrekt (ingen generiske User-Agent-identifikatorer) +3\. inkluderer `x-opencode-session`-headeren, slik at vi kan optimalisere promptbufring + ## Bruksgrenser OpenCode Go inkluderer følgende grenser: diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx index 0fc5d893642d..9c2deb506104 100644 --- a/packages/web/src/content/docs/pl/go.mdx +++ b/packages/web/src/content/docs/pl/go.mdx @@ -84,6 +84,18 @@ Lista modeli może ulec zmianie w miarę testowania i dodawania nowych. --- +## Gdzie można z tego korzystać? + +OpenCode Go jest przeznaczony do użytku z [OpenCode](https://opencode.ai) i innymi popularnymi agentami kodującymi, którzy generują podobne rodzaje żądań. + +Ruch jest monitorowany pod kątem nadużyć, które pogarszają komfort korzystania z usługi przez innych użytkowników. + +Aby Twoje konto nie zostało oznaczone, upewnij się, że używane przez Ciebie narzędzie + +1\. nie generuje ruchu stanowiącego nadużycie +2\. prawidłowo się identyfikuje (bez ogólnych identyfikatorów User-Agent) +3\. zawiera nagłówek `x-opencode-session`, abyśmy mogli zoptymalizować buforowanie promptów + ## Limity użycia OpenCode Go zawiera następujące limity: diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index 981a94dcc5a6..c5272d2bbc1e 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -90,6 +90,18 @@ A lista de modelos pode mudar conforme testamos e adicionamos novos. --- +## Onde posso usá-lo? + +O OpenCode Go foi projetado para ser usado com o [OpenCode](https://opencode.ai) e outros agentes de programação populares que geram tipos de requisições semelhantes. + +O tráfego é monitorado para detectar tráfego abusivo que prejudique a experiência de outros usuários. + +Para evitar que sua conta seja sinalizada, verifique se a ferramenta que você está usando + +1\. não gera tráfego abusivo +2\. se identifica corretamente (sem user agents genéricos) +3\. inclui o header `x-opencode-session` para que possamos otimizar o cache de prompts + ## Limites de uso O OpenCode Go inclui os seguintes limites: diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx index 58e4c00fed4b..b532b9d04e57 100644 --- a/packages/web/src/content/docs/ru/go.mdx +++ b/packages/web/src/content/docs/ru/go.mdx @@ -90,6 +90,18 @@ OpenCode Go работает так же, как и любой другой пр --- +## Где можно использовать OpenCode Go? + +OpenCode Go предназначен для использования с [OpenCode](https://opencode.ai) и другими популярными агентами для программирования, которые создают запросы схожих типов. + +Трафик отслеживается для выявления злоупотреблений, ухудшающих работу сервиса для других пользователей. + +Чтобы ваша учетная запись не была отмечена, убедитесь, что используемый вами инструмент + +1\. не создает трафик, представляющий собой злоупотребление +2\. правильно идентифицирует себя (без универсальных значений User-Agent) +3\. включает заголовок `x-opencode-session`, чтобы мы могли оптимизировать кеширование промптов + ## Лимиты использования OpenCode Go включает следующие лимиты: diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx index d75e6ce708c8..4462b847fd9c 100644 --- a/packages/web/src/content/docs/th/go.mdx +++ b/packages/web/src/content/docs/th/go.mdx @@ -80,6 +80,18 @@ OpenCode Go ทำงานเหมือนกับผู้ให้บร --- +## ใช้งานได้ที่ไหน? + +OpenCode Go ออกแบบมาเพื่อใช้กับ [OpenCode](https://opencode.ai) และเอเจนต์เขียนโค้ดยอดนิยมอื่นๆ ที่สร้างคำขอในลักษณะเดียวกัน + +ระบบจะตรวจสอบการรับส่งข้อมูลเพื่อค้นหาการใช้งานในทางที่ผิดซึ่งส่งผลกระทบต่อประสบการณ์ของผู้ใช้รายอื่น + +เพื่อให้แน่ใจว่าบัญชีของคุณจะไม่ถูกตั้งค่าสถานะ โปรดตรวจสอบว่าเครื่องมือที่คุณใช้ + +1\. ไม่สร้างการรับส่งข้อมูลที่เป็นการใช้งานในทางที่ผิด +2\. ระบุตัวตนอย่างถูกต้อง (ไม่ใช้ข้อมูลระบุตัวแทนผู้ใช้แบบกว้างเกินไป) +3\. มีส่วนหัว `x-opencode-session` เพื่อให้เราสามารถปรับการแคชพรอมต์ให้เหมาะสมได้ + ## Usage limits OpenCode Go มีขีดจำกัดดังต่อไปนี้: diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx index 3df4b3c333a5..3d058ae4539d 100644 --- a/packages/web/src/content/docs/tr/go.mdx +++ b/packages/web/src/content/docs/tr/go.mdx @@ -80,6 +80,18 @@ Test edip yenilerini ekledikçe model listesi değişebilir. --- +## Nerede kullanabilirim? + +OpenCode Go, [OpenCode](https://opencode.ai) ve benzer türde istekler üreten diğer popüler kodlama aracılarıyla kullanılmak üzere tasarlanmıştır. + +Trafik, diğer kullanıcıların deneyimini olumsuz etkileyen kötüye kullanım amaçlı trafiğe karşı izlenir. + +Hesabınızın işaretlenmemesi için kullandığınız aracın + +1\. kötüye kullanım amaçlı trafik oluşturmadığından +2\. kendisini doğru şekilde tanıttığından (genel kapsamlı kullanıcı aracıları kullanmadığından) +3\. istem önbelleğe almayı optimize edebilmemiz için `x-opencode-session` başlığını içerdiğinden emin olun + ## Kullanım limitleri OpenCode Go aşağıdaki limitleri içerir: diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx index 46c981c2a480..bdfb25c741fc 100644 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ b/packages/web/src/content/docs/zh-cn/go.mdx @@ -80,6 +80,18 @@ OpenCode Go 的工作方式与 OpenCode 中的其他提供商一样。 --- +## 可以在哪里使用? + +OpenCode Go 适用于 [OpenCode](https://opencode.ai) 以及其他会产生类似请求的主流编程 Agent。 + +我们会监控流量,以识别影响其他用户体验的滥用行为。 + +为避免你的账户被标记为异常,请确保你使用的工具: + +1\. 不产生滥用流量 +2\. 明确标识自身(不要使用过于笼统的 user agent 标识) +3\. 包含 `x-opencode-session` 请求头,以便我们优化提示词缓存 + ## 使用限制 OpenCode Go 包含以下限制: diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx index 3846a5760acf..ab5aa97fa99b 100644 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ b/packages/web/src/content/docs/zh-tw/go.mdx @@ -80,6 +80,18 @@ OpenCode Go 的運作方式與 OpenCode 中的任何其他供應商相同。 --- +## 可以在哪裡使用? + +OpenCode Go 適用於 [OpenCode](https://opencode.ai) 以及其他會產生類似請求的主流程式設計 Agent。 + +我們會監控流量,以識別影響其他使用者體驗的濫用行為。 + +為避免您的帳戶被標記為異常,請確保您使用的工具: + +1\. 不產生濫用流量 +2\. 明確標識自身(不要使用過於籠統的 user agent 識別資訊) +3\. 包含 `x-opencode-session` 請求標頭,以便我們最佳化提示詞快取 + ## 使用限制 OpenCode Go 包含以下限制: From d2efd81fb3e153a51165b8589c4658107002817e Mon Sep 17 00:00:00 2001 From: Victor Navarro Date: Thu, 3 Sep 2026 17:04:58 +0200 Subject: [PATCH 121/185] fix(console): proxy migrated model discovery to v1 endpoint (#47065) --- packages/console/app/src/lib/inference-proxy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/console/app/src/lib/inference-proxy.ts b/packages/console/app/src/lib/inference-proxy.ts index a80db3b5e63a..814cc94552db 100644 --- a/packages/console/app/src/lib/inference-proxy.ts +++ b/packages/console/app/src/lib/inference-proxy.ts @@ -4,7 +4,7 @@ import { KeyTable } from "@opencode-ai/console-core/schema/key.sql.js" import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" const paths: Record = { - "GET /zen/v1/models": "/openai/v1/models", + "GET /zen/v1/models": "/v1/models", "POST /zen/v1/chat/completions": "/openai/v1/chat/completions", "POST /zen/v1/responses": "/openai/v1/responses", "POST /zen/v1/messages": "/anthropic/v1/messages", From 08c483dc36951349b0d686b162685bdab2e805b1 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Thu, 3 Sep 2026 12:38:17 -0500 Subject: [PATCH 122/185] fix(stats): reduce database query load --- packages/console/app/src/lib/stats-proxy.ts | 45 +- .../src/component/model-compare-detail.tsx | 4 +- .../stats/app/src/routes/[lab]/[model].tsx | 4 +- packages/stats/app/src/routes/index.tsx | 2 +- .../migration.sql | 1 + .../snapshot.json | 2377 +++++++++++++++++ packages/stats/core/src/database/schema.ts | 10 + packages/stats/core/src/domain/home.ts | 185 +- 8 files changed, 2522 insertions(+), 106 deletions(-) create mode 100644 packages/stats/core/migrations/20260903161929_parched_patriot/migration.sql create mode 100644 packages/stats/core/migrations/20260903161929_parched_patriot/snapshot.json diff --git a/packages/console/app/src/lib/stats-proxy.ts b/packages/console/app/src/lib/stats-proxy.ts index 48e95bd74a16..b8db97c06396 100644 --- a/packages/console/app/src/lib/stats-proxy.ts +++ b/packages/console/app/src/lib/stats-proxy.ts @@ -1,8 +1,9 @@ import type { APIEvent } from "@solidjs/start/server" -import { Resource } from "@opencode-ai/console-resource" +import { Resource, waitUntil } from "@opencode-ai/console-resource" import { LOCALE_HEADER, cookie, localeFromRequest, route, tag } from "~/lib/language" const dataPath = "/data" +const statsCacheParam = "__opencode_stats_locale" export async function statsProxy(evt: APIEvent) { const req = evt.request.clone() @@ -10,6 +11,13 @@ export async function statsProxy(evt: APIEvent) { const redirect = redirectToLocalizedData(req, new URL(req.url), locale) if (redirect) return redirect + const cache = defaultCache(caches) + const cacheKey = statsCacheKey(req, locale) + if (cacheKey) { + const cached = await cache.match(cacheKey) + if (cached) return withStatsCacheStatus(cached, "HIT") + } + const targetUrl = new URL(req.url) targetUrl.protocol = "https:" targetUrl.hostname = Resource.App.stage === "production" ? "stats.opencode.ai" : "stats.dev.opencode.ai" @@ -40,13 +48,18 @@ export async function statsProxy(evt: APIEvent) { headers.delete("content-encoding") headers.delete("content-length") headers.delete("etag") + headers.delete("set-cookie") appendVary(headers, "Accept-Language", "Cookie", LOCALE_HEADER) - return new Response(rewriteStatsHtml(await response.text()), { + const result = new Response(rewriteStatsHtml(await response.text()), { status: response.status, statusText: response.statusText, headers, }) + if (!cacheKey || !response.ok) return result + + void waitUntil(cache.put(cacheKey, result.clone())) + return withStatsCacheStatus(result, "MISS") } export function statsRedirect(evt: APIEvent) { @@ -64,6 +77,34 @@ function rewriteStatsHtml(html: string) { return html.replaceAll('"/_build/', `"${dataPath}/_build/`).replaceAll("'/_build/", `'${dataPath}/_build/`) } +function statsCacheKey(request: Request, locale: ReturnType): Request | undefined { + if (request.method !== "GET") return undefined + if (!acceptsHtml(request)) return undefined + if (isDataBypassPath(new URL(request.url).pathname)) return undefined + + const url = new URL(request.url) + const additionalModels = url.searchParams.get("add") + url.search = "" + if (additionalModels) url.searchParams.set("add", additionalModels) + url.searchParams.set(statsCacheParam, locale) + return new Request(url) +} + +function defaultCache(storage: CacheStorage) { + if (!isCloudflareCacheStorage(storage)) throw new Error("Cloudflare default cache is unavailable") + return storage.default +} + +function isCloudflareCacheStorage(storage: CacheStorage): storage is CacheStorage & { default: Cache } { + return "default" in storage +} + +function withStatsCacheStatus(response: Response, status: "HIT" | "MISS") { + const headers = new Headers(response.headers) + headers.set("x-opencode-stats-cache", status) + return new Response(response.body, { status: response.status, statusText: response.statusText, headers }) +} + function redirectToLocalizedData(request: Request, url: URL, locale: ReturnType) { if (locale === "en") return null if (request.headers.get(LOCALE_HEADER)) return null diff --git a/packages/stats/app/src/component/model-compare-detail.tsx b/packages/stats/app/src/component/model-compare-detail.tsx index 8fc61d1e930d..4966d5d45314 100644 --- a/packages/stats/app/src/component/model-compare-detail.tsx +++ b/packages/stats/app/src/component/model-compare-detail.tsx @@ -7,7 +7,6 @@ import { type StatsModelComparisonInput, type StatsModelComparisonEntry, } from "@opencode-ai/stats-core/domain/home" -import { runtime } from "@opencode-ai/stats-core/runtime" import { createAsync, query, useParams, useSearchParams } from "@solidjs/router" import { createEffect, createMemo, createSignal, For, onMount, Show } from "solid-js" import { getRequestEvent } from "solid-js/web" @@ -46,6 +45,7 @@ import { type ResolvedComparisonFamily, } from "../lib/comparison-pages" import { baseUrl } from "../lib/language" +import { runStatsEffect } from "../stats-runtime" const compareHeaderLinks: readonly HeaderLink[] = [ { href: `${import.meta.env.BASE_URL}#top-models`, label: "Top Models" }, @@ -110,7 +110,7 @@ export type ModelCompareDetailPageProps = { const getComparisonData = query(async (models: StatsModelComparisonInput[]) => { "use server" - return runtime.runPromise(getStatsModelsComparisonData(models)) + return runStatsEffect(getStatsModelsComparisonData(models)) }, "getStatsModelComparisonDetailData") export default function ModelCompareDetailPage(props: ModelCompareDetailPageProps = {}) { diff --git a/packages/stats/app/src/routes/[lab]/[model].tsx b/packages/stats/app/src/routes/[lab]/[model].tsx index e1719807c22b..977660a83c80 100644 --- a/packages/stats/app/src/routes/[lab]/[model].tsx +++ b/packages/stats/app/src/routes/[lab]/[model].tsx @@ -52,7 +52,7 @@ type ModelPageCatalog = { labs: { id: string; name: string }[] labModels: ModelCatalogOption[] } -type StatsModelPageData = Omit & { country: CountryEntry[] } +type StatsModelPageData = StatsModelData type ModelPageData = { catalog: ModelPageCatalog; stats: StatsModelPageData | null } const countryNumericIds = new Map( @@ -75,7 +75,7 @@ const getModelPageData = query(async (labParam: string, modelParam: string) => { .find((item) => item.id === (entry?.lab ?? providerSlug(labParam))) ?.models.map((item) => ({ id: item.id, lab: item.lab, slug: item.slug, name: item.name })) ?? [], }, - stats: stats ? { ...stats, country: stats.country["2M"] } : null, + stats, } satisfies ModelPageData }, "getStatsModelPageData") diff --git a/packages/stats/app/src/routes/index.tsx b/packages/stats/app/src/routes/index.tsx index d6b83bcc40be..5a08aa011aeb 100644 --- a/packages/stats/app/src/routes/index.tsx +++ b/packages/stats/app/src/routes/index.tsx @@ -91,7 +91,7 @@ const getData = query(async () => { cacheRatio: stats.cacheRatio.Go, sessionCost: stats.sessionCost.Go, retention: stats.retention, - country: stats.country["2M"], + country: stats.country, } satisfies StatsHomePageData }, "getStatsHomeData") diff --git a/packages/stats/core/migrations/20260903161929_parched_patriot/migration.sql b/packages/stats/core/migrations/20260903161929_parched_patriot/migration.sql new file mode 100644 index 000000000000..e80bd5d3cdf2 --- /dev/null +++ b/packages/stats/core/migrations/20260903161929_parched_patriot/migration.sql @@ -0,0 +1 @@ +CREATE INDEX `idx_country_model_range` ON `geo_stat` (`model`,`provider`,`grain`,`dataset`,`client`,`source`,`tier`,`period_key`); diff --git a/packages/stats/core/migrations/20260903161929_parched_patriot/snapshot.json b/packages/stats/core/migrations/20260903161929_parched_patriot/snapshot.json new file mode 100644 index 000000000000..ae09db7b703f --- /dev/null +++ b/packages/stats/core/migrations/20260903161929_parched_patriot/snapshot.json @@ -0,0 +1,2377 @@ +{ + "version": "6", + "dialect": "mysql", + "id": "43e72697-1bf9-4df7-bc8e-5ca091bf2ff1", + "prevIds": [ + "9d4d1a06-7d28-4cb4-b0cd-3dfb7b481b8b" + ], + "ddl": [ + { + "name": "geo_stat", + "entityType": "tables" + }, + { + "name": "model_retention", + "entityType": "tables" + }, + { + "name": "model_stat", + "entityType": "tables" + }, + { + "name": "provider_stat", + "entityType": "tables" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": true, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "varchar(16)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "grain", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "varchar(32)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "period_key", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "dataset", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "tier", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "client", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "source", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "varchar(128)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "provider", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "varchar(256)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "model", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "char(2)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "country", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "varchar(8)", + "notNull": true, + "autoIncrement": false, + "default": "''", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "continent", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "sessions", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "requests", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "unique_users", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "input_tokens", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "output_tokens", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "reasoning_tokens", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "cache_read_tokens", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "total_tokens", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "input_cost_microcents", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "output_cost_microcents", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "total_cost_microcents", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "decimal(12,2)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "avg_duration_ms", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "p50_duration_ms", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "p95_duration_ms", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "decimal(12,2)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "avg_ttfb_ms", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "p50_ttfb_ms", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "p95_ttfb_ms", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "decimal(12,4)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "avg_output_tps", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "success_count", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "error_count", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "sample_count", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "decimal(10,6)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "market_share_tokens", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "decimal(10,6)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "market_share_requests", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "decimal(10,6)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "market_share_sessions", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "rank_by_tokens", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "rank_by_requests", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "rank_by_sessions", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "rank_by_cost", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "datetime", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "created_at", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "datetime", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": true, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "updated_at", + "entityType": "columns", + "table": "geo_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": true, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "model_retention" + }, + { + "type": "char(10)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "cohort_date", + "entityType": "columns", + "table": "model_retention" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "dataset", + "entityType": "columns", + "table": "model_retention" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "tier", + "entityType": "columns", + "table": "model_retention" + }, + { + "type": "varchar(128)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "provider", + "entityType": "columns", + "table": "model_retention" + }, + { + "type": "varchar(256)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "model", + "entityType": "columns", + "table": "model_retention" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "eligible_users", + "entityType": "columns", + "table": "model_retention" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "retained_users", + "entityType": "columns", + "table": "model_retention" + }, + { + "type": "datetime", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "created_at", + "entityType": "columns", + "table": "model_retention" + }, + { + "type": "datetime", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": true, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "updated_at", + "entityType": "columns", + "table": "model_retention" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": true, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "varchar(16)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "grain", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "varchar(32)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "period_key", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "dataset", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "tier", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "client", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "source", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "varchar(128)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "provider", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "varchar(256)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "model", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "varchar(256)", + "notNull": true, + "autoIncrement": false, + "default": "''", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "provider_model", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "sessions", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "requests", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "unique_users", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "input_tokens", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "output_tokens", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "reasoning_tokens", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "cache_read_tokens", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "total_tokens", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "input_cost_microcents", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "output_cost_microcents", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "total_cost_microcents", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "decimal(12,2)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "avg_duration_ms", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "p50_duration_ms", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "p95_duration_ms", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "decimal(12,2)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "avg_ttfb_ms", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "p50_ttfb_ms", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "p95_ttfb_ms", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "decimal(12,4)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "avg_output_tps", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "success_count", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "error_count", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "sample_count", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "rank_by_tokens", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "rank_by_requests", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "rank_by_cost", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "datetime", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "created_at", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "datetime", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": true, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "updated_at", + "entityType": "columns", + "table": "model_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": true, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "varchar(16)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "grain", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "varchar(32)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "period_key", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "dataset", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "tier", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "client", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "varchar(64)", + "notNull": true, + "autoIncrement": false, + "default": "'all'", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "source", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "varchar(128)", + "notNull": true, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "provider", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "sessions", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "requests", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "unique_users", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "input_tokens", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "output_tokens", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "reasoning_tokens", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "cache_read_tokens", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "total_tokens", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "input_cost_microcents", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "output_cost_microcents", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "total_cost_microcents", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "decimal(12,2)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "avg_duration_ms", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "p50_duration_ms", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "p95_duration_ms", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "decimal(12,2)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "avg_ttfb_ms", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "p50_ttfb_ms", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "p95_ttfb_ms", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "decimal(12,4)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "avg_output_tps", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "success_count", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "error_count", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "bigint", + "notNull": true, + "autoIncrement": false, + "default": "0", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "sample_count", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "decimal(10,6)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "market_share_tokens", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "decimal(10,6)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "market_share_requests", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "decimal(10,6)", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "market_share_sessions", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "rank_by_tokens", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "rank_by_requests", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "rank_by_sessions", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "int", + "notNull": false, + "autoIncrement": false, + "default": null, + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "rank_by_cost", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "datetime", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": false, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "created_at", + "entityType": "columns", + "table": "provider_stat" + }, + { + "type": "datetime", + "notNull": true, + "autoIncrement": false, + "default": "(now())", + "onUpdateNow": true, + "onUpdateNowFsp": null, + "charSet": null, + "collation": null, + "generated": null, + "name": "updated_at", + "entityType": "columns", + "table": "provider_stat" + }, + { + "columns": [ + "id" + ], + "name": "PRIMARY", + "table": "geo_stat", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "name": "PRIMARY", + "table": "model_retention", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "name": "PRIMARY", + "table": "model_stat", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "name": "PRIMARY", + "table": "provider_stat", + "entityType": "pks" + }, + { + "columns": [ + { + "value": "grain", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + }, + { + "value": "dataset", + "isExpression": false + }, + { + "value": "tier", + "isExpression": false + }, + { + "value": "client", + "isExpression": false + }, + { + "value": "source", + "isExpression": false + }, + { + "value": "provider", + "isExpression": false + }, + { + "value": "model", + "isExpression": false + }, + { + "value": "country", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "uniq_country_period", + "entityType": "indexes", + "table": "geo_stat" + }, + { + "columns": [ + { + "value": "grain", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + }, + { + "value": "dataset", + "isExpression": false + }, + { + "value": "tier", + "isExpression": false + }, + { + "value": "total_tokens", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "idx_country_map_tokens", + "entityType": "indexes", + "table": "geo_stat" + }, + { + "columns": [ + { + "value": "grain", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + }, + { + "value": "dataset", + "isExpression": false + }, + { + "value": "tier", + "isExpression": false + }, + { + "value": "rank_by_tokens", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "idx_country_rank", + "entityType": "indexes", + "table": "geo_stat" + }, + { + "columns": [ + { + "value": "country", + "isExpression": false + }, + { + "value": "grain", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "idx_country", + "entityType": "indexes", + "table": "geo_stat" + }, + { + "columns": [ + { + "value": "continent", + "isExpression": false + }, + { + "value": "grain", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "idx_continent", + "entityType": "indexes", + "table": "geo_stat" + }, + { + "columns": [ + { + "value": "model", + "isExpression": false + }, + { + "value": "country", + "isExpression": false + }, + { + "value": "grain", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "idx_country_model", + "entityType": "indexes", + "table": "geo_stat" + }, + { + "columns": [ + { + "value": "model", + "isExpression": false + }, + { + "value": "provider", + "isExpression": false + }, + { + "value": "grain", + "isExpression": false + }, + { + "value": "dataset", + "isExpression": false + }, + { + "value": "client", + "isExpression": false + }, + { + "value": "source", + "isExpression": false + }, + { + "value": "tier", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "idx_country_model_range", + "entityType": "indexes", + "table": "geo_stat" + }, + { + "columns": [ + { + "value": "cohort_date", + "isExpression": false + }, + { + "value": "dataset", + "isExpression": false + }, + { + "value": "tier", + "isExpression": false + }, + { + "value": "provider", + "isExpression": false + }, + { + "value": "model", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "uniq_model_retention_cohort", + "entityType": "indexes", + "table": "model_retention" + }, + { + "columns": [ + { + "value": "dataset", + "isExpression": false + }, + { + "value": "tier", + "isExpression": false + }, + { + "value": "cohort_date", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "idx_model_retention_recent", + "entityType": "indexes", + "table": "model_retention" + }, + { + "columns": [ + { + "value": "model", + "isExpression": false + }, + { + "value": "cohort_date", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "idx_model_retention_model", + "entityType": "indexes", + "table": "model_retention" + }, + { + "columns": [ + { + "value": "grain", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + }, + { + "value": "dataset", + "isExpression": false + }, + { + "value": "tier", + "isExpression": false + }, + { + "value": "client", + "isExpression": false + }, + { + "value": "source", + "isExpression": false + }, + { + "value": "provider", + "isExpression": false + }, + { + "value": "model", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "uniq_model_period", + "entityType": "indexes", + "table": "model_stat" + }, + { + "columns": [ + { + "value": "grain", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + }, + { + "value": "dataset", + "isExpression": false + }, + { + "value": "tier", + "isExpression": false + }, + { + "value": "total_tokens", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "idx_leaderboard_tokens", + "entityType": "indexes", + "table": "model_stat" + }, + { + "columns": [ + { + "value": "model", + "isExpression": false + }, + { + "value": "grain", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "idx_model", + "entityType": "indexes", + "table": "model_stat" + }, + { + "columns": [ + { + "value": "grain", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + }, + { + "value": "dataset", + "isExpression": false + }, + { + "value": "tier", + "isExpression": false + }, + { + "value": "client", + "isExpression": false + }, + { + "value": "source", + "isExpression": false + }, + { + "value": "provider", + "isExpression": false + } + ], + "isUnique": true, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "uniq_provider_period", + "entityType": "indexes", + "table": "provider_stat" + }, + { + "columns": [ + { + "value": "grain", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + }, + { + "value": "dataset", + "isExpression": false + }, + { + "value": "tier", + "isExpression": false + }, + { + "value": "total_tokens", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "idx_provider_leaderboard_tokens", + "entityType": "indexes", + "table": "provider_stat" + }, + { + "columns": [ + { + "value": "grain", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + }, + { + "value": "dataset", + "isExpression": false + }, + { + "value": "tier", + "isExpression": false + }, + { + "value": "market_share_tokens", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "idx_provider_market_share", + "entityType": "indexes", + "table": "provider_stat" + }, + { + "columns": [ + { + "value": "grain", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + }, + { + "value": "dataset", + "isExpression": false + }, + { + "value": "tier", + "isExpression": false + }, + { + "value": "rank_by_tokens", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "idx_provider_rank", + "entityType": "indexes", + "table": "provider_stat" + }, + { + "columns": [ + { + "value": "provider", + "isExpression": false + }, + { + "value": "grain", + "isExpression": false + }, + { + "value": "period_key", + "isExpression": false + } + ], + "isUnique": false, + "using": null, + "algorithm": null, + "lock": null, + "nameExplicit": true, + "name": "idx_provider", + "entityType": "indexes", + "table": "provider_stat" + } + ], + "renames": [] +} \ No newline at end of file diff --git a/packages/stats/core/src/database/schema.ts b/packages/stats/core/src/database/schema.ts index dcf8d5233271..c17b1aa9375d 100644 --- a/packages/stats/core/src/database/schema.ts +++ b/packages/stats/core/src/database/schema.ts @@ -104,6 +104,16 @@ export const geoStat = mysqlTable( index("idx_country").on(table.country, table.grain, table.period_key), index("idx_continent").on(table.continent, table.grain, table.period_key), index("idx_country_model").on(table.model, table.country, table.grain, table.period_key), + index("idx_country_model_range").on( + table.model, + table.provider, + table.grain, + table.dataset, + table.client, + table.source, + table.tier, + table.period_key, + ), ], ) diff --git a/packages/stats/core/src/domain/home.ts b/packages/stats/core/src/domain/home.ts index d5ce1b9c86fb..6df9315ac798 100644 --- a/packages/stats/core/src/domain/home.ts +++ b/packages/stats/core/src/domain/home.ts @@ -1,9 +1,7 @@ import { Client } from "@planetscale/database" import { Effect } from "effect" import { Resource } from "sst/resource" -import { DatabaseError } from "../database" -import type { GeoStatMetric } from "./geo" -import { ModelStatRepo, type ModelStatMetric } from "./model" +import type { ModelStatMetric } from "./model" import { statProvider } from "./model-normalization" import { isMissingRetentionTable } from "./retention" import { DATA_SITE_TIERS, normalizeTier } from "./stat" @@ -77,7 +75,7 @@ export type StatsModelData = { } usage: ModelUsagePoint[] tokenMix: ModelMixEntry[] - country: Record + country: CountryEntry[] peers: ModelPeerEntry[] } export type StatsLabData = { @@ -127,7 +125,7 @@ export type StatsHomeData = { cacheRatio: Record sessionCost: Record retention: RetentionEntry[] - country: Record + country: CountryEntry[] } export class StatsDataError extends Error { @@ -146,6 +144,8 @@ const RETENTION_MODEL_LIMIT = 15 const RETENTION_MIN_ELIGIBLE_USER_WEEKS = 100 const RETENTION_COHORT_WEEKS = 7 const TOP_MODEL_SEGMENT_LIMIT = 9 +const QUERY_CACHE_TTL_MS = 5 * 60 * 1000 +const QUERY_CACHE_MAX_ENTRIES = 256 // Preserve the response shape while the public site presents Go and Free as one cohort. const SITE_PRODUCT = "Go" const SITE_TIER_PLACEHOLDERS = DATA_SITE_TIERS.map(() => "?").join(", ") @@ -156,8 +156,10 @@ type StatMetricRow = Omit & { periodStart: number updatedAt: number } -type GeoMetricRow = Omit & { - periodStart: number +type CountryTotalRow = { + country: string + continent: string + tokens: number updatedAt: number } export type RetentionMetricRow = { @@ -187,15 +189,16 @@ type ModelAggregate = { } type RawRow = Record +type CachedQuery = { expiresAt: number; value: Promise } + +const queryCache = new Map() export function getStatsHomeData(): Effect.Effect { return Effect.tryPromise({ try: async () => { - const [modelRows, geoRows, retentionRows] = await Promise.all([ - listModelDaily(), - listGeoDaily(), - listRetentionWeekly(), - ]) + const [modelRows, retentionRows] = await Promise.all([listModelDaily(), listRetentionWeekly()]) + const window = modelRowsWindow(modelRows, "2M") + const geoRows = window ? await listCountryTotals(window) : [] return buildStatsHomeData(modelRows, geoRows, retentionRows) }, catch: (cause) => new StatsDataError(cause), @@ -212,13 +215,12 @@ export function getStatsModelData( const normalized = modelRows.flatMap(normalizeStatRow) const resolvedModel = resolveModelName(model, normalized, provider) if (!resolvedModel) return null + const window = modelRowsWindow(modelRows, "2M") + const resolvedProvider = resolveModelProvider(resolvedModel, normalized, provider) return buildStatsModelData( resolvedModel, modelRows, - await listGeoDaily({ - model: resolvedModel, - provider: resolveModelProvider(resolvedModel, normalized, provider), - }), + window ? await listCountryTotals(window, { model: resolvedModel, provider: resolvedProvider }) : [], provider, retentionRows, ) @@ -239,8 +241,8 @@ async function listModelDaily(): Promise { await queryRows( `select period_key, updated_at, tier, provider, model, sessions, unique_users, input_tokens, output_tokens, reasoning_tokens, cache_read_tokens, total_tokens, input_cost_microcents, output_cost_microcents, - total_cost_microcents from model_stat where grain = 'day' and client = 'all' and source = 'all' - and tier in (${SITE_TIER_PLACEHOLDERS}) order by period_key`, + total_cost_microcents from model_stat where grain = 'day' and dataset = 'zen' and client = 'all' + and source = 'all' and tier in (${SITE_TIER_PLACEHOLDERS}) order by period_key`, DATA_SITE_TIERS, ) ).map((row) => ({ @@ -262,7 +264,10 @@ async function listModelDaily(): Promise { })) } -async function listGeoDaily(opts?: { provider?: string; model?: string }): Promise { +async function listCountryTotals( + window: DateWindow, + opts?: { provider?: string; model?: string }, +): Promise { const scope = opts?.model && opts.provider ? "and provider = ? and model = ?" @@ -272,20 +277,16 @@ async function listGeoDaily(opts?: { provider?: string; model?: string }): Promi const params = opts?.model && opts.provider ? [opts.provider, opts.model] : opts?.model ? [opts.model] : [] return ( await queryRows( - `select period_key, updated_at, tier, provider, model, country, continent, total_tokens from geo_stat - where grain = 'day' and client = 'all' and source = 'all' - and tier in (${SITE_TIER_PLACEHOLDERS}) ${scope} order by period_key`, - [...DATA_SITE_TIERS, ...params], + `select country, max(continent) as continent, sum(total_tokens) as total_tokens, max(updated_at) as updated_at + from geo_stat where grain = 'day' and dataset = 'zen' and client = 'all' and source = 'all' + and tier in (${SITE_TIER_PLACEHOLDERS}) ${scope} and period_key >= ? and period_key < ? group by country`, + [...DATA_SITE_TIERS, ...params, periodKey(window.start), periodKey(window.end)], ) ).map((row) => ({ - periodKey: stringValue(row.period_key), - updatedAt: dateValue(row.updated_at), - tier: stringValue(row.tier), - provider: stringValue(row.provider), - model: stringValue(row.model), - country: stringValue(row.country), + updatedAt: dateValue(row.updated_at).getTime(), + country: stringValue(row.country) || "ZZ", continent: stringValue(row.continent), - totalTokens: numberValue(row.total_tokens), + tokens: numberValue(row.total_tokens), })) } @@ -311,7 +312,21 @@ async function listRetentionWeekly(): Promise { } async function queryRows(query: string, params: string[] = []) { - return (await new Client({ url: databaseUrl() }).execute(query, params)).rows as RawRow[] + const key = JSON.stringify([query, params]) + const now = Date.now() + const cached = queryCache.get(key) + if (cached && cached.expiresAt > now) return cached.value + if (cached) queryCache.delete(key) + + const value = new Client({ url: databaseUrl() }).execute(query, params).then((result) => result.rows as RawRow[]) + const entry = { expiresAt: now + QUERY_CACHE_TTL_MS, value } + queryCache.set(key, entry) + if (queryCache.size > QUERY_CACHE_MAX_ENTRIES) queryCache.delete(queryCache.keys().next().value!) + + return value.catch((cause) => { + if (queryCache.get(key) === entry) queryCache.delete(key) + throw cause + }) } function databaseUrl() { @@ -330,31 +345,27 @@ function dateValue(value: unknown) { return value instanceof Date ? value : new Date(stringValue(value)) } -export const getStatsModelsComparisonData: ( +export function getStatsModelsComparisonData( models: readonly StatsModelComparisonInput[], -) => Effect.Effect = Effect.fn("StatsModelsComparison.getData")( - function* (models) { - const modelStats = yield* ModelStatRepo - const [rows, retentionRows] = yield* Effect.all([ - modelStats.listDaily(), - Effect.tryPromise({ - try: listRetentionWeekly, - catch: (cause) => DatabaseError.make({ cause }), - }), - ]) - const entries = models.map((model) => - toComparisonEntry(buildStatsModelData(model.model, rows, [], model.provider, retentionRows)), - ) - const latest = entries - .map((model) => model?.updatedAt) - .flatMap((value) => (value ? [dateTime(value)] : [])) - .toSorted((a, b) => b - a)[0] - return { - updatedAt: latest === undefined ? null : new Date(latest).toISOString(), - models: entries, - } - }, -) +): Effect.Effect { + return Effect.tryPromise({ + try: async () => { + const [rows, retentionRows] = await Promise.all([listModelDaily(), listRetentionWeekly()]) + const entries = models.map((model) => + toComparisonEntry(buildStatsModelData(model.model, rows, [], model.provider, retentionRows)), + ) + const latest = entries + .map((model) => model?.updatedAt) + .flatMap((value) => (value ? [dateTime(value)] : [])) + .toSorted((a, b) => b - a)[0] + return { + updatedAt: latest === undefined ? null : new Date(latest).toISOString(), + models: entries, + } + }, + catch: (cause) => new StatsDataError(cause), + }) +} export const getStatsModelComparisonData = ( firstProvider: string, @@ -369,17 +380,15 @@ export const getStatsModelComparisonData = ( function buildStatsHomeData( modelRows: ModelStatMetric[], - geoRows: GeoStatMetric[], + countryRows: CountryTotalRow[], retentionRows: RetentionMetricRow[], ): StatsHomeData { const normalized = modelRows.flatMap(normalizeStatRow) - const geo = geoRows.flatMap(normalizeGeoRow) - const periods = [...normalized, ...geo] - if (periods.length === 0) return emptyStatsHomeData() + if (normalized.length === 0) return emptyStatsHomeData() - const earliest = Math.min(...periods.map((row) => row.periodStart)) - const latest = Math.max(...periods.map((row) => row.periodStart)) - const latestUpdate = Math.max(...periods.map((row) => row.updatedAt)) + const earliest = Math.min(...normalized.map((row) => row.periodStart)) + const latest = Math.max(...normalized.map((row) => row.periodStart)) + const latestUpdate = Math.max(...normalized.map((row) => row.updatedAt), ...countryRows.map((row) => row.updatedAt)) return { updatedAt: new Date(latestUpdate).toISOString(), @@ -407,7 +416,7 @@ function buildStatsHomeData( ), ), leaderboard: createUsageProductRecord((product) => - createRangeRecord((range) => buildLeaderboard(normalized, product, getWindow("1W", earliest, latest))), + createRangeRecord((_range) => buildLeaderboard(normalized, product, getWindow("1W", earliest, latest))), ), market: createRangeRecord((range) => buildMarketShare(normalized, "Go", range, getWindow(range, earliest, latest))), tokenCost: createTokenProductRecord((product) => @@ -422,19 +431,18 @@ function buildStatsHomeData( retention: buildRetentionEntries(retentionRows) .filter((item) => item.rank !== null) .slice(0, RETENTION_MODEL_LIMIT), - country: createRangeRecord((range) => buildCountryStats(geo, getWindow(range, earliest, latest))), + country: buildCountryStats(countryRows), } } function buildStatsModelData( modelParam: string, modelRows: ModelStatMetric[], - geoRows: GeoStatMetric[], + countryRows: CountryTotalRow[], providerParam?: string, retentionRows: RetentionMetricRow[] = [], ): StatsModelData | null { const normalized = modelRows.flatMap(normalizeStatRow) - const geo = geoRows.flatMap(normalizeGeoRow) if (normalized.length === 0) return null const model = resolveModelName(modelParam, normalized, providerParam) @@ -497,7 +505,7 @@ function buildStatsModelData( }, usage: buildModelUsage(currentRows, window, "2M"), tokenMix: buildModelTokenMix(current), - country: createRangeRecord((range) => buildCountryStats(geo, getWindow(range, earliest, latest))), + country: buildCountryStats(countryRows), peers: buildModelPeers(rankPeers, peerRank, peerTokens), } } @@ -579,7 +587,7 @@ function emptyStatsHomeData(): StatsHomeData { cacheRatio: createTokenProductRecord(() => []), sessionCost: createTokenProductRecord(() => []), retention: [], - country: createRangeRecord(() => []), + country: [], } } @@ -707,8 +715,8 @@ function buildMarketShare(rows: StatMetricRow[], product: UsageProduct, range: U }) } -function buildCountryStats(rows: GeoMetricRow[], window: DateWindow) { - const countries = aggregateByCountry(rowsForProduct(rows, SITE_PRODUCT, window.start, window.end)) +function buildCountryStats(rows: CountryTotalRow[]) { + const countries = rows .filter((item) => item.tokens > 0 && item.country !== "AQ") .toSorted((a, b) => b.tokens - a.tokens) const totalTokens = countries.reduce((sum, item) => sum + item.tokens, 0) @@ -862,19 +870,6 @@ function aggregateByProvider(rows: { provider: string; totalTokens: number }[]) ) } -function aggregateByCountry(rows: GeoMetricRow[]) { - return Object.values( - rows.reduce>((result, row) => { - result[row.country] = { - country: row.country, - continent: result[row.country]?.continent || row.continent, - tokens: (result[row.country]?.tokens ?? 0) + row.totalTokens, - } - return result - }, {}), - ) -} - function combineRowsForModel(model: string, rows: StatMetricRow[]): ModelAggregate { const aggregate = rows.reduce( (result, row) => combineModelAggregate(result, row), @@ -1000,28 +995,20 @@ function normalizeStatRow(row: ModelStatMetric): StatMetricRow[] { ] } -function normalizeGeoRow(row: GeoStatMetric): GeoMetricRow[] { - const periodStart = periodKeyTime(row.periodKey) - const updatedAt = dateTime(row.updatedAt) - if (!Number.isFinite(periodStart) || !Number.isFinite(updatedAt)) return [] - return [ - { - ...row, - periodStart, - updatedAt, - tier: normalizeTier(row.tier), - provider: row.provider === "all" ? "all" : statProvider(row.model, undefined, row.provider) || "unknown", - model: row.model || "all", - country: row.country || "ZZ", - continent: row.continent || "", - }, - ] +function modelRowsWindow(rows: ModelStatMetric[], range: UsageRange): DateWindow | undefined { + const periods = rows.map((row) => periodKeyTime(row.periodKey)).filter(Number.isFinite) + if (periods.length === 0) return undefined + return getWindow(range, Math.min(...periods), Math.max(...periods)) } function dateTime(value: Date | string) { return (value instanceof Date ? value : new Date(value)).getTime() } +function periodKey(value: number) { + return new Date(value).toISOString().slice(0, 10) +} + function periodKeyTime(value: string) { const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value) if (!match) return Number.NaN From d8eb3b80fb1bd8235809d78b62474008fb7a2e46 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Thu, 3 Sep 2026 17:42:08 +0000 Subject: [PATCH 123/185] chore: generate --- .../snapshot.json | 22 +++++-------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/packages/stats/core/migrations/20260903161929_parched_patriot/snapshot.json b/packages/stats/core/migrations/20260903161929_parched_patriot/snapshot.json index ae09db7b703f..1c2302f5546b 100644 --- a/packages/stats/core/migrations/20260903161929_parched_patriot/snapshot.json +++ b/packages/stats/core/migrations/20260903161929_parched_patriot/snapshot.json @@ -2,9 +2,7 @@ "version": "6", "dialect": "mysql", "id": "43e72697-1bf9-4df7-bc8e-5ca091bf2ff1", - "prevIds": [ - "9d4d1a06-7d28-4cb4-b0cd-3dfb7b481b8b" - ], + "prevIds": ["9d4d1a06-7d28-4cb4-b0cd-3dfb7b481b8b"], "ddl": [ { "name": "geo_stat", @@ -1773,33 +1771,25 @@ "table": "provider_stat" }, { - "columns": [ - "id" - ], + "columns": ["id"], "name": "PRIMARY", "table": "geo_stat", "entityType": "pks" }, { - "columns": [ - "id" - ], + "columns": ["id"], "name": "PRIMARY", "table": "model_retention", "entityType": "pks" }, { - "columns": [ - "id" - ], + "columns": ["id"], "name": "PRIMARY", "table": "model_stat", "entityType": "pks" }, { - "columns": [ - "id" - ], + "columns": ["id"], "name": "PRIMARY", "table": "provider_stat", "entityType": "pks" @@ -2374,4 +2364,4 @@ } ], "renames": [] -} \ No newline at end of file +} From 7561b4a050f6697a2ffc2ad9c188fe8d5935e919 Mon Sep 17 00:00:00 2001 From: David Hill <1879069+iamdavidhill@users.noreply.github.com> Date: Thu, 3 Sep 2026 13:56:40 -0600 Subject: [PATCH 124/185] fix(tui): use unicode ellipses in interface text (#45126) --- packages/tui/src/app.tsx | 4 +-- .../tui/src/component/dialog-console-org.tsx | 2 +- .../tui/src/component/dialog-move-session.tsx | 2 +- .../tui/src/component/dialog-provider.tsx | 2 +- packages/tui/src/component/dialog-skill.tsx | 2 +- .../src/component/dialog-workspace-list.tsx | 2 +- .../tui/src/component/error-component.tsx | 2 +- packages/tui/src/component/prompt/index.tsx | 6 ++-- .../tui/src/component/startup-loading.tsx | 2 +- .../feature-plugins/system/diff-viewer.tsx | 2 +- .../src/feature-plugins/system/plugins.tsx | 2 +- packages/tui/src/routes/session/index.tsx | 30 +++++++++---------- packages/tui/src/ui/dialog-prompt.tsx | 4 +-- .../cli/tui/diff-viewer-file-tree.test.tsx | 2 +- .../tui/inline-tool-wrap-snapshot.test.tsx | 4 +-- 15 files changed, 34 insertions(+), 34 deletions(-) diff --git a/packages/tui/src/app.tsx b/packages/tui/src/app.tsx index 57f372ef709a..3f1da522bb06 100644 --- a/packages/tui/src/app.tsx +++ b/packages/tui/src/app.tsx @@ -465,7 +465,7 @@ function App(props: { onSnapshot?: () => Promise; pluginHost: TuiPlugi return } - const title = session.title.length > 40 ? session.title.slice(0, 37) + "..." : session.title + const title = session.title.length > 40 ? session.title.slice(0, 37) + "…" : session.title renderer.setTerminalTitle(`OC | ${title}`) return } @@ -1051,7 +1051,7 @@ function App(props: { onSnapshot?: () => Promise; pluginHost: TuiPlugi toast.show({ variant: "info", - message: `Updating to v${version}...`, + message: `Updating to v${version}…`, duration: 30000, }) diff --git a/packages/tui/src/component/dialog-console-org.tsx b/packages/tui/src/component/dialog-console-org.tsx index 1305a965cbf2..1f6ef5c746fb 100644 --- a/packages/tui/src/component/dialog-console-org.tsx +++ b/packages/tui/src/component/dialog-console-org.tsx @@ -51,7 +51,7 @@ export function DialogConsoleOrg() { if (listed === undefined) { return [ { - title: "Loading orgs...", + title: "Loading orgs…", value: "loading", onSelect: () => {}, }, diff --git a/packages/tui/src/component/dialog-move-session.tsx b/packages/tui/src/component/dialog-move-session.tsx index e0d5508736b9..21912b273316 100644 --- a/packages/tui/src/component/dialog-move-session.tsx +++ b/packages/tui/src/component/dialog-move-session.tsx @@ -113,7 +113,7 @@ export function DialogMoveSession(props: DialogMoveSessionProps) { if (showError()) return [] const data = directoryData() const current = currentRoot()?.directory - if (directories.loading && !data && !current) return [{ title: "Loading project directories...", value: undefined }] + if (directories.loading && !data && !current) return [{ title: "Loading project directories…", value: undefined }] const roots = [...(data ?? [])] if (current && !roots.some((item) => item.directory === current)) roots.unshift({ directory: current }) roots.sort((a, b) => { diff --git a/packages/tui/src/component/dialog-provider.tsx b/packages/tui/src/component/dialog-provider.tsx index 0fd51e3c1c71..6b86a32e3482 100644 --- a/packages/tui/src/component/dialog-provider.tsx +++ b/packages/tui/src/component/dialog-provider.tsx @@ -297,7 +297,7 @@ function AutoMethod(props: AutoMethodProps) { {props.authorization.instructions} - Waiting for authorization... + Waiting for authorization… c copy diff --git a/packages/tui/src/component/dialog-skill.tsx b/packages/tui/src/component/dialog-skill.tsx index e962a6e7c3e0..1143890baca0 100644 --- a/packages/tui/src/component/dialog-skill.tsx +++ b/packages/tui/src/component/dialog-skill.tsx @@ -51,7 +51,7 @@ export function DialogSkill(props: DialogSkillProps) { return ( url.searchParams.set("description", head + "```\n" + body + "\n```") diff --git a/packages/tui/src/component/prompt/index.tsx b/packages/tui/src/component/prompt/index.tsx index 0a3935ab24bd..c48c751739ce 100644 --- a/packages/tui/src/component/prompt/index.tsx +++ b/packages/tui/src/component/prompt/index.tsx @@ -1313,10 +1313,10 @@ export function Prompt(props: PromptProps) { if (store.mode === "shell") { if (!shell().length) return undefined const example = shell()[store.placeholder % shell().length] - return `Run a command... "${example}"` + return `Run a command… "${example}"` } if (!list().length) return undefined - return `Ask anything... "${list()[store.placeholder % list().length]}"` + return `Ask anything… "${list()[store.placeholder % list().length]}"` }) const spinnerDef = createMemo(() => { @@ -1537,7 +1537,7 @@ export function Prompt(props: PromptProps) { if (!r) return if (r.message.includes("exceeded your current quota") && r.message.includes("gemini")) return "gemini is way too hot right now" - if (r.message.length > 80) return r.message.slice(0, 80) + "..." + if (r.message.length > 80) return r.message.slice(0, 80) + "…" return r.message }) const isTruncated = createMemo(() => { diff --git a/packages/tui/src/component/startup-loading.tsx b/packages/tui/src/component/startup-loading.tsx index 6665c0c2e8c4..4742c9cfaac3 100644 --- a/packages/tui/src/component/startup-loading.tsx +++ b/packages/tui/src/component/startup-loading.tsx @@ -5,7 +5,7 @@ import { Spinner } from "./spinner" export function StartupLoading(props: { ready: () => boolean }) { const theme = useTheme().theme const [show, setShow] = createSignal(false) - const text = createMemo(() => (props.ready() ? "Finishing startup..." : "Loading plugins...")) + const text = createMemo(() => (props.ready() ? "Finishing startup…" : "Loading plugins…")) let wait: NodeJS.Timeout | undefined let hold: NodeJS.Timeout | undefined let stamp = 0 diff --git a/packages/tui/src/feature-plugins/system/diff-viewer.tsx b/packages/tui/src/feature-plugins/system/diff-viewer.tsx index ed88a1107f9d..c4c6aed646e5 100644 --- a/packages/tui/src/feature-plugins/system/diff-viewer.tsx +++ b/packages/tui/src/feature-plugins/system/diff-viewer.tsx @@ -766,7 +766,7 @@ function DiffViewer(props: { api: TuiPluginApi }) { - Loading diff... + Loading diff… diff --git a/packages/tui/src/feature-plugins/system/plugins.tsx b/packages/tui/src/feature-plugins/system/plugins.tsx index 78611e034b77..dd074786b046 100644 --- a/packages/tui/src/feature-plugins/system/plugins.tsx +++ b/packages/tui/src/feature-plugins/system/plugins.tsx @@ -49,7 +49,7 @@ function Install(props: { api: TuiPluginApi }) { title="Install plugin" placeholder="npm package name" busy={busy()} - busyText="Installing plugin..." + busyText="Installing plugin…" description={() => ( scope: diff --git a/packages/tui/src/routes/session/index.tsx b/packages/tui/src/routes/session/index.tsx index 866a381f0698..93639c9d763f 100644 --- a/packages/tui/src/routes/session/index.tsx +++ b/packages/tui/src/routes/session/index.tsx @@ -1812,7 +1812,7 @@ function GenericTool(props: ToolProps) { + {props.tool} {input(props.input)} } @@ -2094,7 +2094,7 @@ function Shell(props: ToolProps) { - + {stringValue(props.input.command)} @@ -2128,7 +2128,7 @@ function Write(props: ToolProps) { @@ -2142,7 +2142,7 @@ function Write(props: ToolProps) { function Glob(props: ToolProps) { const pathFormatter = usePathFormatter() return ( - + Glob "{stringValue(props.input.pattern)}"{" "} in {pathFormatter.format(stringValue(props.input.path))} @@ -2167,7 +2167,7 @@ function Read(props: ToolProps) { <> + Grep "{stringValue(props.input.pattern)}"{" "} in {pathFormatter.format(stringValue(props.input.path))} @@ -2202,7 +2202,7 @@ function Grep(props: ToolProps) { function WebFetch(props: ToolProps) { return ( - + WebFetch {stringValue(props.input.url)} ) @@ -2210,7 +2210,7 @@ function WebFetch(props: ToolProps) { function WebSearch(props: ToolProps) { return ( - + {webSearchProviderLabel(props.metadata.provider)} "{stringValue(props.input.query)}"{" "} ({numberValue(props.metadata.numResults)} results) @@ -2300,7 +2300,7 @@ function Task(props: ToolProps) { color={retry() ? theme.error : undefined} spinner={isRunning()} complete={stringValue(props.input.description)} - pending="Delegating..." + pending="Delegating…" part={props.part} onClick={() => { if (sessionID()) { @@ -2437,7 +2437,7 @@ function Edit(props: ToolProps) { - + Edit {pathFormatter.format(stringValue(props.input.filePath))} {input({ replaceAll: props.input.replaceAll })} @@ -2513,7 +2513,7 @@ function ApplyPatch(props: ToolProps) {
    - + Patch @@ -2535,12 +2535,12 @@ function TodoWrite(props: ToolProps) { - Updating todos... + Updating todos… @@ -2575,7 +2575,7 @@ function Question(props: ToolProps) { - + Asked {count()} question{count() !== 1 ? "s" : ""} @@ -2585,7 +2585,7 @@ function Question(props: ToolProps) { function Skill(props: ToolProps) { return ( - + Skill "{stringValue(props.input.name)}" ) diff --git a/packages/tui/src/ui/dialog-prompt.tsx b/packages/tui/src/ui/dialog-prompt.tsx index 892b2b0481d1..899a338697d0 100644 --- a/packages/tui/src/ui/dialog-prompt.tsx +++ b/packages/tui/src/ui/dialog-prompt.tsx @@ -99,11 +99,11 @@ export function DialogPrompt(props: DialogPromptProps) { cursorStyle={tuiConfig.cursor} /> - {props.busyText ?? "Working..."} + {props.busyText ?? "Working…"} - processing...}> + processing…}> {submitShortcut()} submit diff --git a/packages/tui/test/cli/tui/diff-viewer-file-tree.test.tsx b/packages/tui/test/cli/tui/diff-viewer-file-tree.test.tsx index 2a5a172f9c53..720436a0b3cf 100644 --- a/packages/tui/test/cli/tui/diff-viewer-file-tree.test.tsx +++ b/packages/tui/test/cli/tui/diff-viewer-file-tree.test.tsx @@ -77,7 +77,7 @@ describe("DiffViewerFileTree", () => { )) - expect(loading).not.toContain("Loading diff...") + expect(loading).not.toContain("Loading diff…") expect(loading).not.toContain("No files") expect(failed).not.toContain("Failed to load diff") expect(failed).not.toContain("No files") diff --git a/packages/tui/test/cli/tui/inline-tool-wrap-snapshot.test.tsx b/packages/tui/test/cli/tui/inline-tool-wrap-snapshot.test.tsx index 8ba730906ae0..6da90633ca42 100644 --- a/packages/tui/test/cli/tui/inline-tool-wrap-snapshot.test.tsx +++ b/packages/tui/test/cli/tui/inline-tool-wrap-snapshot.test.tsx @@ -195,7 +195,7 @@ function StickyScrollFixture(props: { separated: boolean; scroll: (scroll: Scrol function FailedPendingToolFixture() { return ( - + Patch ) @@ -203,7 +203,7 @@ function FailedPendingToolFixture() { function FailedCompleteToolFixture() { return ( - + Read src/index.ts ) From a935432b5ce337523dfc5014629a09bc16784c42 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Thu, 3 Sep 2026 19:58:32 +0000 Subject: [PATCH 125/185] chore: generate --- packages/tui/src/routes/session/index.tsx | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/packages/tui/src/routes/session/index.tsx b/packages/tui/src/routes/session/index.tsx index 93639c9d763f..2b54f21671b3 100644 --- a/packages/tui/src/routes/session/index.tsx +++ b/packages/tui/src/routes/session/index.tsx @@ -2126,12 +2126,7 @@ function Write(props: ToolProps) { - + Write {pathFormatter.format(stringValue(props.input.filePath))} @@ -2533,13 +2528,7 @@ function TodoWrite(props: ToolProps) { - + Updating todos… From 8a6cf2c9aa1aa407129efc4e875a6ce6ab32ef72 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Thu, 3 Sep 2026 16:03:32 -0500 Subject: [PATCH 126/185] feat(stats): improve market share chart (#47115) --- packages/stats/app/src/routes/index.css | 125 ++++++++++++++++++++++++ packages/stats/app/src/routes/index.tsx | 101 +++++++++++++------ 2 files changed, 195 insertions(+), 31 deletions(-) diff --git a/packages/stats/app/src/routes/index.css b/packages/stats/app/src/routes/index.css index 2b8acb39029e..fc88132d2514 100644 --- a/packages/stats/app/src/routes/index.css +++ b/packages/stats/app/src/routes/index.css @@ -2195,6 +2195,7 @@ body { [data-page="stats"] [data-component="market-share"] { --market-gap: 12px; + position: relative; display: grid; grid-template-rows: auto minmax(0, 1fr); gap: 12px; @@ -2360,6 +2361,106 @@ body { font-weight: 500; } +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] { + top: 52px; + box-sizing: border-box; + display: flex; + flex-direction: column; + gap: 0; + width: 228px; + min-width: 228px; + padding: 0; + border: 0; + background: #fffffff2; + box-shadow: + 0 0 0 0.5px #00000024, + 0 8px 16px #0000000f, + 0 4px 8px #00000014; + color: var(--stats-text); +} + +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"][data-placement="right"] { + right: auto; + left: calc(var(--market-tooltip-left) + 8px); +} + +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"][data-placement="left"] { + right: calc(var(--market-tooltip-right) + 8px); + left: auto; +} + +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] strong, +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] > span { + display: block; + font-size: 11px; + line-height: 12px; + white-space: nowrap; +} + +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] strong { + padding: 8px 8px 0; + font-weight: 500; +} + +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] > span { + padding: 4px 8px 8px; + color: var(--stats-muted); +} + +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] [data-slot="tooltip-divider"] { + height: 0.5px; + margin: 0; +} + +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] p { + grid-template-columns: minmax(0, 1fr) auto auto; + gap: 8px; + height: 16px; + margin: 4px 0 0; + padding: 0 8px; + font-size: 11px; + font-weight: 500; + line-height: 12px; +} + +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] p[data-muted="true"] { + opacity: 0.46; +} + +[data-page="stats"] + [data-component="market-share"] + > [data-component="chart-tooltip"] + [data-slot="tooltip-divider"] + + p { + margin-top: 8px; +} + +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] p:last-child { + margin-bottom: 8px; +} + +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] [data-slot="tooltip-label"] { + grid-template-columns: 16px minmax(0, 1fr); + gap: 4px; +} + +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] i { + width: 6px; + height: 6px; + justify-self: center; +} + +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] em, +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] b { + font-style: normal; + font-weight: 500; + white-space: nowrap; +} + +[data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] em { + color: var(--stats-muted); +} + [data-page="stats"] [data-slot="market-footer"] { display: flex; align-items: center; @@ -7208,6 +7309,11 @@ body { [data-page="stats"][data-theme="dark"] :is([data-section="top-models"], [data-section="unique-users"]) [data-component="chart-tooltip"], +:root[data-stats-theme="dark"] + [data-page="stats"]:not([data-theme="light"]) + [data-component="market-share"] + > [data-component="chart-tooltip"], +[data-page="stats"][data-theme="dark"] [data-component="market-share"] > [data-component="chart-tooltip"], :root[data-stats-theme="dark"] [data-page="stats"]:not([data-theme="light"]) :is([data-section="top-models"], [data-section="unique-users"]) @@ -8560,6 +8666,25 @@ body { transform: none; } + [data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"] { + position: fixed; + top: auto; + right: 12px; + bottom: 12px; + left: 12px; + z-index: 40; + width: auto; + min-width: 0; + max-height: min(320px, 48vh); + overflow: auto; + transform: none; + } + + [data-page="stats"] [data-component="market-share"] > [data-component="chart-tooltip"][data-placement] { + right: 12px; + left: 12px; + } + [data-page="stats"] :is([data-section="top-models"], [data-section="unique-users"]) [data-component="chart-tooltip"][data-placement] { diff --git a/packages/stats/app/src/routes/index.tsx b/packages/stats/app/src/routes/index.tsx index 5a08aa011aeb..a24f803e1e34 100644 --- a/packages/stats/app/src/routes/index.tsx +++ b/packages/stats/app/src/routes/index.tsx @@ -928,7 +928,7 @@ function MarketShareSection(props: { data: MarketDay[] }) { const [inspecting, setInspecting] = createSignal(false) const authorOrder = createMemo(() => getMarketAuthorOrder(props.data)) const selectedIndex = createMemo(() => Math.min(activeIndex(), Math.max(props.data.length - 1, 0))) - const activeDay = createMemo(() => props.data[selectedIndex()]) + const today = createMemo(() => props.data[props.data.length - 1]) return (
    } > {(day) => ( @@ -963,19 +963,14 @@ function MarketShareSection(props: { data: MarketDay[] }) { setActiveIndex(index) setInspecting(true) }} - onActiveAuthorChange={(author) => { - setActiveAuthor(author) - setInspecting(true) - }} + onActiveAuthorChange={setActiveAuthor} + onInspectingChange={setInspecting} /> { - setActiveAuthor(author) - setInspecting(true) - }} + onActiveAuthorChange={setActiveAuthor} /> )} @@ -983,11 +978,7 @@ function MarketShareSection(props: { data: MarketDay[] }) {

    [*] - - {inspecting() - ? formatMarketDate(activeDay(), i18n.t("home.noData")) - : formatMarketRange(props.data, i18n.t("home.noData"))} - + {formatMarketDate(today(), i18n.t("home.noData"))}

    @@ -1002,10 +993,15 @@ function MarketShare(props: { activeAuthor: string | undefined inspecting: boolean onActiveIndexChange: (index: number) => void - onActiveAuthorChange: (author: string) => void + onActiveAuthorChange: (author: string | undefined) => void + onInspectingChange: (inspecting: boolean) => void }) { const i18n = useI18n() let chartRef: HTMLDivElement | undefined + const inspectDay = (index: number) => { + props.onActiveIndexChange(index) + props.onActiveAuthorChange(undefined) + } createEffect(() => scrollDenseChartToEnd(chartRef, props.range, props.data.length)) @@ -1018,6 +1014,10 @@ function MarketShare(props: { role="img" aria-label={i18n.t("home.marketChart")} style={{ "--market-count": props.data.length } as JSX.CSSProperties} + onPointerLeave={(event) => { + if (event.pointerType === "touch") return + props.onInspectingChange(false) + }} >
    @@ -1028,8 +1028,11 @@ function MarketShare(props: { data-active={props.inspecting && props.activeIndex === index() ? "true" : undefined} data-label-hidden={isColumnLabelHidden(index(), props.data.length) ? "true" : undefined} data-mobile-hidden={isMarketMobileLabelHidden(index(), props.data.length) ? "true" : undefined} - onClick={() => props.onActiveIndexChange(index())} - onPointerEnter={() => props.onActiveIndexChange(index())} + aria-describedby={props.inspecting && props.activeIndex === index() ? "market-share-tooltip" : undefined} + onBlur={() => props.onInspectingChange(false)} + onClick={() => inspectDay(index())} + onFocus={() => inspectDay(index())} + onPointerEnter={() => inspectDay(index())} > {formatTrillions(day.total)} @@ -1049,8 +1052,11 @@ function MarketShare(props: { type="button" aria-label={`${day.date} ${formatTrillions(day.total)}`} data-active={props.inspecting && props.activeIndex === index() ? "true" : undefined} - onClick={() => props.onActiveIndexChange(index())} - onPointerEnter={() => props.onActiveIndexChange(index())} + aria-describedby={props.inspecting && props.activeIndex === index() ? "market-share-tooltip" : undefined} + onBlur={() => props.onInspectingChange(false)} + onClick={() => inspectDay(index())} + onFocus={() => inspectDay(index())} + onPointerEnter={() => inspectDay(index())} > {(item) => ( @@ -1090,6 +1096,45 @@ function MarketShare(props: { )}
    + + {(day) => ( +
    props.data.length * 0.62 ? "left" : "right"} + role="tooltip" + style={ + { + "--market-tooltip-left": `${((props.activeIndex + 0.5) / props.data.length) * 100}%`, + "--market-tooltip-right": `${100 - ((props.activeIndex + 0.5) / props.data.length) * 100}%`, + } as JSX.CSSProperties + } + > + {day.date} + + {formatTrillions(day.total)} {i18n.t("home.total")} + +
    + + {(item, index) => ( +

    + + + {item.author} + + {formatTrillions(item.tokens)} + {item.share.toFixed(1)}% +

    + )} +
    +
    + )} +
    ) } @@ -1248,6 +1293,10 @@ function getMarketSegmentColor(author: string, color: string, activeAuthor: stri return "var(--stats-bar-idle)" } +function rankedMarketAuthors(day: MarketDay) { + return day.authors.toSorted((a, b) => b.tokens - a.tokens || a.author.localeCompare(b.author)) +} + function stackedMarketAuthors(day: MarketDay, order: Map) { return day.authors .map((author, index) => ({ author, index })) @@ -1302,16 +1351,6 @@ function formatMarketDate(day: MarketDay | undefined, fallback: string) { return formatMarketDateLabel(day.date) } -function formatMarketRange(data: MarketDay[], fallback: string) { - const first = data[0]?.date - const last = data[data.length - 1]?.date - if (!first || !last) return fallback - const start = marketDateParts(first).start - const end = marketDateParts(last).end - if (start === end) return formatMarketDateLabel(start) - return `${start} ${new Date().getFullYear()} → ${end} ${new Date().getFullYear()}` -} - function formatMarketDateLabel(label: string) { const parts = marketDateParts(label) const year = new Date().getFullYear() From c0f09afef5056cfbebdf5123162267cb6efbd960 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Thu, 3 Sep 2026 23:24:55 -0500 Subject: [PATCH 127/185] feat(copilot): send X-Interaction-Id header with session id (#47215) Co-authored-by: rekram1-node --- .../src/plugin/github-copilot/copilot.ts | 1 + .../test/plugin/github-copilot.test.ts | 56 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 packages/opencode/test/plugin/github-copilot.test.ts diff --git a/packages/opencode/src/plugin/github-copilot/copilot.ts b/packages/opencode/src/plugin/github-copilot/copilot.ts index 9c744db89b29..161bf859f7b0 100644 --- a/packages/opencode/src/plugin/github-copilot/copilot.ts +++ b/packages/opencode/src/plugin/github-copilot/copilot.ts @@ -361,6 +361,7 @@ export async function CopilotAuthPlugin(input: PluginInput): Promise { if (!incoming.model.providerID.includes("github-copilot")) return output.headers["X-GitHub-Api-Version"] = API_VERSION + output.headers["X-Interaction-Id"] = incoming.sessionID if (incoming.agent === "title") { output.headers["X-Interaction-Type"] = "agent-session-name-generation" } diff --git a/packages/opencode/test/plugin/github-copilot.test.ts b/packages/opencode/test/plugin/github-copilot.test.ts new file mode 100644 index 000000000000..cd1864b795ce --- /dev/null +++ b/packages/opencode/test/plugin/github-copilot.test.ts @@ -0,0 +1,56 @@ +import { expect, test } from "bun:test" +import type { Hooks } from "@opencode-ai/plugin" +import { CopilotAuthPlugin } from "@/plugin/github-copilot/copilot" + +type ChatHeaders = NonNullable + +async function hook() { + const hooks = await CopilotAuthPlugin({ + directory: "", + project: {} as never, + worktree: "", + experimental_workspace: { register() {} }, + serverUrl: new URL("http://localhost"), + $: {} as never, + client: { + session: { + message: async () => ({ data: { parts: [] } }), + get: async () => ({ data: {} }), + }, + } as never, + }) + return hooks["chat.headers"]! +} + +function input(sessionID: string, providerID: string, npm: string) { + return { + sessionID, + agent: "build", + model: { providerID, api: { npm } }, + message: { id: "msg_test", sessionID }, + } as Parameters[0] +} + +test.each([ + ["github-copilot", "@ai-sdk/github-copilot"], + ["github-copilot", "@ai-sdk/anthropic"], + ["github-copilot-enterprise", "@ai-sdk/github-copilot"], + ["github-copilot-enterprise", "@ai-sdk/anthropic"], +])("uses the session ID for %s interaction headers with %s", async (providerID, npm) => { + const headers = await hook() + for (const sessionID of ["ses_one", "ses_one", "ses_two"]) { + const output = { headers: { "x-existing": "preserved" } } + await headers(input(sessionID, providerID, npm), output) + expect(output.headers).toMatchObject({ + "X-Interaction-Id": sessionID, + "x-existing": "preserved", + }) + } +}) + +test("does not add interaction headers to other providers", async () => { + const headers = await hook() + const output = { headers: { "x-existing": "preserved" } } + await headers(input("ses_one", "openai", "@ai-sdk/openai"), output) + expect(output.headers).toEqual({ "x-existing": "preserved" }) +}) From 8b9f89e7e8011dfe5b1350c92a6311e39b39d723 Mon Sep 17 00:00:00 2001 From: Jack Date: Fri, 4 Sep 2026 13:07:43 +0800 Subject: [PATCH 128/185] docs(go): add Omen Alpha (#47220) --- .../console/app/src/component/limits-graph.tsx | 1 + packages/console/app/src/i18n/ar.ts | 2 +- packages/console/app/src/i18n/br.ts | 2 +- packages/console/app/src/i18n/da.ts | 2 +- packages/console/app/src/i18n/de.ts | 2 +- packages/console/app/src/i18n/en.ts | 2 +- packages/console/app/src/i18n/es.ts | 2 +- packages/console/app/src/i18n/fr.ts | 2 +- packages/console/app/src/i18n/it.ts | 2 +- packages/console/app/src/i18n/ja.ts | 2 +- packages/console/app/src/i18n/ko.ts | 2 +- packages/console/app/src/i18n/no.ts | 2 +- packages/console/app/src/i18n/pl.ts | 2 +- packages/console/app/src/i18n/ru.ts | 2 +- packages/console/app/src/i18n/th.ts | 2 +- packages/console/app/src/i18n/tr.ts | 2 +- packages/console/app/src/i18n/uk.ts | 2 +- packages/console/app/src/i18n/zh.ts | 2 +- packages/console/app/src/i18n/zht.ts | 2 +- packages/console/app/src/routes/go/index.tsx | 1 + .../src/routes/workspace/[id]/go/lite-section.tsx | 1 + packages/web/src/content/docs/ar/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/bs/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/da/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/de/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/es/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/fr/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/it/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/ja/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/ko/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/nb/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/pl/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/pt-br/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/ru/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/th/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/tr/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/zh-cn/go.mdx | 14 +++++++++++--- packages/web/src/content/docs/zh-tw/go.mdx | 14 +++++++++++--- 39 files changed, 219 insertions(+), 72 deletions(-) diff --git a/packages/console/app/src/component/limits-graph.tsx b/packages/console/app/src/component/limits-graph.tsx index 9fc15b359673..63ffeafaa7cc 100644 --- a/packages/console/app/src/component/limits-graph.tsx +++ b/packages/console/app/src/component/limits-graph.tsx @@ -53,6 +53,7 @@ export function LimitsGraph(props: { href: string }) { { id: "qwen3.8-flash", name: "Qwen3.8 Flash", req: 5400 }, { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", req: 7600 }, { id: "longcat-2.0", name: "LongCat-2.0", req: 11400 }, + { id: "omen-alpha", name: "Omen Alpha", req: 11600 }, { id: "mimo-v2.5", name: "MiMo-V2.5", req: 30100 }, { id: "muse-spark-1.3-contributor", name: "Muse Spark 1.3 Contributor", req: 45300, edge: true }, ].map((model, index) => ({ ...model, d: `${50 + index * 25}ms` })) diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts index b1dfd4833469..a9ca603119e6 100644 --- a/packages/console/app/src/i18n/ar.ts +++ b/packages/console/app/src/i18n/ar.ts @@ -362,7 +362,7 @@ export const dict = { "go.faq.q9": "ما الفرق بين النماذج المجانية وGo؟", "go.faq.a9": - "تشمل النماذج المجانية Big Pickle بالإضافة إلى النماذج الترويجية المتاحة في ذلك الوقت، مع حصة قدرها 200 طلب/يوم. يقدّم Go مجموعة منسقة من النماذج مع حصص طلبات أعلى مطبقة عبر نوافذ متجددة (5 ساعات، وأسبوعية، وشهرية)، تعادل تقريبًا $12 لكل 5 ساعات، و$30 في الأسبوع، و$60 في الشهر (تختلف أعداد الطلبات الفعلية حسب النموذج والاستخدام).", + "تشمل النماذج المجانية Big Pickle بالإضافة إلى النماذج الترويجية المتاحة في ذلك الوقت، مع حصة قدرها 200 طلب/يوم. يقدّم Go مجموعة منسقة من النماذج مع حصص طلبات أعلى مطبقة عبر نوافذ متجددة (5 ساعات، وأسبوعية، وشهرية)، تعادل الحصص الأساسية فيها تقريبًا $12 لكل 5 ساعات و$30 في الأسبوع و$60 في الشهر؛ وقد تختلف الحصص حسب النموذج (تختلف أعداد الطلبات الفعلية حسب النموذج والاستخدام).", "zen.api.error.rateLimitExceeded": "تم تجاوز حد الطلبات. يرجى المحاولة مرة أخرى لاحقًا.", "zen.api.error.modelNotSupported": "النموذج {{model}} غير مدعوم", diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts index 12d1b87a5f95..2aa425607815 100644 --- a/packages/console/app/src/i18n/br.ts +++ b/packages/console/app/src/i18n/br.ts @@ -372,7 +372,7 @@ export const dict = { "go.faq.q9": "Qual a diferença entre os modelos gratuitos e o Go?", "go.faq.a9": - "Os modelos gratuitos incluem Big Pickle e modelos promocionais disponíveis no momento, com uma cota de 200 requisições/dia. O Go oferece uma seleção de modelos com cotas de requisição mais altas aplicadas em janelas móveis (5 horas, semanal e mensal), aproximadamente equivalentes a $12 por 5 horas, $30 por semana e $60 por mês (as contagens reais de requisições variam de acordo com o modelo e o uso).", + "Os modelos gratuitos incluem Big Pickle e modelos promocionais disponíveis no momento, com uma cota de 200 requisições/dia. O Go oferece uma seleção de modelos com cotas de requisição mais altas aplicadas em janelas móveis (5 horas, semanal e mensal), aproximadamente equivalentes a cotas básicas de $12 por 5 horas, $30 por semana e $60 por mês; as cotas específicas podem variar por modelo (as contagens reais de requisições variam de acordo com o modelo e o uso).", "zen.api.error.rateLimitExceeded": "Limite de taxa excedido. Por favor, tente novamente mais tarde.", "zen.api.error.modelNotSupported": "Modelo {{model}} não suportado", diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts index 8ed2a8f7c1b7..86a672ffc23c 100644 --- a/packages/console/app/src/i18n/da.ts +++ b/packages/console/app/src/i18n/da.ts @@ -368,7 +368,7 @@ export const dict = { "go.faq.q9": "Hvad er forskellen på gratis modeller og Go?", "go.faq.a9": - "Gratis modeller inkluderer Big Pickle plus kampagnemodeller, der er tilgængelige på det pågældende tidspunkt, med en kvote på 200 forespørgsler/dag. Go tilbyder et kurateret modeludvalg med højere forespørgselskvoter håndhævet over rullende perioder (5 timer, ugentligt og månedligt), omtrent svarende til $12 pr. 5 timer, $30 pr. uge og $60 pr. måned (det faktiske antal forespørgsler varierer efter model og brug).", + "Gratis modeller inkluderer Big Pickle plus kampagnemodeller, der er tilgængelige på det pågældende tidspunkt, med en kvote på 200 forespørgsler/dag. Go tilbyder et kurateret modeludvalg med højere forespørgselskvoter håndhævet over rullende perioder (5 timer, ugentligt og månedligt), omtrent svarende til basiskvoter på $12 pr. 5 timer, $30 pr. uge og $60 pr. måned; modelspecifikke kvoter kan variere (det faktiske antal forespørgsler varierer efter model og brug).", "zen.api.error.rateLimitExceeded": "Hastighedsgrænse overskredet. Prøv venligst igen senere.", "zen.api.error.modelNotSupported": "Model {{model}} understøttes ikke", diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts index dea829a39ad4..9a7642bc0345 100644 --- a/packages/console/app/src/i18n/de.ts +++ b/packages/console/app/src/i18n/de.ts @@ -370,7 +370,7 @@ export const dict = { "go.faq.q9": "Was ist der Unterschied zwischen kostenlosen Modellen und Go?", "go.faq.a9": - "Kostenlose Modelle beinhalten Big Pickle sowie Werbemodelle, die zum jeweiligen Zeitpunkt verfügbar sind, mit einem Kontingent von 200 Anfragen/Tag. Go bietet eine kuratierte Modellauswahl mit höheren Anfragekontingenten, die über rollierende Zeitfenster (5 Stunden, wöchentlich und monatlich) durchgesetzt werden, grob äquivalent zu $12 pro 5 Stunden, $30 pro Woche und $60 pro Monat (tatsächliche Anfragezahlen variieren je nach Modell und Nutzung).", + "Kostenlose Modelle beinhalten Big Pickle sowie Werbemodelle, die zum jeweiligen Zeitpunkt verfügbar sind, mit einem Kontingent von 200 Anfragen/Tag. Go bietet eine kuratierte Modellauswahl mit höheren Anfragekontingenten, die über rollierende Zeitfenster (5 Stunden, wöchentlich und monatlich) durchgesetzt werden, grob äquivalent zu Basiskontingenten von $12 pro 5 Stunden, $30 pro Woche und $60 pro Monat; modellspezifische Kontingente können abweichen (tatsächliche Anfragezahlen variieren je nach Modell und Nutzung).", "zen.api.error.rateLimitExceeded": "Ratenlimit überschritten. Bitte versuche es später erneut.", "zen.api.error.modelNotSupported": "Modell {{model}} wird nicht unterstützt", diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index a479f2642b9a..8c2901c39d28 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -367,7 +367,7 @@ export const dict = { "go.faq.q9": "What is the difference between free models and Go?", "go.faq.a9": - "Free models include Big Pickle plus promotional models available at the time, with a quota of 200 requests/day. Go offers a curated model lineup with higher request quotas enforced across rolling windows (5-hour, weekly, and monthly), roughly equivalent to $12 per 5 hours, $30 per week, and $60 per month (actual request counts vary by model and usage).", + "Free models include Big Pickle plus promotional models available at the time, with a quota of 200 requests/day. Go offers a curated model lineup with higher request quotas enforced across rolling windows (5-hour, weekly, and monthly), roughly equivalent to base allowances of $12 per 5 hours, $30 per week, and $60 per month; model-specific allowances may differ (actual request counts vary by model and usage).", "zen.api.error.rateLimitExceeded": "Rate limit exceeded. Please try again later.", "zen.api.error.modelNotSupported": "Model {{model}} is not supported", diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts index 534ac2eabb83..59aa3abbf313 100644 --- a/packages/console/app/src/i18n/es.ts +++ b/packages/console/app/src/i18n/es.ts @@ -373,7 +373,7 @@ export const dict = { "go.faq.q9": "¿Cuál es la diferencia entre los modelos gratuitos y Go?", "go.faq.a9": - "Los modelos gratuitos incluyen Big Pickle y los modelos promocionales disponibles en ese momento, con una cuota de 200 solicitudes/día. Go ofrece una selección de modelos con cuotas de solicitudes más altas aplicadas en ventanas móviles (de 5 horas, semanales y mensuales), aproximadamente equivalentes a 12 $ por 5 horas, 30 $ por semana y 60 $ por mes (la cantidad real de solicitudes varía según el modelo y el uso).", + "Los modelos gratuitos incluyen Big Pickle y los modelos promocionales disponibles en ese momento, con una cuota de 200 solicitudes/día. Go ofrece una selección de modelos con cuotas de solicitudes más altas aplicadas en ventanas móviles (de 5 horas, semanales y mensuales), aproximadamente equivalentes a cuotas base de 12 $ por 5 horas, 30 $ por semana y 60 $ por mes; las cuotas específicas pueden variar según el modelo (la cantidad real de solicitudes varía según el modelo y el uso).", "zen.api.error.rateLimitExceeded": "Límite de tasa excedido. Por favor, inténtalo de nuevo más tarde.", "zen.api.error.modelNotSupported": "Modelo {{model}} no soportado", diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts index 2b4ad95d0331..4a14e04521c7 100644 --- a/packages/console/app/src/i18n/fr.ts +++ b/packages/console/app/src/i18n/fr.ts @@ -373,7 +373,7 @@ export const dict = { "Oui, vous pouvez utiliser Go avec n'importe quel agent. Suivez les instructions de configuration dans votre agent de code préféré.", "go.faq.q9": "Quelle est la différence entre les modèles gratuits et Go ?", "go.faq.a9": - "Les modèles gratuits incluent Big Pickle ainsi que les modèles promotionnels disponibles à ce moment-là, avec un quota de 200 requêtes/jour. Go propose une sélection de modèles avec des quotas de requêtes plus élevés appliqués sur des fenêtres glissantes (5 heures, hebdomadaire et mensuelle), à peu près équivalents à 12 $ par 5 heures, 30 $ par semaine et 60 $ par mois (le nombre réel de requêtes varie selon le modèle et l'utilisation).", + "Les modèles gratuits incluent Big Pickle ainsi que les modèles promotionnels disponibles à ce moment-là, avec un quota de 200 requêtes/jour. Go propose une sélection de modèles avec des quotas de requêtes plus élevés appliqués sur des fenêtres glissantes (5 heures, hebdomadaire et mensuelle), à peu près équivalents à des quotas de base de 12 $ par 5 heures, 30 $ par semaine et 60 $ par mois ; les quotas propres à chaque modèle peuvent varier (le nombre réel de requêtes varie selon le modèle et l'utilisation).", "zen.api.error.rateLimitExceeded": "Limite de débit dépassée. Veuillez réessayer plus tard.", "zen.api.error.modelNotSupported": "Modèle {{model}} non pris en charge", diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts index 3abbaf7db8eb..0bc34f90b25b 100644 --- a/packages/console/app/src/i18n/it.ts +++ b/packages/console/app/src/i18n/it.ts @@ -369,7 +369,7 @@ export const dict = { "go.faq.q9": "Qual è la differenza tra i modelli gratuiti e Go?", "go.faq.a9": - "I modelli gratuiti includono Big Pickle più i modelli promozionali disponibili al momento, con una quota di 200 richieste/giorno. Go offre una selezione curata di modelli con quote di richiesta più elevate applicate su finestre mobili (5 ore, settimanale e mensile), approssimativamente equivalenti a $12 ogni 5 ore, $30 a settimana e $60 al mese (il conteggio effettivo delle richieste varia in base al modello e all'utilizzo).", + "I modelli gratuiti includono Big Pickle più i modelli promozionali disponibili al momento, con una quota di 200 richieste/giorno. Go offre una selezione curata di modelli con quote di richiesta più elevate applicate su finestre mobili (5 ore, settimanale e mensile), approssimativamente equivalenti a quote base di $12 ogni 5 ore, $30 a settimana e $60 al mese; le quote specifiche possono variare in base al modello (il conteggio effettivo delle richieste varia in base al modello e all'utilizzo).", "zen.api.error.rateLimitExceeded": "Limite di richieste superato. Riprova più tardi.", "zen.api.error.modelNotSupported": "Modello {{model}} non supportato", diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts index 5bb36e46f43a..55715333fc42 100644 --- a/packages/console/app/src/i18n/ja.ts +++ b/packages/console/app/src/i18n/ja.ts @@ -367,7 +367,7 @@ export const dict = { "go.faq.q9": "無料モデルとGoの違いは何ですか?", "go.faq.a9": - "無料モデルにはBig Pickleと、その時点で利用可能なプロモーションモデルが含まれ、1日200リクエストの制限があります。Goでは厳選されたモデルラインナップを利用でき、ローリングウィンドウ(5時間、週間、月間)全体でより高いリクエスト制限が適用されます。これは概算で5時間あたり$12、週間$30、月間$60相当です(実際のリクエスト数はモデルと使用状況により異なります)。", + "無料モデルにはBig Pickleと、その時点で利用可能なプロモーションモデルが含まれ、1日200リクエストの制限があります。Goでは厳選されたモデルラインナップを利用でき、ローリングウィンドウ(5時間、週間、月間)全体でより高いリクエスト制限が適用されます。基本利用枠では概算で5時間あたり$12、週間$30、月間$60相当ですが、モデル別の利用枠は異なる場合があります(実際のリクエスト数はモデルと使用状況により異なります)。", "zen.api.error.rateLimitExceeded": "レート制限を超えました。後でもう一度お試しください。", "zen.api.error.modelNotSupported": "モデル {{model}} はサポートされていません", diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts index b57ab820b304..6ad784dd9b92 100644 --- a/packages/console/app/src/i18n/ko.ts +++ b/packages/console/app/src/i18n/ko.ts @@ -361,7 +361,7 @@ export const dict = { "go.faq.q9": "무료 모델과 Go의 차이점은 무엇인가요?", "go.faq.a9": - "무료 모델에는 Big Pickle과 당시 사용 가능한 프로모션 모델이 포함되며, 하루 200회 요청 할당량이 적용됩니다. Go는 엄선된 모델 라인업을 제공하며, 롤링 윈도우(5시간, 주간, 월간)에 걸쳐 더 높은 요청 할당량을 적용합니다. 이는 대략 5시간당 $12, 주당 $30, 월 $60에 해당합니다(실제 요청 수는 모델 및 사용량에 따라 다름).", + "무료 모델에는 Big Pickle과 당시 사용 가능한 프로모션 모델이 포함되며, 하루 200회 요청 할당량이 적용됩니다. Go는 엄선된 모델 라인업을 제공하며, 롤링 윈도우(5시간, 주간, 월간)에 걸쳐 더 높은 요청 할당량을 적용합니다. 기본 할당량은 대략 5시간당 $12, 주당 $30, 월 $60에 해당하며 모델별 할당량은 다를 수 있습니다(실제 요청 수는 모델 및 사용량에 따라 다름).", "zen.api.error.rateLimitExceeded": "속도 제한을 초과했습니다. 나중에 다시 시도해 주세요.", "zen.api.error.modelNotSupported": "{{model}} 모델은 지원되지 않습니다", diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts index 343e81e29973..416e33bfca6c 100644 --- a/packages/console/app/src/i18n/no.ts +++ b/packages/console/app/src/i18n/no.ts @@ -369,7 +369,7 @@ export const dict = { "go.faq.q9": "Hva er forskjellen mellom gratis modeller og Go?", "go.faq.a9": - "Gratis modeller inkluderer Big Pickle pluss kampanjemodeller som er tilgjengelige på det tidspunktet, med en kvote på 200 forespørsler/dag. Go tilbyr et kuratert modellutvalg med høyere forespørselskvoter som håndheves over rullerende vinduer (5 timer, ukentlig og månedlig), omtrent tilsvarende $12 per 5 timer, $30 per uke og $60 per måned (faktiske forespørselsantall varierer etter modell og bruk).", + "Gratis modeller inkluderer Big Pickle pluss kampanjemodeller som er tilgjengelige på det tidspunktet, med en kvote på 200 forespørsler/dag. Go tilbyr et kuratert modellutvalg med høyere forespørselskvoter som håndheves over rullerende vinduer (5 timer, ukentlig og månedlig), omtrent tilsvarende basiskvoter på $12 per 5 timer, $30 per uke og $60 per måned; modellspesifikke kvoter kan variere (faktiske forespørselsantall varierer etter modell og bruk).", "zen.api.error.rateLimitExceeded": "Rate limit overskredet. Vennligst prøv igjen senere.", "zen.api.error.modelNotSupported": "Modell {{model}} støttes ikke", diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts index f33ddf70f0d1..88ae438aa210 100644 --- a/packages/console/app/src/i18n/pl.ts +++ b/packages/console/app/src/i18n/pl.ts @@ -370,7 +370,7 @@ export const dict = { "go.faq.q9": "Jaka jest różnica między darmowymi modelami a Go?", "go.faq.a9": - "Darmowe modele obejmują Big Pickle oraz modele promocyjne dostępne w danym momencie, z limitem 200 zapytań/dzień. Go oferuje starannie dobrany zestaw modeli z wyższymi limitami zapytań egzekwowanymi w oknach kroczących (5-godzinnych, tygodniowych i miesięcznych), odpowiadającymi w przybliżeniu $12 na 5 godzin, $30 tygodniowo i $60 miesięcznie (rzeczywista liczba zapytań zależy od modelu i użycia).", + "Darmowe modele obejmują Big Pickle oraz modele promocyjne dostępne w danym momencie, z limitem 200 zapytań/dzień. Go oferuje starannie dobrany zestaw modeli z wyższymi limitami zapytań egzekwowanymi w oknach kroczących (5-godzinnych, tygodniowych i miesięcznych), odpowiadającymi w przybliżeniu bazowym limitom $12 na 5 godzin, $30 tygodniowo i $60 miesięcznie; limity mogą się różnić zależnie od modelu (rzeczywista liczba zapytań zależy od modelu i użycia).", "zen.api.error.rateLimitExceeded": "Przekroczono limit zapytań. Spróbuj ponownie później.", "zen.api.error.modelNotSupported": "Model {{model}} nie jest obsługiwany", diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts index b285c9e85519..a4884471e2fe 100644 --- a/packages/console/app/src/i18n/ru.ts +++ b/packages/console/app/src/i18n/ru.ts @@ -375,7 +375,7 @@ export const dict = { "go.faq.q9": "В чем разница между бесплатными моделями и Go?", "go.faq.a9": - "Бесплатные модели включают Big Pickle и доступные на данный момент промо-модели с квотой 200 запросов/день. Go предлагает набор отобранных моделей с более высокими квотами запросов, применяемыми в скользящих окнах (5 часов, неделя и месяц), что примерно эквивалентно $12 за 5 часов, $30 в неделю и $60 в месяц (фактическое количество запросов зависит от модели и использования).", + "Бесплатные модели включают Big Pickle и доступные на данный момент промо-модели с квотой 200 запросов/день. Go предлагает набор отобранных моделей с более высокими квотами запросов, применяемыми в скользящих окнах (5 часов, неделя и месяц), что примерно эквивалентно базовым лимитам $12 за 5 часов, $30 в неделю и $60 в месяц; лимиты для отдельных моделей могут отличаться (фактическое количество запросов зависит от модели и использования).", "zen.api.error.rateLimitExceeded": "Превышен лимит запросов. Пожалуйста, попробуйте позже.", "zen.api.error.modelNotSupported": "Модель {{model}} не поддерживается", diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts index 1302a394371c..5821a67ccf94 100644 --- a/packages/console/app/src/i18n/th.ts +++ b/packages/console/app/src/i18n/th.ts @@ -366,7 +366,7 @@ export const dict = { "go.faq.q9": "ความแตกต่างระหว่างโมเดลฟรีและ Go คืออะไร?", "go.faq.a9": - "โมเดลฟรีประกอบด้วย Big Pickle และโมเดลโปรโมชันที่มีให้บริการในขณะนั้น โดยมีโควตา 200 คำขอ/วัน Go นำเสนอชุดโมเดลที่คัดสรร พร้อมโควตาคำขอที่สูงกว่าซึ่งบังคับใช้ตามกรอบเวลาแบบต่อเนื่อง (5 ชั่วโมง, รายสัปดาห์ และรายเดือน) เทียบเท่าประมาณ $12 ต่อ 5 ชั่วโมง, $30 ต่อสัปดาห์ และ $60 ต่อเดือน (จำนวนคำขอจริงแตกต่างกันไปตามโมเดลและการใช้งาน)", + "โมเดลฟรีประกอบด้วย Big Pickle และโมเดลโปรโมชันที่มีให้บริการในขณะนั้น โดยมีโควตา 200 คำขอ/วัน Go นำเสนอชุดโมเดลที่คัดสรร พร้อมโควตาคำขอที่สูงกว่าซึ่งบังคับใช้ตามกรอบเวลาแบบต่อเนื่อง (5 ชั่วโมง, รายสัปดาห์ และรายเดือน) เทียบเท่าโควตาพื้นฐานประมาณ $12 ต่อ 5 ชั่วโมง, $30 ต่อสัปดาห์ และ $60 ต่อเดือน โดยโควตาเฉพาะอาจแตกต่างกันไปตามโมเดล (จำนวนคำขอจริงแตกต่างกันไปตามโมเดลและการใช้งาน)", "zen.api.error.rateLimitExceeded": "เกินขีดจำกัดอัตราการใช้งาน กรุณาลองใหม่ในภายหลัง", "zen.api.error.modelNotSupported": "ไม่รองรับโมเดล {{model}}", diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts index a78376c8b685..479c67e8cb1c 100644 --- a/packages/console/app/src/i18n/tr.ts +++ b/packages/console/app/src/i18n/tr.ts @@ -372,7 +372,7 @@ export const dict = { "go.faq.q9": "Ücretsiz modeller ve Go arasındaki fark nedir?", "go.faq.a9": - "Ücretsiz modeller, günlük 200 istek kotasıyla Big Pickle'ı ve o sırada mevcut olan promosyonel modelleri içerir. Go ise kayan zaman aralıklarında (5 saatlik, haftalık ve aylık) uygulanan daha yüksek istek kotalarıyla özenle seçilmiş model seçenekleri sunar. Bu kotalar kabaca her 5 saatte 12$, haftada 30$ ve ayda 60$ değerine eşdeğerdir (gerçek istek sayıları modele ve kullanıma göre değişir).", + "Ücretsiz modeller, günlük 200 istek kotasıyla Big Pickle'ı ve o sırada mevcut olan promosyonel modelleri içerir. Go ise kayan zaman aralıklarında (5 saatlik, haftalık ve aylık) uygulanan daha yüksek istek kotalarıyla özenle seçilmiş model seçenekleri sunar. Bu kotalar kabaca her 5 saatte 12$, haftada 30$ ve ayda 60$ değerindeki temel kullanım haklarına eşdeğerdir; modele özgü kullanım hakları farklılık gösterebilir (gerçek istek sayıları modele ve kullanıma göre değişir).", "zen.api.error.rateLimitExceeded": "İstek limiti aşıldı. Lütfen daha sonra tekrar deneyin.", "zen.api.error.modelNotSupported": "{{model}} modeli desteklenmiyor", diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts index eaa3c63112f4..843a35a0ea52 100644 --- a/packages/console/app/src/i18n/uk.ts +++ b/packages/console/app/src/i18n/uk.ts @@ -368,7 +368,7 @@ export const dict = { "go.faq.q9": "Яка різниця між безкоштовними моделями та Go?", "go.faq.a9": - "Безкоштовні моделі включають Big Pickle та доступні на той момент акційні моделі з квотою 200 запитів/день. Go пропонує добірку моделей із вищими квотами запитів, що застосовуються протягом ковзних періодів (5 годин, тижня та місяця), приблизно еквівалентними $12 за 5 годин, $30 на тиждень і $60 на місяць (фактична кількість запитів залежить від моделі та використання).", + "Безкоштовні моделі включають Big Pickle та доступні на той момент акційні моделі з квотою 200 запитів/день. Go пропонує добірку моделей із вищими квотами запитів, що застосовуються протягом ковзних періодів (5 годин, тижня та місяця), приблизно еквівалентними базовим лімітам $12 за 5 годин, $30 на тиждень і $60 на місяць; ліміти для окремих моделей можуть відрізнятися (фактична кількість запитів залежить від моделі та використання).", "zen.api.error.rateLimitExceeded": "Перевищено ліміт запитів. Спробуйте пізніше.", "zen.api.error.modelNotSupported": "Модель {{model}} не підтримується", diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts index 12f161238c82..1b5dd50e1e07 100644 --- a/packages/console/app/src/i18n/zh.ts +++ b/packages/console/app/src/i18n/zh.ts @@ -348,7 +348,7 @@ export const dict = { "go.faq.q9": "免费模型和 Go 之间的区别是什么?", "go.faq.a9": - "免费模型包含 Big Pickle 加上当时可用的促销模型,每天有 200 次请求的配额。Go 提供精选模型阵容,并在滚动窗口(5 小时、每周和每月)内执行更高的请求配额,大致相当于每 5 小时 $12、每周 $30 和每月 $60(实际请求计数因模型和使用情况而异)。", + "免费模型包含 Big Pickle 加上当时可用的促销模型,每天有 200 次请求的配额。Go 提供精选模型阵容,并在滚动窗口(5 小时、每周和每月)内执行更高的请求配额,大致相当于每 5 小时 $12、每周 $30 和每月 $60 的基础额度;具体额度可能因模型而异(实际请求计数因模型和使用情况而异)。", "zen.api.error.rateLimitExceeded": "超出速率限制。请稍后重试。", "zen.api.error.modelNotSupported": "不支持模型 {{model}}", diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts index 149fbf7c2339..6f5d12317b5b 100644 --- a/packages/console/app/src/i18n/zht.ts +++ b/packages/console/app/src/i18n/zht.ts @@ -348,7 +348,7 @@ export const dict = { "go.faq.q9": "免費模型與 Go 有什麼區別?", "go.faq.a9": - "免費模型包括 Big Pickle 以及當時可用的促銷模型,配額為 200 次請求/天。Go 提供精選模型陣容,並在滾動視窗(5 小時、每週和每月)內提供更高的請求配額,大約相當於每 5 小時 $12、每週 $30 和每月 $60(實際請求數因模型和使用情況而異)。", + "免費模型包括 Big Pickle 以及當時可用的促銷模型,配額為 200 次請求/天。Go 提供精選模型陣容,並在滾動視窗(5 小時、每週和每月)內提供更高的請求配額,大約相當於每 5 小時 $12、每週 $30 和每月 $60 的基礎額度;具體額度可能因模型而異(實際請求數因模型和使用情況而異)。", "zen.api.error.rateLimitExceeded": "超出頻率限制。請稍後再試。", "zen.api.error.modelNotSupported": "不支援模型 {{model}}", diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index 72fc71a3b4d7..3704e9634d72 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -49,6 +49,7 @@ const models = [ { name: "DeepSeek V4 Flash", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "Hy4 preview", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, { name: "Hy3", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, + { name: "Omen Alpha", training: "go.faq.a5.notUsed", retention: "go.faq.a5.retention0" }, ] as const export default function Home() { diff --git a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx index 35cdd500cf3b..868961777ce5 100644 --- a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx @@ -666,6 +666,7 @@ export function LiteSection(props: { lite: LiteSubscription | undefined }) {
  • MiMo-V2.5-Pro
  • Hy4 preview
  • Hy3
  • +
  • Omen Alpha
  • {i18n.t("workspace.lite.promo.footer")}

    diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx index 796e1dfa9693..2a432993f78c 100644 --- a/packages/web/src/content/docs/ar/go.mdx +++ b/packages/web/src/content/docs/ar/go.mdx @@ -75,6 +75,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** قد تتغير قائمة النماذج مع استمرارنا في اختبار نماذج جديدة وإضافتها. @@ -94,12 +95,14 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر ## حدود الاستخدام -يتضمن OpenCode Go الحدود التالية: +يتضمن OpenCode Go الحدود الأساسية التالية: - **حد 5 ساعات** — استخدام بقيمة $12 - **الحد الأسبوعي** — استخدام بقيمة $30 - **الحد الشهري** — استخدام بقيمة $60 +يختلف الحد الفعلي حسب النموذج؛ راجع الجدول أدناه. + تُحدَّد الحدود بالقيمة بالدولار. وهذا يعني أن عدد طلباتك الفعلي يعتمد على النموذج الذي تستخدمه. تتيح النماذج الأقل تكلفة مثل MiMo-V2.5 عددًا أكبر من الطلبات، بينما تتيح النماذج الأعلى تكلفة مثل GLM-5.2 عددًا أقل. يوضح الجدول أدناه عددًا تقديريًا للطلبات بناءً على أنماط استخدام Go المعتادة: @@ -132,8 +135,9 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -تستند التقديرات إلى أنماط الطلبات المرصودة: +تستخدم التقديرات أعداد tokens التالية لكل طلب؛ ويختلف الاستخدام الفعلي. - Grok 4.6 — ‏390 input، و32,500 cached، و120 output tokens لكل طلب - GLM-5.3-Flash — ‏1,000 input، و55,000 cached، و200 output tokens لكل طلب @@ -158,6 +162,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر - Hy3 — ‏830 input، و71,500 cached، و295 output tokens لكل طلب - MiMo-V2.5 — ‏830 input، و71,500 cached، و295 output tokens لكل طلب - MiMo-V2.5-Pro — ‏790 input، و86,000 cached، و305 output tokens لكل طلب +- Omen Alpha — ‏300 input، و40,000 cached، و100 output tokens لكل طلب تستند التقديرات أيضًا إلى الأسعار التالية لكل 1M tokens والاستخدام الشهري المتضمن مع كل نموذج: @@ -197,6 +202,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** ساعات Peak هي 01:00-04:00 و06:00-10:00 UTC من الاثنين إلى الجمعة؛ وجميع الساعات الأخرى، بما في ذلك عطلات نهاية الأسبوع، Off-Peak. [اعرف المزيد](https://api-docs.deepseek.com/quick_start/pricing/). @@ -220,7 +226,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر ### لماذا يكون الاستخدام أقل لبعض النماذج -مع Go، تدفع $10 شهريًا، ونهدف إلى منحك استخدامًا بقيمة تعادل 6 أضعاف هذا المبلغ. +مع Go، تدفع $10 شهريًا، ونهدف لمعظم النماذج إلى منحك استخدامًا بقيمة تعادل 6 أضعاف هذا المبلغ. نحقق ذلك لمعظم النماذج من خلال الخصومات على الكميات الكبيرة وسعة GPU المحجوزة. ثم ننقل هذه الوفورات إليك من خلال معامل مضاعفة قدره 6. @@ -263,6 +269,7 @@ OpenCode Go هو اشتراك منخفض التكلفة بقيمة **$10/شهر | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | يستخدم [model id](/docs/config/#models) في إعدادات OpenCode لديك التنسيق `opencode-go/`. على سبيل المثال، بالنسبة إلى Kimi K3، ستستخدم `opencode-go/kimi-k3` في إعداداتك. @@ -308,6 +315,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | غير مستخدَمة | 0 أيام | | Hy4 preview | غير مستخدَمة | 0 أيام | | Hy3 | غير مستخدَمة | 0 أيام | +| Omen Alpha | غير مستخدَمة | 0 أيام | - **Grok 4.6:** تعطّل ZDR ميزات API مهمة تعتمد على البيانات المخزنة، بما في ذلك Responses API ذات الحالة، وFiles and Collections، وBatch API. [اعرف المزيد](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** تُنشأ سجلات مراقبة إساءة الاستخدام لكل استخدام لميزات API، ويُحتفظ بها لمدة تصل إلى 30 يومًا. [اعرف المزيد](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index c1de47ba9b52..1baa4bc8655e 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -85,6 +85,7 @@ Trenutna lista modela uključuje: - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** Lista modela se može mijenjati dok testiramo i dodajemo nove. @@ -104,12 +105,14 @@ Kako vaš račun ne bi bio označen, pobrinite se da alat koji koristite ## Ograničenja upotrebe -OpenCode Go uključuje sljedeća ograničenja: +OpenCode Go uključuje sljedeća osnovna ograničenja: - **Ograničenje od 5 sati** — $12 potrošnje - **Sedmično ograničenje** — $30 potrošnje - **Mjesečno ograničenje** — $60 potrošnje +Efektivna potrošnja razlikuje se po modelu; pogledajte tabelu ispod. + Ograničenja su definisana u dolarskoj vrijednosti. To znači da vaš stvarni broj zahtjeva zavisi od modela koji koristite. Jeftiniji modeli poput MiMo-V2.5 omogućavaju više zahtjeva, dok skuplji modeli poput GLM-5.2 omogućavaju manje. Tabela ispod pruža procijenjeni broj zahtjeva na osnovu tipičnih obrazaca korištenja Go pretplate: @@ -142,8 +145,9 @@ Tabela ispod pruža procijenjeni broj zahtjeva na osnovu tipičnih obrazaca kori | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -Procjene se zasnivaju na zapaženim obrascima zahtjeva: +Procjene koriste sljedeći broj tokena po zahtjevu; stvarna potrošnja varira. - Grok 4.6 — 390 ulaznih, 32,500 keširanih, 120 izlaznih tokena po zahtjevu - GLM-5.3-Flash — 1,000 ulaznih (input), 55,000 keširanih, 200 izlaznih (output) tokena po zahtjevu @@ -168,6 +172,7 @@ Procjene se zasnivaju na zapaženim obrascima zahtjeva: - Hy3 — 830 ulaznih, 71,500 keširanih, 295 izlaznih tokena po zahtjevu - MiMo-V2.5 — 830 ulaznih, 71,500 keširanih, 295 izlaznih tokena po zahtjevu - MiMo-V2.5-Pro — 790 ulaznih, 86,000 keširanih, 305 izlaznih tokena po zahtjevu +- Omen Alpha — 300 ulaznih, 40.000 keširanih, 100 izlaznih tokena po zahtjevu Procjene se također zasnivaju na sljedećim cijenama po 1M tokena i mjesečnoj potrošnji uključenoj uz svaki model: @@ -207,6 +212,7 @@ Procjene se također zasnivaju na sljedećim cijenama po 1M tokena i mjesečnoj | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak sati su 01:00-04:00 i 06:00-10:00 UTC od ponedjeljka do petka; svi ostali sati, uključujući vikende, su Off-Peak. [Saznajte više](https://api-docs.deepseek.com/quick_start/pricing/). @@ -232,7 +238,7 @@ nakon što dostignete ograničenja upotrebe umjesto blokiranja zahtjeva. ### Zašto neki modeli imaju manju uključenu potrošnju -Uz Go plaćate $10 mjesečno, a cilj nam je omogućiti vam potrošnju šest puta veću od tog iznosa. +Uz Go plaćate $10 mjesečno, a za većinu modela cilj nam je omogućiti vam potrošnju šest puta veću od tog iznosa. Za većinu modela to postižemo količinskim popustima i rezervisanim GPU kapacitetom. Tu uštedu zatim prenosimo na vas primjenom faktora šest. @@ -275,6 +281,7 @@ Također možete pristupiti Go modelima putem sljedećih API endpointa. | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [Model id](/docs/config/#models) u vašoj OpenCode konfiguraciji koristi format `opencode-go/`. Na primjer, za Kimi K3, koristili biste @@ -322,6 +329,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | Ne koristi se | 0 dana | | Hy4 preview | Ne koristi se | 0 dana | | Hy3 | Ne koristi se | 0 dana | +| Omen Alpha | Ne koristi se | 0 dana | - **Grok 4.6:** ZDR onemogućava važne API funkcije koje zavise od pohranjenih podataka, uključujući Responses API s očuvanjem stanja, Files and Collections i Batch API. [Saznajte više](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Zapisi o nadzoru zloupotrebe generišu se za svako korištenje API funkcija i čuvaju do 30 dana. [Saznajte više](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx index 864b56ef15e2..8af3fdbab22e 100644 --- a/packages/web/src/content/docs/da/go.mdx +++ b/packages/web/src/content/docs/da/go.mdx @@ -85,6 +85,7 @@ Den nuværende liste over modeller inkluderer: - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** Listen over modeller kan ændre sig, efterhånden som vi tester og tilføjer nye. @@ -104,12 +105,14 @@ For at sikre, at din konto ikke bliver markeret, skal du sørge for, at det vær ## Forbrugsgrænser -OpenCode Go inkluderer følgende grænser: +OpenCode Go inkluderer følgende basisgrænser: - **5-timers grænse** — forbrug for $12 - **Ugentlig grænse** — forbrug for $30 - **Månedlig grænse** — forbrug for $60 +Det effektive forbrug varierer efter model; se tabellen nedenfor. + Grænserne er defineret i dollarværdi. Det betyder, at dit faktiske antal anmodninger afhænger af den model, du bruger. Billigere modeller som MiMo-V2.5 tillader flere anmodninger, mens dyrere modeller som GLM-5.2 tillader færre. Tabellen nedenfor giver et estimeret antal anmodninger baseret på typiske Go-forbrugsmønstre: @@ -142,8 +145,9 @@ Tabellen nedenfor giver et estimeret antal anmodninger baseret på typiske Go-fo | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -Estimaterne er baseret på observerede anmodningsmønstre: +Estimaterne bruger følgende antal tokens pr. anmodning; det faktiske forbrug varierer. - Grok 4.6 — 390 input, 32.500 cachelagrede, 120 output-tokens pr. anmodning - GLM-5.3-Flash — 1.000 input, 55.000 cachelagrede, 200 output-tokens pr. anmodning @@ -168,6 +172,7 @@ Estimaterne er baseret på observerede anmodningsmønstre: - Hy3 — 830 input, 71.500 cachelagrede, 295 output-tokens pr. anmodning - MiMo-V2.5 — 830 input, 71.500 cachelagrede, 295 output-tokens pr. anmodning - MiMo-V2.5-Pro — 790 input, 86.000 cachelagrede, 305 output-tokens pr. anmodning +- Omen Alpha — 300 input-, 40.000 cachede, 100 output-tokens pr. anmodning Estimaterne er også baseret på følgende priser pr. 1M tokens og det månedlige forbrug, der er inkluderet med hver model: @@ -207,6 +212,7 @@ Estimaterne er også baseret på følgende priser pr. 1M tokens og det månedlig | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak-tiderne er 01:00-04:00 og 06:00-10:00 UTC fra mandag til fredag; alle andre tider, herunder weekender, er Off-Peak. [Læs mere](https://api-docs.deepseek.com/quick_start/pricing/). @@ -232,7 +238,7 @@ når du har nået dine forbrugsgrænser, i stedet for at blokere anmodninger. ### Hvorfor nogle modeller har lavere forbrug -Med Go betaler du $10/måned, og vi sigter mod at give dig 6x så meget i forbrug. +Med Go betaler du $10/måned, og for de fleste modeller sigter vi mod at give dig 6x så meget i forbrug. For de fleste modeller gør vi dette muligt gennem mængderabatter og reserveret GPU-kapacitet. Vi giver dig derefter disse besparelser videre gennem 6x-multiplikatoren. @@ -275,6 +281,7 @@ Du kan også få adgang til Go-modeller gennem følgende API-endpoints. | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | Dit [model id](/docs/config/#models) i din OpenCode config bruger formatet `opencode-go/`. For eksempel for Kimi K3, vil du @@ -322,6 +329,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | Ikke brugt | 0 dage | | Hy4 preview | Ikke brugt | 0 dage | | Hy3 | Ikke brugt | 0 dage | +| Omen Alpha | Ikke brugt | 0 dage | - **Grok 4.6:** ZDR deaktiverer vigtige API-funktioner, der afhænger af lagrede data, herunder den tilstandsbevarende Responses API, Files and Collections og Batch API. [Læs mere](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Logfiler til overvågning af misbrug genereres ved al brug af API-funktioner og opbevares i op til 30 dage. [Læs mere](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx index a2c33f8cfec4..066bfb366f0a 100644 --- a/packages/web/src/content/docs/de/go.mdx +++ b/packages/web/src/content/docs/de/go.mdx @@ -77,6 +77,7 @@ Die aktuelle Liste der Modelle umfasst: - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** Die Liste der Modelle kann sich ändern, während wir neue testen und hinzufügen. @@ -96,12 +97,14 @@ Damit dein Konto nicht markiert wird, stelle sicher, dass das von dir verwendete ## Nutzungslimits -OpenCode Go beinhaltet die folgenden Limits: +OpenCode Go beinhaltet die folgenden Basislimits: - **5-Stunden-Limit** — 12 $ Nutzung - **Wöchentliches Limit** — 30 $ Nutzung - **Monatliches Limit** — 60 $ Nutzung +Das effektive Kontingent variiert je nach Modell; siehe die Tabelle unten. + Limits sind in Dollarwerten definiert. Das bedeutet, dass die tatsächliche Anzahl deiner Anfragen von dem von dir genutzten Modell abhängt. Günstigere Modelle wie MiMo-V2.5 erlauben mehr Anfragen, während teurere Modelle wie GLM-5.2 weniger erlauben. Die folgende Tabelle zeigt eine geschätzte Anzahl von Anfragen basierend auf typischen Go-Nutzungsmustern: @@ -134,8 +137,9 @@ Die folgende Tabelle zeigt eine geschätzte Anzahl von Anfragen basierend auf ty | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -Die Schätzungen basieren auf beobachteten Anfragemustern: +Die Schätzungen verwenden die folgenden Token-Anzahlen pro Anfrage; die tatsächliche Nutzung variiert. - Grok 4.6 — 390 Input-, 32.500 Cached-, 120 Output-Tokens pro Anfrage - GLM-5.3-Flash — 1.000 Input-, 55.000 Cached-, 200 Output-Tokens pro Anfrage @@ -160,6 +164,7 @@ Die Schätzungen basieren auf beobachteten Anfragemustern: - Hy3 — 830 Input-, 71.500 Cached-, 295 Output-Tokens pro Anfrage - MiMo-V2.5 — 830 Input-, 71.500 Cached-, 295 Output-Tokens pro Anfrage - MiMo-V2.5-Pro — 790 Input-, 86.000 Cached-, 305 Output-Tokens pro Anfrage +- Omen Alpha — 300 Input-, 40.000 Cached-, 100 Output-Tokens pro Anfrage Die Schätzungen basieren außerdem auf den folgenden Preisen pro 1M Tokens und der monatlichen Nutzung, die bei jedem Modell enthalten ist: @@ -199,6 +204,7 @@ Die Schätzungen basieren außerdem auf den folgenden Preisen pro 1M Tokens und | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Die Peak-Zeiten sind montags bis freitags von 01:00-04:00 und 06:00-10:00 UTC; alle anderen Zeiten, einschließlich der Wochenenden, sind Off-Peak. [Mehr erfahren](https://api-docs.deepseek.com/quick_start/pricing/). @@ -222,7 +228,7 @@ Wenn du auch Guthaben auf deinem Zen-Konto hast, kannst du in der Console die Op ### Warum einige Modelle weniger Nutzung bieten -Mit Go zahlst du $10/Monat, und unser Ziel ist, dir dafür das Sechsfache dieses Betrags als Nutzungsguthaben zu bieten. +Mit Go zahlst du $10/Monat, und bei den meisten Modellen ist unser Ziel, dir dafür das Sechsfache dieses Betrags als Nutzungsguthaben zu bieten. Bei den meisten Modellen ermöglichen wir dies durch Mengenrabatte und reservierte GPU-Kapazität. Diese Ersparnisse geben wir dann über den 6x-Multiplikator an dich weiter. @@ -265,6 +271,7 @@ Du kannst auf die Go-Modelle auch über die folgenden API-Endpunkte zugreifen. | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | Die [Modell-ID](/docs/config/#models) in deiner OpenCode Config verwendet das Format `opencode-go/`. Für Kimi K3 würdest du beispielsweise `opencode-go/kimi-k3` in deiner Config verwenden. @@ -310,6 +317,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | Nicht verwendet | 0 Tage | | Hy4 preview | Nicht verwendet | 0 Tage | | Hy3 | Nicht verwendet | 0 Tage | +| Omen Alpha | Nicht verwendet | 0 Tage | - **Grok 4.6:** ZDR deaktiviert wichtige API-Funktionen, die von gespeicherten Daten abhängen, einschließlich der zustandsbehafteten Responses API, Files and Collections und der Batch API. [Mehr erfahren](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Für die Nutzung aller API-Funktionen werden Protokolle zur Missbrauchsüberwachung erstellt und bis zu 30 Tage lang aufbewahrt. [Mehr erfahren](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index 49de80c2f36d..50e19568b90e 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -85,6 +85,7 @@ La lista actual de modelos incluye: - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** La lista de modelos puede cambiar a medida que probamos y agregamos otros nuevos. @@ -104,12 +105,14 @@ Para evitar que tu cuenta sea marcada, asegúrate de que la herramienta que usas ## Límites de uso -OpenCode Go incluye los siguientes límites: +OpenCode Go incluye los siguientes límites base: - **Límite de 5 horas** — $12 de uso - **Límite semanal** — $30 de uso - **Límite mensual** — $60 de uso +La asignación efectiva varía según el modelo; consulta la tabla siguiente. + Los límites se definen en valor en dólares. Esto significa que tu cantidad real de peticiones depende del modelo que uses. Los modelos más económicos como MiMo-V2.5 permiten más peticiones, mientras que los modelos de mayor costo como GLM-5.2 permiten menos. La siguiente tabla proporciona una cantidad estimada de peticiones basada en los patrones típicos de uso de Go: @@ -142,8 +145,9 @@ La siguiente tabla proporciona una cantidad estimada de peticiones basada en los | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -Las estimaciones se basan en los patrones de peticiones observados: +Las estimaciones usan las siguientes cantidades de tokens por petición; el uso real varía. - Grok 4.6 — 390 tokens de entrada, 32,500 en caché, 120 tokens de salida por petición - GLM-5.3-Flash — 1,000 tokens de entrada, 55,000 en caché, 200 tokens de salida por petición @@ -168,6 +172,7 @@ Las estimaciones se basan en los patrones de peticiones observados: - Hy3 — 830 tokens de entrada, 71,500 en caché, 295 tokens de salida por petición - MiMo-V2.5 — 830 tokens de entrada, 71,500 en caché, 295 tokens de salida por petición - MiMo-V2.5-Pro — 790 tokens de entrada, 86,000 en caché, 305 tokens de salida por petición +- Omen Alpha — 300 tokens de entrada, 40,000 en caché, 100 tokens de salida por petición Las estimaciones también se basan en los siguientes precios por 1M tokens y en el uso mensual incluido con cada modelo: @@ -207,6 +212,7 @@ Las estimaciones también se basan en los siguientes precios por 1M tokens y en | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Las horas Peak son 01:00-04:00 y 06:00-10:00 UTC, de lunes a viernes; todas las demás horas, incluidos los fines de semana, son Off-Peak. [Más información](https://api-docs.deepseek.com/quick_start/pricing/). @@ -232,7 +238,7 @@ después de que hayas alcanzado tus límites de uso en lugar de bloquear las pet ### Por qué algunos modelos incluyen menos uso -Con Go, pagas $10/mes y nuestro objetivo es ofrecerte un uso equivalente a 6 veces esa cantidad. +Con Go, pagas $10/mes y, para la mayoría de los modelos, nuestro objetivo es ofrecerte un uso equivalente a 6 veces esa cantidad. Para la mayoría de los modelos, lo conseguimos mediante descuentos por volumen y capacidad de GPU reservada. Ese ahorro se traduce en un multiplicador de 6x para ti. @@ -275,6 +281,7 @@ También puedes acceder a los modelos de Go a través de los siguientes endpoint | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | El [ID del modelo](/docs/config/#models) en tu configuración de OpenCode usa el formato `opencode-go/`. Por ejemplo, para Kimi K3, usarías @@ -322,6 +329,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | No utilizado | 0 días | | Hy4 preview | No utilizado | 0 días | | Hy3 | No utilizado | 0 días | +| Omen Alpha | No utilizado | 0 días | - **Grok 4.6:** ZDR deshabilita funciones importantes de la API que dependen de datos almacenados, incluidas la Responses API con estado, Files and Collections y la Batch API. [Más información](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Se generan registros de supervisión de abusos para todo el uso de funciones de la API y se conservan durante un máximo de 30 días. [Más información](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx index 6d3e36ed0416..243bb3bc9c28 100644 --- a/packages/web/src/content/docs/fr/go.mdx +++ b/packages/web/src/content/docs/fr/go.mdx @@ -75,6 +75,7 @@ La liste actuelle des modèles comprend : - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** La liste des modèles peut changer au fur et à mesure que nous en testons et en ajoutons de nouveaux. @@ -94,12 +95,14 @@ Pour éviter que votre compte ne soit signalé, assurez-vous que l'outil que vou ## Limites d'utilisation -OpenCode Go inclut les limites suivantes : +OpenCode Go inclut les limites de base suivantes : - **Limite de 5 heures** — 12 $ d'utilisation - **Limite hebdomadaire** — 30 $ d'utilisation - **Limite mensuelle** — 60 $ d'utilisation +L'allocation effective varie selon le modèle ; consultez le tableau ci-dessous. + Les limites sont définies en valeur monétaire (dollars). Cela signifie que votre nombre réel de requêtes dépend du modèle que vous utilisez. Les modèles moins chers comme MiMo-V2.5 permettent plus de requêtes, tandis que les modèles plus coûteux comme GLM-5.2 en permettent moins. Le tableau ci-dessous fournit une estimation du nombre de requêtes basée sur des modèles d'utilisation typiques de Go : @@ -132,8 +135,9 @@ Le tableau ci-dessous fournit une estimation du nombre de requêtes basée sur d | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -Les estimations sont basées sur les schémas de requêtes observés : +Les estimations utilisent les nombres de tokens suivants par requête ; l'utilisation réelle varie. - Grok 4.6 — 390 tokens en entrée, 32,500 en cache, 120 tokens en sortie par requête - GLM-5.3-Flash — 1,000 tokens en entrée, 55,000 en cache, 200 tokens en sortie par requête @@ -158,6 +162,7 @@ Les estimations sont basées sur les schémas de requêtes observés : - Hy3 — 830 tokens en entrée, 71,500 en cache, 295 tokens en sortie par requête - MiMo-V2.5 — 830 tokens en entrée, 71,500 en cache, 295 tokens en sortie par requête - MiMo-V2.5-Pro — 790 tokens en entrée, 86,000 en cache, 305 tokens en sortie par requête +- Omen Alpha — 300 tokens en entrée, 40 000 en cache, 100 tokens en sortie par requête Les estimations sont également basées sur les prix suivants par 1M tokens et sur l'utilisation mensuelle incluse avec chaque modèle : @@ -197,6 +202,7 @@ Les estimations sont également basées sur les prix suivants par 1M tokens et s | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Les heures Peak sont 01:00-04:00 et 06:00-10:00 UTC, du lundi au vendredi ; toutes les autres heures, y compris le week-end, sont Off-Peak. [En savoir plus](https://api-docs.deepseek.com/quick_start/pricing/). @@ -220,7 +226,7 @@ Si vous avez également des crédits sur votre solde Zen, vous pouvez activer l' ### Pourquoi certains modèles offrent un volume d'utilisation inférieur -Avec Go, vous payez 10 $/mois et nous cherchons à vous offrir un volume d'utilisation équivalant à 6 fois ce montant. +Avec Go, vous payez 10 $/mois et, pour la plupart des modèles, nous cherchons à vous offrir un volume d'utilisation équivalant à 6 fois ce montant. Pour la plupart des modèles, nous y parvenons grâce à des remises sur volume et à une capacité GPU réservée. Nous vous faisons ensuite bénéficier de ces économies grâce à un coefficient multiplicateur de 6. @@ -263,6 +269,7 @@ Vous pouvez également accéder aux modèles Go via les points de terminaison d' | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | L'[ID de modèle](/docs/config/#models) dans votre configuration OpenCode utilise le format `opencode-go/`. Par exemple, pour Kimi K3, vous utiliseriez `opencode-go/kimi-k3` dans votre configuration. @@ -308,6 +315,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | Non utilisé | 0 jour | | Hy4 preview | Non utilisé | 0 jour | | Hy3 | Non utilisé | 0 jour | +| Omen Alpha | Non utilisé | 0 jour | - **Grok 4.6:** Le ZDR désactive d’importantes fonctionnalités API qui dépendent des données stockées, notamment Responses API avec état, Files and Collections et Batch API. [En savoir plus](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Des journaux de surveillance des abus sont générés pour toute utilisation des fonctionnalités API et conservés pendant un maximum de 30 jours. [En savoir plus](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index 6ec69aa04a35..31c646e3d43b 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -85,6 +85,7 @@ The current list of models includes: - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** The list of models may change as we test and add new ones. @@ -105,12 +106,14 @@ To ensure your account does not get flagged, make sure the tool you're using ## Usage limits -OpenCode Go includes the following limits: +OpenCode Go includes the following base limits: - **5 hour limit** — $12 of usage - **Weekly limit** — $30 of usage - **Monthly limit** — $60 of usage +Effective allowance varies by model; see the table below. + Limits are defined in dollar value. This means your actual request count depends on the model you use. Cheaper models like MiMo-V2.5 allow for more requests, while higher-cost models like GLM-5.2 allow for fewer. The table below provides an estimated request count based on typical Go usage patterns: @@ -143,8 +146,9 @@ The table below provides an estimated request count based on typical Go usage pa | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -The estimates are based on observed request patterns: +The estimates use the following token counts per request; actual usage varies. - Grok 4.6 — 390 input, 32,500 cached, 120 output tokens per request - GLM-5.3-Flash — 1,000 input, 55,000 cached, 200 output tokens per request @@ -169,6 +173,7 @@ The estimates are based on observed request patterns: - Qwen3.6 Plus — 500 input, 57,000 cached, 190 output tokens per request - Hy4 preview — 830 input, 71,500 cached, 295 output tokens per request - Hy3 — 830 input, 71,500 cached, 295 output tokens per request +- Omen Alpha — 300 input, 40,000 cached, 100 output tokens per request The estimates are also based on the following prices per 1M tokens and the monthly usage included with each model: @@ -208,6 +213,7 @@ The estimates are also based on the following prices per 1M tokens and the month | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak hours are 01:00-04:00 and 06:00-10:00 UTC, Monday through Friday; all other hours, including weekends, are Off-Peak. [Learn more](https://api-docs.deepseek.com/quick_start/pricing/). @@ -233,7 +239,7 @@ after you've reached your usage limits instead of blocking requests. ### Why some models have lower usage -With Go, you pay $10/month and we aim to give you 6x that in usage. +With Go, you pay $10/month and, for most models, we aim to give you 6x that in usage. For most models, we make this work through bulk discounts and reserved GPU capacity. We then pass those savings on to you through the 6x multiplier. @@ -276,6 +282,7 @@ You can also access Go models through the following API endpoints. | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | The [model id](/docs/config/#models) in your OpenCode config uses the format `opencode-go/`. For example, for Kimi K3, you would @@ -323,6 +330,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | Not used | 0 days\* | | Hy4 preview | Not used | 0 days | | Hy3 | Not used | 0 days | +| Omen Alpha | Not used | 0 days | - **Grok 4.6:** ZDR disables important API features that depend on stored data, including the stateful Responses API, Files and Collections, and the Batch API. [Learn more](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Abuse monitoring logs are generated for all API feature usage and retained for up to 30 days. [Learn more](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx index 7c6dfeb78403..1b3f1fac4bea 100644 --- a/packages/web/src/content/docs/it/go.mdx +++ b/packages/web/src/content/docs/it/go.mdx @@ -83,6 +83,7 @@ L'elenco attuale dei modelli include: - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** L'elenco dei modelli potrebbe cambiare man mano che ne testiamo e aggiungiamo di nuovi. @@ -102,12 +103,14 @@ Per evitare che il tuo account venga segnalato, assicurati che lo strumento che ## Limiti di utilizzo -OpenCode Go include i seguenti limiti: +OpenCode Go include i seguenti limiti di base: - **Limite di 5 ore** — 12 $ di utilizzo - **Limite settimanale** — 30 $ di utilizzo - **Limite mensile** — 60 $ di utilizzo +La quota effettiva varia in base al modello; consulta la tabella seguente. + I limiti sono definiti in valore in dollari. Questo significa che il conteggio effettivo delle richieste dipende dal modello utilizzato. Modelli più economici come MiMo-V2.5 consentono più richieste, mentre modelli più costosi come GLM-5.2 ne consentono di meno. La tabella seguente fornisce una stima del conteggio delle richieste in base a pattern di utilizzo tipici di Go: @@ -140,8 +143,9 @@ La tabella seguente fornisce una stima del conteggio delle richieste in base a p | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -Le stime si basano sui pattern di richieste osservati: +Le stime utilizzano i seguenti conteggi di token per richiesta; l'utilizzo effettivo varia. - Grok 4.6 — 390 di input, 32.500 in cache, 120 token di output per richiesta - GLM-5.3-Flash — 1.000 di input, 55.000 in cache, 200 token di output per richiesta @@ -166,6 +170,7 @@ Le stime si basano sui pattern di richieste osservati: - Hy3 — 830 di input, 71.500 in cache, 295 token di output per richiesta - MiMo-V2.5 — 830 di input, 71.500 in cache, 295 token di output per richiesta - MiMo-V2.5-Pro — 790 di input, 86.000 in cache, 305 token di output per richiesta +- Omen Alpha — 300 token di input, 40.000 token in cache, 100 token di output per richiesta Le stime si basano anche sui seguenti prezzi per 1M token e sull'utilizzo mensile incluso con ciascun modello: @@ -205,6 +210,7 @@ Le stime si basano anche sui seguenti prezzi per 1M token e sull'utilizzo mensil | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Gli orari Peak sono 01:00-04:00 e 06:00-10:00 UTC, dal lunedì al venerdì; tutti gli altri orari, inclusi i fine settimana, sono Off-Peak. [Scopri di più](https://api-docs.deepseek.com/quick_start/pricing/). @@ -230,7 +236,7 @@ dopo che avrai raggiunto i limiti di utilizzo invece di bloccare le richieste. ### Perché alcuni modelli hanno un utilizzo inferiore -Con Go, paghi $10/mese e puntiamo a offrirti un utilizzo pari a 6 volte tale importo. +Con Go, paghi $10/mese e, per la maggior parte dei modelli, puntiamo a offrirti un utilizzo pari a 6 volte tale importo. Per la maggior parte dei modelli, ci riusciamo grazie a sconti sui volumi e capacità GPU riservata. Ti facciamo quindi beneficiare di questi risparmi tramite il moltiplicatore 6x. @@ -273,6 +279,7 @@ Puoi anche accedere ai modelli Go tramite i seguenti endpoint API. | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | Il [model id](/docs/config/#models) nella tua OpenCode config utilizza il formato `opencode-go/`. Ad esempio, per Kimi K3, useresti @@ -320,6 +327,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | Non utilizzato | 0 giorni | | Hy4 preview | Non utilizzato | 0 giorni | | Hy3 | Non utilizzato | 0 giorni | +| Omen Alpha | Non utilizzato | 0 giorni | - **Grok 4.6:** ZDR disabilita importanti funzionalità API che dipendono dai dati archiviati, tra cui la Responses API con stato, Files and Collections e Batch API. [Scopri di più](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** I log di monitoraggio degli abusi vengono generati per l'utilizzo di tutte le funzionalità API e conservati per un massimo di 30 giorni. [Scopri di più](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx index a1d09ca2b7cc..5d8015abc1a5 100644 --- a/packages/web/src/content/docs/ja/go.mdx +++ b/packages/web/src/content/docs/ja/go.mdx @@ -75,6 +75,7 @@ OpenCode Goをサブスクライブできるのは、1つのワークスペー - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** 新しいモデルをテストして追加するにつれて、モデルのリストは変更される場合があります。 @@ -94,12 +95,14 @@ OpenCode Goは、[OpenCode](https://opencode.ai)や、同様の種類のリク ## 利用制限 -OpenCode Goには以下の制限が含まれています: +OpenCode Goには以下の基本制限が含まれています: - **5時間の制限** — 12ドル分の利用 - **週間の制限** — 30ドル分の利用 - **月間の制限** — 60ドル分の利用 +有効な利用枠はモデルによって異なります。下の表をご覧ください。 + 制限はドル単位で定義されています。つまり、実際のリクエスト数は使用するモデルによって異なります。MiMo-V2.5のような安価なモデルではより多くのリクエストが可能ですが、GLM-5.2のような高コストのモデルではリクエスト数が少なくなります。 以下の表は、一般的なGoの利用パターンに基づいた推定リクエスト数を示しています: @@ -132,8 +135,9 @@ OpenCode Goには以下の制限が含まれています: | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -推定値は、観測されたリクエストパターンに基づいています: +推定値には、リクエストあたり以下のトークン数を使用しています。実際の使用量は異なります。 - Grok 4.6 — リクエストあたり 入力 390トークン、キャッシュ 32,500トークン、出力 120トークン - GLM-5.3-Flash — リクエストあたり 入力 1,000トークン、キャッシュ 55,000トークン、出力 200トークン @@ -158,6 +162,7 @@ OpenCode Goには以下の制限が含まれています: - Hy3 — リクエストあたり 入力 830トークン、キャッシュ 71,500トークン、出力 295トークン - MiMo-V2.5 — リクエストあたり 入力 830トークン、キャッシュ 71,500トークン、出力 295トークン - MiMo-V2.5-Pro — リクエストあたり 入力 790トークン、キャッシュ 86,000トークン、出力 305トークン +- Omen Alpha — リクエストあたり 入力 300トークン、キャッシュ 40,000トークン、出力 100トークン 推定値は、100万トークンあたりの以下の価格と、各モデルに含まれる月間利用枠にも基づいています: @@ -197,6 +202,7 @@ OpenCode Goには以下の制限が含まれています: | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak時間は月曜日から金曜日の01:00-04:00と06:00-10:00 UTCで、週末を含むそれ以外の時間はすべてOff-Peakです。[詳しく見る](https://api-docs.deepseek.com/quick_start/pricing/)。 @@ -220,7 +226,7 @@ Zen残高にクレジットがある場合は、コンソールで**Use balance* ### 一部のモデルの利用枠が少ない理由 -Goでは月額$10を支払い、その6倍の利用枠を提供することを目指しています。 +Goでは月額$10を支払い、ほとんどのモデルでその6倍の利用枠を提供することを目指しています。 ほとんどのモデルでは、ボリュームディスカウントと予約済みのGPUキャパシティによってこれを実現しています。そして、その節約分を6倍の倍率で還元しています。 @@ -263,6 +269,7 @@ Goでは月額$10を支払い、その6倍の利用枠を提供することを | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | OpenCode設定の[model id](/docs/config/#models)は、`opencode-go/`という形式を使用します。たとえば、Kimi K3の場合は、設定で`opencode-go/kimi-k3`を使用します。 @@ -308,6 +315,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | 使用なし | 0日 | | Hy4 preview | 使用なし | 0日 | | Hy3 | 使用なし | 0日 | +| Omen Alpha | 使用なし | 0日 | - **Grok 4.6:** ZDRでは、保存データに依存する重要なAPI機能(ステートフルなResponses API、Files and Collections、Batch APIなど)が無効になります。[詳しく見る](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 - **GPT 5.6 Luna:** 不正使用監視ログはすべてのAPI機能の使用時に生成され、最大30日間保持されます。[詳しく見る](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring)。 diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx index 7202b4caf691..d213862df157 100644 --- a/packages/web/src/content/docs/ko/go.mdx +++ b/packages/web/src/content/docs/ko/go.mdx @@ -75,6 +75,7 @@ workspace당 한 명의 멤버만 OpenCode Go를 구독할 수 있습니다. - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** 새로운 모델을 테스트하고 추가함에 따라 이 목록은 변경될 수 있습니다. @@ -94,12 +95,14 @@ OpenCode Go는 [OpenCode](https://opencode.ai) 및 유사한 유형의 요청을 ## 사용 한도 -OpenCode Go에는 다음과 같은 한도가 포함됩니다. +OpenCode Go에는 다음과 같은 기본 한도가 포함됩니다. - **5시간 한도** — 사용량 $12 - **주간 한도** — 사용량 $30 - **월간 한도** — 사용량 $60 +실제 적용되는 할당량은 모델마다 다릅니다. 아래 표를 참조하세요. + 한도는 달러 금액 기준으로 정의됩니다. 즉, 실제 요청 횟수는 사용하는 모델에 따라 달라집니다. MiMo-V2.5처럼 저렴한 모델은 더 많은 요청이 가능하고, GLM-5.2처럼 비용이 더 높은 모델은 더 적은 요청이 가능합니다. 아래 표는 일반적인 Go 사용 패턴을 기준으로 한 예상 요청 횟수를 보여줍니다. @@ -132,8 +135,9 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -이 예상치는 관찰된 요청 패턴을 기준으로 합니다. +예상치에는 요청당 다음 토큰 수를 사용하며, 실제 사용량은 달라질 수 있습니다. - Grok 4.6 — 요청당 입력 390, 캐시 32,500, 출력 토큰 120 - GLM-5.3-Flash — 요청당 입력 1,000, 캐시 55,000, 출력 토큰 200 @@ -158,6 +162,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. - Hy3 — 요청당 입력 830, 캐시 71,500, 출력 토큰 295 - MiMo-V2.5 — 요청당 입력 830, 캐시 71,500, 출력 토큰 295 - MiMo-V2.5-Pro — 요청당 입력 790, 캐시 86,000, 출력 토큰 305 +- Omen Alpha — 요청당 입력 300, 캐시 40,000, 출력 토큰 100 이 예상치는 또한 1M tokens당 다음 가격과 각 모델에 포함된 월간 사용량을 기준으로 합니다. @@ -197,6 +202,7 @@ OpenCode Go에는 다음과 같은 한도가 포함됩니다. | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 시간은 월요일부터 금요일까지 01:00-04:00 및 06:00-10:00 UTC이며, 주말을 포함한 그 외 모든 시간은 Off-Peak입니다. [자세히 알아보기](https://api-docs.deepseek.com/quick_start/pricing/). @@ -220,7 +226,7 @@ Zen 잔액에 크레딧도 있다면, console에서 **Use balance** 옵션을 ### 일부 모델의 사용량이 더 적은 이유 -Go에서는 월 $10를 지불하며, 저희는 그 6배의 사용량을 제공하는 것을 목표로 합니다. +Go에서는 월 $10를 지불하며, 대부분의 모델에 대해 그 6배의 사용량을 제공하는 것을 목표로 합니다. 대부분의 모델은 대량 할인과 예약된 GPU 용량을 통해 이를 실현합니다. 그런 다음 6배의 사용량 배율을 통해 절감 혜택을 사용자에게 돌려드립니다. @@ -263,6 +269,7 @@ Go에서는 월 $10를 지불하며, 저희는 그 6배의 사용량을 제공 | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | OpenCode config의 [model id](/docs/config/#models)는 `opencode-go/` 형식을 사용합니다. 예를 들어 Kimi K3의 경우 config에서 `opencode-go/kimi-k3`를 사용하면 됩니다. @@ -308,6 +315,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | 사용되지 않음 | 0일 | | Hy4 preview | 사용되지 않음 | 0일 | | Hy3 | 사용되지 않음 | 0일 | +| Omen Alpha | 사용되지 않음 | 0일 | - **Grok 4.6:** ZDR은 저장된 데이터에 의존하는 중요한 API 기능(상태 저장형 Responses API, Files and Collections, Batch API 포함)을 비활성화합니다. [자세히 알아보기](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** 모든 API 기능 사용에 대해 악용 모니터링 로그가 생성되며 최대 30일 동안 보존됩니다. [자세히 알아보기](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx index e11ce9673c3e..28d804ccb63d 100644 --- a/packages/web/src/content/docs/nb/go.mdx +++ b/packages/web/src/content/docs/nb/go.mdx @@ -85,6 +85,7 @@ Den nåværende listen over modeller inkluderer: - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** Listen over modeller kan endres etter hvert som vi tester og legger til nye. @@ -104,12 +105,14 @@ For å sikre at kontoen din ikke blir flagget, må du sørge for at verktøyet d ## Bruksgrenser -OpenCode Go inkluderer følgende grenser: +OpenCode Go inkluderer følgende basisgrenser: - **5-timers grense** — $12 i bruk - **Ukentlig grense** — $30 i bruk - **Månedlig grense** — $60 i bruk +Den effektive bruken varierer etter modell; se tabellen nedenfor. + Grensene er definert i dollarverdi. Dette betyr at ditt faktiske antall forespørsler avhenger av modellen du bruker. Billigere modeller som MiMo-V2.5 tillater flere forespørsler, mens dyrere modeller som GLM-5.2 tillater færre. Tabellen nedenfor gir et estimert antall forespørsler basert på typiske bruksmønstre for Go: @@ -142,8 +145,9 @@ Tabellen nedenfor gir et estimert antall forespørsler basert på typiske bruksm | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -Estimatene er basert på observerte forespørselsmønstre: +Estimatene bruker følgende antall tokens per forespørsel; faktisk bruk varierer. - Grok 4.6 — 390 input, 32 500 bufret, 120 output-tokens per forespørsel - GLM-5.3-Flash — 1 000 input, 55 000 bufret, 200 output-tokens per forespørsel @@ -168,6 +172,7 @@ Estimatene er basert på observerte forespørselsmønstre: - Hy3 — 830 input, 71 500 bufret, 295 output-tokens per forespørsel - MiMo-V2.5 — 830 input, 71 500 bufret, 295 output-tokens per forespørsel - MiMo-V2.5-Pro — 790 input, 86 000 bufret, 305 output-tokens per forespørsel +- Omen Alpha — 300 input-, 40 000 bufrede, 100 output-tokens per forespørsel Estimatene er også basert på følgende priser per 1M tokens og den månedlige bruken som er inkludert med hver modell: @@ -207,6 +212,7 @@ Estimatene er også basert på følgende priser per 1M tokens og den månedlige | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak-tidene er 01:00-04:00 og 06:00-10:00 UTC fra mandag til fredag; alle andre tider, inkludert helger, er Off-Peak. [Les mer](https://api-docs.deepseek.com/quick_start/pricing/). @@ -232,7 +238,7 @@ etter at du har nådd bruksgrensene dine, i stedet for å blokkere forespørsler ### Hvorfor noen modeller har lavere bruk -Med Go betaler du $10/måned, og vi har som mål å gi deg seks ganger så mye bruk. +Med Go betaler du $10/måned, og for de fleste modeller har vi som mål å gi deg seks ganger så mye bruk. For de fleste modeller får vi dette til gjennom volumrabatter og reservert GPU-kapasitet. Deretter gir vi disse besparelsene videre til deg gjennom 6x-multiplikatoren. @@ -275,6 +281,7 @@ Du kan også få tilgang til Go-modeller gjennom følgende API-endepunkter. | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [Modell-ID-en](/docs/config/#models) i din OpenCode-konfigurasjon bruker formatet `opencode-go/`. For eksempel, for Kimi K3, vil du @@ -322,6 +329,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | Brukes ikke | 0 dager | | Hy4 preview | Brukes ikke | 0 dager | | Hy3 | Brukes ikke | 0 dager | +| Omen Alpha | Brukes ikke | 0 dager | - **Grok 4.6:** ZDR deaktiverer viktige API-funksjoner som er avhengige av lagrede data, inkludert den tilstandsbaserte Responses API, Files and Collections og Batch API. [Les mer](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Logger for overvåking av misbruk genereres for all bruk av API-funksjoner og oppbevares i opptil 30 dager. [Les mer](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx index 9c2deb506104..81a8124e47d3 100644 --- a/packages/web/src/content/docs/pl/go.mdx +++ b/packages/web/src/content/docs/pl/go.mdx @@ -79,6 +79,7 @@ Obecna lista modeli obejmuje: - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** Lista modeli może ulec zmianie w miarę testowania i dodawania nowych. @@ -98,12 +99,14 @@ Aby Twoje konto nie zostało oznaczone, upewnij się, że używane przez Ciebie ## Limity użycia -OpenCode Go zawiera następujące limity: +OpenCode Go zawiera następujące limity bazowe: - **Limit 5-godzinny** — użycie o wartości 12 $ - **Limit tygodniowy** — użycie o wartości 30 $ - **Limit miesięczny** — użycie o wartości 60 $ +Efektywny limit różni się w zależności od modelu; zobacz tabelę poniżej. + Limity są zdefiniowane w wartości w dolarach. Oznacza to, że rzeczywista liczba żądań zależy od używanego modelu. Tańsze modele, takie jak MiMo-V2.5, pozwalają na więcej żądań, podczas gdy modele o wyższym koszcie, takie jak GLM-5.2, pozwalają na mniej. Poniższa tabela przedstawia szacunkową liczbę żądań na podstawie typowych wzorców korzystania z Go: @@ -136,8 +139,9 @@ Poniższa tabela przedstawia szacunkową liczbę żądań na podstawie typowych | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -Szacunki te opierają się na zaobserwowanych wzorcach żądań: +Szacunki wykorzystują następującą liczbę tokenów na żądanie; rzeczywiste użycie jest zmienne. - Grok 4.6 — 390 tokenów wejściowych, 32 500 w pamięci podręcznej, 120 tokenów wyjściowych na żądanie - GLM-5.3-Flash — 1 000 tokenów wejściowych, 55 000 w pamięci podręcznej, 200 tokenów wyjściowych na żądanie @@ -162,6 +166,7 @@ Szacunki te opierają się na zaobserwowanych wzorcach żądań: - Hy3 — 830 tokenów wejściowych, 71 500 w pamięci podręcznej, 295 tokenów wyjściowych na żądanie - MiMo-V2.5 — 830 tokenów wejściowych, 71 500 w pamięci podręcznej, 295 tokenów wyjściowych na żądanie - MiMo-V2.5-Pro — 790 tokenów wejściowych, 86 000 w pamięci podręcznej, 305 tokenów wyjściowych na żądanie +- Omen Alpha — 300 tokenów wejściowych, 40 000 w pamięci podręcznej, 100 tokenów wyjściowych na żądanie Szacunki opierają się również na następujących cenach za 1M tokenów oraz miesięcznym użyciu dostępnym dla każdego modelu: @@ -201,6 +206,7 @@ Szacunki opierają się również na następujących cenach za 1M tokenów oraz | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Godziny Peak to 01:00-04:00 i 06:00-10:00 UTC od poniedziałku do piątku; wszystkie pozostałe godziny, w tym weekendy, to Off-Peak. [Dowiedz się więcej](https://api-docs.deepseek.com/quick_start/pricing/). @@ -224,7 +230,7 @@ Jeśli masz również środki na swoim saldzie Zen, możesz włączyć opcję ** ### Dlaczego niektóre modele mają niższe limity użycia -Go kosztuje $10/miesiąc, a naszym celem jest zapewnienie Ci użycia o wartości 6x większej niż ta kwota. +Go kosztuje $10/miesiąc, a w przypadku większości modeli naszym celem jest zapewnienie Ci użycia o wartości 6x większej niż ta kwota. W przypadku większości modeli jest to możliwe dzięki rabatom hurtowym i zarezerwowanej mocy obliczeniowej GPU. Uzyskane w ten sposób oszczędności przekazujemy Tobie w postaci mnożnika 6x. @@ -267,6 +273,7 @@ Możesz również uzyskać dostęp do modeli Go za pośrednictwem następującyc | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [ID modelu](/docs/config/#models) w Twojej konfiguracji OpenCode używa formatu `opencode-go/`. Na przykład dla Kimi K3 należy użyć @@ -314,6 +321,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | Niewykorzystywane | 0 dni | | Hy4 preview | Niewykorzystywane | 0 dni | | Hy3 | Niewykorzystywane | 0 dni | +| Omen Alpha | Niewykorzystywane | 0 dni | - **Grok 4.6:** ZDR wyłącza ważne funkcje API zależne od przechowywanych danych, w tym stanowy Responses API, Files and Collections oraz Batch API. [Dowiedz się więcej](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Dzienniki monitorowania nadużyć są generowane dla każdego użycia funkcji API i przechowywane przez maksymalnie 30 dni. [Dowiedz się więcej](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index c5272d2bbc1e..e0f7a27dd8fa 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -85,6 +85,7 @@ A lista atual de modelos inclui: - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** A lista de modelos pode mudar conforme testamos e adicionamos novos. @@ -104,12 +105,14 @@ Para evitar que sua conta seja sinalizada, verifique se a ferramenta que você e ## Limites de uso -O OpenCode Go inclui os seguintes limites: +O OpenCode Go inclui os seguintes limites base: - **Limite de 5 horas** — US$ 12 de uso - **Limite semanal** — US$ 30 de uso - **Limite mensal** — US$ 60 de uso +A cota efetiva varia conforme o modelo; consulte a tabela abaixo. + Os limites são definidos em valor em dólares. Isso significa que a sua contagem real de requisições depende do modelo que você usa. Modelos mais baratos como o MiMo-V2.5 permitem mais requisições, enquanto modelos de custo mais alto como o GLM-5.2 permitem menos. A tabela abaixo fornece uma contagem estimada de requisições com base nos padrões típicos de uso do Go: @@ -142,8 +145,9 @@ A tabela abaixo fornece uma contagem estimada de requisições com base nos padr | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -As estimativas se baseiam nos padrões de requisições observados: +As estimativas usam as seguintes quantidades de tokens por requisição; o uso real varia. - Grok 4.6 — 390 tokens de entrada, 32.500 em cache, 120 tokens de saída por requisição - GLM-5.3-Flash — 1.000 tokens de entrada, 55.000 em cache, 200 tokens de saída por requisição @@ -168,6 +172,7 @@ As estimativas se baseiam nos padrões de requisições observados: - Hy3 — 830 tokens de entrada, 71.500 em cache, 295 tokens de saída por requisição - MiMo-V2.5 — 830 tokens de entrada, 71.500 em cache, 295 tokens de saída por requisição - MiMo-V2.5-Pro — 790 tokens de entrada, 86.000 em cache, 305 tokens de saída por requisição +- Omen Alpha — 300 tokens de entrada, 40.000 em cache, 100 tokens de saída por requisição As estimativas também se baseiam nos seguintes preços por 1M tokens e no uso mensal incluído com cada modelo: @@ -207,6 +212,7 @@ As estimativas também se baseiam nos seguintes preços por 1M tokens e no uso m | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Os horários Peak são 01:00-04:00 e 06:00-10:00 UTC, de segunda a sexta-feira; todos os demais horários, incluindo os fins de semana, são Off-Peak. [Saiba mais](https://api-docs.deepseek.com/quick_start/pricing/). @@ -232,7 +238,7 @@ após você atingir os seus limites de uso em vez de bloquear as requisições. ### Por que alguns modelos têm um uso menor -Com o Go, você paga $10/mês, e nosso objetivo é oferecer 6x esse valor em uso. +Com o Go, você paga $10/mês e, para a maioria dos modelos, nosso objetivo é oferecer 6x esse valor em uso. Para a maioria dos modelos, conseguimos fazer isso por meio de descontos por volume e capacidade reservada de GPU. Repassamos essa economia a você por meio do multiplicador de 6x. @@ -275,6 +281,7 @@ Você também pode acessar os modelos do Go através dos seguintes endpoints de | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | O [ID do modelo](/docs/config/#models) na sua configuração do OpenCode usa o formato `opencode-go/`. Por exemplo, para o Kimi K3, você usaria @@ -322,6 +329,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | Não usado | 0 dias | | Hy4 preview | Não usado | 0 dias | | Hy3 | Não usado | 0 dias | +| Omen Alpha | Não usado | 0 dias | - **Grok 4.6:** O ZDR desativa recursos importantes da API que dependem de dados armazenados, incluindo a Responses API com estado, Files and Collections e a Batch API. [Saiba mais](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Logs de monitoramento de abuso são gerados para todo uso de recursos da API e retidos por até 30 dias. [Saiba mais](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx index b532b9d04e57..640e82877cf1 100644 --- a/packages/web/src/content/docs/ru/go.mdx +++ b/packages/web/src/content/docs/ru/go.mdx @@ -85,6 +85,7 @@ OpenCode Go работает так же, как и любой другой пр - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** Список моделей может меняться по мере того, как мы тестируем и добавляем новые. @@ -104,12 +105,14 @@ OpenCode Go предназначен для использования с [OpenC ## Лимиты использования -OpenCode Go включает следующие лимиты: +OpenCode Go включает следующие базовые лимиты: - **Лимит на 5 часов** — $12 использования - **Недельный лимит** — $30 использования - **Месячный лимит** — $60 использования +Эффективный лимит зависит от модели; см. таблицу ниже. + Лимиты определены в долларовом эквиваленте. Это означает, что ваше фактическое количество запросов зависит от используемой модели. Более дешевые модели, такие как MiMo-V2.5, позволяют делать больше запросов, в то время как более дорогие, такие как GLM-5.2, — меньше. В таблице ниже приведено примерное количество запросов на основе типичных сценариев использования Go: @@ -142,8 +145,9 @@ OpenCode Go включает следующие лимиты: | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -Эти оценки основаны на наблюдаемых показателях запросов: +В оценках используются следующие количества токенов на запрос; фактическое использование может отличаться. - Grok 4.6 — 390 входных, 32,500 кешированных, 120 выходных токенов на запрос - GLM-5.3-Flash — 1,000 входных, 55,000 кешированных, 200 выходных токенов на запрос @@ -168,6 +172,7 @@ OpenCode Go включает следующие лимиты: - Hy3 — 830 входных, 71,500 кешированных, 295 выходных токенов на запрос - MiMo-V2.5 — 830 входных, 71,500 кешированных, 295 выходных токенов на запрос - MiMo-V2.5-Pro — 790 входных, 86,000 кешированных, 305 выходных токенов на запрос +- Omen Alpha — 300 входных, 40 000 кешированных, 100 выходных токенов на запрос Эти оценки также основаны на следующих ценах за 1M токенов и месячном объеме использования, включенном для каждой модели: @@ -207,6 +212,7 @@ OpenCode Go включает следующие лимиты: | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Часы Peak с понедельника по пятницу: 01:00-04:00 и 06:00-10:00 UTC; все остальные часы, включая выходные, относятся к Off-Peak. [Подробнее](https://api-docs.deepseek.com/quick_start/pricing/). @@ -232,7 +238,7 @@ OpenCode Go включает следующие лимиты: ### Почему для некоторых моделей доступен меньший объем использования -С Go вы платите $10 в месяц, а мы стремимся предоставить вам объем использования моделей стоимостью в шесть раз больше этой суммы. +С Go вы платите $10 в месяц, а для большинства моделей мы стремимся предоставить вам объем использования стоимостью в шесть раз больше этой суммы. Для большинства моделей это возможно благодаря оптовым скидкам и зарезервированным мощностям GPU. Полученную экономию мы передаем вам за счет шестикратного множителя. @@ -275,6 +281,7 @@ OpenCode Go включает следующие лимиты: | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [ID модели](/docs/config/#models) в вашем конфиге OpenCode использует формат `opencode-go/`. Например, для Kimi K3 вам нужно @@ -322,6 +329,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | Не используется | 0 дней | | Hy4 preview | Не используется | 0 дней | | Hy3 | Не используется | 0 дней | +| Omen Alpha | Не используется | 0 дней | - **Grok 4.6:** ZDR отключает важные функции API, зависящие от сохраненных данных, включая Responses API с сохранением состояния, Files and Collections и Batch API. [Подробнее](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Журналы мониторинга злоупотреблений создаются при любом использовании функций API и хранятся до 30 дней. [Подробнее](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx index 4462b847fd9c..8cb32b6987e3 100644 --- a/packages/web/src/content/docs/th/go.mdx +++ b/packages/web/src/content/docs/th/go.mdx @@ -75,6 +75,7 @@ OpenCode Go ทำงานเหมือนกับผู้ให้บร - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** รายชื่อโมเดลอาจมีการเปลี่ยนแปลงเมื่อเราทำการทดสอบและเพิ่มโมเดลใหม่ๆ @@ -94,12 +95,14 @@ OpenCode Go ออกแบบมาเพื่อใช้กับ [OpenCode] ## Usage limits -OpenCode Go มีขีดจำกัดดังต่อไปนี้: +OpenCode Go มีขีดจำกัดพื้นฐานดังต่อไปนี้: - **ขีดจำกัดต่อ 5 ชั่วโมง** — การใช้งานมูลค่า $12 - **ขีดจำกัดรายสัปดาห์** — การใช้งานมูลค่า $30 - **ขีดจำกัดรายเดือน** — การใช้งานมูลค่า $60 +ขีดจำกัดการใช้งานที่มีผลแตกต่างกันไปตามโมเดล โปรดดูตารางด้านล่าง + ขีดจำกัดถูกกำหนดเป็นมูลค่าดอลลาร์ ซึ่งหมายความว่าจำนวน request จริงของคุณจะขึ้นอยู่กับโมเดลที่คุณใช้งาน โมเดลที่ราคาถูกกว่าอย่าง MiMo-V2.5 จะสามารถส่ง request ได้มากกว่า ในขณะที่โมเดลที่มีราคาสูงกว่าอย่าง GLM-5.2 จะส่งได้น้อยกว่า ตารางด้านล่างแสดงจำนวน request โดยประมาณตามรูปแบบการใช้งานปกติของ Go: @@ -132,8 +135,9 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -การประมาณการนี้อ้างอิงจากรูปแบบการใช้งาน request ที่สังเกตพบ: +การประมาณการใช้จำนวน token ต่อ request ดังต่อไปนี้ การใช้งานจริงอาจแตกต่างกัน - Grok 4.6 — 390 input, 32,500 cached, 120 output tokens ต่อ request - GLM-5.3-Flash — 1,000 input, 55,000 cached, 200 output tokens ต่อ request @@ -158,6 +162,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: - Hy3 — 830 input, 71,500 cached, 295 output tokens ต่อ request - MiMo-V2.5 — 830 input, 71,500 cached, 295 output tokens ต่อ request - MiMo-V2.5-Pro — 790 input, 86,000 cached, 305 output tokens ต่อ request +- Omen Alpha — 300 input, 40,000 cached, 100 output tokens ต่อ request การประมาณการนี้ยังอ้างอิงจากราคาต่อ 1M tokens และปริมาณการใช้งานรายเดือนที่รวมอยู่ในแต่ละโมเดลดังต่อไปนี้: @@ -197,6 +202,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** ช่วงเวลา Peak คือ 01:00-04:00 และ 06:00-10:00 UTC ตั้งแต่วันจันทร์ถึงวันศุกร์ ส่วนเวลาอื่นทั้งหมด รวมถึงวันหยุดสุดสัปดาห์ เป็น Off-Peak [ดูข้อมูลเพิ่มเติม](https://api-docs.deepseek.com/quick_start/pricing/) @@ -220,7 +226,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: ### เหตุใดบางโมเดลจึงมีปริมาณการใช้งานต่ำกว่า -สำหรับ Go คุณจ่าย $10/เดือน และเราตั้งเป้าที่จะมอบปริมาณการใช้งานให้คุณ 6 เท่าของจำนวนดังกล่าว +สำหรับ Go คุณจ่าย $10/เดือน และสำหรับโมเดลส่วนใหญ่ เราตั้งเป้าที่จะมอบปริมาณการใช้งานให้คุณ 6 เท่าของจำนวนดังกล่าว สำหรับโมเดลส่วนใหญ่ เราทำเช่นนี้ได้ผ่านส่วนลดสำหรับการซื้อจำนวนมากและความจุ GPU ที่จองไว้ จากนั้นเราจะส่งต่อส่วนลดเหล่านั้นให้คุณผ่านตัวคูณ 6 เท่า @@ -263,6 +269,7 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | [model id](/docs/config/#models) ใน OpenCode config ของคุณจะใช้รูปแบบ `opencode-go/` ตัวอย่างเช่น สำหรับ Kimi K3 คุณจะใช้ `opencode-go/kimi-k3` ใน config ของคุณ @@ -308,6 +315,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | ไม่นำไปใช้ | 0 วัน | | Hy4 preview | ไม่นำไปใช้ | 0 วัน | | Hy3 | ไม่นำไปใช้ | 0 วัน | +| Omen Alpha | ไม่นำไปใช้ | 0 วัน | - **Grok 4.6:** ZDR ปิดใช้งานฟีเจอร์ API สำคัญที่ต้องอาศัยข้อมูลที่จัดเก็บไว้ ซึ่งรวมถึง Responses API แบบมีสถานะ, Files and Collections และ Batch API [ดูข้อมูลเพิ่มเติม](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr) - **GPT 5.6 Luna:** ระบบจะสร้างบันทึกการตรวจสอบการใช้งานในทางที่ผิดสำหรับการใช้งานฟีเจอร์ API ทั้งหมด และเก็บรักษาไว้นานสูงสุด 30 วัน [ดูข้อมูลเพิ่มเติม](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring) diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx index 3d058ae4539d..38322ec36170 100644 --- a/packages/web/src/content/docs/tr/go.mdx +++ b/packages/web/src/content/docs/tr/go.mdx @@ -75,6 +75,7 @@ Mevcut model listesi şunları içerir: - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** Test edip yenilerini ekledikçe model listesi değişebilir. @@ -94,12 +95,14 @@ Hesabınızın işaretlenmemesi için kullandığınız aracın ## Kullanım limitleri -OpenCode Go aşağıdaki limitleri içerir: +OpenCode Go aşağıdaki temel limitleri içerir: - **5 saatlik limit** — 12$ kullanım - **Haftalık limit** — 30$ kullanım - **Aylık limit** — 60$ kullanım +Etkin kullanım limiti modele göre değişir; aşağıdaki tabloya bakın. + Limitler dolar değeri üzerinden belirlenmiştir. Bu, gerçek istek sayınızın kullandığınız modele bağlı olduğu anlamına gelir. MiMo-V2.5 gibi daha ucuz modeller daha fazla isteğe izin verirken, GLM-5.2 gibi yüksek maliyetli modeller daha azına izin verir. Aşağıdaki tablo, tipik Go kullanım modellerine dayalı tahmini bir istek sayısı sunmaktadır: @@ -132,8 +135,9 @@ Aşağıdaki tablo, tipik Go kullanım modellerine dayalı tahmini bir istek say | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -Tahminler, gözlemlenen istek modellerine dayanır: +Tahminler istek başına aşağıdaki token sayılarını kullanır; gerçek kullanım değişir. - Grok 4.6 — İstek başına 390 girdi, 32.500 önbelleğe alınmış, 120 çıktı token'ı - GLM-5.3-Flash — İstek başına 1.000 girdi, 55.000 önbelleğe alınmış, 200 çıktı token'ı @@ -158,6 +162,7 @@ Tahminler, gözlemlenen istek modellerine dayanır: - Hy3 — İstek başına 830 girdi, 71.500 önbelleğe alınmış, 295 çıktı token'ı - MiMo-V2.5 — İstek başına 830 girdi, 71.500 önbelleğe alınmış, 295 çıktı token'ı - MiMo-V2.5-Pro — İstek başına 790 girdi, 86.000 önbelleğe alınmış, 305 çıktı token'ı +- Omen Alpha — İstek başına 300 girdi, 40.000 önbelleğe alınmış, 100 çıktı token'ı Tahminler ayrıca 1M token başına aşağıdaki fiyatlara ve her modelle birlikte sunulan aylık kullanıma dayanır: @@ -197,6 +202,7 @@ Tahminler ayrıca 1M token başına aşağıdaki fiyatlara ve her modelle birlik | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak saatleri pazartesiden cumaya 01:00-04:00 ve 06:00-10:00 UTC'dir; hafta sonları dahil diğer tüm saatler Off-Peak'tir. [Daha fazla bilgi](https://api-docs.deepseek.com/quick_start/pricing/). @@ -220,7 +226,7 @@ Eğer Zen bakiyenizde kredileriniz varsa, konsoldan **Bakiye kullan (Use balance ### Bazı modellerin kullanımı neden daha düşük? -Go ile aylık 10$ ödersiniz ve size bunun 6 katı değerinde kullanım sunmayı hedefleriz. +Go ile aylık 10$ ödersiniz ve çoğu model için size bunun 6 katı değerinde kullanım sunmayı hedefleriz. Çoğu modelde bunu toplu indirimler ve ayrılmış GPU kapasitesi sayesinde mümkün kılıyoruz. Ardından bu tasarrufları 6 katlık çarpanla size aktarıyoruz. @@ -263,6 +269,7 @@ Go modellerine aşağıdaki API uç noktaları aracılığıyla da erişebilirsi | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | OpenCode yapılandırmanızdaki [model id](/docs/config/#models) formatı `opencode-go/` şeklindedir. Örneğin, Kimi K3 için yapılandırmanızda `opencode-go/kimi-k3` kullanmalısınız. @@ -308,6 +315,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | Kullanılmaz | 0 gün | | Hy4 preview | Kullanılmaz | 0 gün | | Hy3 | Kullanılmaz | 0 gün | +| Omen Alpha | Kullanılmaz | 0 gün | - **Grok 4.6:** ZDR, durum bilgisi tutan Responses API, Files and Collections ve Batch API dahil olmak üzere saklanan verilere bağlı önemli API özelliklerini devre dışı bırakır. [Daha fazla bilgi](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr). - **GPT 5.6 Luna:** Tüm API özelliklerinin kullanımı için kötüye kullanım izleme günlükleri oluşturulur ve 30 güne kadar saklanır. [Daha fazla bilgi](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring). diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx index bdfb25c741fc..3fe0c4d49c32 100644 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ b/packages/web/src/content/docs/zh-cn/go.mdx @@ -75,6 +75,7 @@ OpenCode Go 的工作方式与 OpenCode 中的其他提供商一样。 - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** 随着我们进行测试和添加新模型,该列表可能会发生变化。 @@ -94,12 +95,14 @@ OpenCode Go 适用于 [OpenCode](https://opencode.ai) 以及其他会产生类 ## 使用限制 -OpenCode Go 包含以下限制: +OpenCode Go 包含以下基础限制: - **5 小时限制** — 12 美元使用额度 - **每周限制** — 30 美元使用额度 - **每月限制** — 60 美元使用额度 +有效使用额度因模型而异;请参见下表。 + 限制以美元价值定义。这意味着你的实际请求数取决于你所使用的模型。较便宜的模型(如 MiMo-V2.5)允许更多请求,而较高成本的模型(如 GLM-5.2)允许较少请求。 下表提供了基于典型 Go 使用模式的预估请求数: @@ -132,8 +135,9 @@ OpenCode Go 包含以下限制: | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -预估值基于观察到的请求模式: +预估值采用以下每次请求的 token 数量;实际使用情况会有所不同。 - Grok 4.6 — 每次请求 390 个输入 token,32,500 个缓存 token,120 个输出 token - GLM-5.3-Flash — 每次请求 1,000 个输入 token,55,000 个缓存 token,200 个输出 token @@ -158,6 +162,7 @@ OpenCode Go 包含以下限制: - Qwen3.6 Plus — 每次请求 500 个输入 token,57,000 个缓存 token,190 个输出 token - Hy4 preview — 每次请求 830 个输入 token,71,500 个缓存 token,295 个输出 token - Hy3 — 每次请求 830 个输入 token,71,500 个缓存 token,295 个输出 token +- Omen Alpha — 每次请求 300 个输入 token,40,000 个缓存 token,100 个输出 token 预估值还基于以下每 1M tokens 的价格以及每个模型包含的每月使用额度: @@ -197,6 +202,7 @@ OpenCode Go 包含以下限制: | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 时段为周一至周五的 01:00-04:00 和 06:00-10:00 UTC;其他所有时段(包括周末)均为 Off-Peak。[了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 @@ -220,7 +226,7 @@ OpenCode Go 包含以下限制: ### 为什么某些模型的使用额度较低 -使用 Go 时,你每月支付 $10,而我们的目标是为你提供 6 倍于此的使用额度。 +使用 Go 时,你每月支付 $10;对于大多数模型,我们的目标是提供 6 倍于此的使用额度。 对于大多数模型,我们通过批量折扣和预留 GPU 容量来实现这一目标。然后,我们通过 6 倍乘数将这些节省的成本回馈给你。 @@ -263,6 +269,7 @@ OpenCode Go 包含以下限制: | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | 你的 OpenCode 配置中的 [模型 ID](/docs/config/#models) 使用 `opencode-go/` 格式。例如,对于 Kimi K3,你将在配置中使用 `opencode-go/kimi-k3`。 @@ -308,6 +315,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | 不使用 | 0 天 | | Hy4 preview | 不使用 | 0 天 | | Hy3 | 不使用 | 0 天 | +| Omen Alpha | 不使用 | 0 天 | - **Grok 4.6:** ZDR 会禁用依赖所存储数据的重要 API 功能,包括有状态的 Responses API、Files and Collections 和 Batch API。[了解更多](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 - **GPT 5.6 Luna:** 所有 API 功能的使用都会生成滥用监控日志,并最多保留 30 天。[了解更多](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring)。 diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx index ab5aa97fa99b..4ecbfda86088 100644 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ b/packages/web/src/content/docs/zh-tw/go.mdx @@ -75,6 +75,7 @@ OpenCode Go 的運作方式與 OpenCode 中的任何其他供應商相同。 - **DeepSeek V4 Flash Vision Exp** - **Hy4 preview** - **Hy3** +- **Omen Alpha** 隨著我們測試並加入新模型,模型清單可能會有所變動。 @@ -94,12 +95,14 @@ OpenCode Go 適用於 [OpenCode](https://opencode.ai) 以及其他會產生類 ## 使用限制 -OpenCode Go 包含以下限制: +OpenCode Go 包含以下基準限制: - **5 小時限制** — $12 美元的使用量 - **每週限制** — $30 美元的使用量 - **每月限制** — $60 美元的使用量 +有效使用額度因模型而異;請參閱下表。 + 限制是以美元價值來定義。這意味著您的實際請求次數取決於您使用的模型。像 MiMo-V2.5 這樣較便宜的模型允許更多的請求次數,而像 GLM-5.2 這樣成本較高的模型則允許較少次數。 下表提供了基於典型 Go 使用模式的預估請求次數: @@ -132,8 +135,9 @@ OpenCode Go 包含以下限制: | DeepSeek V4 Flash Vision Exp | 3,800 | 9,450 | 18,900 | | Hy4 preview | 1,350 | 3,380 | 6,770 | | Hy3 | 4,300 | 10,750 | 21,500 | +| Omen Alpha | 11,600 | 29,000 | 57,900 | -這些預估值是基於觀察到的請求模式: +這些預估值採用以下每次請求的 token 數量;實際使用情況會有所不同。 - Grok 4.6 — 每次請求 390 個輸入 token、32,500 個快取 token、120 個輸出 token - GLM-5.3-Flash — 每次請求 1,000 個輸入 token、55,000 個快取 token、200 個輸出 token @@ -158,6 +162,7 @@ OpenCode Go 包含以下限制: - Hy3 — 每次請求 830 個輸入 token、71,500 個快取 token、295 個輸出 token - MiMo-V2.5 — 每次請求 830 個輸入 token、71,500 個快取 token、295 個輸出 token - MiMo-V2.5-Pro — 每次請求 790 個輸入 token、86,000 個快取 token、305 個輸出 token +- Omen Alpha — 每次請求 300 個輸入 token、40,000 個快取 token、100 個輸出 token 這些預估值也基於以下每 1M tokens 的價格,以及每個模型所包含的每月使用量: @@ -197,6 +202,7 @@ OpenCode Go 包含以下限制: | DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | | Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | | Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Peak 時段為週一至週五的 01:00-04:00 和 06:00-10:00 UTC;其他所有時段(包括週末)均為 Off-Peak。[了解更多](https://api-docs.deepseek.com/quick_start/pricing/)。 @@ -220,7 +226,7 @@ OpenCode Go 包含以下限制: ### 為什麼部分模型的使用量較低 -使用 Go 時,您每月支付 $10,而我們的目標是提供相當於 6 倍費用的使用量。 +使用 Go 時,您每月支付 $10;對大多數模型而言,我們的目標是提供相當於 6 倍費用的使用量。 對大多數模型而言,我們透過大量採購折扣和預留 GPU 容量來達成此目標,再以 6 倍乘數將節省的成本回饋給您。 @@ -263,6 +269,7 @@ OpenCode Go 包含以下限制: | Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | | Hy4 preview | hy4-preview | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Hy3 | hy3 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| Omen Alpha | omen-alpha | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | 您的 OpenCode 設定中的 [model id](/docs/config/#models) 使用 `opencode-go/` 格式。例如,Kimi K3 在設定中應使用 `opencode-go/kimi-k3`。 @@ -308,6 +315,7 @@ https://opencode.ai/zen/go/v1/models | DeepSeek V4 Flash Vision Exp | 不使用 | 0 天 | | Hy4 preview | 不使用 | 0 天 | | Hy3 | 不使用 | 0 天 | +| Omen Alpha | 不使用 | 0 天 | - **Grok 4.6:** ZDR 會停用依賴儲存資料的重要 API 功能,包括具狀態的 Responses API、Files and Collections 與 Batch API。[了解更多](https://docs.x.ai/developers/faq/security#what-is-zero-data-retention-zdr)。 - **GPT 5.6 Luna:** 所有 API 功能的使用都會產生濫用監控日誌,並保留最多 30 天。[了解更多](https://developers.openai.com/api/docs/guides/your-data#data-retention-controls-for-abuse-monitoring)。 From dd417f1a6b9264a2e70ffd16ccfce41dcd3bb86f Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Fri, 4 Sep 2026 05:09:10 +0000 Subject: [PATCH 129/185] chore: generate --- packages/web/src/content/docs/es/go.mdx | 72 +++++++++++----------- packages/web/src/content/docs/pt-br/go.mdx | 72 +++++++++++----------- 2 files changed, 72 insertions(+), 72 deletions(-) diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index 50e19568b90e..1d8e543dcc28 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -176,42 +176,42 @@ Las estimaciones usan las siguientes cantidades de tokens por petición; el uso Las estimaciones también se basan en los siguientes precios por 1M tokens y en el uso mensual incluido con cada modelo: -| Modelo | Entrada | Salida | Lectura en caché | Escritura en caché | Uso | -| --------------------------------------- | ------- | ------ | ---------------- | ------------------ | --- | -| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | -| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | -| GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | -| GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | -| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | -| GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | -| Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | -| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | -| MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | -| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | -| Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | -| Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | -| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | $60 | -| DeepSeek V4 Pro (Off-Peak) | $0.66 | $1.98 | $0.022 | - | $15 | -| DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | $15 | -| DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $30 | -| DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | -| DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | -| DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | -| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | -| Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Modelo | Entrada | Salida | Lectura en caché | Escritura en caché | Uso | +| --------------------------------------- | ------- | ------ | ---------------- | ------------------ | ---- | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | +| GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | +| GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | +| GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | +| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | +| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | +| Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | +| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | +| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | +| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | +| MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | +| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | +| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | +| Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | +| Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | +| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | +| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | +| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | +| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | $60 | +| DeepSeek V4 Pro (Off-Peak) | $0.66 | $1.98 | $0.022 | - | $15 | +| DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | $15 | +| DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $30 | +| DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | +| DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | +| DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | +| Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Las horas Peak son 01:00-04:00 y 06:00-10:00 UTC, de lunes a viernes; todas las demás horas, incluidos los fines de semana, son Off-Peak. [Más información](https://api-docs.deepseek.com/quick_start/pricing/). diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index e0f7a27dd8fa..197216174507 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -176,42 +176,42 @@ As estimativas usam as seguintes quantidades de tokens por requisição; o uso r As estimativas também se baseiam nos seguintes preços por 1M tokens e no uso mensal incluído com cada modelo: -| Modelo | Entrada | Saída | Leitura em cache | Escrita em cache | Uso | -| --------------------------------------- | ------- | ------ | ---------------- | ---------------- | --- | -| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | -| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | -| GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | -| GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | -| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | -| GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | -| Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | -| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | -| MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | -| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | -| Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | -| Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | -| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | $60 | -| DeepSeek V4 Pro (Off-Peak) | $0.66 | $1.98 | $0.022 | - | $15 | -| DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | $15 | -| DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $30 | -| DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | -| DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | -| DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | -| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | -| Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | +| Modelo | Entrada | Saída | Leitura em cache | Escrita em cache | Uso | +| --------------------------------------- | ------- | ------ | ---------------- | ---------------- | ---- | +| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | $15 | +| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | $15 | +| GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | $15 | +| GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | $15 | +| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | $15 | +| GLM-5.3 | $1.40 | $4.40 | $0.26 | - | $15 | +| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | $60 | +| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | $60 | +| Kimi K3 | $3.00 | $15.00 | $0.30 | - | $15 | +| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | $60 | +| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | $60 | +| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | $60 | +| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | $60 | +| MiMo V2.5 Pro | $0.435 | $0.87 | $0.003625 | - | $15 | +| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | $60 | +| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | $60 | +| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | +| Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | $60 | +| Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | $15 | +| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | $30 | +| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | $30 | +| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | $60 | +| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | $60 | +| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | $60 | +| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | $60 | +| DeepSeek V4 Pro (Off-Peak) | $0.66 | $1.98 | $0.022 | - | $15 | +| DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | $15 | +| DeepSeek V4 Flash (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $30 | +| DeepSeek V4 Flash (Peak) | $0.44 | $1.32 | $0.014 | - | $30 | +| DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.22 | $0.66 | $0.007 | - | $15 | +| DeepSeek V4 Flash Vision Exp (Peak) | $0.44 | $1.32 | $0.014 | - | $15 | +| Hy4 preview | $0.834 | $2.501 | $0.042 | - | $30 | +| Hy3 | $0.14 | $0.58 | $0.035 | - | $60 | | Omen Alpha | $0.20 | $0.66 | $0.04 | - | $100 | **DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro:** Os horários Peak são 01:00-04:00 e 06:00-10:00 UTC, de segunda a sexta-feira; todos os demais horários, incluindo os fins de semana, são Off-Peak. [Saiba mais](https://api-docs.deepseek.com/quick_start/pricing/). From 03cb6324352b5e09477e56324aaaefb9e149b298 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Fri, 4 Sep 2026 00:34:37 -0500 Subject: [PATCH 130/185] test(core): disable npm audits in the test preload (#47222) Co-authored-by: rekram1-node --- packages/core/test/preload.test.ts | 5 +++++ packages/core/test/preload.ts | 1 + 2 files changed, 6 insertions(+) create mode 100644 packages/core/test/preload.test.ts diff --git a/packages/core/test/preload.test.ts b/packages/core/test/preload.test.ts new file mode 100644 index 000000000000..cd3130788642 --- /dev/null +++ b/packages/core/test/preload.test.ts @@ -0,0 +1,5 @@ +import { expect, test } from "bun:test" + +test("disables public npm security audits", () => { + expect(process.env.NPM_CONFIG_AUDIT).toBe("false") +}) diff --git a/packages/core/test/preload.ts b/packages/core/test/preload.ts index 39b237d70a42..7a2a3d2bd246 100644 --- a/packages/core/test/preload.ts +++ b/packages/core/test/preload.ts @@ -1,5 +1,6 @@ import path from "path" process.env.OPENCODE_DB = ":memory:" +process.env.NPM_CONFIG_AUDIT = "false" process.env.OPENCODE_MODELS_PATH = path.join(import.meta.dir, "plugin", "fixtures", "models-dev.json") process.env.OPENCODE_DISABLE_MODELS_FETCH = "true" From 70f74112e3f4a33ea1af8209c979a5060d7d2a36 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Fri, 4 Sep 2026 04:22:48 -0400 Subject: [PATCH 131/185] fix(stats): keep omen-alpha under unknown provider (#47248) Co-authored-by: fwang <83515+fwang@users.noreply.github.com> --- .../stats/core/src/domain/inference.test.ts | 24 +++++++++++++++++++ packages/stats/core/src/domain/inference.ts | 2 ++ .../core/src/domain/model-normalization.ts | 6 ++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/stats/core/src/domain/inference.test.ts b/packages/stats/core/src/domain/inference.test.ts index 20dbe8620558..4f51599d7129 100644 --- a/packages/stats/core/src/domain/inference.test.ts +++ b/packages/stats/core/src/domain/inference.test.ts @@ -36,6 +36,8 @@ describe("inference stat normalization", () => { expect(modelAuthor("nemotron-3-super-free")).toBe("nvidia") expect(modelAuthor("qwen3.7-max")).toBe("qwen") expect(modelAuthor("alpha-gpt-next")).toBeUndefined() + expect(modelAuthor("omen-alpha")).toBe("unknown") + expect(modelAuthor("OMEN-ALPHA-free:global")).toBe("unknown") }) test("uses provider.model to resolve opencode route providers", () => { @@ -49,6 +51,22 @@ describe("inference stat normalization", () => { expect(statProvider("unknown", "", "custom-provider")).toBe("custom-provider") }) + test("keeps stealth model usage without exposing the route provider", () => { + expect(statProvider("omen-alpha", "gpt-test-model", "test-provider")).toBe("unknown") + expect(statProvider("OMEN-ALPHA-free:global", "gpt-test-model", "test-provider")).toBe("unknown") + expect(statProvider("omen-alpha", "", "test-provider")).toBe("unknown") + + const row = { ...aggregate("omen-alpha", "test-provider"), provider_model: "gpt-test-model" } + expect(toModelAggregate(row)).toMatchObject([{ model: "omen-alpha", provider: "unknown", requests: 1 }]) + expect(toProviderAggregate(row)).toMatchObject([{ provider: "unknown", requests: 1 }]) + expect(toGeoAggregate({ ...row, country: "US" })).toMatchObject([ + { model: "omen-alpha", provider: "unknown", country: "US", requests: 1 }, + ]) + expect(toRetentionAggregate({ ...row, cohort_date: "2026-08-10", eligible_users: "12" })).toMatchObject([ + { model: "omen-alpha", provider: "unknown", eligibleUsers: 12 }, + ]) + }) + test("merges renamed models under their current name", () => { expect(statModel("deepseek-v4-flash-0731", "")).toBe("deepseek-v4-flash") expect(statModel("deepseek-v4-flash-0731-free", "")).toBe("deepseek-v4-flash") @@ -124,6 +142,10 @@ describe("inference stat normalization", () => { }) expect(queries).toHaveLength(8) + queries.forEach((query) => { + expect(query).toContain("WHERE lower(model) NOT IN ('alpha-gpt-next')") + expect(query).toContain("CASE\n WHEN lower(model) IN ('omen-alpha') THEN 'unknown'\n") + }) expect(queries[0]).toContain("'week' AS grain") expect(queries[0]).toContain("'2026-W33' AS period_key") expect(queries[2]).toContain("'2026-08-10' AS period_key") @@ -186,6 +208,8 @@ describe("inference stat normalization", () => { expect(queries).toHaveLength(1) expect(queries[0]?.cohortDates).toEqual(["2026-08-10", "2026-08-17"]) expect(queries[0]?.query).toContain("AND product = 'go'") + expect(queries[0]?.query).toContain("AND lower(model) NOT IN ('alpha-gpt-next')") + expect(queries[0]?.query).toContain("CASE\n WHEN lower(model) IN ('omen-alpha') THEN 'unknown'\n") expect(queries[0]?.query).toContain("COUNT(*) AS model_requests") expect(queries[0]?.query).toContain("SUM(model_requests) AS total_requests") expect(queries[0]?.query).toContain("MAX(model_requests) AS max_model_requests") diff --git a/packages/stats/core/src/domain/inference.ts b/packages/stats/core/src/domain/inference.ts index 3767b7ba4d03..bdba90b11f34 100644 --- a/packages/stats/core/src/domain/inference.ts +++ b/packages/stats/core/src/domain/inference.ts @@ -8,6 +8,7 @@ import { MODEL_AUTHOR_RULES, MODEL_NAME_ALIASES, RETIRED_STAT_PROVIDERS, + STEALTH_MODELS, statModel, statProvider, } from "./model-normalization" @@ -483,6 +484,7 @@ function freeTierSql(tier: string, model: string) { function statProviderSql(model: string, providerModel: string, provider: string) { return `CASE + WHEN lower(${model}) IN (${[...STEALTH_MODELS].map(sqlString).join(", ")}) THEN 'unknown' ${MODEL_AUTHOR_RULES.map((item) => ` WHEN strpos(lower(${providerModel}), ${sqlString(item.match)}) > 0 THEN ${sqlString(item.author)}`).join("\n")} ${MODEL_AUTHOR_RULES.map((item) => ` WHEN strpos(lower(${model}), ${sqlString(item.match)}) > 0 THEN ${sqlString(item.author)}`).join("\n")} WHEN ${provider} <> '' AND lower(${provider}) NOT IN (${RETIRED_STAT_PROVIDERS.map(sqlString).join(", ")}) THEN ${provider} diff --git a/packages/stats/core/src/domain/model-normalization.ts b/packages/stats/core/src/domain/model-normalization.ts index 6f2edb117d0f..cbceca348671 100644 --- a/packages/stats/core/src/domain/model-normalization.ts +++ b/packages/stats/core/src/domain/model-normalization.ts @@ -14,6 +14,7 @@ export const MODEL_AUTHOR_RULES = [ { match: "qwen", author: "qwen" }, ] as const export const EXCLUDED_MODELS = new Set(["alpha-gpt-next"]) +export const STEALTH_MODELS = new Set(["omen-alpha"]) export const FREE_MODELS = new Set(["gpt-5-nano", "grok-code", "big-pickle"]) export const MODEL_NAME_ALIASES: Record = { "deepseek-v4-flash-0731": "deepseek-v4-flash", @@ -47,7 +48,10 @@ export function statProvider( providerModel: string | undefined, provider: string | undefined, ) { - const modelAuthorValue = modelAuthor(statModel(model, providerModel)) + const normalized = statModel(model, providerModel) + if (STEALTH_MODELS.has(normalized)) return "unknown" + + const modelAuthorValue = modelAuthor(normalized) if (!modelAuthorValue) return undefined const providerModelAuthor = modelAuthor(providerModel) From 475b408119fc1dad4ecabbc37ed9e0fe45d00df3 Mon Sep 17 00:00:00 2001 From: Jack Date: Fri, 4 Sep 2026 18:41:12 +0800 Subject: [PATCH 132/185] fix(console): backport usage reset boundary fix to dev (#47267) --- .../app/src/routes/zen/util/handler.ts | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index b1aa6fe74a67..87fc93e7a928 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -1078,6 +1078,8 @@ export async function handler( authInfo = authInfo! const cost = centsToMicroCents(totalCostInCent) + // Keep period bounds and persisted timestamps on one snapshot when a queued write crosses a reset boundary. + const trackedAt = new Date() // For hot workspaces, batch balance/usage updates through Redis to avoid // row-level lock contention on BillingTable/UserTable. Returns the amount @@ -1118,7 +1120,7 @@ export async function handler( if (billingSource === "subscription") { const plan = authInfo.billing.subscription!.plan const black = BlackData.getLimits({ plan }) - const week = getWeekBounds(new Date()) + const week = getWeekBounds(trackedAt) const rollingWindowSeconds = black.rollingWindow * 3600 return [ db @@ -1126,11 +1128,17 @@ export async function handler( .set({ fixedUsage: sql` CASE + WHEN ${SubscriptionTable.timeFixedUpdated} >= ${week.end} THEN ${SubscriptionTable.fixedUsage} WHEN ${SubscriptionTable.timeFixedUpdated} >= ${week.start} THEN ${SubscriptionTable.fixedUsage} + ${cost} ELSE ${cost} END `, - timeFixedUpdated: sql`now()`, + timeFixedUpdated: sql` + CASE + WHEN ${SubscriptionTable.timeFixedUpdated} > ${trackedAt} THEN ${SubscriptionTable.timeFixedUpdated} + ELSE ${trackedAt} + END + `, rollingUsage: sql` CASE WHEN UNIX_TIMESTAMP(${SubscriptionTable.timeRollingUpdated}) >= UNIX_TIMESTAMP(now()) - ${rollingWindowSeconds} THEN ${SubscriptionTable.rollingUsage} + ${cost} @@ -1154,8 +1162,8 @@ export async function handler( } if (billingSource === "lite") { const lite = LiteData.getLimits() - const week = getWeekBounds(new Date()) - const month = getMonthlyBounds(new Date(), authInfo.lite!.timeCreated) + const week = getWeekBounds(trackedAt) + const month = getMonthlyBounds(trackedAt, authInfo.lite!.timeCreated) const rollingWindowSeconds = lite.rollingWindow * 3600 const quotaCost = Math.round(cost * modelInfo.costMultiplier) return [ @@ -1164,18 +1172,30 @@ export async function handler( .set({ monthlyUsage: sql` CASE + WHEN ${LiteTable.timeMonthlyUpdated} >= ${month.end} THEN ${LiteTable.monthlyUsage} WHEN ${LiteTable.timeMonthlyUpdated} >= ${month.start} THEN ${LiteTable.monthlyUsage} + ${quotaCost} ELSE ${quotaCost} END `, - timeMonthlyUpdated: sql`now()`, + timeMonthlyUpdated: sql` + CASE + WHEN ${LiteTable.timeMonthlyUpdated} > ${trackedAt} THEN ${LiteTable.timeMonthlyUpdated} + ELSE ${trackedAt} + END + `, weeklyUsage: sql` CASE + WHEN ${LiteTable.timeWeeklyUpdated} >= ${week.end} THEN ${LiteTable.weeklyUsage} WHEN ${LiteTable.timeWeeklyUpdated} >= ${week.start} THEN ${LiteTable.weeklyUsage} + ${quotaCost} ELSE ${quotaCost} END `, - timeWeeklyUpdated: sql`now()`, + timeWeeklyUpdated: sql` + CASE + WHEN ${LiteTable.timeWeeklyUpdated} > ${trackedAt} THEN ${LiteTable.timeWeeklyUpdated} + ELSE ${trackedAt} + END + `, rollingUsage: sql` CASE WHEN UNIX_TIMESTAMP(${LiteTable.timeRollingUpdated}) >= UNIX_TIMESTAMP(now()) - ${rollingWindowSeconds} THEN ${LiteTable.rollingUsage} + ${quotaCost} From 3f311390647337d0ddaeeb9be45ede8e5f468209 Mon Sep 17 00:00:00 2001 From: Victor Navarro Date: Fri, 4 Sep 2026 12:42:58 +0200 Subject: [PATCH 133/185] feat(console): route migrated BYOK through provider connections (#47266) --- .../console/app/src/lib/inference-proxy.ts | 51 ++++++++++++++++--- packages/console/app/src/middleware.ts | 8 --- .../app/src/routes/zen/util/handler.ts | 22 +++++++- .../console/app/src/routes/zen/v1/models.ts | 36 ++++++++++++- 4 files changed, 100 insertions(+), 17 deletions(-) diff --git a/packages/console/app/src/lib/inference-proxy.ts b/packages/console/app/src/lib/inference-proxy.ts index 814cc94552db..7de73a961ac8 100644 --- a/packages/console/app/src/lib/inference-proxy.ts +++ b/packages/console/app/src/lib/inference-proxy.ts @@ -1,16 +1,24 @@ import { Resource } from "@opencode-ai/console-resource" -import { Database, eq } from "@opencode-ai/console-core/drizzle/index.js" +import { and, Database, eq, isNull, sql } from "@opencode-ai/console-core/drizzle/index.js" import { KeyTable } from "@opencode-ai/console-core/schema/key.sql.js" +import { ProviderTable } from "@opencode-ai/console-core/schema/provider.sql.js" import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" const paths: Record = { - "GET /zen/v1/models": "/v1/models", "POST /zen/v1/chat/completions": "/openai/v1/chat/completions", "POST /zen/v1/responses": "/openai/v1/responses", "POST /zen/v1/messages": "/anthropic/v1/messages", } -export async function proxyInference(request: Request, clientIP?: string): Promise { +export async function proxyInference( + request: Request, + generation: { + provider?: "openai" | "anthropic" | "google" + /** The provider's native model ID, not the public Zen alias. */ + model?: string + body: (model?: string) => ReadableStream + }, +): Promise { const url = new URL(request.url) const path = paths[`${request.method} ${url.pathname}`] ?? @@ -30,23 +38,52 @@ export async function proxyInference(request: Request, clientIP?: string): Promi // Routing only; the destination owns authentication and revocation after cutover. const workspace = await Database.use((tx) => tx - .select({ migratedAt: WorkspaceTable.migrated_at }) + .select({ + id: WorkspaceTable.id, + migratedAt: WorkspaceTable.migrated_at, + provider: ProviderTable.provider, + }) .from(KeyTable) .innerJoin(WorkspaceTable, eq(WorkspaceTable.id, KeyTable.workspaceID)) + .leftJoin( + ProviderTable, + generation.provider + ? and( + eq(ProviderTable.workspaceID, KeyTable.workspaceID), + eq(ProviderTable.provider, generation.provider), + isNull(ProviderTable.timeDeleted), + sql`length(${ProviderTable.credentials}) > 0`, + ) + : sql`false`, + ) .where(eq(KeyTable.key, key)) .limit(1) .then((rows) => rows[0]), ) if (!workspace?.migratedAt) return undefined + const model = workspace.provider ? generation.model : undefined + if (workspace.provider && !model) throw new Error("Legacy BYOK model mapping is unavailable") const destination = new URL(Resource.ConsoleMigration.inferenceUrl) - destination.pathname = `${destination.pathname.replace(/\/$/, "")}${path}` + // Imported connections must use this same workspace/provider-derived ID. + const target = model + ? `/custom/conn_${workspace.id.slice(4)}_${workspace.provider}${ + path.startsWith("/google/") + ? `/models/${encodeURIComponent(model)}${url.pathname.slice(url.pathname.lastIndexOf(":"))}` + : url.pathname.slice("/zen/v1".length) + }` + : path + destination.pathname = `${destination.pathname.replace(/\/$/, "")}${target}` destination.search = url.search destination.hash = "" - const forwarded = new Request(destination, request) + // Model extraction has already read part of the body; forward its replay stream. + const forwarded = new Request( + destination, + new Request(request, { method: request.method, body: generation.body(model) }), + ) forwarded.headers.set("authorization", `Bearer ${key}`) - const ip = request.headers.get("cf-connecting-ip") ?? clientIP + const ip = request.headers.get("cf-connecting-ip") if (ip) forwarded.headers.set("x-real-ip", ip) const requestID = request.headers.get("x-opencode-request-id") ?? request.headers.get("x-opencode-request") if (requestID) forwarded.headers.set("x-opencode-request-id", requestID) diff --git a/packages/console/app/src/middleware.ts b/packages/console/app/src/middleware.ts index e768afa4f37f..614cc87bcf00 100644 --- a/packages/console/app/src/middleware.ts +++ b/packages/console/app/src/middleware.ts @@ -2,7 +2,6 @@ import { createMiddleware } from "@solidjs/start/middleware" import { LOCALE_HEADER, cookie, fromPathname, strip } from "~/lib/language" import { normalizeReferralCode, referralCookie } from "~/lib/referral-invite" import { sanitizeServerActionRequest } from "~/lib/server-action" -import { proxyInference } from "~/lib/inference-proxy" export default createMiddleware({ async onRequest(event) { @@ -20,12 +19,5 @@ export default createMiddleware({ const referralCode = normalizeReferralCode(url.searchParams.get("ref")) if (referralCode) event.response.headers.append("set-cookie", referralCookie(referralCode)) - - return proxyInference(event.request, event.clientAddress).catch(() => - Response.json( - { error: { type: "api_error", message: "Inference routing is unavailable. Please retry later." } }, - { status: 503, headers: { "Cache-Control": "no-store" } }, - ), - ) }, }) diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index 87fc93e7a928..adbfdecc890f 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -50,6 +50,7 @@ import { countryFromRequest, isModelCountryRestricted } from "~/lib/request-coun import { isPeakPricing } from "./pricing" import { prepareRequestBody } from "./requestBody" import { requiresGoTrainingConsent } from "./trainingConsent" +import { proxyInference } from "~/lib/inference-proxy" type ZenData = Awaited> type PreparedBody = Awaited> @@ -100,6 +101,26 @@ export async function handler( const ip = rawIp.includes(":") ? rawIp.split(":").slice(0, 4).join(":") : rawIp const rawZenApiKey = opts.parseApiKey(input.request.headers) const zenApiKey = rawZenApiKey === "public" ? undefined : rawZenApiKey + const zenData = ZenData.list(opts.modelList) + if (opts.modelList === "full" && model) { + // Read routing metadata without running legacy model, auth, or balance checks. + const configured = zenData.models[model] + const entry = Array.isArray(configured) + ? configured.find((entry) => entry.formatFilter === opts.format) + : configured + const response = await proxyInference(input.request, { + provider: entry?.byokProvider, + model: entry?.providers.find((provider) => provider.id === entry.byokProvider)?.model, + body: (providerModel) => requestBody?.stream(providerModel ?? model, false) ?? body, + }).catch(() => { + void (requestBody ? requestBody.cancel() : body.cancel()).catch(() => {}) + return Response.json( + { error: { type: "api_error", message: "Inference routing is unavailable. Please retry later." } }, + { status: 503, headers: { "Cache-Control": "no-store" } }, + ) + }) + if (response) return response + } const sessionId = input.request.headers.get("x-opencode-session") ?? "" const requestId = input.request.headers.get("x-opencode-request") ?? "" const ocClient = input.request.headers.get("x-opencode-client") ?? "" @@ -112,7 +133,6 @@ export async function handler( user_agent: userAgent, "model.tier": opts.modelList === "full" ? "zen" : "go", }) - const zenData = ZenData.list(opts.modelList) const modelInfo = validateModel(zenData, model) const country = countryFromRequest(input.request) if (isModelCountryRestricted(modelInfo.id, country)) throw new RegionError(t("zen.api.error.countryNotAllowed")) diff --git a/packages/console/app/src/routes/zen/v1/models.ts b/packages/console/app/src/routes/zen/v1/models.ts index 68c3cac69467..262a1bb349fe 100644 --- a/packages/console/app/src/routes/zen/v1/models.ts +++ b/packages/console/app/src/routes/zen/v1/models.ts @@ -5,14 +5,25 @@ import { KeyTable } from "@opencode-ai/console-core/schema/key.sql.js" import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" import { ModelTable } from "@opencode-ai/console-core/schema/model.sql.js" import { buildOptionsResponse, buildModelsResponse } from "~/routes/zen/util/modelsHandler" +import { Resource } from "@opencode-ai/console-resource" export async function OPTIONS(_input: APIEvent) { return buildOptionsResponse() } export async function GET(input: APIEvent) { + const apiKey = input.request.headers.get("authorization")?.split(" ")[1] + if (apiKey && apiKey !== "public") { + const response = await proxyModels(input, apiKey).catch(() => + Response.json( + { error: { type: "api_error", message: "Inference routing is unavailable. Please retry later." } }, + { status: 503, headers: { "Cache-Control": "no-store" } }, + ), + ) + if (response) return response + } + const disabledModels = await (() => { - const apiKey = input.request.headers.get("authorization")?.split(" ")[1] if (!apiKey) return [] as string[] return Database.use((tx) => @@ -34,3 +45,26 @@ export async function GET(input: APIEvent) { return buildModelsResponse(models) } + +async function proxyModels(input: APIEvent, apiKey: string) { + // No legacy revocation or model-policy checks before destination authentication. + const workspace = await Database.use((tx) => + tx + .select({ migratedAt: WorkspaceTable.migrated_at }) + .from(KeyTable) + .innerJoin(WorkspaceTable, eq(WorkspaceTable.id, KeyTable.workspaceID)) + .where(eq(KeyTable.key, apiKey)) + .limit(1) + .then((rows) => rows[0]), + ) + if (!workspace?.migratedAt) return undefined + + const destination = new URL(Resource.ConsoleMigration.inferenceUrl) + destination.pathname = `${destination.pathname.replace(/\/$/, "")}/v1/models` + destination.search = new URL(input.request.url).search + destination.hash = "" + const headers = new Headers({ authorization: `Bearer ${apiKey}` }) + const ip = input.request.headers.get("cf-connecting-ip") + if (ip) headers.set("x-real-ip", ip) + return fetch(destination, { headers, signal: input.request.signal, redirect: "manual" }) +} From 4178fd74f126ce791bcf8fc8c73d6e5de947ae6a Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Fri, 4 Sep 2026 07:32:58 -0500 Subject: [PATCH 134/185] fix(stats): hide stealth model providers --- .../src/component/model-compare-detail.tsx | 50 ++++++--- .../stats/app/src/routes/[lab]/[model].tsx | 103 +++++++++++------- .../stats/app/src/routes/compare-cards.tsx | 35 +++--- .../stats/app/src/routes/compare-radar.tsx | 4 +- packages/stats/app/src/routes/index.css | 8 ++ packages/stats/app/src/routes/index.tsx | 49 +++++++-- .../stats/app/src/routes/model-catalog.ts | 10 ++ 7 files changed, 176 insertions(+), 83 deletions(-) diff --git a/packages/stats/app/src/component/model-compare-detail.tsx b/packages/stats/app/src/component/model-compare-detail.tsx index 4966d5d45314..fa82ea4952db 100644 --- a/packages/stats/app/src/component/model-compare-detail.tsx +++ b/packages/stats/app/src/component/model-compare-detail.tsx @@ -24,6 +24,8 @@ import { findModelCatalogEntry, formatCatalogLabName, getModelCatalog, + isKnownCatalogLab, + isProviderlessLab, type ModelCatalog, type ModelCatalogEntry, } from "../routes/model-catalog" @@ -71,7 +73,7 @@ const comparisonModelLimit = 6 type ComparisonModel = { name: string lab: string - labName: string + labName?: string slug: string catalog: ModelCatalogEntry | null stats: StatsModelComparisonEntry | null @@ -159,13 +161,19 @@ export default function ModelCompareDetailPage(props: ModelCompareDetailPageProp let comparisonBodyScroll: HTMLDivElement | undefined const models = createMemo(() => modelSelections().map((model, index) => - buildComparisonModel(model.lab, model.slug, model.catalog ?? null, stats()?.models[index] ?? null), + buildComparisonModel( + model.lab, + model.slug, + model.catalog ?? null, + stats()?.models[index] ?? null, + catalog()?.labs.map((lab) => lab.id) ?? [], + ), ), ) 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.`, + `Compare ${comparisonModelLabel(models()[0])} and ${comparisonModelLabel(models()[1])} 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) @@ -206,7 +214,7 @@ export default function ModelCompareDetailPage(props: ModelCompareDetailPageProp "@type": "SoftwareApplication", name: model.name, applicationCategory: "AI model", - provider: model.labName, + ...(model.labName ? { provider: model.labName } : {}), })), }), ) @@ -459,7 +467,9 @@ function CompareDetailSelectButton(props: { aria-expanded={props.expanded} onClick={props.onOpen} > - + + {(labName) => } + {props.model.name} @@ -581,8 +591,7 @@ function CompareModelDetail(props: { model: ModelCatalogEntry }) {

    - {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.`}

    @@ -789,9 +798,11 @@ function LabLogo(props: { lab: string; label: string; size: "large" | "small" | const iconId = () => getProviderIconId(props.lab) return ( - - + + + + ) } @@ -832,11 +843,13 @@ function buildComparisonModel( modelParam: string, catalog: ModelCatalogEntry | null, stats: StatsModelComparisonEntry | null, + catalogLabs: readonly string[], ): ComparisonModel { + const lab = catalog?.lab ?? stats?.provider ?? catalogSlug(labParam) return { name: catalog?.name ?? stats?.model ?? formatParamName(modelParam), - lab: catalog?.lab ?? stats?.provider ?? catalogSlug(labParam), - labName: formatCatalogLabName(catalog?.lab ?? stats?.provider ?? labParam), + lab, + labName: isKnownCatalogLab(lab, catalogLabs) ? formatCatalogLabName(lab) : undefined, slug: catalog?.slug ?? stats?.slug ?? catalogSlug(modelParam), catalog, stats, @@ -877,7 +890,7 @@ function buildComparisonDetailSections(models: readonly ComparisonModel[]): Comp rows: [ comparisonDetailRow( "Author", - models.map((model) => linkedTextCell(model.stats?.author ?? model.labName, labHref(model.lab))), + models.map(providerDetailCell), ), comparisonDetailRow( "Context length", @@ -899,7 +912,7 @@ function buildComparisonDetailSections(models: readonly ComparisonModel[]): Comp ), comparisonDetailRow( "Providers", - models.map((model) => linkedTextCell(model.labName, labHref(model.lab))), + models.map(providerDetailCell), ), ], }, @@ -1013,6 +1026,15 @@ function comparisonRef(model: ComparisonModel): ComparisonModelRef { } } +function comparisonModelLabel(model: ComparisonModel) { + return model.labName ? `${model.name} from ${model.labName}` : model.name +} + +function providerDetailCell(model: ComparisonModel): ComparisonDetailCell { + if (!model.labName) return textCell("") + return linkedTextCell(model.stats?.author ?? model.labName ?? "", labHref(model.lab)) +} + function textCell(value: string): ComparisonDetailCell { return { value } } diff --git a/packages/stats/app/src/routes/[lab]/[model].tsx b/packages/stats/app/src/routes/[lab]/[model].tsx index 977660a83c80..24cba8c08372 100644 --- a/packages/stats/app/src/routes/[lab]/[model].tsx +++ b/packages/stats/app/src/routes/[lab]/[model].tsx @@ -17,7 +17,13 @@ import { LocaleLinks } from "../../component/locale-links" import { useI18n } from "../../context/i18n" import { useLanguage } from "../../context/language" import { localizedUrl } from "../../lib/language" -import { findModelCatalogEntry, formatCatalogLabName, loadModelCatalog, type ModelCatalogEntry } from "../model-catalog" +import { + findModelCatalogEntry, + formatCatalogLabName, + isKnownCatalogLab, + loadModelCatalog, + type ModelCatalogEntry, +} from "../model-catalog" import { SectionHeading } from "../section-heading" import { runStatsEffect } from "../../stats-runtime" import { setStatsPageCacheHeaders } from "../stats-cache" @@ -96,7 +102,9 @@ export default function StatsModel() { const modelName = createMemo( () => catalogEntry()?.name ?? publicModelName(canonicalModel()) ?? i18n.t("model.fallback"), ) - const labName = createMemo(() => formatCatalogLabName(catalogEntry()?.lab ?? stats()?.provider ?? labParam())) + const lab = createMemo(() => catalogEntry()?.lab ?? stats()?.provider ?? labParam()) + const catalogLabs = createMemo(() => page()?.catalog.labs.map((item) => item.id) ?? []) + const labName = createMemo(() => (isKnownCatalogLab(lab(), catalogLabs()) ? formatCatalogLabName(lab()) : undefined)) const formerName = createMemo(() => formerModelName(canonicalModel())) const searchModelName = createMemo(() => (formerName() ? `${modelName()} (formerly ${formerName()})` : modelName())) const modelTitle = createMemo(() => i18n.t("model.title", { model: searchModelName() })) @@ -185,9 +193,14 @@ export default function StatsModel() { - + props.catalog?.lab ?? props.data?.provider ?? props.labName + const labId = () => props.catalog?.lab ?? props.data?.provider + const hasLab = () => props.labName !== undefined const modelName = () => props.catalog?.name ?? props.data?.model ?? i18n.t("model.fallback") const weights = () => props.catalog?.weights[0] const labs = () => props.catalogData?.labs ?? [] @@ -281,35 +295,31 @@ function ModelHero(props: { Data - / - 0} - fallback={ - - {props.labName} - - - } - > - ({ - href: language.route(`${import.meta.env.BASE_URL}${lab.id}`), - label: lab.name, - value: lab.id, - }))} - value={providerSlug(labId())} - variant="model" - /> + + / + 0} + fallback={{props.labName}} + > + ({ + href: language.route(`${import.meta.env.BASE_URL}${lab.id}`), + label: lab.name, + value: lab.id, + }))} + value={providerSlug(labId() ?? "")} + variant="model" + /> + / 0} fallback={ - - {modelName()} - + + {modelName()} } > @@ -328,9 +338,11 @@ function ModelHero(props: {
    - - + + + +

    {modelName()}

    @@ -980,7 +992,7 @@ function GeoCountryList(props: { ) } -function ModelPeersSection(props: { data: StatsModelPageData | null }) { +function ModelPeersSection(props: { data: StatsModelPageData | null; catalogLabs: readonly string[] }) { const i18n = useI18n() return (
    @@ -993,7 +1005,7 @@ function ModelPeersSection(props: { data: StatsModelPageData | null }) { >
      - {(peer) => } + {(peer) => }
    @@ -1011,23 +1023,29 @@ function MetricCard(props: { label: string; value: string; detail?: string; stat ) } -function PeerRow(props: { peer: ModelPeerEntry; active: boolean }) { +function PeerRow(props: { peer: ModelPeerEntry; active: boolean; catalogLabs: readonly string[] }) { const language = useLanguage() + const hasProvider = () => isKnownCatalogLab(props.peer.provider, props.catalogLabs) return (
  • {String(props.peer.rank).padStart(2, "0")} - - + + + + {props.peer.model} - {props.peer.author} + + {props.peer.author} + {formatTokens(props.peer.tokens)} @@ -1050,6 +1068,7 @@ function ModelEmptyState(props: { title: string; description: string; compact?: function modelComparisonPairs( catalogModels: ModelCatalogOption[] | undefined, + catalogLabs: readonly string[], catalogEntry: ModelCatalogEntry | null, data: StatsModelPageData | null, ) { @@ -1064,7 +1083,7 @@ function modelComparisonPairs( name: peer.model, lab: peer.provider, slug: peer.slug, - labName: peer.author, + labName: isKnownCatalogLab(peer.provider, catalogLabs) ? peer.author : undefined, metric: `#${peer.rank} / ${formatTokens(peer.tokens)}`, }, detail: "Usage peer", @@ -1090,7 +1109,7 @@ function modelComparisonRef( name: data.model, lab: data.provider, slug: data.slug, - labName: data.author, + labName: undefined, metric: `#${data.rank}`, } } diff --git a/packages/stats/app/src/routes/compare-cards.tsx b/packages/stats/app/src/routes/compare-cards.tsx index 24077bc3b9c4..50a0a38002ae 100644 --- a/packages/stats/app/src/routes/compare-cards.tsx +++ b/packages/stats/app/src/routes/compare-cards.tsx @@ -119,17 +119,24 @@ function ComparisonCardIcon() { } function ComparisonPanelCard(props: { pair: ComparisonPair }) { + const firstLabName = () => props.pair.first.labName + const secondLabName = () => props.pair.second.labName + return ( {props.pair.detail} {props.pair.first.name} vs {props.pair.second.name} -

    - {props.pair.first.labName ?? formatCatalogLabName(props.pair.first.lab)} - - {props.pair.second.labName ?? formatCatalogLabName(props.pair.second.lab)} -

    + +

    + {(name) => {name()}} + + + + {(name) => {name()}} +

    +
    {props.pair.first.metric ?? "Listed"} / {props.pair.second.metric ?? "Listed"} @@ -143,14 +150,16 @@ function ComparisonLabLogo(props: { model: ComparisonModelRef }) { const iconId = () => providerIconId(props.model.lab) return ( - - + + + + ) } diff --git a/packages/stats/app/src/routes/compare-radar.tsx b/packages/stats/app/src/routes/compare-radar.tsx index d7403809ac87..35ada12885f1 100644 --- a/packages/stats/app/src/routes/compare-radar.tsx +++ b/packages/stats/app/src/routes/compare-radar.tsx @@ -9,7 +9,7 @@ const toolUseBenchmarkPattern = /(terminal bench|claw eval|tau ?(?:bench|2|3))/ export type ComparisonRadarModel = { name: string - labName: string + labName?: string catalog: ModelCatalogEntry | null } @@ -61,7 +61,7 @@ export function ComparisonRadar(props: ComparisonRadarProps) {