@lobehub/chat 1.108.0 → 1.108.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 (82) hide show
  1. package/.cursor/rules/testing-guide/testing-guide.mdc +18 -0
  2. package/CHANGELOG.md +58 -0
  3. package/README.md +3 -2
  4. package/README.zh-CN.md +3 -2
  5. package/changelog/v1.json +21 -0
  6. package/package.json +3 -3
  7. package/src/app/(backend)/trpc/desktop/[trpc]/route.ts +1 -1
  8. package/src/app/[variants]/(main)/settings/provider/features/ProviderConfig/Checker.tsx +15 -2
  9. package/src/app/[variants]/(main)/settings/provider/features/ProviderConfig/index.tsx +30 -3
  10. package/src/app/[variants]/layout.tsx +1 -0
  11. package/src/components/Analytics/LobeAnalyticsProvider.tsx +10 -13
  12. package/src/components/Analytics/LobeAnalyticsProviderWrapper.tsx +16 -4
  13. package/src/database/models/__tests__/_test_template.ts +1 -1
  14. package/src/database/models/__tests__/agent.test.ts +1 -1
  15. package/src/database/models/__tests__/aiModel.test.ts +1 -1
  16. package/src/database/models/__tests__/aiProvider.test.ts +1 -1
  17. package/src/database/models/__tests__/asyncTask.test.ts +1 -1
  18. package/src/database/models/__tests__/chunk.test.ts +1 -1
  19. package/src/database/models/__tests__/file.test.ts +1 -1
  20. package/src/database/models/__tests__/generationTopic.test.ts +1 -1
  21. package/src/database/models/__tests__/knowledgeBase.test.ts +1 -1
  22. package/src/database/models/__tests__/message.test.ts +1 -1
  23. package/src/database/models/__tests__/session.test.ts +1 -1
  24. package/src/database/models/__tests__/sessionGroup.test.ts +1 -1
  25. package/src/database/models/__tests__/topic.test.ts +1 -1
  26. package/src/database/models/_template.ts +1 -1
  27. package/src/database/models/agent.ts +1 -1
  28. package/src/database/models/aiModel.ts +1 -1
  29. package/src/database/models/aiProvider.ts +1 -1
  30. package/src/database/models/apiKey.ts +1 -1
  31. package/src/database/models/asyncTask.ts +1 -1
  32. package/src/database/models/chunk.ts +1 -2
  33. package/src/database/models/document.ts +1 -1
  34. package/src/database/models/embedding.ts +1 -2
  35. package/src/database/models/file.ts +1 -2
  36. package/src/database/models/generationTopic.ts +1 -1
  37. package/src/database/models/knowledgeBase.ts +1 -1
  38. package/src/database/models/message.ts +1 -2
  39. package/src/database/models/plugin.ts +1 -1
  40. package/src/database/models/session.ts +15 -2
  41. package/src/database/models/sessionGroup.ts +1 -1
  42. package/src/database/models/thread.ts +1 -1
  43. package/src/database/models/topic.ts +1 -2
  44. package/src/database/models/user.ts +1 -1
  45. package/src/database/repositories/dataExporter/index.ts +1 -1
  46. package/src/database/repositories/dataImporter/__tests__/index.test.ts +1 -1
  47. package/src/database/repositories/dataImporter/deprecated/__tests__/index.test.ts +1 -1
  48. package/src/database/repositories/dataImporter/deprecated/index.ts +1 -2
  49. package/src/database/repositories/dataImporter/index.ts +1 -1
  50. package/src/database/server/models/__tests__/adapter.test.ts +1 -1
  51. package/src/database/server/models/__tests__/nextauth.test.ts +1 -1
  52. package/src/database/server/models/__tests__/user.test.ts +1 -1
  53. package/src/database/server/models/ragEval/dataset.ts +1 -1
  54. package/src/database/server/models/ragEval/datasetRecord.ts +1 -1
  55. package/src/database/server/models/ragEval/evaluation.ts +1 -2
  56. package/src/database/server/models/ragEval/evaluationRecord.ts +1 -1
  57. package/src/database/utils/genWhere.ts +1 -2
  58. package/src/features/User/UserAvatar.tsx +18 -2
  59. package/src/libs/model-runtime/RouterRuntime/createRuntime.test.ts +538 -0
  60. package/src/libs/model-runtime/RouterRuntime/createRuntime.ts +50 -13
  61. package/src/libs/model-runtime/RouterRuntime/index.ts +1 -1
  62. package/src/libs/model-runtime/aihubmix/index.ts +10 -5
  63. package/src/libs/model-runtime/ppio/index.test.ts +3 -6
  64. package/src/libs/model-runtime/utils/openaiCompatibleFactory/index.ts +8 -6
  65. package/src/libs/next-auth/adapter/index.ts +1 -1
  66. package/src/libs/oidc-provider/adapter.ts +1 -2
  67. package/src/server/globalConfig/genServerAiProviderConfig.test.ts +22 -25
  68. package/src/server/globalConfig/genServerAiProviderConfig.ts +34 -22
  69. package/src/server/globalConfig/index.ts +1 -1
  70. package/src/server/routers/lambda/chunk.ts +1 -1
  71. package/src/server/services/discover/index.ts +11 -2
  72. package/src/services/chat.ts +1 -1
  73. package/src/services/session/client.test.ts +1 -1
  74. package/src/store/aiInfra/slices/aiProvider/__tests__/action.test.ts +211 -0
  75. package/src/store/aiInfra/slices/aiProvider/action.ts +46 -35
  76. package/src/store/user/slices/modelList/action.test.ts +5 -5
  77. package/src/store/user/slices/modelList/action.ts +4 -4
  78. package/src/styles/antdOverride.ts +6 -0
  79. package/src/utils/getFallbackModelProperty.test.ts +52 -45
  80. package/src/utils/getFallbackModelProperty.ts +4 -3
  81. package/src/utils/parseModels.test.ts +107 -98
  82. package/src/utils/parseModels.ts +10 -8
@@ -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}