diff --git a/src/app/(main)/settings/llm/ProviderList/providers.tsx b/src/app/(main)/settings/llm/ProviderList/providers.tsx
index 11557fbb29e2a..5ca65b00471fd 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,
@@ -31,6 +32,7 @@ import {
OpenRouterProviderCard,
PerplexityProviderCard,
QwenProviderCard,
+ StepfunProviderCard,
TogetherAIProviderCard,
ZeroOneProviderCard,
ZhiPuProviderCard,
@@ -135,6 +137,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 a21210ae2ebb5..169559804bdcd 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/components/ModelIcon/index.tsx b/src/components/ModelIcon/index.tsx
index 932e93519065b..a975c0f1426f5 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 0dfd8c98c3fc0..3fccbd2900bfc 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;
}
diff --git a/src/config/llm.ts b/src/config/llm.ts
index f4bd3ed7cb430..6cb23521a50fd 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 12150c36f7ea4..4f61d4b0e0e58 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 0000000000000..183d3dc96d043
--- /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 0e251af724b1e..f468b2cb70666 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 ef07480ac6e09..4ee26dbb7db7e 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 0000000000000..02727361279ea
--- /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 3bcadf517675d..bd5feef94b88f 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 7a0a79cf60ab3..41c774f094606 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),
diff --git a/src/types/user/settings/keyVaults.ts b/src/types/user/settings/keyVaults.ts
index e99d1411c782f..117254f2b5114 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;