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
+3 -2
View File
@@ -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 ||
+6 -1
View File
@@ -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
+8 -3
View File
@@ -28,6 +28,7 @@ export const SINGLE_SYSTEM_PROVIDERS = new Set<ProviderName>([
"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<ProviderName, string | null> = {
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`,
)
}
+12
View File
@@ -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<string, string> = {
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<Record<ProviderName, string[]>> = {
"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