From ac158455ff7aa8b6d746013435816b0975f38448 Mon Sep 17 00:00:00 2001 From: arvinxx Date: Fri, 7 Jun 2024 01:16:59 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E2=9C=A8=20feat:=20add=20stepfun?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../settings/llm/ProviderList/providers.tsx | 5 +++ src/app/api/chat/agentRuntime.ts | 7 ++++ src/config/llm.ts | 6 +++ src/config/modelProviders/index.ts | 4 ++ src/config/modelProviders/stepfun.ts | 38 +++++++++++++++++++ src/const/settings/llm.ts | 5 +++ src/libs/agent-runtime/AgentRuntime.ts | 7 ++++ src/libs/agent-runtime/stepfun/index.ts | 10 +++++ src/libs/agent-runtime/types/type.ts | 1 + src/server/globalConfig/index.ts | 4 +- src/types/user/settings/keyVaults.ts | 1 + 11 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/config/modelProviders/stepfun.ts create mode 100644 src/libs/agent-runtime/stepfun/index.ts diff --git a/src/app/(main)/settings/llm/ProviderList/providers.tsx b/src/app/(main)/settings/llm/ProviderList/providers.tsx index 11557fbb29e..750f705a396 100644 --- a/src/app/(main)/settings/llm/ProviderList/providers.tsx +++ b/src/app/(main)/settings/llm/ProviderList/providers.tsx @@ -31,6 +31,7 @@ import { OpenRouterProviderCard, PerplexityProviderCard, QwenProviderCard, + StepfunProviderCard, TogetherAIProviderCard, ZeroOneProviderCard, ZhiPuProviderCard, @@ -135,6 +136,10 @@ export const useProviderList = (): ProviderItem[] => { ...ZeroOneProviderCard, title: , }, + { + ...StepfunProviderCard, + title: , + }, ], [azureProvider, ollamaProvider, ollamaProvider, bedrockProvider], ); diff --git a/src/app/api/chat/agentRuntime.ts b/src/app/api/chat/agentRuntime.ts index a21210ae2eb..169559804bd 100644 --- a/src/app/api/chat/agentRuntime.ts +++ b/src/app/api/chat/agentRuntime.ts @@ -163,6 +163,13 @@ const getLlmOptionsFromPayload = (provider: string, payload: JWTPayload) => { const apiKey = apiKeyManager.pick(payload?.apiKey || QWEN_API_KEY); + return { apiKey }; + } + case ModelProvider.Stepfun: { + const { STEPFUN_API_KEY } = getLLMConfig(); + + const apiKey = apiKeyManager.pick(payload?.apiKey || STEPFUN_API_KEY); + return { apiKey }; } } diff --git a/src/config/llm.ts b/src/config/llm.ts index f4bd3ed7cb4..6cb23521a50 100644 --- a/src/config/llm.ts +++ b/src/config/llm.ts @@ -117,6 +117,9 @@ export const getLLMConfig = () => { ENABLED_QWEN: z.boolean(), QWEN_API_KEY: z.string().optional(), + + ENABLED_STEPFUN: z.boolean(), + STEPFUN_API_KEY: z.string().optional(), }, runtimeEnv: { API_KEY_SELECT_MODE: process.env.API_KEY_SELECT_MODE, @@ -188,6 +191,9 @@ export const getLLMConfig = () => { ENABLED_QWEN: !!process.env.QWEN_API_KEY, QWEN_API_KEY: process.env.QWEN_API_KEY, + + ENABLED_STEPFUN: !!process.env.STEPFUN_API_KEY, + STEPFUN_API_KEY: process.env.STEPFUN_API_KEY, }, }); }; diff --git a/src/config/modelProviders/index.ts b/src/config/modelProviders/index.ts index 12150c36f7e..4f61d4b0e0e 100644 --- a/src/config/modelProviders/index.ts +++ b/src/config/modelProviders/index.ts @@ -14,6 +14,7 @@ import OpenAIProvider from './openai'; import OpenRouterProvider from './openrouter'; import PerplexityProvider from './perplexity'; import QwenProvider from './qwen'; +import StepfunProvider from './stepfun'; import TogetherAIProvider from './togetherai'; import ZeroOneProvider from './zeroone'; import ZhiPuProvider from './zhipu'; @@ -35,6 +36,7 @@ export const LOBE_DEFAULT_MODEL_LIST: ChatModelCard[] = [ PerplexityProvider.chatModels, AnthropicProvider.chatModels, ZeroOneProvider.chatModels, + StepfunProvider.chatModels, ].flat(); export const DEFAULT_MODEL_PROVIDER_LIST = [ @@ -55,6 +57,7 @@ export const DEFAULT_MODEL_PROVIDER_LIST = [ MoonshotProvider, ZeroOneProvider, ZhiPuProvider, + StepfunProvider, ]; export const filterEnabledModels = (provider: ModelProviderCard) => { @@ -75,6 +78,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 StepfunProviderCard } from './stepfun'; export { default as TogetherAIProviderCard } from './togetherai'; export { default as ZeroOneProviderCard } from './zeroone'; export { default as ZhiPuProviderCard } from './zhipu'; diff --git a/src/config/modelProviders/stepfun.ts b/src/config/modelProviders/stepfun.ts new file mode 100644 index 00000000000..183d3dc96d0 --- /dev/null +++ b/src/config/modelProviders/stepfun.ts @@ -0,0 +1,38 @@ +import { ModelProviderCard } from '@/types/llm'; + +// ref https://platform.stepfun.com/docs/llm/text +const Stepfun: ModelProviderCard = { + chatModels: [ + { + enabled: true, + id: 'step-1-256k', + tokens: 32_768, + }, + { + enabled: true, + id: 'step-1-128k', + tokens: 32_768, + }, + { + enabled: true, + id: 'step-1-32k', + tokens: 32_768, + }, + { + enabled: true, + id: 'step-1v-32k', + tokens: 32_768, + vision: true, + }, + { + id: 'step-1-8k', + tokens: 8192, + }, + ], + checkModel: 'step-1-8k', + id: 'stepfun', + modelList: { showModelFetcher: true }, + name: '阶跃星辰', +}; + +export default Stepfun; diff --git a/src/const/settings/llm.ts b/src/const/settings/llm.ts index 0e251af724b..f468b2cb706 100644 --- a/src/const/settings/llm.ts +++ b/src/const/settings/llm.ts @@ -12,6 +12,7 @@ import { OpenRouterProviderCard, PerplexityProviderCard, QwenProviderCard, + StepfunProviderCard, TogetherAIProviderCard, ZeroOneProviderCard, ZhiPuProviderCard, @@ -77,6 +78,10 @@ export const DEFAULT_LLM_CONFIG: UserModelProviderConfig = { enabled: false, enabledModels: filterEnabledModels(QwenProviderCard), }, + stepfun: { + enabled: false, + enabledModels: filterEnabledModels(StepfunProviderCard), + }, togetherai: { enabled: false, enabledModels: filterEnabledModels(TogetherAIProviderCard), diff --git a/src/libs/agent-runtime/AgentRuntime.ts b/src/libs/agent-runtime/AgentRuntime.ts index ef07480ac6e..4ee26dbb7db 100644 --- a/src/libs/agent-runtime/AgentRuntime.ts +++ b/src/libs/agent-runtime/AgentRuntime.ts @@ -17,6 +17,7 @@ import { LobeOpenAI } from './openai'; import { LobeOpenRouterAI } from './openrouter'; import { LobePerplexityAI } from './perplexity'; import { LobeQwenAI } from './qwen'; +import { LobeStepfunAI } from './stepfun'; import { LobeTogetherAI } from './togetherai'; import { ChatCompetitionOptions, @@ -114,6 +115,7 @@ class AgentRuntime { openrouter: Partial; perplexity: Partial; qwen: Partial; + stepfun: Partial; togetherai: Partial; zeroone: Partial; zhipu: Partial; @@ -212,6 +214,11 @@ class AgentRuntime { runtimeModel = new LobeQwenAI(params.qwen ?? {}); break; } + + case ModelProvider.Stepfun: { + runtimeModel = new LobeStepfunAI(params.stepfun ?? {}); + break; + } } return new AgentRuntime(runtimeModel); diff --git a/src/libs/agent-runtime/stepfun/index.ts b/src/libs/agent-runtime/stepfun/index.ts new file mode 100644 index 00000000000..02727361279 --- /dev/null +++ b/src/libs/agent-runtime/stepfun/index.ts @@ -0,0 +1,10 @@ +import { ModelProvider } from '../types'; +import { LobeOpenAICompatibleFactory } from '../utils/openaiCompatibleFactory'; + +export const LobeStepfunAI = LobeOpenAICompatibleFactory({ + baseURL: 'https://api.stepfun.com/v1', + debug: { + chatCompletion: () => process.env.DEBUG_STEPFUN_CHAT_COMPLETION === '1', + }, + provider: ModelProvider.Stepfun, +}); diff --git a/src/libs/agent-runtime/types/type.ts b/src/libs/agent-runtime/types/type.ts index 3bcadf51767..bd5feef94b8 100644 --- a/src/libs/agent-runtime/types/type.ts +++ b/src/libs/agent-runtime/types/type.ts @@ -36,6 +36,7 @@ export enum ModelProvider { OpenRouter = 'openrouter', Perplexity = 'perplexity', Qwen = 'qwen', + Stepfun = 'stepfun', TogetherAI = 'togetherai', ZeroOne = 'zeroone', ZhiPu = 'zhipu', diff --git a/src/server/globalConfig/index.ts b/src/server/globalConfig/index.ts index 7a0a79cf60a..614e5083cc3 100644 --- a/src/server/globalConfig/index.ts +++ b/src/server/globalConfig/index.ts @@ -33,6 +33,7 @@ export const getServerGlobalConfig = () => { ENABLED_MINIMAX, ENABLED_MISTRAL, ENABLED_QWEN, + ENABLED_STEPFUN, ENABLED_AZURE_OPENAI, AZURE_MODEL_LIST, @@ -104,6 +105,8 @@ export const getServerGlobalConfig = () => { perplexity: { enabled: ENABLED_PERPLEXITY }, qwen: { enabled: ENABLED_QWEN }, + stepfun: { enabled: ENABLED_STEPFUN }, + togetherai: { enabled: ENABLED_TOGETHERAI, enabledModels: extractEnabledModels(TOGETHERAI_MODEL_LIST), @@ -112,7 +115,6 @@ export const getServerGlobalConfig = () => { modelString: TOGETHERAI_MODEL_LIST, }), }, - zeroone: { enabled: ENABLED_ZEROONE }, zhipu: { enabled: ENABLED_ZHIPU }, }, diff --git a/src/types/user/settings/keyVaults.ts b/src/types/user/settings/keyVaults.ts index 55696044ea4..b1aff3b572d 100644 --- a/src/types/user/settings/keyVaults.ts +++ b/src/types/user/settings/keyVaults.ts @@ -31,6 +31,7 @@ export interface UserKeyVaults { password?: string; perplexity?: OpenAICompatibleKeyVault; qwen?: OpenAICompatibleKeyVault; + stepfun?: OpenAICompatibleKeyVault; togetherai?: OpenAICompatibleKeyVault; zeroone?: OpenAICompatibleKeyVault; zhipu?: OpenAICompatibleKeyVault; From ee16af08abd12f688943cddc6f4c579c37d1cfed Mon Sep 17 00:00:00 2001 From: Arvin Xu Date: Sat, 8 Jun 2024 10:53:23 +0800 Subject: [PATCH 2/3] Update index.ts --- src/server/globalConfig/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/globalConfig/index.ts b/src/server/globalConfig/index.ts index 614e5083cc3..41c774f0946 100644 --- a/src/server/globalConfig/index.ts +++ b/src/server/globalConfig/index.ts @@ -115,6 +115,7 @@ export const getServerGlobalConfig = () => { modelString: TOGETHERAI_MODEL_LIST, }), }, + zeroone: { enabled: ENABLED_ZEROONE }, zhipu: { enabled: ENABLED_ZHIPU }, }, From a2dac14c90a898edd85797e3e630d45e37f7c2b4 Mon Sep 17 00:00:00 2001 From: Arvin Xu Date: Mon, 17 Jun 2024 09:31:32 +0000 Subject: [PATCH 3/3] add model and provider icon --- src/app/(main)/settings/llm/ProviderList/providers.tsx | 3 ++- src/components/ModelIcon/index.tsx | 2 ++ src/components/ModelProviderIcon/index.tsx | 5 +++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/app/(main)/settings/llm/ProviderList/providers.tsx b/src/app/(main)/settings/llm/ProviderList/providers.tsx index 750f705a396..5ca65b00471 100644 --- a/src/app/(main)/settings/llm/ProviderList/providers.tsx +++ b/src/app/(main)/settings/llm/ProviderList/providers.tsx @@ -10,6 +10,7 @@ import { Moonshot, OpenRouter, Perplexity, + Stepfun, Together, Tongyi, ZeroOne, @@ -138,7 +139,7 @@ export const useProviderList = (): ProviderItem[] => { }, { ...StepfunProviderCard, - title: , + title: , }, ], [azureProvider, ollamaProvider, ollamaProvider, bedrockProvider], diff --git a/src/components/ModelIcon/index.tsx b/src/components/ModelIcon/index.tsx index 932e9351906..a975c0f1426 100644 --- a/src/components/ModelIcon/index.tsx +++ b/src/components/ModelIcon/index.tsx @@ -26,6 +26,7 @@ import { Rwkv, Spark, Stability, + Stepfun, Tongyi, Wenxin, Yi, @@ -64,6 +65,7 @@ const ModelIcon = memo(({ model: originModel, size = 12 if (model.startsWith('openchat')) return ; if (model.includes('command')) return ; if (model.includes('dbrx')) return ; + if (model.includes('step')) return ; // below: To be supported in providers, move up if supported if (model.includes('baichuan')) diff --git a/src/components/ModelProviderIcon/index.tsx b/src/components/ModelProviderIcon/index.tsx index 0dfd8c98c3f..3fccbd2900b 100644 --- a/src/components/ModelProviderIcon/index.tsx +++ b/src/components/ModelProviderIcon/index.tsx @@ -13,6 +13,7 @@ import { OpenAI, OpenRouter, Perplexity, + Stepfun, Together, Tongyi, ZeroOne, @@ -109,6 +110,10 @@ const ModelProviderIcon = memo(({ provider }) => { return ; } + case ModelProvider.Stepfun: { + return ; + } + default: { return null; }