mirror of
https://github.com/RightNow-AI/openfang.git
synced 2026-08-14 00:47:51 +00:00
Add Novita AI as LLM provider
- Add NOVITA_BASE_URL constant to model_catalog.rs - Register novita provider in provider_defaults() with OpenAI-compatible endpoint - Add novita to known_providers() list - Add novita to detect_available_provider() auto-detection probe - Document NOVITA_API_KEY in .env.example Novita AI uses an OpenAI-compatible API at https://api.novita.ai/openai/v1 Default model: moonshotai/kimi-k2.5
This commit is contained in:
@@ -32,6 +32,9 @@
|
|||||||
# Fireworks AI
|
# Fireworks AI
|
||||||
# FIREWORKS_API_KEY=...
|
# FIREWORKS_API_KEY=...
|
||||||
|
|
||||||
|
# Novita AI (multi-model gateway)
|
||||||
|
# NOVITA_API_KEY=...
|
||||||
|
|
||||||
# ─── Local LLM Providers (no API key needed) ─────────────────────────
|
# ─── Local LLM Providers (no API key needed) ─────────────────────────
|
||||||
|
|
||||||
# Ollama (default: http://localhost:11434)
|
# Ollama (default: http://localhost:11434)
|
||||||
|
|||||||
@@ -18,10 +18,10 @@ use openfang_types::model_catalog::{
|
|||||||
AI21_BASE_URL, ANTHROPIC_BASE_URL, AZURE_OPENAI_BASE_URL, CEREBRAS_BASE_URL, CHUTES_BASE_URL,
|
AI21_BASE_URL, ANTHROPIC_BASE_URL, AZURE_OPENAI_BASE_URL, CEREBRAS_BASE_URL, CHUTES_BASE_URL,
|
||||||
COHERE_BASE_URL, DEEPSEEK_BASE_URL, FIREWORKS_BASE_URL, GEMINI_BASE_URL, GROQ_BASE_URL,
|
COHERE_BASE_URL, DEEPSEEK_BASE_URL, FIREWORKS_BASE_URL, GEMINI_BASE_URL, GROQ_BASE_URL,
|
||||||
HUGGINGFACE_BASE_URL, KIMI_CODING_BASE_URL, LEMONADE_BASE_URL, LMSTUDIO_BASE_URL,
|
HUGGINGFACE_BASE_URL, KIMI_CODING_BASE_URL, LEMONADE_BASE_URL, LMSTUDIO_BASE_URL,
|
||||||
MINIMAX_BASE_URL, MISTRAL_BASE_URL, MOONSHOT_BASE_URL, NVIDIA_NIM_BASE_URL, OLLAMA_BASE_URL,
|
MINIMAX_BASE_URL, MISTRAL_BASE_URL, MOONSHOT_BASE_URL, NVIDIA_NIM_BASE_URL, NOVITA_BASE_URL,
|
||||||
OPENAI_BASE_URL, OPENROUTER_BASE_URL, PERPLEXITY_BASE_URL, QIANFAN_BASE_URL, QWEN_BASE_URL,
|
OLLAMA_BASE_URL, OPENAI_BASE_URL, OPENROUTER_BASE_URL, PERPLEXITY_BASE_URL, QIANFAN_BASE_URL,
|
||||||
REPLICATE_BASE_URL, SAMBANOVA_BASE_URL, TOGETHER_BASE_URL, VENICE_BASE_URL, VLLM_BASE_URL,
|
QWEN_BASE_URL, REPLICATE_BASE_URL, SAMBANOVA_BASE_URL, TOGETHER_BASE_URL, VENICE_BASE_URL,
|
||||||
VOLCENGINE_BASE_URL, VOLCENGINE_CODING_BASE_URL, XAI_BASE_URL, ZAI_BASE_URL,
|
VLLM_BASE_URL, VOLCENGINE_BASE_URL, VOLCENGINE_CODING_BASE_URL, XAI_BASE_URL, ZAI_BASE_URL,
|
||||||
ZAI_CODING_BASE_URL, ZHIPU_BASE_URL, ZHIPU_CODING_BASE_URL,
|
ZAI_CODING_BASE_URL, ZHIPU_BASE_URL, ZHIPU_CODING_BASE_URL,
|
||||||
};
|
};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
@@ -222,6 +222,11 @@ fn provider_defaults(provider: &str) -> Option<ProviderDefaults> {
|
|||||||
api_key_env: "NVIDIA_API_KEY",
|
api_key_env: "NVIDIA_API_KEY",
|
||||||
key_required: true,
|
key_required: true,
|
||||||
}),
|
}),
|
||||||
|
"novita" | "novita-ai" => Some(ProviderDefaults {
|
||||||
|
base_url: NOVITA_BASE_URL,
|
||||||
|
api_key_env: "NOVITA_API_KEY",
|
||||||
|
key_required: true,
|
||||||
|
}),
|
||||||
"azure" | "azure-openai" => Some(ProviderDefaults {
|
"azure" | "azure-openai" => Some(ProviderDefaults {
|
||||||
base_url: AZURE_OPENAI_BASE_URL,
|
base_url: AZURE_OPENAI_BASE_URL,
|
||||||
api_key_env: "AZURE_OPENAI_API_KEY",
|
api_key_env: "AZURE_OPENAI_API_KEY",
|
||||||
@@ -530,6 +535,7 @@ pub fn detect_available_provider() -> Option<(&'static str, &'static str, &'stat
|
|||||||
"PERPLEXITY_API_KEY",
|
"PERPLEXITY_API_KEY",
|
||||||
),
|
),
|
||||||
("cohere", "command-r-plus", "COHERE_API_KEY"),
|
("cohere", "command-r-plus", "COHERE_API_KEY"),
|
||||||
|
("novita", "moonshotai/kimi-k2.5", "NOVITA_API_KEY"),
|
||||||
];
|
];
|
||||||
for &(provider, model, env_var) in PROBE_ORDER {
|
for &(provider, model, env_var) in PROBE_ORDER {
|
||||||
if std::env::var(env_var)
|
if std::env::var(env_var)
|
||||||
@@ -587,6 +593,7 @@ pub fn known_providers() -> &'static [&'static str] {
|
|||||||
"chutes",
|
"chutes",
|
||||||
"venice",
|
"venice",
|
||||||
"nvidia",
|
"nvidia",
|
||||||
|
"novita",
|
||||||
"codex",
|
"codex",
|
||||||
"claude-code",
|
"claude-code",
|
||||||
"qwen-code",
|
"qwen-code",
|
||||||
@@ -691,11 +698,12 @@ mod tests {
|
|||||||
assert!(providers.contains(&"volcengine"));
|
assert!(providers.contains(&"volcengine"));
|
||||||
assert!(providers.contains(&"chutes"));
|
assert!(providers.contains(&"chutes"));
|
||||||
assert!(providers.contains(&"nvidia"));
|
assert!(providers.contains(&"nvidia"));
|
||||||
|
assert!(providers.contains(&"novita"));
|
||||||
assert!(providers.contains(&"codex"));
|
assert!(providers.contains(&"codex"));
|
||||||
assert!(providers.contains(&"claude-code"));
|
assert!(providers.contains(&"claude-code"));
|
||||||
assert!(providers.contains(&"qwen-code"));
|
assert!(providers.contains(&"qwen-code"));
|
||||||
assert!(providers.contains(&"azure"));
|
assert!(providers.contains(&"azure"));
|
||||||
assert_eq!(providers.len(), 37);
|
assert_eq!(providers.len(), 38);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
@@ -32,6 +32,10 @@ pub const REPLICATE_BASE_URL: &str = "https://api.replicate.com/v1";
|
|||||||
pub const VENICE_BASE_URL: &str = "https://api.venice.ai/api/v1";
|
pub const VENICE_BASE_URL: &str = "https://api.venice.ai/api/v1";
|
||||||
pub const NVIDIA_NIM_BASE_URL: &str = "https://integrate.api.nvidia.com/v1";
|
pub const NVIDIA_NIM_BASE_URL: &str = "https://integrate.api.nvidia.com/v1";
|
||||||
|
|
||||||
|
// ── Novita AI ─────────────────────────────────────────────────────
|
||||||
|
/// Novita AI OpenAI-compatible endpoint.
|
||||||
|
pub const NOVITA_BASE_URL: &str = "https://api.novita.ai/openai/v1";
|
||||||
|
|
||||||
// ── GitHub Copilot ──────────────────────────────────────────────
|
// ── GitHub Copilot ──────────────────────────────────────────────
|
||||||
pub const GITHUB_COPILOT_BASE_URL: &str = "https://api.githubcopilot.com";
|
pub const GITHUB_COPILOT_BASE_URL: &str = "https://api.githubcopilot.com";
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user