From 625d8f2afe93bac77715225b3574a5e8cf7fb045 Mon Sep 17 00:00:00 2001 From: Dayuan Jiang <34411969+DayuanJiang@users.noreply.github.com> Date: Mon, 5 Jan 2026 23:09:09 +0900 Subject: [PATCH] fix: use OpenAI provider for Doubao multimodal models (#519) 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 }