diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index d2bcaa851..a8e275ba9 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -110,6 +110,7 @@ export async function handler( providerInfo.modifyBody({ ...createBodyConverter(opts.format, providerInfo.format)(body), model: providerInfo.model, + ...(providerInfo.payloadModifier ?? {}), }), ) logger.debug("REQUEST URL: " + reqUrl) @@ -274,8 +275,8 @@ export async function handler( part = part.trim() usageParser.parse(part) - if (providerInfo.bodyModifier) { - for (const [k, v] of Object.entries(providerInfo.bodyModifier)) { + if (providerInfo.responseModifier) { + for (const [k, v] of Object.entries(providerInfo.responseModifier)) { part = part.replace(k, v) } c.enqueue(encoder.encode(part + "\n\n")) @@ -285,7 +286,7 @@ export async function handler( } } - if (!providerInfo.bodyModifier && providerInfo.format === opts.format) { + if (!providerInfo.responseModifier && providerInfo.format === opts.format) { c.enqueue(value) } diff --git a/packages/console/core/src/model.ts b/packages/console/core/src/model.ts index 9a2908e32..da2677844 100644 --- a/packages/console/core/src/model.ts +++ b/packages/console/core/src/model.ts @@ -62,12 +62,13 @@ export namespace ZenData { apiKey: z.string(), format: FormatSchema.optional(), headerMappings: z.record(z.string(), z.string()).optional(), + payloadModifier: z.record(z.string(), z.any()).optional(), family: z.string().optional(), }) const ProviderFamilySchema = z.object({ headers: z.record(z.string(), z.string()).optional(), - bodyModifier: z.record(z.string(), z.string()).optional(), + responseModifier: z.record(z.string(), z.string()).optional(), }) const ModelsSchema = z.object({ diff --git a/packages/web/src/content/docs/zen.mdx b/packages/web/src/content/docs/zen.mdx index 11091de87..ae364fc9e 100644 --- a/packages/web/src/content/docs/zen.mdx +++ b/packages/web/src/content/docs/zen.mdx @@ -82,8 +82,10 @@ You can also access our models through the following API endpoints. | Claude Opus 4.1 | claude-opus-4-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | | Gemini 3 Pro | gemini-3-pro | `https://opencode.ai/zen/v1/models/gemini-3-pro` | `@ai-sdk/google` | | Gemini 3 Flash | gemini-3-flash | `https://opencode.ai/zen/v1/models/gemini-3-flash` | `@ai-sdk/google` | -| MiniMax M2.1 | minimax-m2.1 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | MiniMax M2.5 Free | minimax-m2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| MiniMax M2.1 | minimax-m2.1 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | +| GLM 5 | glm-5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM 4.7 | glm-4.7 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | GLM 4.6 | glm-4.6 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | | Kimi K2.5 | kimi-k2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | @@ -117,7 +119,9 @@ We support a pay-as-you-go model. Below are the prices **per 1M tokens**. | --------------------------------- | ------ | ------ | ----------- | ------------ | | Big Pickle | Free | Free | Free | - | | MiniMax M2.5 Free | Free | Free | Free | - | +| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | | MiniMax M2.1 | $0.30 | $1.20 | $0.10 | - | +| GLM 5 | $1.00 | $3.20 | $0.20 | - | | GLM 4.7 | $0.60 | $2.20 | $0.10 | - | | GLM 4.6 | $0.60 | $2.20 | $0.10 | - | | Kimi K2.5 Free | Free | Free | Free | - |