diff --git a/app/api/validate-model/route.ts b/app/api/validate-model/route.ts index 884fb44..d996467 100644 --- a/app/api/validate-model/route.ts +++ b/app/api/validate-model/route.ts @@ -345,11 +345,12 @@ export async function POST(req: Request) { break } - // GLM, Qwen, Kimi, Qiniu - OpenAI compatible + // GLM, Qwen, Kimi, Qiniu, Novita - OpenAI compatible case "glm": case "qwen": case "kimi": - case "qiniu": { + case "qiniu": + case "novita": { const baseURL = baseUrl || PROVIDER_INFO[provider as ProviderName]?.defaultBaseUrl || diff --git a/env.example b/env.example index 243860a..a9bc5ff 100644 --- a/env.example +++ b/env.example @@ -1,6 +1,6 @@ # AI Provider Configuration # AI_PROVIDER: Which provider to use -# Options: bedrock, openai, anthropic, google, vertexai, azure, ollama, openrouter, deepseek, siliconflow, gateway +# Options: bedrock, openai, anthropic, google, vertexai, azure, ollama, openrouter, deepseek, siliconflow, gateway, novita # Default: bedrock AI_PROVIDER=bedrock @@ -167,3 +167,8 @@ AI_MODEL=global.anthropic.claude-sonnet-4-5-20250929-v1:0 # Get your API key from: https://www.qiniu.com/ai/models # QINIU_API_KEY=your_qiniu_api_key # QINIU_BASE_URL=https://api.qnaigc.com/v1 # Optional, default + +# Novita AI Configuration (Optional) +# Get your API key from: https://novita.ai/dashboard/key +# NOVITA_API_KEY=your_novita_api_key +# NOVITA_BASE_URL=https://api.novita.ai/openai # Optional, default diff --git a/lib/ai-providers.ts b/lib/ai-providers.ts index 6ab2af3..b355a54 100644 --- a/lib/ai-providers.ts +++ b/lib/ai-providers.ts @@ -28,6 +28,7 @@ export const SINGLE_SYSTEM_PROVIDERS = new Set([ "qwen", "kimi", "qiniu", + "novita", ]) /** @@ -98,6 +99,7 @@ const ALLOWED_CLIENT_PROVIDERS: ProviderName[] = [ "qiniu", "kimi", "minimax", + "novita", ] // Bedrock provider options for Anthropic beta features @@ -520,7 +522,8 @@ function buildProviderOptions( case "glm": case "qwen": case "kimi": - case "qiniu": { + case "qiniu": + case "novita": { // These providers don't have reasoning configs in AI SDK yet // Gateway passes through to underlying providers which handle their own configs break @@ -555,6 +558,7 @@ const PROVIDER_ENV_VARS: Record = { qiniu: "QINIU_API_KEY", kimi: "KIMI_API_KEY", minimax: "MINIMAX_API_KEY", + novita: "NOVITA_API_KEY", } /** @@ -1258,7 +1262,8 @@ export function getAIModel(overrides?: ClientOverrides): ModelConfig { case "glm": case "qwen": case "qiniu": - case "kimi": { + case "kimi": + case "novita": { const envVar = PROVIDER_ENV_VARS[provider] if (!envVar) { throw new Error( @@ -1285,7 +1290,7 @@ export function getAIModel(overrides?: ClientOverrides): ModelConfig { default: throw new Error( - `Unknown AI provider: ${provider}. Supported providers: bedrock, openai, anthropic, google, azure, ollama, openrouter, deepseek, siliconflow, sglang, gateway, edgeone, doubao, modelscope, glm, qwen, qiniu, kimi, minimax`, + `Unknown AI provider: ${provider}. Supported providers: bedrock, openai, anthropic, google, azure, ollama, openrouter, deepseek, siliconflow, sglang, gateway, edgeone, doubao, modelscope, glm, qwen, qiniu, kimi, minimax, novita`, ) } diff --git a/lib/types/model-config.ts b/lib/types/model-config.ts index 9a5d433..c89ca10 100644 --- a/lib/types/model-config.ts +++ b/lib/types/model-config.ts @@ -21,6 +21,7 @@ export type ProviderName = | "qiniu" | "kimi" | "minimax" + | "novita" // Individual model configuration export interface ModelConfig { @@ -101,6 +102,7 @@ export const PROVIDER_LOGO_MAP: Record = { doubao: "bytedance", modelscope: "modelscope", minimax: "minimax", + novita: "novita", } // Provider metadata @@ -179,6 +181,10 @@ export const PROVIDER_INFO: Record< label: "MiniMax", defaultBaseUrl: "https://api.minimaxi.com/anthropic", }, + novita: { + label: "Novita AI", + defaultBaseUrl: "https://api.novita.ai/openai", + }, } // Suggested models per provider for quick add @@ -350,6 +356,12 @@ export const SUGGESTED_MODELS: Partial> = { "MiniMax-M2.5", "MiniMax-M2.5-highspeed", ], + novita: [ + // Novita AI models (OpenAI-compatible API) + "moonshotai/kimi-k2.5", + "zai-org/glm-5", + "minimax/minimax-m2.5", + ], } // Helper to generate UUID