@lobehub/chat 1.107.6 → 1.108.1

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 (74) hide show
  1. package/.env.example +5 -0
  2. package/CHANGELOG.md +58 -0
  3. package/Dockerfile +2 -0
  4. package/Dockerfile.database +3 -1
  5. package/Dockerfile.pglite +3 -1
  6. package/README.md +3 -2
  7. package/README.zh-CN.md +3 -2
  8. package/changelog/v1.json +21 -0
  9. package/docs/usage/providers/ai302.mdx +45 -0
  10. package/docs/usage/providers/ai302.zh-CN.mdx +45 -0
  11. package/package.json +2 -2
  12. package/packages/types/src/user/settings/keyVaults.ts +1 -0
  13. package/src/app/(backend)/trpc/desktop/[trpc]/route.ts +1 -1
  14. package/src/app/[variants]/(main)/settings/llm/ProviderList/providers.tsx +2 -0
  15. package/src/app/[variants]/layout.tsx +1 -0
  16. package/src/config/aiModels/ai302.ts +148 -0
  17. package/src/config/aiModels/index.ts +3 -0
  18. package/src/config/llm.ts +7 -0
  19. package/src/config/modelProviders/ai302.ts +149 -0
  20. package/src/config/modelProviders/index.ts +3 -0
  21. package/src/database/models/__tests__/_test_template.ts +1 -1
  22. package/src/database/models/__tests__/agent.test.ts +1 -1
  23. package/src/database/models/__tests__/aiModel.test.ts +1 -1
  24. package/src/database/models/__tests__/aiProvider.test.ts +1 -1
  25. package/src/database/models/__tests__/asyncTask.test.ts +1 -1
  26. package/src/database/models/__tests__/chunk.test.ts +1 -1
  27. package/src/database/models/__tests__/file.test.ts +1 -1
  28. package/src/database/models/__tests__/generationTopic.test.ts +1 -1
  29. package/src/database/models/__tests__/knowledgeBase.test.ts +1 -1
  30. package/src/database/models/__tests__/message.test.ts +1 -1
  31. package/src/database/models/__tests__/session.test.ts +1 -1
  32. package/src/database/models/__tests__/sessionGroup.test.ts +1 -1
  33. package/src/database/models/__tests__/topic.test.ts +1 -1
  34. package/src/database/models/_template.ts +1 -1
  35. package/src/database/models/agent.ts +1 -1
  36. package/src/database/models/aiModel.ts +1 -1
  37. package/src/database/models/aiProvider.ts +1 -1
  38. package/src/database/models/apiKey.ts +1 -1
  39. package/src/database/models/asyncTask.ts +1 -1
  40. package/src/database/models/chunk.ts +1 -2
  41. package/src/database/models/document.ts +1 -1
  42. package/src/database/models/embedding.ts +1 -2
  43. package/src/database/models/file.ts +1 -2
  44. package/src/database/models/generationTopic.ts +1 -1
  45. package/src/database/models/knowledgeBase.ts +1 -1
  46. package/src/database/models/message.ts +1 -2
  47. package/src/database/models/plugin.ts +1 -1
  48. package/src/database/models/session.ts +15 -2
  49. package/src/database/models/sessionGroup.ts +1 -1
  50. package/src/database/models/thread.ts +1 -1
  51. package/src/database/models/topic.ts +1 -2
  52. package/src/database/models/user.ts +1 -1
  53. package/src/database/repositories/dataExporter/index.ts +1 -1
  54. package/src/database/repositories/dataImporter/__tests__/index.test.ts +1 -1
  55. package/src/database/repositories/dataImporter/deprecated/__tests__/index.test.ts +1 -1
  56. package/src/database/repositories/dataImporter/deprecated/index.ts +1 -2
  57. package/src/database/repositories/dataImporter/index.ts +1 -1
  58. package/src/database/server/models/__tests__/adapter.test.ts +1 -1
  59. package/src/database/server/models/__tests__/nextauth.test.ts +1 -1
  60. package/src/database/server/models/__tests__/user.test.ts +1 -1
  61. package/src/database/server/models/ragEval/dataset.ts +1 -1
  62. package/src/database/server/models/ragEval/datasetRecord.ts +1 -1
  63. package/src/database/server/models/ragEval/evaluation.ts +1 -2
  64. package/src/database/server/models/ragEval/evaluationRecord.ts +1 -1
  65. package/src/database/utils/genWhere.ts +1 -2
  66. package/src/features/User/UserAvatar.tsx +18 -2
  67. package/src/libs/model-runtime/ai302/index.ts +46 -0
  68. package/src/libs/model-runtime/runtimeMap.ts +2 -0
  69. package/src/libs/model-runtime/types/type.ts +1 -0
  70. package/src/libs/next-auth/adapter/index.ts +1 -1
  71. package/src/libs/oidc-provider/adapter.ts +1 -2
  72. package/src/server/routers/lambda/chunk.ts +1 -1
  73. package/src/services/session/client.test.ts +1 -1
  74. package/src/styles/antdOverride.ts +6 -0
@@ -1,6 +1,7 @@
1
1
  import { ChatModelCard, ModelProviderCard } from '@/types/llm';
2
2
 
3
3
  import Ai21Provider from './ai21';
4
+ import Ai302Provider from './ai302';
4
5
  import Ai360Provider from './ai360';
5
6
  import AiHubMixProvider from './aihubmix';
6
7
  import AnthropicProvider from './anthropic';
@@ -169,6 +170,7 @@ export const DEFAULT_MODEL_PROVIDER_LIST = [
169
170
  Search1APIProvider,
170
171
  InfiniAIProvider,
171
172
  QiniuProvider,
173
+ Ai302Provider,
172
174
  ];
173
175
 
174
176
  export const filterEnabledModels = (provider: ModelProviderCard) => {
@@ -181,6 +183,7 @@ export const isProviderDisableBrowserRequest = (id: string) => {
181
183
  };
182
184
 
183
185
  export { default as Ai21ProviderCard } from './ai21';
186
+ export { default as Ai302ProviderCard } from './ai302';
184
187
  export { default as Ai360ProviderCard } from './ai360';
185
188
  export { default as AiHubMixProviderCard } from './aihubmix';
186
189
  export { default as AnthropicProviderCard } from './anthropic';
@@ -1,5 +1,5 @@
1
1
  // @vitest-environment node
2
- import { eq } from 'drizzle-orm/expressions';
2
+ import { eq } from 'drizzle-orm';
3
3
  import { afterEach, beforeEach, describe, expect, it } from 'vitest';
4
4
 
5
5
  import { LobeChatDatabase } from '@/database/type';
@@ -1,5 +1,5 @@
1
1
  // @vitest-environment node
2
- import { eq } from 'drizzle-orm/expressions';
2
+ import { eq } from 'drizzle-orm';
3
3
  import { afterEach, beforeEach, describe, expect, it } from 'vitest';
4
4
 
5
5
  import { LobeChatDatabase } from '@/database/type';
@@ -1,5 +1,5 @@
1
1
  // @vitest-environment node
2
- import { eq } from 'drizzle-orm/expressions';
2
+ import { eq } from 'drizzle-orm';
3
3
  import { afterEach, beforeEach, describe, expect, it } from 'vitest';
4
4
 
5
5
  import { LobeChatDatabase } from '@/database/type';
@@ -1,5 +1,5 @@
1
1
  // @vitest-environment node
2
- import { eq } from 'drizzle-orm/expressions';
2
+ import { eq } from 'drizzle-orm';
3
3
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
4
4
 
5
5
  import { LobeChatDatabase } from '@/database/type';
@@ -1,5 +1,5 @@
1
1
  // @vitest-environment node
2
- import { eq } from 'drizzle-orm/expressions';
2
+ import { eq } from 'drizzle-orm';
3
3
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
4
4
 
5
5
  import { LobeChatDatabase } from '@/database/type';
@@ -1,5 +1,5 @@
1
1
  // @vitest-environment node
2
- import { eq } from 'drizzle-orm/expressions';
2
+ import { eq } from 'drizzle-orm';
3
3
  import { afterEach, beforeEach, describe, expect, it } from 'vitest';
4
4
 
5
5
  import { LobeChatDatabase } from '@/database/type';
@@ -1,5 +1,5 @@
1
1
  // @vitest-environment node
2
- import { eq, inArray } from 'drizzle-orm/expressions';
2
+ import { eq, inArray } from 'drizzle-orm';
3
3
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
4
4
 
5
5
  import { LobeChatDatabase } from '@/database/type';
@@ -1,5 +1,5 @@
1
1
  // @vitest-environment node
2
- import { eq } from 'drizzle-orm/expressions';
2
+ import { eq } from 'drizzle-orm';
3
3
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
4
4
 
5
5
  import { LobeChatDatabase } from '@/database/type';
@@ -1,5 +1,5 @@
1
1
  // @vitest-environment node
2
- import { and, eq } from 'drizzle-orm/expressions';
2
+ import { and, eq } from 'drizzle-orm';
3
3
  import { afterEach, beforeEach, describe, expect, it } from 'vitest';
4
4
 
5
5
  import { LobeChatDatabase } from '@/database/type';
@@ -1,5 +1,5 @@
1
1
  import dayjs from 'dayjs';
2
- import { eq } from 'drizzle-orm/expressions';
2
+ import { eq } from 'drizzle-orm';
3
3
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
4
4
 
5
5
  import { getTestDB } from '@/database/models/__tests__/_util';
@@ -1,4 +1,4 @@
1
- import { and, eq, inArray } from 'drizzle-orm/expressions';
1
+ import { and, eq, inArray } from 'drizzle-orm';
2
2
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
3
3
 
4
4
  import { DEFAULT_AGENT_CONFIG } from '@/const/settings';
@@ -1,5 +1,5 @@
1
1
  // @vitest-environment node
2
- import { eq } from 'drizzle-orm/expressions';
2
+ import { eq } from 'drizzle-orm';
3
3
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
4
4
 
5
5
  import { LobeChatDatabase } from '@/database/type';
@@ -1,4 +1,4 @@
1
- import { eq, inArray } from 'drizzle-orm/expressions';
1
+ import { eq, inArray } from 'drizzle-orm';
2
2
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
3
3
 
4
4
  import { LobeChatDatabase } from '@/database/type';
@@ -1,4 +1,4 @@
1
- import { and, desc, eq } from 'drizzle-orm/expressions';
1
+ import { and, desc, eq } from 'drizzle-orm';
2
2
 
3
3
  import { LobeChatDatabase } from '@/database/type';
4
4
 
@@ -1,4 +1,4 @@
1
- import { and, desc, eq, inArray } from 'drizzle-orm/expressions';
1
+ import { and, desc, eq, inArray } from 'drizzle-orm';
2
2
 
3
3
  import {
4
4
  agents,
@@ -1,4 +1,4 @@
1
- import { and, asc, desc, eq, inArray } from 'drizzle-orm/expressions';
1
+ import { and, asc, desc, eq, inArray } from 'drizzle-orm';
2
2
 
3
3
  import { LobeChatDatabase } from '@/database/type';
4
4
  import {
@@ -1,4 +1,4 @@
1
- import { and, asc, desc, eq } from 'drizzle-orm/expressions';
1
+ import { and, asc, desc, eq } from 'drizzle-orm';
2
2
  import { isEmpty } from 'lodash-es';
3
3
 
4
4
  import { DEFAULT_MODEL_PROVIDER_LIST } from '@/config/modelProviders';
@@ -1,4 +1,4 @@
1
- import { and, desc, eq } from 'drizzle-orm/expressions';
1
+ import { and, desc, eq } from 'drizzle-orm';
2
2
 
3
3
  import { LobeChatDatabase } from '@/database/type';
4
4
  import { generateApiKey, isApiKeyExpired, validateApiKeyFormat } from '@/utils/apiKey';
@@ -1,4 +1,4 @@
1
- import { and, eq, inArray, lt } from 'drizzle-orm/expressions';
1
+ import { and, eq, inArray, lt } from 'drizzle-orm';
2
2
 
3
3
  import { LobeChatDatabase } from '@/database/type';
4
4
  import {
@@ -1,5 +1,4 @@
1
- import { cosineDistance, count, sql } from 'drizzle-orm';
2
- import { and, asc, desc, eq, inArray, isNull } from 'drizzle-orm/expressions';
1
+ import { and, asc, cosineDistance, count, desc, eq, inArray, isNull, sql } from 'drizzle-orm';
3
2
  import { chunk } from 'lodash-es';
4
3
 
5
4
  import { LobeChatDatabase } from '@/database/type';
@@ -1,4 +1,4 @@
1
- import { and, desc, eq } from 'drizzle-orm/expressions';
1
+ import { and, desc, eq } from 'drizzle-orm';
2
2
 
3
3
  import { LobeChatDatabase } from '@/database/type';
4
4
 
@@ -1,5 +1,4 @@
1
- import { count } from 'drizzle-orm';
2
- import { and, eq } from 'drizzle-orm/expressions';
1
+ import { and, count, eq } from 'drizzle-orm';
3
2
 
4
3
  import { LobeChatDatabase } from '@/database/type';
5
4
 
@@ -1,5 +1,4 @@
1
- import { count, sum } from 'drizzle-orm';
2
- import { and, asc, desc, eq, ilike, inArray, like, notExists, or } from 'drizzle-orm/expressions';
1
+ import { and, asc, count, desc, eq, ilike, inArray, like, notExists, or, sum } from 'drizzle-orm';
3
2
  import type { PgTransaction } from 'drizzle-orm/pg-core';
4
3
 
5
4
  import { LobeChatDatabase, Transaction } from '@/database/type';
@@ -1,4 +1,4 @@
1
- import { and, desc, eq } from 'drizzle-orm/expressions';
1
+ import { and, desc, eq } from 'drizzle-orm';
2
2
 
3
3
  import { LobeChatDatabase } from '@/database/type';
4
4
  import { FileService } from '@/server/services/file';
@@ -1,4 +1,4 @@
1
- import { and, desc, eq, inArray } from 'drizzle-orm/expressions';
1
+ import { and, desc, eq, inArray } from 'drizzle-orm';
2
2
 
3
3
  import { LobeChatDatabase } from '@/database/type';
4
4
  import { KnowledgeBaseItem } from '@/types/knowledgeBase';
@@ -1,7 +1,6 @@
1
1
  import type { HeatmapsProps } from '@lobehub/charts';
2
2
  import dayjs from 'dayjs';
3
- import { count, sql } from 'drizzle-orm';
4
- import { and, asc, desc, eq, gt, inArray, isNotNull, isNull, like } from 'drizzle-orm/expressions';
3
+ import { and, asc, count, desc, eq, gt, inArray, isNotNull, isNull, like, sql } from 'drizzle-orm';
5
4
 
6
5
  import { LobeChatDatabase } from '@/database/type';
7
6
  import {
@@ -1,4 +1,4 @@
1
- import { and, desc, eq } from 'drizzle-orm/expressions';
1
+ import { and, desc, eq } from 'drizzle-orm';
2
2
 
3
3
  import { LobeChatDatabase } from '@/database/type';
4
4
  import { LobeTool } from '@/types/tool';
@@ -1,5 +1,18 @@
1
- import { Column, count, sql } from 'drizzle-orm';
2
- import { and, asc, desc, eq, gt, inArray, isNull, like, not, or } from 'drizzle-orm/expressions';
1
+ import {
2
+ Column,
3
+ and,
4
+ asc,
5
+ count,
6
+ desc,
7
+ eq,
8
+ gt,
9
+ inArray,
10
+ isNull,
11
+ like,
12
+ not,
13
+ or,
14
+ sql,
15
+ } from 'drizzle-orm';
3
16
  import type { PartialDeep } from 'type-fest';
4
17
 
5
18
  import { DEFAULT_INBOX_AVATAR } from '@/const/meta';
@@ -1,4 +1,4 @@
1
- import { and, asc, desc, eq } from 'drizzle-orm/expressions';
1
+ import { and, asc, desc, eq } from 'drizzle-orm';
2
2
 
3
3
  import { LobeChatDatabase } from '@/database/type';
4
4
  import { idGenerator } from '@/database/utils/idGenerator';
@@ -1,4 +1,4 @@
1
- import { and, desc, eq } from 'drizzle-orm/expressions';
1
+ import { and, desc, eq } from 'drizzle-orm';
2
2
 
3
3
  import { LobeChatDatabase } from '@/database/type';
4
4
  import { CreateThreadParams, ThreadStatus } from '@/types/topic';
@@ -1,5 +1,4 @@
1
- import { count, sql } from 'drizzle-orm';
2
- import { and, desc, eq, gt, ilike, inArray, isNull } from 'drizzle-orm/expressions';
1
+ import { and, count, desc, eq, gt, ilike, inArray, isNull, sql } from 'drizzle-orm';
3
2
 
4
3
  import { LobeChatDatabase } from '@/database/type';
5
4
  import {
@@ -1,6 +1,6 @@
1
1
  import { TRPCError } from '@trpc/server';
2
2
  import dayjs from 'dayjs';
3
- import { eq } from 'drizzle-orm/expressions';
3
+ import { eq } from 'drizzle-orm';
4
4
  import type { AdapterAccount } from 'next-auth/adapters';
5
5
  import type { PartialDeep } from 'type-fest';
6
6
 
@@ -1,4 +1,4 @@
1
- import { and, eq, inArray } from 'drizzle-orm/expressions';
1
+ import { and, eq, inArray } from 'drizzle-orm';
2
2
  import pMap from 'p-map';
3
3
 
4
4
  import * as EXPORT_TABLES from '@/database/schemas';
@@ -1,4 +1,4 @@
1
- import { eq, inArray } from 'drizzle-orm/expressions';
1
+ import { eq, inArray } from 'drizzle-orm';
2
2
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
3
3
 
4
4
  import { getTestDB } from '@/database/models/__tests__/_util';
@@ -1,5 +1,5 @@
1
1
  // @vitest-environment node
2
- import { eq, inArray } from 'drizzle-orm/expressions';
2
+ import { eq, inArray } from 'drizzle-orm';
3
3
  import { beforeEach, describe, expect, it, vi } from 'vitest';
4
4
 
5
5
  import { getTestDBInstance } from '@/database/core/dbForTest';
@@ -1,5 +1,4 @@
1
- import { sql } from 'drizzle-orm';
2
- import { and, eq, inArray } from 'drizzle-orm/expressions';
1
+ import { and, eq, inArray, sql } from 'drizzle-orm';
3
2
 
4
3
  import {
5
4
  agents,
@@ -1,4 +1,4 @@
1
- import { and, eq, inArray } from 'drizzle-orm/expressions';
1
+ import { and, eq, inArray } from 'drizzle-orm';
2
2
 
3
3
  import * as EXPORT_TABLES from '@/database/schemas';
4
4
  import { LobeChatDatabase } from '@/database/type';
@@ -1,4 +1,4 @@
1
- import { eq } from 'drizzle-orm/expressions';
1
+ import { eq } from 'drizzle-orm';
2
2
  import { afterEach, beforeEach, describe, expect, it } from 'vitest';
3
3
 
4
4
  import { getTestDBInstance } from '@/database/core/dbForTest';
@@ -5,7 +5,7 @@ import type {
5
5
  AdapterUser,
6
6
  VerificationToken,
7
7
  } from '@auth/core/adapters';
8
- import { eq } from 'drizzle-orm/expressions';
8
+ import { eq } from 'drizzle-orm';
9
9
  import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
10
10
 
11
11
  import { getTestDBInstance } from '@/database/core/dbForTest';
@@ -1,6 +1,6 @@
1
1
  import { TRPCError } from '@trpc/server';
2
2
  import dayjs from 'dayjs';
3
- import { eq } from 'drizzle-orm/expressions';
3
+ import { eq } from 'drizzle-orm';
4
4
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
5
 
6
6
  import { INBOX_SESSION_ID } from '@/const/session';
@@ -1,4 +1,4 @@
1
- import { and, desc, eq } from 'drizzle-orm/expressions';
1
+ import { and, desc, eq } from 'drizzle-orm';
2
2
 
3
3
  import { NewEvalDatasetsItem, evalDatasets } from '@/database/schemas';
4
4
  import { serverDB } from '@/database/server';
@@ -1,4 +1,4 @@
1
- import { and, eq, inArray } from 'drizzle-orm/expressions';
1
+ import { and, eq, inArray } from 'drizzle-orm';
2
2
 
3
3
  import { NewEvalDatasetRecordsItem, evalDatasetRecords, files } from '@/database/schemas';
4
4
  import { serverDB } from '@/database/server';
@@ -1,5 +1,4 @@
1
- import { SQL, count } from 'drizzle-orm';
2
- import { and, desc, eq, inArray } from 'drizzle-orm/expressions';
1
+ import { SQL, and, count, desc, eq, inArray } from 'drizzle-orm';
3
2
 
4
3
  import {
5
4
  NewEvalEvaluationItem,
@@ -1,4 +1,4 @@
1
- import { and, eq } from 'drizzle-orm/expressions';
1
+ import { and, eq } from 'drizzle-orm';
2
2
 
3
3
  import { NewEvaluationRecordsItem, evaluationRecords } from '@/database/schemas';
4
4
  import { serverDB } from '@/database/server';
@@ -1,6 +1,5 @@
1
1
  import dayjs, { Dayjs } from 'dayjs';
2
- import { SQL } from 'drizzle-orm';
3
- import { and, gte, lte } from 'drizzle-orm/expressions';
2
+ import { SQL, and, gte, lte } from 'drizzle-orm';
4
3
 
5
4
  export const genWhere = (sqls: (SQL<any> | undefined)[]): SQL<any> | undefined => {
6
5
  const where = sqls.filter(Boolean);
@@ -2,10 +2,13 @@
2
2
 
3
3
  import { Avatar, type AvatarProps } from '@lobehub/ui';
4
4
  import { createStyles } from 'antd-style';
5
- import { forwardRef } from 'react';
5
+ import { forwardRef, useMemo } from 'react';
6
6
 
7
7
  import { BRANDING_NAME } from '@/const/branding';
8
8
  import { DEFAULT_USER_AVATAR_URL } from '@/const/meta';
9
+ import { isDesktop } from '@/const/version';
10
+ import { useElectronStore } from '@/store/electron';
11
+ import { electronSyncSelectors } from '@/store/electron/selectors';
9
12
  import { useUserStore } from '@/store/user';
10
13
  import { authSelectors, userProfileSelectors } from '@/store/user/selectors';
11
14
 
@@ -54,11 +57,24 @@ const UserAvatar = forwardRef<HTMLDivElement, UserAvatarProps>(
54
57
  ]);
55
58
 
56
59
  const isSignedIn = useUserStore(authSelectors.isLogin);
60
+ const remoteServerUrl = useElectronStore(electronSyncSelectors.remoteServerUrl);
61
+
62
+ // Process avatar URL for desktop environment
63
+ const avatarUrl = useMemo(() => {
64
+ if (!isSignedIn || !avatar) return DEFAULT_USER_AVATAR_URL;
65
+
66
+ // If in desktop environment and avatar starts with /, prepend the remote server URL
67
+ if (isDesktop && avatar.startsWith('/') && remoteServerUrl) {
68
+ return remoteServerUrl + avatar;
69
+ }
70
+
71
+ return avatar;
72
+ }, [isSignedIn, avatar, remoteServerUrl]);
57
73
 
58
74
  return (
59
75
  <Avatar
60
76
  alt={isSignedIn && !!username ? username : BRANDING_NAME}
61
- avatar={isSignedIn && !!avatar ? avatar : DEFAULT_USER_AVATAR_URL}
77
+ avatar={avatarUrl}
62
78
  background={isSignedIn && avatar ? background : 'transparent'}
63
79
  className={cx(clickable && styles.clickable, className)}
64
80
  ref={ref}
@@ -0,0 +1,46 @@
1
+ import { AgentRuntimeErrorType } from '../error';
2
+ import { ChatCompletionErrorPayload, ModelProvider } from '../types';
3
+ import { processMultiProviderModelList } from '../utils/modelParse';
4
+ import { createOpenAICompatibleRuntime } from '../utils/openaiCompatibleFactory';
5
+
6
+ export interface Ai302ModelCard {
7
+ id: string;
8
+ }
9
+
10
+ export const Lobe302AI = createOpenAICompatibleRuntime({
11
+ baseURL: 'https://api.302.ai/v1',
12
+ chatCompletion: {
13
+ handleError: (error: any): Omit<ChatCompletionErrorPayload, 'provider'> | undefined => {
14
+ let errorResponse: Response | undefined;
15
+ if (error instanceof Response) {
16
+ errorResponse = error;
17
+ } else if ('status' in (error as any)) {
18
+ errorResponse = error as Response;
19
+ }
20
+ if (errorResponse && errorResponse.status === 401) {
21
+ return {
22
+ error: errorResponse.status,
23
+ errorType: AgentRuntimeErrorType.InvalidProviderAPIKey,
24
+ };
25
+ }
26
+
27
+ return {
28
+ error,
29
+ };
30
+ },
31
+ },
32
+ debug: {
33
+ chatCompletion: () => process.env.DEBUG_SILICONCLOUD_CHAT_COMPLETION === '1',
34
+ },
35
+ errorType: {
36
+ bizError: AgentRuntimeErrorType.ProviderBizError,
37
+ invalidAPIKey: AgentRuntimeErrorType.InvalidProviderAPIKey,
38
+ },
39
+ models: async ({ client }) => {
40
+ const modelsPage = (await client.models.list()) as any;
41
+ const modelList: Ai302ModelCard[] = modelsPage.data;
42
+
43
+ return processMultiProviderModelList(modelList);
44
+ },
45
+ provider: ModelProvider.Ai302,
46
+ });
@@ -1,4 +1,5 @@
1
1
  import { LobeAi21AI } from './ai21';
2
+ import { Lobe302AI } from './ai302';
2
3
  import { LobeAi360AI } from './ai360';
3
4
  import { LobeAiHubMixAI } from './aihubmix';
4
5
  import { LobeAnthropicAI } from './anthropic';
@@ -56,6 +57,7 @@ import { LobeZhipuAI } from './zhipu';
56
57
 
57
58
  export const providerRuntimeMap = {
58
59
  ai21: LobeAi21AI,
60
+ ai302: Lobe302AI,
59
61
  ai360: LobeAi360AI,
60
62
  aihubmix: LobeAiHubMixAI,
61
63
  anthropic: LobeAnthropicAI,
@@ -29,6 +29,7 @@ export interface CreateChatCompletionOptions {
29
29
 
30
30
  export enum ModelProvider {
31
31
  Ai21 = 'ai21',
32
+ Ai302 = 'ai302',
32
33
  Ai360 = 'ai360',
33
34
  AiHubMix = 'aihubmix',
34
35
  Anthropic = 'anthropic',
@@ -4,7 +4,7 @@ import type {
4
4
  AdapterUser,
5
5
  VerificationToken,
6
6
  } from '@auth/core/adapters';
7
- import { and, eq } from 'drizzle-orm/expressions';
7
+ import { and, eq } from 'drizzle-orm';
8
8
  import type { NeonDatabase } from 'drizzle-orm/neon-serverless';
9
9
  import { Adapter, AdapterAccount } from 'next-auth/adapters';
10
10
 
@@ -1,6 +1,5 @@
1
1
  import debug from 'debug';
2
- import { sql } from 'drizzle-orm';
3
- import { eq } from 'drizzle-orm/expressions';
2
+ import { eq, sql } from 'drizzle-orm';
4
3
 
5
4
  import {
6
5
  oidcAccessTokens,
@@ -1,5 +1,5 @@
1
1
  import { TRPCError } from '@trpc/server';
2
- import { inArray } from 'drizzle-orm/expressions';
2
+ import { inArray } from 'drizzle-orm';
3
3
  import { z } from 'zod';
4
4
 
5
5
  import { DEFAULT_FILE_EMBEDDING_MODEL_ITEM } from '@/const/settings/knowledge';
@@ -1,4 +1,4 @@
1
- import { eq, not } from 'drizzle-orm/expressions';
1
+ import { eq, not } from 'drizzle-orm';
2
2
  import { Mock, beforeEach, describe, expect, it, vi } from 'vitest';
3
3
 
4
4
  import { INBOX_SESSION_ID } from '@/const/session';
@@ -1,4 +1,5 @@
1
1
  import { Theme, css } from 'antd-style';
2
+ import { rgba } from 'polished';
2
3
 
3
4
  export default ({ token }: { prefixCls: string; token: Theme }) => css`
4
5
  .${token.prefixCls}-popover {
@@ -15,4 +16,9 @@ export default ({ token }: { prefixCls: string; token: Theme }) => css`
15
16
  color: ${token.colorText};
16
17
  }
17
18
  }
19
+
20
+ .${token.prefixCls}-modal-mask, .${token.prefixCls}-drawer-mask {
21
+ background: ${rgba(token.colorBgLayout, 0.5)} !important;
22
+ backdrop-filter: blur(2px);
23
+ }
18
24
  `;