@lobehub/chat 0.161.0 → 0.161.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +8 -8
  3. package/README.zh-CN.md +8 -8
  4. package/locales/ar/setting.json +8 -0
  5. package/locales/bg-BG/setting.json +8 -0
  6. package/locales/de-DE/setting.json +8 -0
  7. package/locales/en-US/setting.json +8 -0
  8. package/locales/es-ES/setting.json +8 -0
  9. package/locales/fr-FR/setting.json +8 -0
  10. package/locales/it-IT/setting.json +8 -0
  11. package/locales/ja-JP/setting.json +8 -0
  12. package/locales/ko-KR/setting.json +8 -0
  13. package/locales/nl-NL/setting.json +8 -0
  14. package/locales/pl-PL/setting.json +8 -1
  15. package/locales/pt-BR/setting.json +8 -0
  16. package/locales/ru-RU/setting.json +8 -0
  17. package/locales/tr-TR/setting.json +8 -0
  18. package/locales/vi-VN/setting.json +8 -0
  19. package/locales/zh-CN/clerk.json +1 -1
  20. package/locales/zh-CN/setting.json +8 -0
  21. package/locales/zh-TW/clerk.json +1 -1
  22. package/locales/zh-TW/setting.json +8 -0
  23. package/package.json +23 -23
  24. package/src/app/(main)/settings/_layout/Desktop/Header.tsx +58 -25
  25. package/src/app/(main)/settings/_layout/Desktop/index.tsx +18 -1
  26. package/src/app/@modal/(.)settings/modal/layout.tsx +13 -1
  27. package/src/app/@modal/_layout/SettingModalLayout.tsx +45 -41
  28. package/src/app/@modal/chat/(.)settings/modal/features/CategoryContent.tsx +1 -1
  29. package/src/app/@modal/chat/(.)settings/modal/features/useCategory.tsx +6 -6
  30. package/src/app/@modal/chat/(.)settings/modal/layout.tsx +4 -0
  31. package/src/app/@modal/layout.tsx +1 -0
  32. package/src/app/api/chat/[provider]/route.test.ts +1 -1
  33. package/src/app/api/chat/agentRuntime.test.ts +4 -4
  34. package/src/app/api/chat/agentRuntime.ts +17 -17
  35. package/src/app/api/chat/apiKeyManager.test.ts +1 -0
  36. package/src/app/api/chat/apiKeyManager.ts +2 -2
  37. package/src/app/api/config.test.ts +1 -1
  38. package/src/app/api/config.ts +3 -4
  39. package/src/app/api/openai/createBizOpenAI/createAzureOpenai.ts +2 -2
  40. package/src/app/api/openai/createBizOpenAI/createOpenai.ts +2 -2
  41. package/src/config/__tests__/server.test.ts +5 -5
  42. package/src/config/llm.ts +217 -0
  43. package/src/config/server/index.ts +1 -5
  44. package/src/layout/AuthProvider/Clerk/useAppearance.ts +4 -0
  45. package/src/libs/agent-runtime/minimax/index.test.ts +0 -1
  46. package/src/libs/agent-runtime/zhipu/index.test.ts +0 -3
  47. package/src/locales/default/clerk.ts +1 -1
  48. package/src/locales/default/setting.ts +8 -0
  49. package/src/server/globalConfig/index.ts +6 -7
  50. package/src/server/translation.ts +22 -8
  51. package/src/config/server/provider.ts +0 -229
@@ -0,0 +1,217 @@
1
+ /* eslint-disable sort-keys-fix/sort-keys-fix , typescript-sort-keys/interface */
2
+ import { createEnv } from '@t3-oss/env-nextjs';
3
+ import { z } from 'zod';
4
+
5
+ declare global {
6
+ // eslint-disable-next-line @typescript-eslint/no-namespace
7
+ namespace NodeJS {
8
+ interface ProcessEnv {
9
+ /**
10
+ * @deprecated
11
+ */
12
+ CUSTOM_MODELS?: string;
13
+ /**
14
+ * @deprecated
15
+ */
16
+ OLLAMA_CUSTOM_MODELS?: string;
17
+ /**
18
+ * @deprecated
19
+ */
20
+ OPENROUTER_CUSTOM_MODELS?: string;
21
+ }
22
+ }
23
+ }
24
+
25
+ export const getLLMConfig = () => {
26
+ const AZURE_API_KEY = process.env.AZURE_API_KEY || '';
27
+
28
+ const ZHIPU_API_KEY = process.env.ZHIPU_API_KEY || '';
29
+
30
+ const AWS_ACCESS_KEY_ID = process.env.AWS_ACCESS_KEY_ID || '';
31
+
32
+ const DEEPSEEK_API_KEY = process.env.DEEPSEEK_API_KEY || '';
33
+
34
+ const GOOGLE_API_KEY = process.env.GOOGLE_API_KEY || '';
35
+
36
+ const MOONSHOT_API_KEY = process.env.MOONSHOT_API_KEY || '';
37
+
38
+ const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY || '';
39
+
40
+ const ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY || '';
41
+
42
+ const MINIMAX_API_KEY = process.env.MINIMAX_API_KEY || '';
43
+
44
+ const MISTRAL_API_KEY = process.env.MISTRAL_API_KEY || '';
45
+
46
+ const GROQ_API_KEY = process.env.GROQ_API_KEY || '';
47
+
48
+ const OPENROUTER_API_KEY = process.env.OPENROUTER_API_KEY || '';
49
+
50
+ const ZEROONE_API_KEY = process.env.ZEROONE_API_KEY || '';
51
+
52
+ const TOGETHERAI_API_KEY = process.env.TOGETHERAI_API_KEY || '';
53
+
54
+ // region format: iad1,sfo1
55
+ let regions: string[] = [];
56
+ if (process.env.OPENAI_FUNCTION_REGIONS) {
57
+ regions = process.env.OPENAI_FUNCTION_REGIONS.split(',');
58
+ }
59
+
60
+ if (process.env.CUSTOM_MODELS) {
61
+ console.warn(
62
+ 'DEPRECATED: `CUSTOM_MODELS` is deprecated, please use `OPENAI_MODEL_LIST` instead, we will remove `CUSTOM_MODELS` in the LobeChat 1.0',
63
+ );
64
+ }
65
+
66
+ if (process.env.OLLAMA_CUSTOM_MODELS) {
67
+ console.warn(
68
+ 'DEPRECATED: `OLLAMA_CUSTOM_MODELS` is deprecated, please use `OLLAMA_MODEL_LIST` instead, we will remove `OLLAMA_CUSTOM_MODELS` in the LobeChat 1.0',
69
+ );
70
+ }
71
+
72
+ if (process.env.OPENROUTER_CUSTOM_MODELS) {
73
+ console.warn(
74
+ 'DEPRECATED: `OPENROUTER_CUSTOM_MODELS` is deprecated, please use `OPENROUTER_MODEL_LIST` instead, we will remove `OPENROUTER_CUSTOM_MODELS` in the LobeChat 1.0',
75
+ );
76
+ }
77
+
78
+ return createEnv({
79
+ server: {
80
+ API_KEY_SELECT_MODE: z.string().optional(),
81
+
82
+ ENABLED_OPENAI: z.boolean(),
83
+ OPENAI_API_KEY: z.string().optional(),
84
+ OPENAI_PROXY_URL: z.string().optional(),
85
+ OPENAI_MODEL_LIST: z.string().optional(),
86
+ OPENAI_FUNCTION_REGIONS: z.array(z.string()),
87
+
88
+ ENABLED_AZURE_OPENAI: z.boolean(),
89
+ AZURE_API_KEY: z.string().optional(),
90
+ AZURE_API_VERSION: z.string().optional(),
91
+ AZURE_ENDPOINT: z.string().optional(),
92
+ AZURE_MODEL_LIST: z.string().optional(),
93
+
94
+ ENABLED_ZHIPU: z.boolean(),
95
+ ZHIPU_API_KEY: z.string().optional(),
96
+
97
+ ENABLED_DEEPSEEK: z.boolean(),
98
+ DEEPSEEK_API_KEY: z.string().optional(),
99
+
100
+ ENABLED_GOOGLE: z.boolean(),
101
+ GOOGLE_API_KEY: z.string().optional(),
102
+ GOOGLE_PROXY_URL: z.string().optional(),
103
+
104
+ ENABLED_MOONSHOT: z.boolean(),
105
+ MOONSHOT_API_KEY: z.string().optional(),
106
+ MOONSHOT_PROXY_URL: z.string().optional(),
107
+
108
+ ENABLED_PERPLEXITY: z.boolean(),
109
+ PERPLEXITY_API_KEY: z.string().optional(),
110
+ PERPLEXITY_PROXY_URL: z.string().optional(),
111
+
112
+ ENABLED_ANTHROPIC: z.boolean(),
113
+ ANTHROPIC_API_KEY: z.string().optional(),
114
+ ANTHROPIC_PROXY_URL: z.string().optional(),
115
+
116
+ ENABLED_MINIMAX: z.boolean(),
117
+ MINIMAX_API_KEY: z.string().optional(),
118
+
119
+ ENABLED_MISTRAL: z.boolean(),
120
+ MISTRAL_API_KEY: z.string().optional(),
121
+
122
+ ENABLED_GROQ: z.boolean(),
123
+ GROQ_API_KEY: z.string().optional(),
124
+ GROQ_PROXY_URL: z.string().optional(),
125
+
126
+ ENABLED_OPENROUTER: z.boolean(),
127
+ OPENROUTER_API_KEY: z.string().optional(),
128
+ OPENROUTER_MODEL_LIST: z.string().optional(),
129
+
130
+ ENABLED_ZEROONE: z.boolean(),
131
+ ZEROONE_API_KEY: z.string().optional(),
132
+
133
+ ENABLED_TOGETHERAI: z.boolean(),
134
+ TOGETHERAI_API_KEY: z.string().optional(),
135
+ TOGETHERAI_MODEL_LIST: z.string().optional(),
136
+
137
+ ENABLED_AWS_BEDROCK: z.boolean(),
138
+ AWS_REGION: z.string().optional(),
139
+ AWS_ACCESS_KEY_ID: z.string().optional(),
140
+ AWS_SECRET_ACCESS_KEY: z.string().optional(),
141
+
142
+ ENABLED_OLLAMA: z.boolean(),
143
+ OLLAMA_PROXY_URL: z.string().optional(),
144
+ OLLAMA_MODEL_LIST: z.string().optional(),
145
+ },
146
+ runtimeEnv: {
147
+ API_KEY_SELECT_MODE: process.env.API_KEY_SELECT_MODE,
148
+
149
+ ENABLED_OPENAI: process.env.ENABLED_OPENAI !== '0',
150
+ OPENAI_API_KEY: process.env.OPENAI_API_KEY,
151
+ OPENAI_PROXY_URL: process.env.OPENAI_PROXY_URL,
152
+ OPENAI_MODEL_LIST: process.env.OPENAI_MODEL_LIST || process.env.CUSTOM_MODELS,
153
+ OPENAI_FUNCTION_REGIONS: regions as any,
154
+
155
+ ENABLED_AZURE_OPENAI: !!AZURE_API_KEY,
156
+ AZURE_API_KEY,
157
+ AZURE_API_VERSION: process.env.AZURE_API_VERSION,
158
+ AZURE_ENDPOINT: process.env.AZURE_ENDPOINT,
159
+ AZURE_MODEL_LIST: process.env.AZURE_MODEL_LIST,
160
+
161
+ ENABLED_ZHIPU: !!ZHIPU_API_KEY,
162
+ ZHIPU_API_KEY,
163
+
164
+ ENABLED_DEEPSEEK: !!DEEPSEEK_API_KEY,
165
+ DEEPSEEK_API_KEY,
166
+
167
+ ENABLED_GOOGLE: !!GOOGLE_API_KEY,
168
+ GOOGLE_API_KEY,
169
+ GOOGLE_PROXY_URL: process.env.GOOGLE_PROXY_URL,
170
+
171
+ ENABLED_PERPLEXITY: !!PERPLEXITY_API_KEY,
172
+ PERPLEXITY_API_KEY,
173
+ PERPLEXITY_PROXY_URL: process.env.PERPLEXITY_PROXY_URL,
174
+
175
+ ENABLED_ANTHROPIC: !!ANTHROPIC_API_KEY,
176
+ ANTHROPIC_API_KEY,
177
+ ANTHROPIC_PROXY_URL: process.env.ANTHROPIC_PROXY_URL,
178
+
179
+ ENABLED_MINIMAX: !!MINIMAX_API_KEY,
180
+ MINIMAX_API_KEY,
181
+
182
+ ENABLED_MISTRAL: !!MISTRAL_API_KEY,
183
+ MISTRAL_API_KEY,
184
+
185
+ ENABLED_OPENROUTER: !!OPENROUTER_API_KEY,
186
+ OPENROUTER_API_KEY,
187
+ OPENROUTER_MODEL_LIST:
188
+ process.env.OPENROUTER_MODEL_LIST || process.env.OPENROUTER_CUSTOM_MODELS,
189
+
190
+ ENABLED_TOGETHERAI: !!TOGETHERAI_API_KEY,
191
+ TOGETHERAI_API_KEY,
192
+ TOGETHERAI_MODEL_LIST: process.env.TOGETHERAI_MODEL_LIST,
193
+
194
+ ENABLED_MOONSHOT: !!MOONSHOT_API_KEY,
195
+ MOONSHOT_API_KEY,
196
+ MOONSHOT_PROXY_URL: process.env.MOONSHOT_PROXY_URL,
197
+
198
+ ENABLED_GROQ: !!GROQ_API_KEY,
199
+ GROQ_PROXY_URL: process.env.GROQ_PROXY_URL,
200
+ GROQ_API_KEY,
201
+
202
+ ENABLED_ZEROONE: !!ZEROONE_API_KEY,
203
+ ZEROONE_API_KEY,
204
+
205
+ ENABLED_AWS_BEDROCK: !!AWS_ACCESS_KEY_ID,
206
+ AWS_REGION: process.env.AWS_REGION,
207
+ AWS_ACCESS_KEY_ID: AWS_ACCESS_KEY_ID,
208
+ AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY || '',
209
+
210
+ ENABLED_OLLAMA: process.env.ENABLED_OLLAMA !== '0',
211
+ OLLAMA_PROXY_URL: process.env.OLLAMA_PROXY_URL || '',
212
+ OLLAMA_MODEL_LIST: process.env.OLLAMA_MODEL_LIST || process.env.OLLAMA_CUSTOM_MODELS,
213
+ },
214
+ });
215
+ };
216
+
217
+ export const llmEnv = getLLMConfig();
@@ -1,13 +1,9 @@
1
1
  import { getAppConfig } from './app';
2
- import { getProviderConfig } from './provider';
3
2
 
4
3
  export const getServerConfig = () => {
5
4
  if (typeof process === 'undefined') {
6
5
  throw new Error('[Server Config] you are importing a server-only module outside of server');
7
6
  }
8
7
 
9
- const provider = getProviderConfig();
10
- const app = getAppConfig();
11
-
12
- return { ...provider, ...app };
8
+ return getAppConfig();
13
9
  };
@@ -44,6 +44,10 @@ export const useStyles = createStyles(
44
44
  `,
45
45
  navbar: css`
46
46
  background: ${isDarkMode ? token.colorBgContainer : token.colorFillTertiary};
47
+
48
+ @media (max-width: 768px) {
49
+ background: ${token.colorBgContainer};
50
+ }
47
51
  `,
48
52
  navbarButton: css`
49
53
  line-height: 2;
@@ -1,5 +1,4 @@
1
1
  // @vitest-environment edge-runtime
2
- import { StreamingTextResponse } from 'ai';
3
2
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
4
3
 
5
4
  import { ChatStreamPayload, ModelProvider } from '@/libs/agent-runtime';
@@ -1,13 +1,10 @@
1
1
  // @vitest-environment node
2
- import { StreamingTextResponse } from 'ai';
3
2
  import { OpenAI } from 'openai';
4
3
  import { Mock, afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
4
 
6
5
  import { ChatStreamCallbacks, LobeOpenAI } from '@/libs/agent-runtime';
7
6
  import * as debugStreamModule from '@/libs/agent-runtime/utils/debugStream';
8
7
 
9
- import { AgentRuntimeErrorType } from '../error';
10
- import { ModelProvider } from '../types';
11
8
  import * as authTokenModule from './authToken';
12
9
  import { LobeZhipuAI } from './index';
13
10
 
@@ -636,7 +636,7 @@ export default {
636
636
  mobileButton__menu: '菜单',
637
637
  navbar: {
638
638
  account: '个人资料',
639
- description: '管理您的帐户信息。',
639
+ description: '管理您的帐户信息',
640
640
  security: '安全',
641
641
  title: '帐户',
642
642
  },
@@ -2,6 +2,14 @@ export default {
2
2
  about: {
3
3
  title: '关于',
4
4
  },
5
+ agentTab: {
6
+ chat: '聊天偏好',
7
+ meta: '助手信息',
8
+ modal: '模型设置',
9
+ plugin: '插件设置',
10
+ prompt: '角色设定',
11
+ tts: '语音服务',
12
+ },
5
13
  analytics: {
6
14
  telemetry: {
7
15
  desc: '通过选择发送遥测数据,你可以帮助我们改善 LobeChat 整体用户体验',
@@ -1,4 +1,5 @@
1
1
  import { fileEnv } from '@/config/file';
2
+ import { getLLMConfig } from '@/config/llm';
2
3
  import {
3
4
  OllamaProviderCard,
4
5
  OpenAIProviderCard,
@@ -13,11 +14,9 @@ import { extractEnabledModels, transformToChatModelCards } from '@/utils/parseMo
13
14
  import { parseAgentConfig } from './parseDefaultAgent';
14
15
 
15
16
  export const getServerGlobalConfig = () => {
16
- const {
17
- ACCESS_CODES,
18
- ENABLE_LANGFUSE,
17
+ const { ACCESS_CODES, ENABLE_LANGFUSE, DEFAULT_AGENT_CONFIG } = getServerConfig();
19
18
 
20
- DEFAULT_AGENT_CONFIG,
19
+ const {
21
20
  ENABLED_OPENAI,
22
21
  OPENAI_MODEL_LIST,
23
22
 
@@ -35,7 +34,7 @@ export const getServerGlobalConfig = () => {
35
34
  ENABLED_AZURE_OPENAI,
36
35
  AZURE_MODEL_LIST,
37
36
 
38
- ENABLE_OLLAMA,
37
+ ENABLED_OLLAMA,
39
38
  OLLAMA_MODEL_LIST,
40
39
  OLLAMA_PROXY_URL,
41
40
 
@@ -45,7 +44,7 @@ export const getServerGlobalConfig = () => {
45
44
  ENABLED_ZEROONE,
46
45
  ENABLED_TOGETHERAI,
47
46
  TOGETHERAI_MODEL_LIST,
48
- } = getServerConfig();
47
+ } = getLLMConfig();
49
48
 
50
49
  const config: GlobalServerConfig = {
51
50
  defaultAgent: {
@@ -76,7 +75,7 @@ export const getServerGlobalConfig = () => {
76
75
  mistral: { enabled: ENABLED_MISTRAL },
77
76
  moonshot: { enabled: ENABLED_MOONSHOT },
78
77
  ollama: {
79
- enabled: ENABLE_OLLAMA,
78
+ enabled: ENABLED_OLLAMA,
80
79
  fetchOnClient: !OLLAMA_PROXY_URL,
81
80
  serverModelCards: transformToChatModelCards({
82
81
  defaultChatModels: OllamaProviderCard.chatModels,
@@ -2,23 +2,37 @@
2
2
 
3
3
  import { get } from 'lodash-es';
4
4
  import { cookies } from 'next/headers';
5
- import { readFileSync } from 'node:fs';
5
+ import { existsSync, readFileSync } from 'node:fs';
6
6
  import { join } from 'node:path';
7
7
 
8
8
  import { DEFAULT_LANG, LOBE_LOCALE_COOKIE } from '@/const/locale';
9
9
  import { NS, normalizeLocale } from '@/locales/resources';
10
+ import { isDev } from '@/utils/env';
10
11
 
11
- export const translation = async (ns: NS) => {
12
- const cookieStore = cookies();
13
- const defaultLang = cookieStore.get(LOBE_LOCALE_COOKIE);
14
- const lng = defaultLang?.value || DEFAULT_LANG;
15
- const filepath = join(process.cwd(), `locales/${normalizeLocale(lng)}/${ns}.json`);
16
- const file = readFileSync(filepath, 'utf8');
17
- const i18ns = JSON.parse(file);
12
+ export const translation = async (ns: NS = 'common') => {
13
+ let i18ns = {};
14
+ try {
15
+ const cookieStore = cookies();
16
+ const defaultLang = cookieStore.get(LOBE_LOCALE_COOKIE);
17
+ const lng = defaultLang?.value || DEFAULT_LANG;
18
+ let filepath = join(process.cwd(), `locales/${normalizeLocale(lng)}/${ns}.json`);
19
+ const isExist = existsSync(filepath);
20
+ if (!isExist)
21
+ filepath = join(
22
+ process.cwd(),
23
+ `locales/${normalizeLocale(isDev ? 'zh-CN' : DEFAULT_LANG)}/${ns}.json`,
24
+ );
25
+ const file = readFileSync(filepath, 'utf8');
26
+ i18ns = JSON.parse(file);
27
+ } catch (e) {
28
+ console.error('Error while reading translation file', e);
29
+ }
18
30
 
19
31
  return {
20
32
  t: (key: string, options: { [key: string]: string } = {}) => {
33
+ if (!i18ns) return key;
21
34
  let content = get(i18ns, key);
35
+ if (!content) return key;
22
36
  if (options) {
23
37
  Object.entries(options).forEach(([key, value]) => {
24
38
  content = content.replace(`{{${key}}}`, value);
@@ -1,229 +0,0 @@
1
- /* eslint-disable sort-keys-fix/sort-keys-fix , typescript-sort-keys/interface */
2
-
3
- declare global {
4
- // eslint-disable-next-line @typescript-eslint/no-namespace
5
- namespace NodeJS {
6
- interface ProcessEnv {
7
- API_KEY_SELECT_MODE?: string;
8
-
9
- // OpenAI Provider
10
- ENABLED_OPENAI?: string;
11
- OPENAI_API_KEY?: string;
12
- OPENAI_PROXY_URL?: string;
13
- OPENAI_MODEL_LIST?: string;
14
- OPENAI_ENABLED_MODELS?: string;
15
- OPENAI_FUNCTION_REGIONS?: string;
16
-
17
- // Azure OpenAI Provider
18
- AZURE_API_KEY?: string;
19
- AZURE_ENDPOINT?: string;
20
- AZURE_API_VERSION?: string;
21
-
22
- // DeepSeek Provider
23
- ENABLED_DEEPSEEK?: string;
24
- DEEPSEEK_API_KEY?: string;
25
-
26
- // ZhiPu Provider
27
- ENABLED_ZHIPU?: string;
28
- ZHIPU_API_KEY?: string;
29
- ZHIPU_PROXY_URL?: string;
30
-
31
- // Google Provider
32
- ENABLED_GOOGLE?: string;
33
- GOOGLE_API_KEY?: string;
34
- GOOGLE_PROXY_URL?: string;
35
-
36
- // Moonshot Provider
37
- ENABLED_MOONSHOT?: string;
38
- MOONSHOT_API_KEY?: string;
39
- MOONSHOT_PROXY_URL?: string;
40
-
41
- // Perplexity Provider
42
- ENABLED_PERPLEXITY?: string;
43
- PERPLEXITY_API_KEY?: string;
44
- PERPLEXITY_PROXY_URL?: string;
45
-
46
- // Anthropic Provider
47
- ENABLED_ANTHROPIC?: string;
48
- ANTHROPIC_API_KEY?: string;
49
- ANTHROPIC_PROXY_URL?: string;
50
-
51
- // Minimax Provider
52
- ENABLED_MINIMAX?: string;
53
- MINIMAX_API_KEY?: string;
54
-
55
- // Mistral Provider
56
- ENABLED_MISTRAL?: string;
57
- MISTRAL_API_KEY?: string;
58
-
59
- // Groq Provider
60
- ENABLED_GROQ?: string;
61
- GROQ_API_KEY?: string;
62
- GROQ_PROXY_URL?: string;
63
-
64
- // OpenRouter Provider
65
- ENABLED_OPENROUTER?: string;
66
- OPENROUTER_API_KEY?: string;
67
- OPENROUTER_MODEL_LIST?: string;
68
-
69
- // ZeroOne Provider
70
- ENABLED_ZEROONE?: string;
71
- ZEROONE_API_KEY?: string;
72
-
73
- // TogetherAI Provider
74
- ENABLED_TOGETHERAI?: string;
75
- TOGETHERAI_API_KEY?: string;
76
- TOGETHERAI_MODEL_LIST?: string;
77
-
78
- // AWS Credentials
79
- AWS_REGION?: string;
80
- AWS_ACCESS_KEY_ID?: string;
81
- AWS_SECRET_ACCESS_KEY?: string;
82
-
83
- // Ollama Provider;
84
- ENABLE_OLLAMA?: string;
85
- OLLAMA_PROXY_URL?: string;
86
- OLLAMA_MODEL_LIST?: string;
87
-
88
- /**
89
- * @deprecated
90
- */
91
- CUSTOM_MODELS?: string;
92
- /**
93
- * @deprecated
94
- */
95
- OLLAMA_CUSTOM_MODELS?: string;
96
- /**
97
- * @deprecated
98
- */
99
- OPENROUTER_CUSTOM_MODELS?: string;
100
- }
101
- }
102
- }
103
-
104
- export const getProviderConfig = () => {
105
- if (typeof process === 'undefined') {
106
- throw new Error('[Server Config] you are importing a server-only module outside of server');
107
- }
108
-
109
- const AZURE_API_KEY = process.env.AZURE_API_KEY || '';
110
-
111
- const ZHIPU_API_KEY = process.env.ZHIPU_API_KEY || '';
112
-
113
- const AWS_ACCESS_KEY_ID = process.env.AWS_ACCESS_KEY_ID || '';
114
-
115
- const DEEPSEEK_API_KEY = process.env.DEEPSEEK_API_KEY || '';
116
-
117
- const GOOGLE_API_KEY = process.env.GOOGLE_API_KEY || '';
118
-
119
- const MOONSHOT_API_KEY = process.env.MOONSHOT_API_KEY || '';
120
-
121
- const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY || '';
122
-
123
- const ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY || '';
124
-
125
- const MINIMAX_API_KEY = process.env.MINIMAX_API_KEY || '';
126
-
127
- const MISTRAL_API_KEY = process.env.MISTRAL_API_KEY || '';
128
-
129
- const GROQ_API_KEY = process.env.GROQ_API_KEY || '';
130
-
131
- const OPENROUTER_API_KEY = process.env.OPENROUTER_API_KEY || '';
132
-
133
- const ZEROONE_API_KEY = process.env.ZEROONE_API_KEY || '';
134
-
135
- const TOGETHERAI_API_KEY = process.env.TOGETHERAI_API_KEY || '';
136
-
137
- // region format: iad1,sfo1
138
- let regions: string[] = [];
139
- if (process.env.OPENAI_FUNCTION_REGIONS) {
140
- regions = process.env.OPENAI_FUNCTION_REGIONS.split(',');
141
- }
142
-
143
- if (process.env.CUSTOM_MODELS) {
144
- console.warn(
145
- 'DEPRECATED: `CUSTOM_MODELS` is deprecated, please use `OPENAI_MODEL_LIST` instead, we will remove `CUSTOM_MODELS` in the LobeChat 1.0',
146
- );
147
- }
148
-
149
- if (process.env.OLLAMA_CUSTOM_MODELS) {
150
- console.warn(
151
- 'DEPRECATED: `OLLAMA_CUSTOM_MODELS` is deprecated, please use `OLLAMA_MODEL_LIST` instead, we will remove `OLLAMA_CUSTOM_MODELS` in the LobeChat 1.0',
152
- );
153
- }
154
-
155
- if (process.env.OPENROUTER_CUSTOM_MODELS) {
156
- console.warn(
157
- 'DEPRECATED: `OPENROUTER_CUSTOM_MODELS` is deprecated, please use `OPENROUTER_MODEL_LIST` instead, we will remove `OPENROUTER_CUSTOM_MODELS` in the LobeChat 1.0',
158
- );
159
- }
160
-
161
- return {
162
- API_KEY_SELECT_MODE: process.env.API_KEY_SELECT_MODE,
163
-
164
- ENABLED_OPENAI: process.env.ENABLED_OPENAI !== '0',
165
- OPENAI_API_KEY: process.env.OPENAI_API_KEY,
166
- OPENAI_PROXY_URL: process.env.OPENAI_PROXY_URL,
167
- OPENAI_MODEL_LIST: process.env.OPENAI_MODEL_LIST || process.env.CUSTOM_MODELS,
168
- OPENAI_FUNCTION_REGIONS: regions,
169
-
170
- ENABLED_AZURE_OPENAI: !!AZURE_API_KEY,
171
- AZURE_API_KEY,
172
- AZURE_API_VERSION: process.env.AZURE_API_VERSION,
173
- AZURE_ENDPOINT: process.env.AZURE_ENDPOINT,
174
- AZURE_MODEL_LIST: process.env.AZURE_MODEL_LIST,
175
-
176
- ENABLED_ZHIPU: !!ZHIPU_API_KEY,
177
- ZHIPU_API_KEY,
178
-
179
- ENABLED_DEEPSEEK: !!DEEPSEEK_API_KEY,
180
- DEEPSEEK_API_KEY,
181
-
182
- ENABLED_GOOGLE: !!GOOGLE_API_KEY,
183
- GOOGLE_API_KEY,
184
- GOOGLE_PROXY_URL: process.env.GOOGLE_PROXY_URL,
185
-
186
- ENABLED_PERPLEXITY: !!PERPLEXITY_API_KEY,
187
- PERPLEXITY_API_KEY,
188
- PERPLEXITY_PROXY_URL: process.env.PERPLEXITY_PROXY_URL,
189
-
190
- ENABLED_ANTHROPIC: !!ANTHROPIC_API_KEY,
191
- ANTHROPIC_API_KEY,
192
- ANTHROPIC_PROXY_URL: process.env.ANTHROPIC_PROXY_URL,
193
-
194
- ENABLED_MINIMAX: !!MINIMAX_API_KEY,
195
- MINIMAX_API_KEY,
196
-
197
- ENABLED_MISTRAL: !!MISTRAL_API_KEY,
198
- MISTRAL_API_KEY,
199
-
200
- ENABLED_OPENROUTER: !!OPENROUTER_API_KEY,
201
- OPENROUTER_API_KEY,
202
- OPENROUTER_MODEL_LIST:
203
- process.env.OPENROUTER_MODEL_LIST || process.env.OPENROUTER_CUSTOM_MODELS,
204
-
205
- ENABLED_TOGETHERAI: !!TOGETHERAI_API_KEY,
206
- TOGETHERAI_API_KEY,
207
- TOGETHERAI_MODEL_LIST: process.env.TOGETHERAI_MODEL_LIST,
208
-
209
- ENABLED_MOONSHOT: !!MOONSHOT_API_KEY,
210
- MOONSHOT_API_KEY,
211
- MOONSHOT_PROXY_URL: process.env.MOONSHOT_PROXY_URL,
212
-
213
- ENABLED_GROQ: !!GROQ_API_KEY,
214
- GROQ_PROXY_URL: process.env.GROQ_PROXY_URL,
215
- GROQ_API_KEY,
216
-
217
- ENABLED_ZEROONE: !!ZEROONE_API_KEY,
218
- ZEROONE_API_KEY,
219
-
220
- ENABLED_AWS_BEDROCK: !!AWS_ACCESS_KEY_ID,
221
- AWS_REGION: process.env.AWS_REGION,
222
- AWS_ACCESS_KEY_ID: AWS_ACCESS_KEY_ID,
223
- AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY || '',
224
-
225
- ENABLE_OLLAMA: process.env.ENABLE_OLLAMA !== '0',
226
- OLLAMA_PROXY_URL: process.env.OLLAMA_PROXY_URL || '',
227
- OLLAMA_MODEL_LIST: process.env.OLLAMA_MODEL_LIST || process.env.OLLAMA_CUSTOM_MODELS,
228
- };
229
- };