Skip to content

Commit

Permalink
✨ feat: add SambaNova provider support (lobehub#6218)
Browse files Browse the repository at this point in the history
* ✨ feat: add SambaNova provider support

* 🐛 fix: fix build error

* 🔨 chore: disable Browser Request & `DeepSeek-R1` model
  • Loading branch information
hezhijie0327 authored Feb 17, 2025
1 parent e061a20 commit a46eadf
Show file tree
Hide file tree
Showing 12 changed files with 251 additions and 0 deletions.
2 changes: 2 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,8 @@ ENV \
PERPLEXITY_API_KEY="" PERPLEXITY_MODEL_LIST="" PERPLEXITY_PROXY_URL="" \
# Qwen
QWEN_API_KEY="" QWEN_MODEL_LIST="" QWEN_PROXY_URL="" \
# SambaNova
SAMBANOVA_API_KEY="" SAMBANOVA_MODEL_LIST="" \
# SenseNova
SENSENOVA_API_KEY="" SENSENOVA_MODEL_LIST="" \
# SiliconCloud
Expand Down
2 changes: 2 additions & 0 deletions Dockerfile.database
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,8 @@ ENV \
PERPLEXITY_API_KEY="" PERPLEXITY_MODEL_LIST="" PERPLEXITY_PROXY_URL="" \
# Qwen
QWEN_API_KEY="" QWEN_MODEL_LIST="" QWEN_PROXY_URL="" \
# SambaNova
SAMBANOVA_API_KEY="" SAMBANOVA_MODEL_LIST="" \
# SenseNova
SENSENOVA_API_KEY="" SENSENOVA_MODEL_LIST="" \
# SiliconCloud
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import {
OpenRouterProviderCard,
PerplexityProviderCard,
QwenProviderCard,
SambaNovaProviderCard,
SenseNovaProviderCard,
SiliconCloudProviderCard,
SparkProviderCard,
Expand Down Expand Up @@ -79,6 +80,7 @@ export const useProviderList = (): ProviderItem[] => {
UpstageProviderCard,
XAIProviderCard,
JinaProviderCard,
SambaNovaProviderCard,
QwenProviderCard,
WenxinProviderCard,
HunyuanProviderCard,
Expand Down
3 changes: 3 additions & 0 deletions src/config/aiModels/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import { default as openai } from './openai';
import { default as openrouter } from './openrouter';
import { default as perplexity } from './perplexity';
import { default as qwen } from './qwen';
import { default as sambanova } from './sambanova';
import { default as sensenova } from './sensenova';
import { default as siliconcloud } from './siliconcloud';
import { default as spark } from './spark';
Expand Down Expand Up @@ -97,6 +98,7 @@ export const LOBE_DEFAULT_MODEL_LIST = buildDefaultModelList({
openrouter,
perplexity,
qwen,
sambanova,
sensenova,
siliconcloud,
spark,
Expand Down Expand Up @@ -144,6 +146,7 @@ export { default as openai } from './openai';
export { default as openrouter } from './openrouter';
export { default as perplexity } from './perplexity';
export { default as qwen } from './qwen';
export { default as sambanova } from './sambanova';
export { default as sensenova } from './sensenova';
export { default as siliconcloud } from './siliconcloud';
export { default as spark } from './spark';
Expand Down
195 changes: 195 additions & 0 deletions src/config/aiModels/sambanova.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
import { AIChatModelCard } from '@/types/aiModel';

const sambanovaChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
},
contextWindowTokens: 16_000,
description: 'Llama 3.3 是 Llama 系列最先进的多语言开源大型语言模型,以极低成本体验媲美 405B 模型的性能。基于 Transformer 结构,并通过监督微调(SFT)和人类反馈强化学习(RLHF)提升有用性和安全性。其指令调优版本专为多语言对话优化,在多项行业基准上表现优于众多开源和封闭聊天模型。知识截止日期为 2023 年 12 月',
displayName: 'Meta Llama 3.3 70B Instruct',
enabled: true,
id: 'Meta-Llama-3.3-70B-Instruct',
pricing: {
input: 0.6,
output: 1.2
},
type: 'chat'
},
{
contextWindowTokens: 16_000,
description: '先进的最尖端小型语言模型,具备语言理解、卓越的推理能力和文本生成能力。',
displayName: 'Meta Llama 3.2 1B Instruct',
id: 'Meta-Llama-3.2-1B-Instruct',
pricing: {
input: 0.04,
output: 0.08
},
type: 'chat'
},
{
contextWindowTokens: 8000,
description: '先进的最尖端小型语言模型,具备语言理解、卓越的推理能力和文本生成能力。',
displayName: 'Meta Llama 3.2 3B Instruct',
id: 'Meta-Llama-3.2-3B-Instruct',
pricing: {
input: 0.08,
output: 0.16
},
type: 'chat'
},
{
abilities: {
vision: true,
},
contextWindowTokens: 4000,
description: '在高分辨率图像上表现出色的图像推理能力,适用于视觉理解应用。',
displayName: 'Meta Llama 3.2 11B Vision Instruct',
enabled: true,
id: 'Llama-3.2-11B-Vision-Instruct',
pricing: {
input: 0.15,
output: 0.3
},
type: 'chat'
},
{
abilities: {
vision: true,
},
contextWindowTokens: 4000,
description: '适用于视觉理解代理应用的高级图像推理能力。',
displayName: 'Meta Llama 3.2 90B Vision Instruct',
enabled: true,
id: 'Llama-3.2-90B-Vision-Instruct ',
pricing: {
input: 0.8,
output: 1.6
},
type: 'chat'
},
{
abilities: {
functionCall: true,
},
contextWindowTokens: 16_000,
description: 'Llama 3.1指令调优的文本模型,针对多语言对话用例进行了优化,在许多可用的开源和封闭聊天模型中,在常见行业基准上表现优异。',
displayName: 'Meta Llama 3.1 8B Instruct',
id: 'Meta-Llama-3.1-8B-Instruct',
pricing: {
input: 0.1,
output: 0.2
},
type: 'chat'
},
{
abilities: {
functionCall: true,
},
contextWindowTokens: 128_000,
description: 'Llama 3.1指令调优的文本模型,针对多语言对话用例进行了优化,在许多可用的开源和封闭聊天模型中,在常见行业基准上表现优异。',
displayName: 'Meta Llama 3.1 70B Instruct',
id: 'Meta-Llama-3.1-70B-Instruct',
pricing: {
input: 0.6,
output: 1.2
},
type: 'chat'
},
{
abilities: {
functionCall: true,
},
contextWindowTokens: 16_000,
description: 'Llama 3.1指令调优的文本模型,针对多语言对话用例进行了优化,在许多可用的开源和封闭聊天模型中,在常见行业基准上表现优异。',
displayName: 'Meta Llama 3.1 405B Instruct',
id: 'Meta-Llama-3.1-405B-Instruct',
pricing: {
input: 5,
output: 10
},
type: 'chat'
},
{
contextWindowTokens: 16_000,
displayName: 'Llama 3.1 Tulu 3 405B',
id: 'Llama-3.1-Tulu-3-405B',
pricing: {
input: 0.7,
output: 1.4
},
type: 'chat'
},
{
abilities: {
reasoning: true,
},
contextWindowTokens: 4000,
description: '最先进的高效 LLM,擅长推理、数学和编程。',
displayName: 'DeepSeek R1',
id: 'DeepSeek-R1',
pricing: {
input: 5,
output: 7
},
type: 'chat'
},
{
abilities: {
reasoning: true,
},
contextWindowTokens: 32_000,
description: 'DeepSeek R1——DeepSeek 套件中更大更智能的模型——被蒸馏到 Llama 70B 架构中。基于基准测试和人工评估,该模型比原始 Llama 70B 更智能,尤其在需要数学和事实精确性的任务上表现出色。',
displayName: 'DeepSeek R1 Distill Llama 70B',
enabled: true,
id: 'DeepSeek-R1-Distill-Llama-70B',
pricing: {
input: 0.7,
output: 1.4
},
type: 'chat'
},
{
abilities: {
reasoning: true,
},
contextWindowTokens: 16_000,
description: 'Qwen QwQ 是由 Qwen 团队开发的实验研究模型,专注于提升AI推理能力。',
displayName: 'QwQ 32B Preview',
enabled: true,
id: 'QwQ-32B-Preview',
pricing: {
input: 1.5,
output: 3
},
type: 'chat'
},
{
contextWindowTokens: 16_000,
description: '面向中文和英文的 LLM,针对语言、编程、数学、推理等领域。',
displayName: 'Qwen2.5 72B Instruct',
enabled: true,
id: 'Qwen2.5-72B-Instruct',
pricing: {
input: 2,
output: 4
},
type: 'chat'
},
{
contextWindowTokens: 16_000,
description: '高级 LLM,支持代码生成、推理和修复,涵盖主流编程语言。',
displayName: 'Qwen2.5 Coder 32B Instruct',
enabled: true,
id: 'Qwen2.5-Coder-32B-Instruct',
pricing: {
input: 1.5,
output: 3
},
type: 'chat'
},
]

export const allModels = [...sambanovaChatModels];

export default allModels;
6 changes: 6 additions & 0 deletions src/config/llm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,9 @@ export const getLLMConfig = () => {

ENABLED_JINA: z.boolean(),
JINA_API_KEY: z.string().optional(),

ENABLED_SAMBANOVA: z.boolean(),
SAMBANOVA_API_KEY: z.string().optional(),
},
runtimeEnv: {
API_KEY_SELECT_MODE: process.env.API_KEY_SELECT_MODE,
Expand Down Expand Up @@ -278,6 +281,9 @@ export const getLLMConfig = () => {

ENABLED_JINA: !!process.env.JINA_API_KEY,
JINA_API_KEY: process.env.JINA_API_KEY,

ENABLED_SAMBANOVA: !!process.env.SAMBANOVA_API_KEY,
SAMBANOVA_API_KEY: process.env.SAMBANOVA_API_KEY,
},
});
};
Expand Down
4 changes: 4 additions & 0 deletions src/config/modelProviders/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import OpenAIProvider from './openai';
import OpenRouterProvider from './openrouter';
import PerplexityProvider from './perplexity';
import QwenProvider from './qwen';
import SambaNovaProvider from './sambanova';
import SenseNovaProvider from './sensenova';
import SiliconCloudProvider from './siliconcloud';
import SparkProvider from './spark';
Expand Down Expand Up @@ -71,6 +72,7 @@ export const LOBE_DEFAULT_MODEL_LIST: ChatModelCard[] = [
HuggingFaceProvider.chatModels,
XAIProvider.chatModels,
JinaProvider.chatModels,
SambaNovaProvider.chatModels,
ZeroOneProvider.chatModels,
StepfunProvider.chatModels,
NovitaProvider.chatModels,
Expand Down Expand Up @@ -116,6 +118,7 @@ export const DEFAULT_MODEL_PROVIDER_LIST = [
UpstageProvider,
XAIProvider,
JinaProvider,
SambaNovaProvider,
QwenProvider,
WenxinProvider,
TencentcloudProvider,
Expand Down Expand Up @@ -179,6 +182,7 @@ export { default as OpenAIProviderCard } from './openai';
export { default as OpenRouterProviderCard } from './openrouter';
export { default as PerplexityProviderCard } from './perplexity';
export { default as QwenProviderCard } from './qwen';
export { default as SambaNovaProviderCard } from './sambanova';
export { default as SenseNovaProviderCard } from './sensenova';
export { default as SiliconCloudProviderCard } from './siliconcloud';
export { default as SparkProviderCard } from './spark';
Expand Down
18 changes: 18 additions & 0 deletions src/config/modelProviders/sambanova.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { ModelProviderCard } from '@/types/llm';

const SambaNova: ModelProviderCard = {
chatModels: [],
checkModel: 'Meta-Llama-3.2-1B-Instruct',
description: 'SambaNova Cloud 可让开发者轻松使用最佳的开源模型,并享受最快的推理速度。',
disableBrowserRequest: true,
id: 'sambanova',
modelsUrl: 'https://cloud.sambanova.ai/plans/pricing',
name: 'SambaNova',
settings: {
disableBrowserRequest: true,
sdkType: 'openai',
},
url: 'https://cloud.sambanova.ai',
};

export default SambaNova;
7 changes: 7 additions & 0 deletions src/libs/agent-runtime/AgentRuntime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import { LobeOpenAI } from './openai';
import { LobeOpenRouterAI } from './openrouter';
import { LobePerplexityAI } from './perplexity';
import { LobeQwenAI } from './qwen';
import { LobeSambaNovaAI } from './sambanova';
import { LobeSenseNovaAI } from './sensenova';
import { LobeSiliconCloudAI } from './siliconcloud';
import { LobeSparkAI } from './spark';
Expand Down Expand Up @@ -169,6 +170,7 @@ class AgentRuntime {
openrouter: Partial<ClientOptions>;
perplexity: Partial<ClientOptions>;
qwen: Partial<ClientOptions>;
sambanova: Partial<ClientOptions>;
sensenova: Partial<ClientOptions>;
siliconcloud: Partial<ClientOptions>;
spark: Partial<ClientOptions>;
Expand Down Expand Up @@ -384,6 +386,11 @@ class AgentRuntime {
break;
}

case ModelProvider.SambaNova: {
runtimeModel = new LobeSambaNovaAI(params.sambanova);
break;
}

case ModelProvider.Cloudflare: {
runtimeModel = new LobeCloudflareAI(params.cloudflare);
break;
Expand Down
10 changes: 10 additions & 0 deletions src/libs/agent-runtime/sambanova/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { ModelProvider } from '../types';
import { LobeOpenAICompatibleFactory } from '../utils/openaiCompatibleFactory';

export const LobeSambaNovaAI = LobeOpenAICompatibleFactory({
baseURL: 'https://api.sambanova.ai/v1',
debug: {
chatCompletion: () => process.env.DEBUG_SAMBANOVA_CHAT_COMPLETION === '1',
},
provider: ModelProvider.SambaNova,
});
1 change: 1 addition & 0 deletions src/libs/agent-runtime/types/type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ export enum ModelProvider {
OpenRouter = 'openrouter',
Perplexity = 'perplexity',
Qwen = 'qwen',
SambaNova = 'sambanova',
SenseNova = 'sensenova',
SiliconCloud = 'siliconcloud',
Spark = 'spark',
Expand Down
1 change: 1 addition & 0 deletions src/types/user/settings/keyVaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ export interface UserKeyVaults {
password?: string;
perplexity?: OpenAICompatibleKeyVault;
qwen?: OpenAICompatibleKeyVault;
sambanova?: OpenAICompatibleKeyVault;
sensenova?: OpenAICompatibleKeyVault;
siliconcloud?: OpenAICompatibleKeyVault;
spark?: OpenAICompatibleKeyVault;
Expand Down

0 comments on commit a46eadf

Please sign in to comment.