diff --git a/.env.example b/.env.example
index a4ed7b5943ef..80c71c6b77e4 100644
--- a/.env.example
+++ b/.env.example
@@ -39,6 +39,12 @@ OPENAI_API_KEY=sk-xxxxxxxxx
#ZHIPU_API_KEY=xxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxx
+########################################
+########## Moonshot AI Service #########
+########################################
+
+#MOONSHOT_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+
########################################
########### Google AI Service ##########
########################################
diff --git a/Dockerfile b/Dockerfile
index 6b57aff14492..34ad12d2c921 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -75,4 +75,7 @@ ENV GOOGLE_API_KEY ""
# Zhipu
ENV ZHIPU_API_KEY ""
+# Moonshot
+ENV MOONSHOT_API_KEY ""
+
CMD ["node", "server.js"]
diff --git a/docs/Deployment/Environment-Variable.md b/docs/Deployment/Environment-Variable.md
index f2b616a8a617..658888bfcddb 100644
--- a/docs/Deployment/Environment-Variable.md
+++ b/docs/Deployment/Environment-Variable.md
@@ -10,6 +10,7 @@ LobeChat provides additional configuration options during deployment, which can
- [OpenAI](#openai)
- [Azure OpenAI](#azure-openai)
- [Zhipu AI](#zhipu-ai)
+ - [Moonshot AI](#moonshot-ai)
- [Google AI](#google-ai)
- [AWS Bedrock](#aws-bedrock)
- [Plugin Service](#plugin-service)
@@ -108,6 +109,15 @@ If you need to use Azure OpenAI to provide model services, you can refer to the
- Default Value: -
- Example: `4582d332441a313f5c2ed9824d1798ca.rC8EcTAhgbOuAuVT`
+### Moonshot AI
+
+#### `MOONSHOT_API_KEY`
+
+- Type: Required
+- Description: This is the API key you applied for in the Zhipu AI service
+- Default Value: -
+- Example: `Y2xpdGhpMzNhZXNoYjVtdnZjMWc6bXNrLWIxQlk3aDNPaXpBWnc0V1RaMDhSRmRFVlpZUWY=`
+
### Google AI
#### `GOOGLE_API_KEY`
diff --git a/docs/Deployment/Environment-Variable.zh-CN.md b/docs/Deployment/Environment-Variable.zh-CN.md
index 6d7f95ac8c94..c36212c681ad 100644
--- a/docs/Deployment/Environment-Variable.zh-CN.md
+++ b/docs/Deployment/Environment-Variable.zh-CN.md
@@ -10,6 +10,7 @@ LobeChat 在部署时提供了一些额外的配置项,使用环境变量进
- [OpenAI](#openai)
- [Azure OpenAI](#azure-openai)
- [智谱 AI](#智谱-ai)
+ - [Moonshot AI](#moonshot-ai)
- [Google AI](#google-ai)
- [AWS Bedrock](#aws-bedrock)
- [插件服务](#插件服务)
@@ -106,6 +107,15 @@ LobeChat 在部署时提供了一些额外的配置项,使用环境变量进
- 默认值:-
- 示例:`4582d332441a313f5c2ed9824d1798ca.rC8EcTAhgbOuAuVT`
+### Moonshot AI
+
+#### `MOONSHOT_API_KEY`
+
+- 类型:必选
+- 描述:这是你在 Moonshot AI 服务中申请的 API 密钥
+- 默认值:-
+- 示例:`Y2xpdGhpMzNhZXNoYjVtdnZjMWc6bXNrLWIxQlk3aDNPaXpBWnc0V1RaMDhSRmRFVlpZUWY=`
+
### Google AI
#### `GOOGLE_API_KEY`
diff --git a/src/app/api/chat/[provider]/agentRuntime.ts b/src/app/api/chat/[provider]/agentRuntime.ts
index fcf2dbaef2b2..0afa81debb56 100644
--- a/src/app/api/chat/[provider]/agentRuntime.ts
+++ b/src/app/api/chat/[provider]/agentRuntime.ts
@@ -5,6 +5,7 @@ import {
LobeAzureOpenAI,
LobeBedrockAI,
LobeGoogleAI,
+ LobeMoonshotAI,
LobeOpenAI,
LobeRuntimeAI,
LobeZhipuAI,
@@ -16,6 +17,7 @@ interface AzureOpenAIParams {
model: string;
useAzure?: boolean;
}
+
class AgentRuntime {
private _runtime: LobeRuntimeAI;
@@ -57,6 +59,11 @@ class AgentRuntime {
break;
}
+ case ModelProvider.Moonshot: {
+ runtimeModel = this.initMoonshot(payload);
+ break;
+ }
+
case ModelProvider.Bedrock: {
runtimeModel = this.initBedrock(payload);
}
@@ -102,6 +109,13 @@ class AgentRuntime {
return LobeZhipuAI.fromAPIKey(apiKey);
}
+ private static initMoonshot(payload: JWTPayload) {
+ const { MOONSHOT_API_KEY, MOONSHOT_PROXY_URL } = getServerConfig();
+ const apiKey = payload?.apiKey || MOONSHOT_API_KEY;
+
+ return new LobeMoonshotAI(apiKey, MOONSHOT_PROXY_URL);
+ }
+
private static initGoogle(payload: JWTPayload) {
const { GOOGLE_API_KEY } = getServerConfig();
const apiKey = payload?.apiKey || GOOGLE_API_KEY;
diff --git a/src/app/api/config/route.ts b/src/app/api/config/route.ts
index 5975b27c524d..99e7ade94fb0 100644
--- a/src/app/api/config/route.ts
+++ b/src/app/api/config/route.ts
@@ -7,13 +7,15 @@ export const runtime = 'edge';
* get Server config to client
*/
export const GET = async () => {
- const { CUSTOM_MODELS, ENABLED_ZHIPU, ENABLED_AWS_BEDROCK, ENABLED_GOOGLE } = getServerConfig();
+ const { CUSTOM_MODELS, ENABLED_MOONSHOT, ENABLED_ZHIPU, ENABLED_AWS_BEDROCK, ENABLED_GOOGLE } =
+ getServerConfig();
const config: GlobalServerConfig = {
customModelName: CUSTOM_MODELS,
languageModel: {
bedrock: { enabled: ENABLED_AWS_BEDROCK },
google: { enabled: ENABLED_GOOGLE },
+ moonshot: { enabled: ENABLED_MOONSHOT },
zhipu: { enabled: ENABLED_ZHIPU },
},
};
diff --git a/src/app/api/errorResponse.ts b/src/app/api/errorResponse.ts
index c864a080b387..9dde96feb6ab 100644
--- a/src/app/api/errorResponse.ts
+++ b/src/app/api/errorResponse.ts
@@ -34,8 +34,10 @@ const getStatus = (errorType: ILobeAgentRuntimeErrorType | ErrorType) => {
case AgentRuntimeErrorType.GoogleBizError: {
return 475;
}
+ case AgentRuntimeErrorType.MoonshotBizError: {
+ return 476;
+ }
}
-
return errorType as number;
};
diff --git a/src/app/settings/llm/Moonshot/index.tsx b/src/app/settings/llm/Moonshot/index.tsx
new file mode 100644
index 000000000000..830fd2a3bd5a
--- /dev/null
+++ b/src/app/settings/llm/Moonshot/index.tsx
@@ -0,0 +1,77 @@
+import { Moonshot } from '@lobehub/icons';
+import { Form, type ItemGroup } from '@lobehub/ui';
+import { Form as AntForm, Input, Switch } from 'antd';
+import { useTheme } from 'antd-style';
+import { debounce } from 'lodash-es';
+import { memo } from 'react';
+import { useTranslation } from 'react-i18next';
+import { Flexbox } from 'react-layout-kit';
+
+import { FORM_STYLE } from '@/const/layoutTokens';
+import { ModelProvider } from '@/libs/agent-runtime';
+import { useGlobalStore } from '@/store/global';
+import { modelProviderSelectors } from '@/store/global/selectors';
+
+import Checker from '../Checker';
+import { LLMProviderApiTokenKey, LLMProviderConfigKey } from '../const';
+import { useSyncSettings } from '../useSyncSettings';
+
+const providerKey = 'moonshot';
+
+const MoonshotProvider = memo(() => {
+ const { t } = useTranslation('setting');
+ const [form] = AntForm.useForm();
+ const theme = useTheme();
+ const [toggleProviderEnabled, setSettings] = useGlobalStore((s) => [
+ s.toggleProviderEnabled,
+ s.setSettings,
+ ]);
+ const enabled = useGlobalStore(modelProviderSelectors.enableMoonshot);
+
+ useSyncSettings(form);
+
+ const model: ItemGroup = {
+ children: [
+ {
+ children: (
+
+ ),
+ desc: t('llm.Moonshot.token.desc'),
+ label: t('llm.Moonshot.token.title'),
+ name: [LLMProviderConfigKey, providerKey, LLMProviderApiTokenKey],
+ },
+ {
+ children: ,
+ desc: t('llm.checker.desc'),
+ label: t('llm.checker.title'),
+ minWidth: undefined,
+ },
+ ],
+ defaultActive: enabled,
+ extra: (
+ {
+ toggleProviderEnabled(providerKey, enabled);
+ }}
+ value={enabled}
+ />
+ ),
+ title: (
+
+
+
+ ),
+ };
+
+ return (
+
+ );
+});
+
+export default MoonshotProvider;
diff --git a/src/app/settings/llm/page.tsx b/src/app/settings/llm/page.tsx
index 69f5b378074a..4cd41d3e9101 100644
--- a/src/app/settings/llm/page.tsx
+++ b/src/app/settings/llm/page.tsx
@@ -11,6 +11,7 @@ import { SettingsTabs } from '@/store/global/initialState';
import Bedrock from './Bedrock';
import Google from './Google';
+import Moonshot from './Moonshot';
import OpenAI from './OpenAI';
import Zhipu from './Zhipu';
@@ -23,6 +24,7 @@ export default memo(() => {
{/**/}
+