@lobehub/chat 1.53.6 → 1.53.8

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 (62) hide show
  1. package/.github/workflows/lighthouse.yml +1 -1
  2. package/CHANGELOG.md +50 -0
  3. package/changelog/v1.json +18 -0
  4. package/locales/ar/modelProvider.json +5 -0
  5. package/locales/bg-BG/modelProvider.json +5 -0
  6. package/locales/de-DE/modelProvider.json +5 -0
  7. package/locales/en-US/modelProvider.json +5 -0
  8. package/locales/es-ES/modelProvider.json +5 -0
  9. package/locales/fa-IR/modelProvider.json +5 -0
  10. package/locales/fr-FR/modelProvider.json +5 -0
  11. package/locales/it-IT/modelProvider.json +5 -0
  12. package/locales/ja-JP/modelProvider.json +5 -0
  13. package/locales/ko-KR/modelProvider.json +5 -0
  14. package/locales/nl-NL/modelProvider.json +5 -0
  15. package/locales/pl-PL/modelProvider.json +5 -0
  16. package/locales/pt-BR/modelProvider.json +5 -0
  17. package/locales/ru-RU/modelProvider.json +5 -0
  18. package/locales/tr-TR/modelProvider.json +5 -0
  19. package/locales/vi-VN/modelProvider.json +5 -0
  20. package/locales/zh-CN/auth.json +1 -1
  21. package/locales/zh-CN/changelog.json +1 -1
  22. package/locales/zh-CN/chat.json +1 -1
  23. package/locales/zh-CN/clerk.json +1 -1
  24. package/locales/zh-CN/common.json +1 -1
  25. package/locales/zh-CN/components.json +1 -1
  26. package/locales/zh-CN/discover.json +1 -1
  27. package/locales/zh-CN/error.json +1 -1
  28. package/locales/zh-CN/file.json +1 -1
  29. package/locales/zh-CN/knowledgeBase.json +1 -1
  30. package/locales/zh-CN/metadata.json +1 -1
  31. package/locales/zh-CN/migration.json +1 -1
  32. package/locales/zh-CN/modelProvider.json +6 -1
  33. package/locales/zh-CN/models.json +1049 -1049
  34. package/locales/zh-CN/plugin.json +1 -1
  35. package/locales/zh-CN/portal.json +1 -1
  36. package/locales/zh-CN/providers.json +70 -70
  37. package/locales/zh-CN/ragEval.json +1 -1
  38. package/locales/zh-CN/setting.json +1 -1
  39. package/locales/zh-CN/thread.json +1 -1
  40. package/locales/zh-CN/tool.json +1 -1
  41. package/locales/zh-CN/topic.json +1 -1
  42. package/locales/zh-CN/welcome.json +1 -1
  43. package/locales/zh-TW/modelProvider.json +5 -0
  44. package/package.json +1 -1
  45. package/src/app/[variants]/(main)/settings/provider/features/ModelList/ModelItem.tsx +67 -61
  46. package/src/app/[variants]/(main)/settings/provider/features/ModelList/ModelTitle/index.tsx +37 -10
  47. package/src/app/[variants]/(main)/settings/provider/features/ModelList/ProviderSettingsContext.ts +9 -0
  48. package/src/app/[variants]/(main)/settings/provider/features/ModelList/index.tsx +27 -17
  49. package/src/config/aiModels/cloudflare.ts +1 -1
  50. package/src/config/aiModels/huggingface.ts +10 -1
  51. package/src/config/modelProviders/cloudflare.ts +1 -1
  52. package/src/config/modelProviders/huggingface.ts +6 -1
  53. package/src/config/modelProviders/spark.ts +2 -0
  54. package/src/const/version.ts +1 -2
  55. package/src/database/server/models/aiModel.ts +6 -0
  56. package/src/locales/default/modelProvider.ts +5 -0
  57. package/src/server/routers/lambda/aiModel.ts +5 -0
  58. package/src/services/aiModel/client.ts +4 -0
  59. package/src/services/aiModel/server.ts +4 -0
  60. package/src/services/aiModel/type.ts +2 -0
  61. package/src/store/aiInfra/slices/aiModel/action.ts +5 -0
  62. package/src/types/aiProvider.ts +7 -1
@@ -57,9 +57,18 @@ const huggingfaceChatModels: AIChatModelCard[] = [
57
57
  reasoning: true,
58
58
  },
59
59
  contextWindowTokens: 16_384,
60
+ displayName: 'DeepSeek R1 (Distill Qwen 32B)',
61
+ id: 'deepseek-ai/DeepSeek-R1-Distill-Qwen-32B',
62
+ type: 'chat',
63
+ },
64
+ {
65
+ abilities: {
66
+ reasoning: true,
67
+ },
68
+ contextWindowTokens: 128_000,
60
69
  displayName: 'DeepSeek R1',
61
70
  enabled: true,
62
- id: 'deepseek-ai/DeepSeek-R1-Distill-Qwen-32B',
71
+ id: 'deepseek-ai/DeepSeek-R1',
63
72
  type: 'chat',
64
73
  },
65
74
  ];
@@ -6,7 +6,7 @@ const Cloudflare: ModelProviderCard = {
6
6
  chatModels: [
7
7
  {
8
8
  contextWindowTokens: 16_384,
9
- displayName: 'DeepSeek R1 Distill Qwen 32B',
9
+ displayName: 'DeepSeek R1 (Distill Qwen 32B)',
10
10
  enabled: true,
11
11
  id: '@cf/deepseek-ai/deepseek-r1-distill-qwen-32b',
12
12
  },
@@ -45,9 +45,14 @@ const HuggingFace: ModelProviderCard = {
45
45
  },
46
46
  {
47
47
  contextWindowTokens: 16_384,
48
+ displayName: 'DeepSeek R1 (Distill Qwen 32B)',
49
+ id: 'deepseek-ai/DeepSeek-R1-Distill-Qwen-32B',
50
+ },
51
+ {
52
+ contextWindowTokens: 128_000,
48
53
  displayName: 'DeepSeek R1',
49
54
  enabled: true,
50
- id: 'deepseek-ai/DeepSeek-R1-Distill-Qwen-32B',
55
+ id: 'deepseek-ai/DeepSeek-R1',
51
56
  },
52
57
  ],
53
58
  checkModel: 'mistralai/Mistral-7B-Instruct-v0.2',
@@ -69,7 +69,9 @@ const Spark: ModelProviderCard = {
69
69
  modelsUrl: 'https://xinghuo.xfyun.cn/spark',
70
70
  name: 'Spark',
71
71
  settings: {
72
+ modelEditable: false,
72
73
  sdkType: 'openai',
74
+ showModelFetcher: false,
73
75
  smoothing: {
74
76
  speed: 2,
75
77
  text: true,
@@ -1,11 +1,10 @@
1
1
  import pkg from '@/../package.json';
2
- import { getServerDBConfig } from '@/config/db';
3
2
 
4
3
  import { BRANDING_NAME, ORG_NAME } from './branding';
5
4
 
6
5
  export const CURRENT_VERSION = pkg.version;
7
6
 
8
- export const isServerMode = getServerDBConfig().NEXT_PUBLIC_ENABLED_SERVER_SERVICE;
7
+ export const isServerMode = process.env.NEXT_PUBLIC_SERVICE_MODE === 'server';
9
8
  export const isUsePgliteDB = process.env.NEXT_PUBLIC_CLIENT_DB === 'pglite';
10
9
 
11
10
  export const isDeprecatedEdition = !isServerMode && !isUsePgliteDB;
@@ -197,6 +197,12 @@ export class AiModelModel {
197
197
  );
198
198
  }
199
199
 
200
+ clearModelsByProvider(providerId: string) {
201
+ return this.db
202
+ .delete(aiModels)
203
+ .where(and(eq(aiModels.providerId, providerId), eq(aiModels.userId, this.userId)));
204
+ }
205
+
200
206
  updateModelsOrder = async (providerId: string, sortMap: AiModelSortMap[]) => {
201
207
  await this.db.transaction(async (tx) => {
202
208
  const updates = sortMap.map(({ id, sort }) => {
@@ -278,6 +278,11 @@ export default {
278
278
  latestTime: '上次更新时间:{{time}}',
279
279
  noLatestTime: '暂未获取列表',
280
280
  },
281
+ resetAll: {
282
+ conform: '确认重置当前模型的所有修改?重置后当前模型列表将会回到默认状态',
283
+ success: '重置成功',
284
+ title: '重置所有修改',
285
+ },
281
286
  search: '搜索模型...',
282
287
  searchResult: '搜索到 {{count}} 个模型',
283
288
  title: '模型列表',
@@ -59,6 +59,11 @@ export const aiModelRouter = router({
59
59
  return ctx.aiModelModel.batchUpdateAiModels(input.id, input.models);
60
60
  }),
61
61
 
62
+ clearModelsByProvider: aiModelProcedure
63
+ .input(z.object({ providerId: z.string() }))
64
+ .mutation(async ({ input, ctx }) => {
65
+ return ctx.aiModelModel.clearModelsByProvider(input.providerId);
66
+ }),
62
67
  clearRemoteModels: aiModelProcedure
63
68
  .input(z.object({ providerId: z.string() }))
64
69
  .mutation(async ({ input, ctx }) => {
@@ -47,6 +47,10 @@ export class ClientService extends BaseClientService implements IAiModelService
47
47
  return this.aiModel.clearRemoteModels(providerId);
48
48
  };
49
49
 
50
+ clearModelsByProvider: IAiModelService['clearModelsByProvider'] = async (providerId) => {
51
+ return this.aiModel.clearModelsByProvider(providerId);
52
+ };
53
+
50
54
  updateAiModelOrder: IAiModelService['updateAiModelOrder'] = async (providerId, items) => {
51
55
  return this.aiModel.updateModelsOrder(providerId, items);
52
56
  };
@@ -30,6 +30,10 @@ export class ServerService implements IAiModelService {
30
30
  return lambdaClient.aiModel.batchToggleAiModels.mutate({ enabled, id, models });
31
31
  };
32
32
 
33
+ clearModelsByProvider: IAiModelService['clearModelsByProvider'] = async (providerId) => {
34
+ return lambdaClient.aiModel.clearModelsByProvider.mutate({ providerId });
35
+ };
36
+
33
37
  clearRemoteModels: IAiModelService['clearRemoteModels'] = async (providerId) => {
34
38
  return lambdaClient.aiModel.clearRemoteModels.mutate({ providerId });
35
39
  };
@@ -24,6 +24,8 @@ export interface IAiModelService {
24
24
 
25
25
  clearRemoteModels: (providerId: string) => Promise<any>;
26
26
 
27
+ clearModelsByProvider: (providerId: string) => Promise<any>;
28
+
27
29
  updateAiModelOrder: (providerId: string, items: AiModelSortMap[]) => Promise<any>;
28
30
 
29
31
  deleteAiModel: (params: { id: string; providerId: string }) => Promise<any>;
@@ -17,6 +17,7 @@ const FETCH_AI_PROVIDER_MODEL_LIST_KEY = 'FETCH_AI_PROVIDER_MODELS';
17
17
  export interface AiModelAction {
18
18
  batchToggleAiModels: (ids: string[], enabled: boolean) => Promise<void>;
19
19
  batchUpdateAiModels: (models: AiProviderModelListItem[]) => Promise<void>;
20
+ clearModelsByProvider: (provider: string) => Promise<void>;
20
21
  clearRemoteModels: (provider: string) => Promise<void>;
21
22
  createNewAiModel: (params: CreateAiModelParams) => Promise<void>;
22
23
  fetchRemoteModelList: (providerId: string) => Promise<void>;
@@ -55,6 +56,10 @@ export const createAiModelSlice: StateCreator<
55
56
  await aiModelService.batchUpdateAiModels(id, models);
56
57
  await get().refreshAiModelList();
57
58
  },
59
+ clearModelsByProvider: async (provider) => {
60
+ await aiModelService.clearModelsByProvider(provider);
61
+ await get().refreshAiModelList();
62
+ },
58
63
  clearRemoteModels: async (provider) => {
59
64
  await aiModelService.clearRemoteModels(provider);
60
65
  await get().refreshAiModelList();
@@ -72,6 +72,13 @@ export interface AiProviderSettings {
72
72
  * @default false
73
73
  */
74
74
  disableBrowserRequest?: boolean;
75
+ /**
76
+ * whether provider support edit model
77
+ *
78
+ * @default true
79
+ */
80
+ modelEditable?: boolean;
81
+
75
82
  proxyUrl?:
76
83
  | {
77
84
  desc?: string;
@@ -84,7 +91,6 @@ export interface AiProviderSettings {
84
91
  * default openai
85
92
  */
86
93
  sdkType?: AiProviderSDKType;
87
-
88
94
  showAddNewModel?: boolean;
89
95
  /**
90
96
  * whether show api key in the provider config