From 3359d1c8f7a32474da82494e9ef157345ccdc9e7 Mon Sep 17 00:00:00 2001 From: "dayuan.jiang" Date: Mon, 5 Jan 2026 22:26:58 +0900 Subject: [PATCH] fix: use OpenAI provider for Doubao multimodal models DeepSeek provider was not properly formatting image content for Doubao's API. Now uses OpenAI provider for Doubao models (multimodal support), while keeping DeepSeek provider for DeepSeek/Kimi models on the platform. --- app/api/validate-model/route.ts | 27 ++++++++++++++++++++------- lib/ai-providers.ts | 23 ++++++++++++++++++----- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/app/api/validate-model/route.ts b/app/api/validate-model/route.ts index 2185ae8..b00e734 100644 --- a/app/api/validate-model/route.ts +++ b/app/api/validate-model/route.ts @@ -251,13 +251,26 @@ export async function POST(req: Request) { } case "doubao": { - // ByteDance Doubao uses DeepSeek-compatible API - const doubao = createDeepSeek({ - apiKey, - baseURL: - baseUrl || "https://ark.cn-beijing.volces.com/api/v3", - }) - model = doubao(modelId) + // ByteDance Doubao: use DeepSeek for DeepSeek/Kimi models, OpenAI for others + const doubaoBaseUrl = + baseUrl || "https://ark.cn-beijing.volces.com/api/v3" + const lowerModelId = modelId.toLowerCase() + if ( + lowerModelId.includes("deepseek") || + lowerModelId.includes("kimi") + ) { + const doubao = createDeepSeek({ + apiKey, + baseURL: doubaoBaseUrl, + }) + model = doubao(modelId) + } else { + const doubao = createOpenAI({ + apiKey, + baseURL: doubaoBaseUrl, + }) + model = doubao.chat(modelId) + } break } diff --git a/lib/ai-providers.ts b/lib/ai-providers.ts index 9f30db2..c4c8574 100644 --- a/lib/ai-providers.ts +++ b/lib/ai-providers.ts @@ -871,11 +871,24 @@ export function getAIModel(overrides?: ClientOverrides): ModelConfig { overrides?.baseUrl || process.env.DOUBAO_BASE_URL || "https://ark.cn-beijing.volces.com/api/v3" - const doubaoProvider = createDeepSeek({ - apiKey, - baseURL, - }) - model = doubaoProvider(modelId) + const lowerModelId = modelId.toLowerCase() + // Use DeepSeek provider for DeepSeek/Kimi models, OpenAI for others (multimodal support) + if ( + lowerModelId.includes("deepseek") || + lowerModelId.includes("kimi") + ) { + const doubaoProvider = createDeepSeek({ + apiKey, + baseURL, + }) + model = doubaoProvider(modelId) + } else { + const doubaoProvider = createOpenAI({ + apiKey, + baseURL, + }) + model = doubaoProvider.chat(modelId) + } break }