Compare commits

...

7 Commits

Author SHA1 Message Date
Shoubhit Dash 0bcfb31e7f feat(schema): expose effort and thinking binding overrides 2026-09-28 18:44:15 +05:30
Shoubhit Dash 0cbcbfdd4c fix(core): treat gpt-6+ as reasoning models on copilot 2026-09-28 18:44:14 +05:30
Shoubhit Dash 8409754e0d fix(ai): assume newer models support known features 2026-09-28 18:44:14 +05:30
opencode-agent[bot] dd786c62af chore(core): refresh bundled models.dev snapshot 2026-09-28 12:23:50 +00:00
Frank 87c402a124 docs(go): simplify v2 usage limit explanation 2026-09-28 07:39:42 -04:00
Frank 7076a878a4 docs(www): document Go Plus (#51834) 2026-09-28 07:25:37 -04:00
Frank 45b91eed82 docs(go): sync v2 model list with v1 (#51837) 2026-09-28 11:23:40 +00:00
16 changed files with 484 additions and 145 deletions
@@ -800,18 +800,13 @@ const requireThinkingSignature = (request: LLMRequest) => {
return true
}
// Mid-conversation system messages became available with Opus 4.8 and version
// 5 of the other supported Claude families. Treat later family versions as
// compatible without assuming that every Anthropic Messages model is Claude.
// Mid-conversation system messages became available with Opus 4.8 and every
// Claude 5 model. Treat later Claude versions of any family as compatible
// without assuming that every Anthropic Messages model is Claude.
const supportsNativeSystemUpdates = (request: LLMRequest) => {
const match = /(?:^|[./])claude-(fable|haiku|mythos|opus|sonnet)-(\d+)(?:[.-](\d+))?/.exec(
String(request.model.id).toLowerCase(),
)
if (!match) return false
const major = Number(match[2])
if (match[1] !== "opus") return major >= 5
if (major !== 4) return major >= 5
return match[3] !== undefined && match[3].length <= 2 && Number(match[3]) >= 8
const version = claudeVersion(request.model.id)
if (version === undefined) return false
return version.major >= 5 || (version.family === "opus" && version.major === 4 && version.minor >= 8)
}
const endsInServerToolUse = (message: LLMRequest["messages"][number]) => {
@@ -1004,14 +999,14 @@ const supportsThinkingBlockBinding = (model: LLMRequest["model"]) => {
return version !== undefined && (version.major > 5 || (version.major === 5 && version.minor >= 1))
}
// Sonnet 5 and Fable 5 reject mid-conversation effort.
const supportsEffortUpdates = (model: LLMRequest["model"]) => {
const override = model.compatibility?.supportsEffortUpdates
if (override !== undefined) return override
const version = claudeVersion(model.id)
if (version === undefined) return false
if (version.family === "opus") return version.major >= 5
if (version.family !== "fable" && version.family !== "mythos") return false
return version.major > 5 || (version.major === 5 && version.minor >= 1)
if (version.major !== 5) return version.major > 5
return version.family === "opus" || version.minor >= 1
}
const applyThinkingBindingDefault = (model: LLMRequest["model"], thinking: AnthropicThinking | undefined) => {
@@ -143,14 +143,15 @@ const adapter = {
restoreHostedToolItem: (item: unknown) => (Schema.is(OpenAIResponsesHostedToolItem)(item) ? item : undefined),
} satisfies OpenResponses.ProviderAdapter
// GPT-6 Astra, Sol, and Luna accept `configuration_update` only in standard mode (not `reasoning.mode: "pro"` or
// `-pro` slugs), and never alongside automatic `context_management` compaction.
// Pro mode (`reasoning.mode: "pro"` or `-pro` slugs) rejects `configuration_update`, and it never combines with
// automatic `context_management` compaction. Bedrock Mantle's `openai.` ids stay off until support is confirmed.
const supportsEffortUpdates = (request: LLMRequest) => {
if (request.providerOptions?.contextManagement !== undefined) return false
if (Schema.is(Schema.Struct({ mode: Schema.Literal("pro") }))(request.http?.body?.reasoning)) return false
const override = request.model.compatibility?.supportsEffortUpdates
if (override !== undefined) return override
return /(?:^|\/)gpt-6-(?:astra|sol|luna)$/i.test(request.model.id)
const gpt = /(?:^|\/)gpt-(\d+)(?:[.-]|$)/i.exec(request.model.id)
return gpt !== null && Number(gpt[1]) >= 6 && !/-pro(?:-|$)/i.test(request.model.id)
}
const nativeImageToolInput = (tool: ToolDefinition) => {
+5 -4
View File
@@ -32,13 +32,14 @@ const openAIProviderOptions = (options: OpenAIOptionsInput | undefined): Provide
return result
}
export const gpt5DefaultOptions = (modelID: string): ProviderOptions | undefined => {
export const reasoningDefaultOptions = (modelID: string): ProviderOptions | undefined => {
const id = modelID.toLowerCase()
if (!id.includes("gpt-5") || id.includes("gpt-5-chat") || id.includes("gpt-5-pro")) return undefined
const reasoning = Number(/gpt-(\d+)/.exec(id)?.[1]) >= 5
if (!reasoning || id.includes("gpt-5-chat") || id.includes("gpt-5-pro")) return undefined
return openAIProviderOptions({
reasoningEffort: "medium",
reasoningSummary: "auto",
// GPT-5 reasoning models are configured stateless (`store: false`) by
// GPT reasoning models are configured stateless (`store: false`) by
// `openAIDefaultOptions` below, so the only way a follow-up turn can
// carry reasoning state is via the encrypted reasoning include. Without
// this, callers using the default model facade get reasoning summaries
@@ -48,7 +49,7 @@ export const gpt5DefaultOptions = (modelID: string): ProviderOptions | undefined
}
export const openAIDefaultOptions = (modelID: string): ProviderOptions | undefined =>
mergeProviderOptions(openAIProviderOptions({ store: false }), gpt5DefaultOptions(modelID))
mergeProviderOptions(openAIProviderOptions({ store: false }), reasoningDefaultOptions(modelID))
export const withOpenAIOptions = <Options extends { readonly providerOptions?: OpenAIProviderOptionsInput }>(
modelID: string,
+14 -4
View File
@@ -197,9 +197,14 @@ describe("Anthropic Messages effort updates", () => {
["anthropic/claude-opus-5", true],
["claude-fable-5-1", true],
["claude-mythos-5-1", true],
["claude-opus-5-5-fast", true],
["claude-sonnet-5-1", true],
["claude-haiku-6", true],
["claude-nova-6", true],
["claude-fable-5", false],
["claude-opus-4-8", false],
["claude-sonnet-5", false],
["claude-sonnet-5-20260901", false],
["kimi-k2.5", false],
] as const) {
it.effect(`${supported ? "lowers" : "strips"} markers for ${id}`, () =>
@@ -364,7 +369,7 @@ describe("OpenAI Responses effort updates", () => {
)
expect(updates(prepared.body)).toEqual([])
expect(prepared.body.reasoning).toEqual({ effort: "low" })
expect(prepared.body.reasoning).toEqual({ effort: "low", summary: "auto" })
}),
)
@@ -375,10 +380,15 @@ describe("OpenAI Responses effort updates", () => {
["openai/gpt-6-sol", true],
["gpt-6-luna", true],
["openai/gpt-6-luna", true],
["gpt-6-astra-2026-09-01", false],
["gpt-6-astra-2026-09-01", true],
["gpt-6-sol-fast", true],
["gpt-6-terra", true],
["gpt-6.1-astra", true],
["gpt-7", true],
["gpt-6-sol-pro", false],
["gpt-6-luna-pro", false],
["gpt-6-sol-fast", false],
["gpt-6-sol-pro-2026-09-01", false],
["openai.gpt-6-sol", false],
["gpt-5.6-sol", false],
] as const) {
it.effect(`${supported ? "lowers" : "strips"} markers for ${id}`, () =>
@@ -426,7 +436,7 @@ describe("OpenAI Responses effort updates", () => {
dynamicResponse(({ text, respond }) =>
Effect.sync(() => {
const body = JSON.parse(text)
expect(body.reasoning).toEqual({ effort: "high" })
expect(body.reasoning).toEqual({ effort: "high", summary: "auto" })
expect(body.input).toEqual([
{ type: "message", role: "user", content: [{ type: "input_text", text: "Before." }] },
{ type: "configuration_update", reasoning: { effort: "low" } },
@@ -305,14 +305,17 @@ describe("Anthropic Messages route", () => {
}),
)
it.effect("supports native chronological system updates on documented and later Claude family versions", () =>
it.effect("supports native chronological system updates on documented and later Claude versions", () =>
Effect.gen(function* () {
const ids = [
"claude-opus-4-8",
"claude-opus-4-8-fast",
"claude-opus-5-1",
"claude-sonnet-5",
"claude-sonnet-5-20260901",
"claude-haiku-5-1",
"claude-fable-6",
"claude-nova-6",
"anthropic/claude-mythos-7.2",
]
@@ -359,13 +362,14 @@ describe("Anthropic Messages route", () => {
}),
)
it.effect("does not infer native system update support for older or undocumented Claude families", () =>
it.effect("does not infer native system update support for older Claude versions or non-Claude models", () =>
Effect.gen(function* () {
const ids = [
"claude-opus-4-7",
"claude-opus-4-20250514",
"claude-sonnet-4-9",
"claude-haiku-4-9",
"claude-3-7-sonnet-20250219",
"custom-model-7",
]
@@ -2069,6 +2069,31 @@ describe("OpenAI Responses route", () => {
}),
)
for (const [id, defaults] of [
["gpt-5", true],
["gpt-5.6-sol", true],
["gpt-6-sol", true],
["gpt-6.1-astra", true],
["openai/gpt-7-terra", true],
["gpt-5-chat-latest", false],
["gpt-5-pro", false],
["gpt-4.1", false],
["o3", false],
] as const) {
it.effect(`${defaults ? "applies" : "skips"} reasoning defaults for ${id}`, () =>
Effect.gen(function* () {
const prepared = yield* compileRequest(
LLM.request({
model: OpenAI.configure({ baseURL: "https://api.openai.test/v1/", apiKey: "test" }).responses(id),
prompt: "hi",
}),
)
expect(prepared.body.reasoning).toEqual(defaults ? { effort: "medium", summary: "auto" } : undefined)
}),
)
}
it.effect("lets callers opt out of the GPT-5 default include", () =>
Effect.gen(function* () {
const prepared = yield* compileRequest(
@@ -1460,6 +1460,8 @@ export type ModelCompatibility = {
requireFinishReason?: boolean
requireAssistantAfterTool?: boolean
supportsPromptCacheKey?: boolean
supportsEffortUpdates?: boolean
supportsThinkingBlockBinding?: boolean
}
export type ModelCost = {
@@ -1695,7 +1695,7 @@ function getResponsesModelConfig(modelId: string): ResponsesModelConfig {
// o series reasoning models:
if (
modelId.startsWith("o") ||
modelId.startsWith("gpt-5") ||
Number(/^gpt-(\d+)/.exec(modelId)?.[1]) >= 5 ||
modelId.startsWith("codex-") ||
modelId.startsWith("computer-use")
) {
File diff suppressed because one or more lines are too long
@@ -0,0 +1,53 @@
import { OpenAIResponsesLanguageModel } from "@opencode/core/github-copilot/responses/openai-responses-language-model"
import { afterAll, describe, expect, test } from "bun:test"
const bodies: unknown[] = []
const server = Bun.serve({
port: 0,
fetch: async (request) => {
bodies.push(await request.json())
return new Response("", { headers: { "Content-Type": "text/event-stream" } })
},
})
afterAll(() => server.stop())
async function requestBody(modelID: string) {
const model = new OpenAIResponsesLanguageModel(modelID, {
provider: "copilot.responses",
url: ({ path }) => new URL(path, server.url).href,
headers: () => ({ Authorization: "Bearer test-token" }),
})
await model.doStream({
prompt: [
{ role: "system", content: "Be brief." },
{ role: "user", content: [{ type: "text", text: "Hello" }] },
],
temperature: 0.5,
providerOptions: { copilot: { reasoningEffort: "high" } },
})
return bodies.at(-1)
}
describe("reasoning model detection", () => {
for (const id of ["gpt-5.5", "gpt-6-sol", "gpt-6.1-astra", "gpt-7"]) {
test(`treats ${id} as a reasoning model`, async () => {
const body = await requestBody(id)
expect(body).toMatchObject({
reasoning: { effort: "high" },
input: [{ role: "developer", content: "Be brief." }, { role: "user" }],
})
expect(body).not.toHaveProperty("temperature")
})
}
for (const id of ["gpt-4.1", "gpt-5-chat-latest"]) {
test(`treats ${id} as a non-reasoning model`, async () => {
const body = await requestBody(id)
expect(body).not.toHaveProperty("reasoning")
expect(body).toMatchObject({
temperature: 0.5,
input: [{ role: "system", content: "Be brief." }, { role: "user" }],
})
})
}
})
+31
View File
@@ -449,6 +449,37 @@ describe("ModelResolver", () => {
),
)
it.effect("lets catalog compatibility disable default effort updates", () =>
Effect.gen(function* () {
const request = (compatibility?: Compatibility) =>
Effect.gen(function* () {
const resolved = yield* ModelResolver.fromCatalogModel(
model("@opencode/ai/providers/openai", {
modelID: "gpt-6-sol",
compatibility,
settings: { apiKey: "test" },
}),
)
const prepared = yield* compileRequest(
LLM.request({
model: resolved,
messages: [
Message.user("Before."),
Message.effort({ effort: "low", previous: "high" }),
Message.user("After."),
],
providerOptions: { reasoningEffort: "low" },
}),
)
return prepared.body.input
})
const update = { type: "configuration_update", reasoning: { effort: "low" } }
expect(yield* request()).toContainEqual(update)
expect(yield* request({ supportsEffortUpdates: false })).not.toContainEqual(update)
}),
)
it.effect("uses merged API settings for OpenAI-compatible auth and request defaults", () =>
Effect.gen(function* () {
const resolved = yield* ModelResolver.fromCatalogModel(
+2
View File
@@ -80,6 +80,8 @@ export const Compatibility = Schema.Struct({
requireFinishReason: Schema.Boolean.pipe(optional),
requireAssistantAfterTool: Schema.Boolean.pipe(optional),
supportsPromptCacheKey: Schema.Boolean.pipe(optional),
supportsEffortUpdates: Schema.Boolean.pipe(optional),
supportsThinkingBlockBinding: Schema.Boolean.pipe(optional),
}).annotate({ identifier: "Model.Compatibility" })
export interface Capabilities extends Schema.Schema.Type<typeof Capabilities> {}
@@ -5,6 +5,7 @@ import Card from "./Card.astro"
import CardGroup from "./CardGroup.astro"
import CodeBlock from "./CodeBlock.astro"
import CodeTabs from "./CodeTabs.astro"
import PlanTabs from "./PlanTabs.astro"
import DocsLayout from "../layouts/DocsLayout.astro"
interface Props {
@@ -22,5 +23,5 @@ const rendered = await render(entry)
headings={rendered.headings}
showTableOfContents={entry.data.tableOfContents !== false}
>
<rendered.Content components={{ Callout, Card, CardGroup, CodeBlock, CodeTabs }} />
<rendered.Content components={{ Callout, Card, CardGroup, CodeBlock, CodeTabs, PlanTabs }} />
</DocsLayout>
@@ -0,0 +1,103 @@
---
interface Props {
id: string
label: string
syncKey: string
}
const plans = [
{ id: "go", label: "Go" },
{ id: "go-plus", label: "Go Plus" },
] as const
---
<div class="docs-plan-tabs" data-plan-tabs data-sync-key={Astro.props.syncKey}>
<div class="docs-plan-tabs-list" role="tablist" aria-label={Astro.props.label}>
{
plans.map((plan, index) => (
<button
type="button"
role="tab"
id={`${Astro.props.id}-tab-${plan.id}`}
aria-controls={`${Astro.props.id}-panel-${plan.id}`}
aria-selected={index === 0 ? "true" : "false"}
tabindex={index === 0 ? 0 : -1}
data-plan-tab={plan.id}
>
{plan.label}
</button>
))
}
</div>
{
plans.map((plan, index) => (
<div
role="tabpanel"
id={`${Astro.props.id}-panel-${plan.id}`}
aria-labelledby={`${Astro.props.id}-tab-${plan.id}`}
hidden={index !== 0}
data-plan-panel={plan.id}
>
<slot name={plan.id} />
</div>
))
}
</div>
<script>
const selectPlan = (tabs: HTMLElement, plan: string) => {
tabs.querySelectorAll<HTMLButtonElement>("[data-plan-tab]").forEach((button) => {
const selected = button.dataset.planTab === plan
button.setAttribute("aria-selected", String(selected))
button.tabIndex = selected ? 0 : -1
})
tabs.querySelectorAll<HTMLElement>("[data-plan-panel]").forEach((panel) => {
panel.hidden = panel.dataset.planPanel !== plan
})
}
const selectSyncedPlan = (source: HTMLElement, plan: string) => {
const syncKey = source.dataset.syncKey
if (!syncKey) return
document.querySelectorAll<HTMLElement>("[data-plan-tabs]").forEach((tabs) => {
if (tabs.dataset.syncKey === syncKey) selectPlan(tabs, plan)
})
localStorage.setItem(`docs-plan-tabs:${syncKey}`, plan)
}
document.querySelectorAll<HTMLElement>("[data-plan-tabs]").forEach((tabs) => {
const syncKey = tabs.dataset.syncKey
const plan = syncKey ? localStorage.getItem(`docs-plan-tabs:${syncKey}`) : undefined
if (plan) selectPlan(tabs, plan)
})
document.addEventListener("click", (event) => {
if (!(event.target instanceof Element)) return
const button = event.target.closest<HTMLButtonElement>("[data-plan-tab]")
const tabs = button?.closest<HTMLElement>("[data-plan-tabs]")
if (!button || !tabs || !button.dataset.planTab) return
selectSyncedPlan(tabs, button.dataset.planTab)
})
document.addEventListener("keydown", (event) => {
if (!(event.target instanceof HTMLButtonElement) || !event.target.matches("[data-plan-tab]")) return
const tabs = event.target.closest<HTMLElement>("[data-plan-tabs]")
if (!tabs) return
const buttons = [...tabs.querySelectorAll<HTMLButtonElement>("[data-plan-tab]")]
const selected = buttons.indexOf(event.target)
const next =
event.key === "Home"
? buttons[0]
: event.key === "End"
? buttons.at(-1)
: event.key === "ArrowRight"
? buttons[(selected + 1) % buttons.length]
: event.key === "ArrowLeft"
? buttons[(selected - 1 + buttons.length) % buttons.length]
: undefined
if (!next?.dataset.planTab) return
event.preventDefault()
selectSyncedPlan(tabs, next.dataset.planTab)
next.focus()
})
</script>
+184 -115
View File
@@ -1,17 +1,22 @@
---
title: "Go"
description: "Low cost subscription for open coding models."
description: "Reliable access to open coding models with two usage tiers."
---
OpenCode Go is a low cost **$10/month subscription** that gives you reliable access to popular open coding models.
OpenCode Go gives you reliable access to popular open coding models, with two monthly plans:
| Plan | Price | Included usage |
| ---- | ----- | -------------- |
| **Go** | **$10/month** | Lower-cost access to the models below |
| **Go Plus** | **$40/month** | Higher usage limits across the models below |
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 it to use OpenCode.
It is designed primarily for international users and provides stable global access.
The service is designed primarily for international users and provides stable global access.
## How it works
1. Sign in to the [OpenCode console](https://opencode.ai/console), subscribe to Go, add your billing details, and copy your API key.
1. Sign in to the [OpenCode Console](https://opencode.ai/console), subscribe to Go or Go Plus, add your billing details, and copy your API key.
2. Run `/connect` in the TUI, select **OpenCode Go**, and paste your API key.
```text
@@ -24,7 +29,7 @@ It is designed primarily for international users and provides stable global acce
/models
```
<Callout>Only one member per workspace can subscribe to OpenCode Go.</Callout>
<Callout>Only one member per workspace can subscribe to OpenCode Go or Go Plus.</Callout>
The current list of models includes:
@@ -33,13 +38,13 @@ The current list of models includes:
- **GLM-5.3-Flash**
- **GLM-5.3**
- **GLM-5.2**
- **GLM-5.1**
- **GPT 6 Luna**
- **GPT 5.6 Luna**
- **Kimi K3**
- **Kimi K2.7 Code**
- **Kimi K2.6**
- **LongCat-2.0**
- **LongCat 2.5 Preview Free** (limited time)
- **MiMo-V2.6-Flash**
- **MiMo-V2.6-Pro**
- **MiMo-V2.5**
@@ -50,9 +55,7 @@ The current list of models includes:
- **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**
- **DeepSeek V4.1 Flash**
- **DeepSeek V4 Pro**
- **DeepSeek V4 Flash**
@@ -60,7 +63,6 @@ The current list of models includes:
- **Hy4 preview**
- **Hy3**
- **Space Bunny Free** (limited time)
- **LongCat 2.5 Preview Free** (limited time)
The list of models may change as we test and add new ones.
@@ -109,127 +111,202 @@ investigated. The linked reports track fixes and workarounds.
## Usage limits
Usage limits are defined as monthly dollar amounts. The table below shows the
monthly limit and token costs for each model.
monthly limit for each plan and the token costs for each model. Token pricing is
the same for Go and Go Plus.
Each model has the following usage limits: 5-hour — 20% of the monthly limit;
weekly — 50%; and monthly — 100%.
For example, if a model has a $60 monthly limit, you can spend up to:
- **5-hour limit** — $12 of usage
- **Weekly limit** — $30 of usage
- **Monthly limit** — $60 of usage
Each model's monthly limit below determines how its usage counts toward those allowances.
Token prices are per 1M tokens.
<div class="docs-table-scroll" role="region" aria-label="Go model pricing" tabIndex={0}>
<PlanTabs id="go-pricing" label="Go plan" syncKey="go-plan">
<div slot="go">
| Model | Input | Output | Cached Read | Cached Write | Monthly limit |
| --------------------------------------- | ------ | ------ | ----------- | ------------ | ---------------------------------------------------- |
| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | **$60** |
| 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.6-Flash | $0.14 | $0.28 | $0.0028 | - | **$60** |
| MiMo-V2.6-Pro | $0.435 | $0.87 | $0.003625 | - | **$15** |
| 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.1 Flash (Off-Peak) | $0.15 | $0.60 | $0.003 | - | **$60** |
| DeepSeek V4.1 Flash (Peak) | $0.30 | $1.20 | $0.006 | - | **$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.15 | $0.60 | $0.003 | - | **$30** |
| DeepSeek V4 Flash (Peak) | $0.30 | $1.20 | $0.006 | - | **$30** |
| DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.15 | $0.60 | $0.003 | - | **$15** |
| DeepSeek V4 Flash Vision Exp (Peak) | $0.30 | $1.20 | $0.006 | - | **$15** |
| Hy4 preview | $0.834 | $2.501 | $0.042 | - | **$30** |
| Hy3 | $0.14 | $0.58 | $0.035 | - | **$60** |
| Space Bunny Free | Free | Free | Free | - | **Unlimited**<br /><small>limited time</small> |
| LongCat 2.5 Preview Free | Free | Free | Free | - | **Unlimited**<br /><small>limited time</small> |
| Grok 4.7 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | **$15** |
| Grok 4.7 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | **$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 6 Luna (≤ 272K tokens) | $0.10 | $0.50 | $0.01 | $0.125 | **$15** |
| GPT 6 Luna (> 272K tokens) | $0.20 | $0.75 | $0.02 | $0.25 | **$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** |
| Model | Input | Output | Cached Read | Cached Write | Monthly limit |
| --------------------------------------- | ------ | ------ | ----------- | ------------ | ---------------------------------------------- |
| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | **$60** |
| GLM-5.3 | $1.40 | $4.40 | $0.26 | - | **$15** |
| GLM-5.2 | $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** |
| LongCat 2.5 Preview Free | Free | Free | Free | - | **Unlimited**<br /><small>limited time</small> |
| MiMo-V2.6-Flash | $0.14 | $0.28 | $0.0028 | - | **$60** |
| MiMo-V2.6-Pro | $0.435 | $0.87 | $0.003625 | - | **$15** |
| 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** |
| 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 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** |
| DeepSeek V4.1 Flash (Off-Peak) | $0.15 | $0.60 | $0.003 | - | **$60** |
| DeepSeek V4.1 Flash (Peak) | $0.30 | $1.20 | $0.006 | - | **$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.15 | $0.60 | $0.003 | - | **$30** |
| DeepSeek V4 Flash (Peak) | $0.30 | $1.20 | $0.006 | - | **$30** |
| DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.15 | $0.60 | $0.003 | - | **$15** |
| DeepSeek V4 Flash Vision Exp (Peak) | $0.30 | $1.20 | $0.006 | - | **$15** |
| Hy4 preview | $0.834 | $2.501 | $0.042 | - | **$30** |
| Hy3 | $0.14 | $0.58 | $0.035 | - | **$60** |
| Space Bunny Free | Free | Free | Free | - | **Unlimited**<br /><small>limited time</small> |
| Grok 4.7 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | **$15** |
| Grok 4.7 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | **$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 6 Luna (≤ 272K tokens) | $0.10 | $0.50 | $0.01 | $0.125 | **$15** |
| GPT 6 Luna (> 272K tokens) | $0.20 | $0.75 | $0.02 | $0.25 | **$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** |
</div>
</div>
<div slot="go-plus">
| Model | Input | Output | Cached Read | Cached Write | Monthly limit |
| --------------------------------------- | ------ | ------ | ----------- | ------------ | ---------------------------------------------- |
| GLM-5.3-Flash | $0.15 | $0.50 | $0.03 | - | **$180** |
| GLM-5.3 | $1.40 | $4.40 | $0.26 | - | **$120** |
| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | **$180** |
| Kimi K3 | $3.00 | $15.00 | $0.30 | - | **$60** |
| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | **$180** |
| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | **$240** |
| LongCat-2.0 | $0.30 | $1.20 | $0.006 | - | **$240** |
| LongCat 2.5 Preview Free | Free | Free | Free | - | **Unlimited**<br /><small>limited time</small> |
| MiMo-V2.6-Flash | $0.14 | $0.28 | $0.0028 | - | **$120** |
| MiMo-V2.6-Pro | $0.435 | $0.87 | $0.003625 | - | **$60** |
| MiMo-V2.5 | $0.14 | $0.28 | $0.0028 | - | **$120** |
| MiMo-V2.5-Pro | $0.435 | $0.87 | $0.003625 | - | **$60** |
| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | **$180** |
| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | **$240** |
| Muse Spark 1.3 Contributor | $0.10 | $0.20 | $0.002 | - | **$120** |
| Muse Spark 1.2 Contributor | $0.10 | $0.20 | $0.002 | - | **$120** |
| Qwen3.8 Max | $2.00 | $6.00 | $0.25 | $2.50 | **$60** |
| Qwen3.8 Flash | $0.15 | $0.47 | $0.016 | $0.20 | **$90** |
| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | **$180** |
| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | **$180** |
| DeepSeek V4.1 Flash (Off-Peak) | $0.15 | $0.60 | $0.003 | - | **$120** |
| DeepSeek V4.1 Flash (Peak) | $0.30 | $1.20 | $0.006 | - | **$120** |
| DeepSeek V4 Pro (Off-Peak) | $0.66 | $1.98 | $0.022 | - | **$60** |
| DeepSeek V4 Pro (Peak) | $1.32 | $3.96 | $0.044 | - | **$60** |
| DeepSeek V4 Flash (Off-Peak) | $0.15 | $0.60 | $0.003 | - | **$120** |
| DeepSeek V4 Flash (Peak) | $0.30 | $1.20 | $0.006 | - | **$120** |
| DeepSeek V4 Flash Vision Exp (Off-Peak) | $0.15 | $0.60 | $0.003 | - | **$60** |
| DeepSeek V4 Flash Vision Exp (Peak) | $0.30 | $1.20 | $0.006 | - | **$60** |
| Hy4 preview | $0.834 | $2.501 | $0.042 | - | **$120** |
| Hy3 | $0.14 | $0.58 | $0.035 | - | **$240** |
| Space Bunny Free | Free | Free | Free | - | **Unlimited**<br /><small>limited time</small> |
| Grok 4.7 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | **$60** |
| Grok 4.7 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | **$60** |
| Grok 4.6 (≤ 200K tokens) | $2.00 | $6.00 | $0.50 | - | **$60** |
| Grok 4.6 (> 200K tokens) | $4.00 | $12.00 | $1.00 | - | **$60** |
| GPT 6 Luna (≤ 272K tokens) | $0.10 | $0.50 | $0.01 | $0.125 | **$60** |
| GPT 6 Luna (> 272K tokens) | $0.20 | $0.75 | $0.02 | $0.25 | **$60** |
| GPT 5.6 Luna (≤ 272K tokens) | $0.20 | $1.20 | $0.02 | $0.25 | **$60** |
| GPT 5.6 Luna (> 272K tokens) | $0.40 | $1.80 | $0.04 | $0.50 | **$60** |
</div>
</PlanTabs>
**Space Bunny Free:** Free for a limited time.
**LongCat 2.5 Preview Free:** Free for a limited time.
**DeepSeek V4.1 Flash / V4 Pro / V4 Flash Vision Exp:** 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.1 Flash / V4 Pro / V4 Flash / V4 Flash Vision Exp:** 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/).
### Estimated requests
The table below provides an estimated request count based on typical Go usage patterns:
The tables below estimate request counts based on typical Go usage patterns. Go
Plus estimates scale with each model's higher usage limit.
<div class="docs-table-scroll" role="region" aria-label="Go estimated requests" tabIndex={0}>
<PlanTabs id="go-requests" label="Go plan" syncKey="go-plan">
<div slot="go">
| Model | requests per 5 hour | requests per week | requests per month |
| -------------------------------------------------------- | ------------------------- | -------------------------- | --------------------------- |
| GLM-5.3-Flash | 6,320 | 15,790 | 31,580 |
| GLM-5.3 | 220 | 540 | 1,080 |
| GLM-5.2 | 880 | 2,150 | 4,300 |
| GLM-5.1 | 880 | 2,150 | 4,300 |
| 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.6-Flash | 30,100 | 75,200 | 150,400 |
| MiMo-V2.6-Pro | 3,250 | 8,150 | 16,300 |
| 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 |
| 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 |
| 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.1 Flash | 26,000 | 65,000 | 130,000 |
| DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 |
| DeepSeek V4 Flash | 13,000 | 32,500 | 65,000 |
| DeepSeek V4 Flash Vision Exp | 6,500 | 16,250 | 32,500 |
| Hy4 preview | 1,350 | 3,380 | 6,770 |
| Hy3 | 4,300 | 10,750 | 21,500 |
| Space Bunny Free | Unlimited | Unlimited | Unlimited |
| LongCat 2.5 Preview Free | Unlimited | Unlimited | Unlimited |
| Grok 4.7 | 169 | 423 | 845 |
| Grok 4.6 | 169 | 423 | 845 |
| GPT 6 Luna | 4,230 | 10,560 | 21,130 |
| GPT 5.6 Luna | 2,050 | 5,100 | 10,250 |
| Model | Requests per 5 hours | Requests per week | Requests per month |
| ---------------------------- | -------------------- | ----------------- | ------------------ |
| GLM-5.3-Flash | 6,320 | 15,790 | 31,580 |
| GLM-5.3 | 220 | 540 | 1,080 |
| GLM-5.2 | 880 | 2,150 | 4,300 |
| 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 |
| LongCat 2.5 Preview Free | Unlimited | Unlimited | Unlimited |
| MiMo-V2.6-Flash | 30,100 | 75,200 | 150,400 |
| MiMo-V2.6-Pro | 3,250 | 8,150 | 16,300 |
| 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 |
| 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 |
| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 |
| DeepSeek V4.1 Flash | 26,000 | 65,000 | 130,000 |
| DeepSeek V4 Pro | 1,050 | 2,600 | 5,200 |
| DeepSeek V4 Flash | 13,000 | 32,500 | 65,000 |
| DeepSeek V4 Flash Vision Exp | 6,500 | 16,250 | 32,500 |
| Hy4 preview | 1,350 | 3,380 | 6,770 |
| Hy3 | 4,300 | 10,750 | 21,500 |
| Space Bunny Free | Unlimited | Unlimited | Unlimited |
| Grok 4.7 | 169 | 423 | 845 |
| Grok 4.6 | 169 | 423 | 845 |
| GPT 6 Luna | 4,230 | 10,560 | 21,130 |
| GPT 5.6 Luna | 2,050 | 5,100 | 10,250 |
</div>
</div>
<div slot="go-plus">
| Model | Requests per 5 hours | Requests per week | Requests per month |
| ---------------------------- | -------------------- | ----------------- | ------------------ |
| GLM-5.3-Flash | 18,960 | 47,370 | 94,740 |
| GLM-5.3 | 1,760 | 4,320 | 8,640 |
| GLM-5.2 | 2,640 | 6,450 | 12,900 |
| Kimi K3 | 440 | 1,000 | 1,960 |
| Kimi K2.7 Code | 4,050 | 10,140 | 20,250 |
| Kimi K2.6 | 4,600 | 11,520 | 23,000 |
| LongCat-2.0 | 45,600 | 114,400 | 228,800 |
| LongCat 2.5 Preview Free | Unlimited | Unlimited | Unlimited |
| MiMo-V2.6-Flash | 60,200 | 150,400 | 300,800 |
| MiMo-V2.6-Pro | 13,000 | 32,600 | 65,200 |
| MiMo-V2.5 | 60,200 | 150,400 | 300,800 |
| MiMo-V2.5-Pro | 13,000 | 32,600 | 65,200 |
| MiniMax M3 | 9,600 | 24,000 | 48,000 |
| MiniMax M2.7 | 13,600 | 34,000 | 68,000 |
| Muse Spark 1.3 Contributor | 90,600 | 226,600 | 453,200 |
| Muse Spark 1.2 Contributor | 90,600 | 226,600 | 453,200 |
| Qwen3.8 Max | 640 | 1,600 | 3,240 |
| Qwen3.8 Flash | 16,200 | 40,500 | 81,000 |
| Qwen3.7 Plus | 12,900 | 32,400 | 64,800 |
| DeepSeek V4.1 Flash | 52,000 | 130,000 | 260,000 |
| DeepSeek V4 Pro | 4,200 | 10,400 | 20,800 |
| DeepSeek V4 Flash | 52,000 | 130,000 | 260,000 |
| DeepSeek V4 Flash Vision Exp | 26,000 | 65,000 | 130,000 |
| Hy4 preview | 5,400 | 13,520 | 27,080 |
| Hy3 | 17,200 | 43,000 | 86,000 |
| Space Bunny Free | Unlimited | Unlimited | Unlimited |
| Grok 4.7 | 676 | 1,692 | 3,380 |
| Grok 4.6 | 676 | 1,692 | 3,380 |
| GPT 6 Luna | 16,920 | 42,240 | 84,520 |
| GPT 5.6 Luna | 8,200 | 20,400 | 41,000 |
</div>
</PlanTabs>
The estimates use the following token counts per request; actual usage varies.
- Grok 4.7/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
- GLM-5.3/5.2 — 700 input, 52,000 cached, 150 output tokens per request
- GPT 6 Luna — 1,000 input, 50,000 cached, 220 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
@@ -249,9 +326,7 @@ The estimates use the following token counts per request; actual usage varies.
- 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
- Hy4 preview — 830 input, 71,500 cached, 295 output tokens per request
- Hy3 — 830 input, 71,500 cached, 295 output tokens per request
@@ -261,6 +336,7 @@ You can track your current usage in the [console](https://opencode.ai/console).
Usage limits may change as we learn from early usage and feedback.
---
### Usage beyond limits
@@ -271,7 +347,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 the included monthly usage varies by model.
With Go, the included monthly usage varies by model.
For most models, we make this work through bulk discounts and reserved GPU capacity. We then pass those savings on to you as higher monthly usage.
@@ -294,7 +370,6 @@ You can also access Go models through the following API endpoints.
| 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` |
| 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` |
@@ -309,14 +384,11 @@ You can also access Go models through the following API endpoints.
| MiMo-V2.5-Pro | mimo-v2.5-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| 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` |
| 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` |
| Space Bunny Free | space-bunny-free | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
@@ -353,7 +425,6 @@ curl https://opencode.ai/zen/go/v1/models
| 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 |
| Kimi K3 | Not used | 0 days |
| Kimi K2.7 Code | Not used | 0 days |
| Kimi K2.6 | Not used | 0 days |
@@ -364,9 +435,7 @@ curl https://opencode.ai/zen/go/v1/models
| 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 |
| MiniMax M3 | Not used | 0 days |
| MiniMax M2.7 | Not used | 0 days |
| Muse Spark 1.3 Contributor | Yes | Not ZDR |
@@ -384,7 +453,7 @@ curl https://opencode.ai/zen/go/v1/models
- **GPT 6 Luna / 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 September 30, 2026.
- **DeepSeek:** ZDR agreement is renewed monthly. The current agreement is valid through October 31, 2026.
## Background
@@ -400,7 +469,7 @@ To fix this, we did a couple of things:
2. We worked with a few providers to make sure these were being served correctly.
3. 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 **$10/month**.
Both Go and Go Plus provide access to these models; choose the plan that fits how much you use them.
## Goals
+42
View File
@@ -912,6 +912,48 @@ main {
overflow-x: auto;
}
.docs-plan-tabs {
margin-bottom: 1.5rem;
}
.docs-plan-tabs-list {
display: flex;
gap: 0;
margin-bottom: 1rem;
border-bottom: 1px solid var(--border);
}
.docs-plan-tabs-list button {
margin-bottom: -1px;
padding: 0.5rem 1rem;
border: 0;
border-bottom: 2px solid transparent;
background: transparent;
color: var(--muted);
font: inherit;
font-weight: 600;
cursor: pointer;
}
.docs-plan-tabs-list button[aria-selected="true"] {
border-bottom-color: var(--foreground);
color: var(--foreground);
}
.docs-plan-tabs-list button:focus-visible {
outline: 2px solid var(--link);
outline-offset: 2px;
}
.docs-plan-tabs [role="tabpanel"] {
overflow-x: auto;
}
.docs-plan-tabs [role="tabpanel"] > :last-child,
.docs-plan-tabs [role="tabpanel"] > :last-child > :last-child {
margin-bottom: 0;
}
.prose table {
width: 100%;
margin-bottom: 1.5rem;