Merge pull request #758 from Alex-wuhu/novita-integration

feat: add Novita AI as LLM provider
This commit is contained in:
Dayuan Jiang
2026-03-30 19:44:23 +09:00
committed by GitHub
4 changed files with 29 additions and 6 deletions

View File

@@ -345,11 +345,12 @@ export async function POST(req: Request) {
break break
} }
// GLM, Qwen, Kimi, Qiniu - OpenAI compatible // GLM, Qwen, Kimi, Qiniu, Novita - OpenAI compatible
case "glm": case "glm":
case "qwen": case "qwen":
case "kimi": case "kimi":
case "qiniu": { case "qiniu":
case "novita": {
const baseURL = const baseURL =
baseUrl || baseUrl ||
PROVIDER_INFO[provider as ProviderName]?.defaultBaseUrl || PROVIDER_INFO[provider as ProviderName]?.defaultBaseUrl ||

View File

@@ -1,6 +1,6 @@
# AI Provider Configuration # AI Provider Configuration
# AI_PROVIDER: Which provider to use # 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 # Default: bedrock
AI_PROVIDER=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 # Get your API key from: https://www.qiniu.com/ai/models
# QINIU_API_KEY=your_qiniu_api_key # QINIU_API_KEY=your_qiniu_api_key
# QINIU_BASE_URL=https://api.qnaigc.com/v1 # Optional, default # 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

View File

@@ -28,6 +28,7 @@ export const SINGLE_SYSTEM_PROVIDERS = new Set<ProviderName>([
"qwen", "qwen",
"kimi", "kimi",
"qiniu", "qiniu",
"novita",
]) ])
/** /**
@@ -98,6 +99,7 @@ const ALLOWED_CLIENT_PROVIDERS: ProviderName[] = [
"qiniu", "qiniu",
"kimi", "kimi",
"minimax", "minimax",
"novita",
] ]
// Bedrock provider options for Anthropic beta features // Bedrock provider options for Anthropic beta features
@@ -520,7 +522,8 @@ function buildProviderOptions(
case "glm": case "glm":
case "qwen": case "qwen":
case "kimi": case "kimi":
case "qiniu": { case "qiniu":
case "novita": {
// These providers don't have reasoning configs in AI SDK yet // These providers don't have reasoning configs in AI SDK yet
// Gateway passes through to underlying providers which handle their own configs // Gateway passes through to underlying providers which handle their own configs
break break
@@ -555,6 +558,7 @@ const PROVIDER_ENV_VARS: Record<ProviderName, string | null> = {
qiniu: "QINIU_API_KEY", qiniu: "QINIU_API_KEY",
kimi: "KIMI_API_KEY", kimi: "KIMI_API_KEY",
minimax: "MINIMAX_API_KEY", minimax: "MINIMAX_API_KEY",
novita: "NOVITA_API_KEY",
} }
/** /**
@@ -1258,7 +1262,8 @@ export function getAIModel(overrides?: ClientOverrides): ModelConfig {
case "glm": case "glm":
case "qwen": case "qwen":
case "qiniu": case "qiniu":
case "kimi": { case "kimi":
case "novita": {
const envVar = PROVIDER_ENV_VARS[provider] const envVar = PROVIDER_ENV_VARS[provider]
if (!envVar) { if (!envVar) {
throw new Error( throw new Error(
@@ -1285,7 +1290,7 @@ export function getAIModel(overrides?: ClientOverrides): ModelConfig {
default: default:
throw new Error( 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`,
) )
} }

View File

@@ -21,6 +21,7 @@ export type ProviderName =
| "qiniu" | "qiniu"
| "kimi" | "kimi"
| "minimax" | "minimax"
| "novita"
// Individual model configuration // Individual model configuration
export interface ModelConfig { export interface ModelConfig {
@@ -101,6 +102,7 @@ export const PROVIDER_LOGO_MAP: Record<string, string> = {
doubao: "bytedance", doubao: "bytedance",
modelscope: "modelscope", modelscope: "modelscope",
minimax: "minimax", minimax: "minimax",
novita: "novita",
} }
// Provider metadata // Provider metadata
@@ -179,6 +181,10 @@ export const PROVIDER_INFO: Record<
label: "MiniMax", label: "MiniMax",
defaultBaseUrl: "https://api.minimaxi.com/anthropic", defaultBaseUrl: "https://api.minimaxi.com/anthropic",
}, },
novita: {
label: "Novita AI",
defaultBaseUrl: "https://api.novita.ai/openai",
},
} }
// Suggested models per provider for quick add // Suggested models per provider for quick add
@@ -350,6 +356,12 @@ export const SUGGESTED_MODELS: Partial<Record<ProviderName, string[]>> = {
"MiniMax-M2.5", "MiniMax-M2.5",
"MiniMax-M2.5-highspeed", "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 // Helper to generate UUID