@lobehub/chat 1.39.1 → 1.39.3

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 (54) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/Dockerfile +1 -1
  3. package/Dockerfile.database +1 -1
  4. package/changelog/v1.json +18 -0
  5. package/package.json +1 -1
  6. package/src/app/(main)/(mobile)/me/(home)/loading.tsx +1 -1
  7. package/src/app/(main)/(mobile)/me/data/loading.tsx +1 -1
  8. package/src/app/(main)/(mobile)/me/profile/loading.tsx +1 -1
  9. package/src/app/(main)/(mobile)/me/settings/loading.tsx +1 -1
  10. package/src/app/(main)/chat/(workspace)/@portal/default.tsx +1 -1
  11. package/src/app/(main)/chat/(workspace)/@portal/loading.tsx +1 -1
  12. package/src/app/(main)/chat/@session/default.tsx +3 -2
  13. package/src/app/(main)/chat/loading.tsx +1 -1
  14. package/src/app/(main)/chat/settings/loading.tsx +1 -1
  15. package/src/app/(main)/discover/loading.tsx +1 -1
  16. package/src/app/(main)/files/loading.tsx +2 -22
  17. package/src/app/(main)/profile/loading.tsx +1 -1
  18. package/src/app/(main)/repos/[id]/evals/dataset/page.tsx +1 -1
  19. package/src/app/(main)/repos/[id]/evals/evaluation/page.tsx +1 -1
  20. package/src/app/(main)/settings/@category/default.tsx +6 -2
  21. package/src/app/(main)/settings/_layout/Desktop/SideBar.tsx +1 -1
  22. package/src/app/(main)/settings/llm/ProviderList/providers.tsx +2 -4
  23. package/src/app/(main)/settings/loading.tsx +2 -8
  24. package/src/app/loading/Client/Content.tsx +1 -1
  25. package/src/app/loading/Server/Content.tsx +1 -1
  26. package/src/components/Loading/BrandTextLoading/LobeChatText/SVG.tsx +44 -0
  27. package/src/components/Loading/BrandTextLoading/LobeChatText/index.tsx +6 -0
  28. package/src/components/Loading/BrandTextLoading/LobeChatText/style.css +32 -0
  29. package/src/components/Loading/BrandTextLoading/index.tsx +11 -0
  30. package/src/components/{SkeletonLoading → Loading/SkeletonLoading}/index.tsx +1 -1
  31. package/src/config/llm.ts +3 -6
  32. package/src/const/auth.ts +0 -3
  33. package/src/features/Conversation/Error/APIKeyForm/index.tsx +0 -3
  34. package/src/features/FileViewer/Renderer/TXT/index.tsx +1 -1
  35. package/src/features/Portal/FilePreview/Body/index.tsx +1 -1
  36. package/src/features/Portal/Home/Body/Files/FileList/index.tsx +1 -1
  37. package/src/features/Setting/Footer.tsx +3 -1
  38. package/src/features/Setting/SettingContainer.tsx +1 -0
  39. package/src/libs/agent-runtime/AgentRuntime.ts +1 -1
  40. package/src/libs/agent-runtime/index.ts +0 -1
  41. package/src/libs/agent-runtime/sensenova/index.test.ts +78 -148
  42. package/src/libs/agent-runtime/sensenova/index.ts +23 -98
  43. package/src/locales/default/modelProvider.ts +0 -17
  44. package/src/server/modules/AgentRuntime/index.ts +0 -15
  45. package/src/services/_auth.ts +0 -14
  46. package/src/store/user/slices/modelList/selectors/keyVaults.ts +0 -2
  47. package/src/store/user/slices/modelList/selectors/modelConfig.ts +0 -2
  48. package/src/types/user/settings/keyVaults.ts +1 -6
  49. package/src/app/(main)/settings/llm/ProviderList/SenseNova/index.tsx +0 -44
  50. package/src/features/Conversation/Error/APIKeyForm/SenseNova.tsx +0 -49
  51. package/src/libs/agent-runtime/sensenova/authToken.test.ts +0 -18
  52. package/src/libs/agent-runtime/sensenova/authToken.ts +0 -27
  53. /package/src/components/{CircleLoading → Loading/CircleLoading}/index.tsx +0 -0
  54. /package/src/components/{FullscreenLoading → Loading/FullscreenLoading}/index.tsx +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,56 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ### [Version 1.39.3](https://github.com/lobehub/lobe-chat/compare/v1.39.2...v1.39.3)
6
+
7
+ <sup>Released on **2024-12-25**</sup>
8
+
9
+ #### 💄 Styles
10
+
11
+ - **misc**: Improve loading brand.
12
+
13
+ <br/>
14
+
15
+ <details>
16
+ <summary><kbd>Improvements and Fixes</kbd></summary>
17
+
18
+ #### Styles
19
+
20
+ - **misc**: Improve loading brand, closes [#5165](https://github.com/lobehub/lobe-chat/issues/5165) ([9684c98](https://github.com/lobehub/lobe-chat/commit/9684c98))
21
+
22
+ </details>
23
+
24
+ <div align="right">
25
+
26
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
27
+
28
+ </div>
29
+
30
+ ### [Version 1.39.2](https://github.com/lobehub/lobe-chat/compare/v1.39.1...v1.39.2)
31
+
32
+ <sup>Released on **2024-12-25**</sup>
33
+
34
+ #### ♻ Code Refactoring
35
+
36
+ - **misc**: Refactor sensenova provider with LobeOpenAICompatibleFactory.
37
+
38
+ <br/>
39
+
40
+ <details>
41
+ <summary><kbd>Improvements and Fixes</kbd></summary>
42
+
43
+ #### Code refactoring
44
+
45
+ - **misc**: Refactor sensenova provider with LobeOpenAICompatibleFactory, closes [#5116](https://github.com/lobehub/lobe-chat/issues/5116) ([5656f39](https://github.com/lobehub/lobe-chat/commit/5656f39))
46
+
47
+ </details>
48
+
49
+ <div align="right">
50
+
51
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
52
+
53
+ </div>
54
+
5
55
  ### [Version 1.39.1](https://github.com/lobehub/lobe-chat/compare/v1.39.0...v1.39.1)
6
56
 
7
57
  <sup>Released on **2024-12-24**</sup>
package/Dockerfile CHANGED
@@ -196,7 +196,7 @@ ENV \
196
196
  # Qwen
197
197
  QWEN_API_KEY="" QWEN_MODEL_LIST="" QWEN_PROXY_URL="" \
198
198
  # SenseNova
199
- SENSENOVA_ACCESS_KEY_ID="" SENSENOVA_ACCESS_KEY_SECRET="" SENSENOVA_MODEL_LIST="" \
199
+ SENSENOVA_API_KEY="" SENSENOVA_MODEL_LIST="" \
200
200
  # SiliconCloud
201
201
  SILICONCLOUD_API_KEY="" SILICONCLOUD_MODEL_LIST="" SILICONCLOUD_PROXY_URL="" \
202
202
  # Spark
@@ -231,7 +231,7 @@ ENV \
231
231
  # Qwen
232
232
  QWEN_API_KEY="" QWEN_MODEL_LIST="" QWEN_PROXY_URL="" \
233
233
  # SenseNova
234
- SENSENOVA_ACCESS_KEY_ID="" SENSENOVA_ACCESS_KEY_SECRET="" SENSENOVA_MODEL_LIST="" \
234
+ SENSENOVA_API_KEY="" SENSENOVA_MODEL_LIST="" \
235
235
  # SiliconCloud
236
236
  SILICONCLOUD_API_KEY="" SILICONCLOUD_MODEL_LIST="" SILICONCLOUD_PROXY_URL="" \
237
237
  # Spark
package/changelog/v1.json CHANGED
@@ -1,4 +1,22 @@
1
1
  [
2
+ {
3
+ "children": {
4
+ "improvements": [
5
+ "Improve loading brand."
6
+ ]
7
+ },
8
+ "date": "2024-12-25",
9
+ "version": "1.39.3"
10
+ },
11
+ {
12
+ "children": {
13
+ "improvements": [
14
+ "Refactor sensenova provider with LobeOpenAICompatibleFactory."
15
+ ]
16
+ },
17
+ "date": "2024-12-25",
18
+ "version": "1.39.2"
19
+ },
2
20
  {
3
21
  "children": {
4
22
  "fixes": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/chat",
3
- "version": "1.39.1",
3
+ "version": "1.39.3",
4
4
  "description": "Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
5
5
  "keywords": [
6
6
  "framework",
@@ -5,7 +5,7 @@ import { memo } from 'react';
5
5
  import { Flexbox } from 'react-layout-kit';
6
6
 
7
7
  import Divider from '@/components/Cell/Divider';
8
- import SkeletonLoading from '@/components/SkeletonLoading';
8
+ import SkeletonLoading from '@/components/Loading/SkeletonLoading';
9
9
 
10
10
  const Loading = memo(() => {
11
11
  return (
@@ -1,4 +1,4 @@
1
- import SkeletonLoading from '@/components/SkeletonLoading';
1
+ import SkeletonLoading from '@/components/Loading/SkeletonLoading';
2
2
 
3
3
  export default () => {
4
4
  return <SkeletonLoading paragraph={{ rows: 8 }} />;
@@ -1,4 +1,4 @@
1
- import SkeletonLoading from '@/components/SkeletonLoading';
1
+ import SkeletonLoading from '@/components/Loading/SkeletonLoading';
2
2
 
3
3
  export default () => {
4
4
  return <SkeletonLoading paragraph={{ rows: 8 }} />;
@@ -1,4 +1,4 @@
1
- import SkeletonLoading from '@/components/SkeletonLoading';
1
+ import SkeletonLoading from '@/components/Loading/SkeletonLoading';
2
2
 
3
3
  export default () => {
4
4
  return <SkeletonLoading paragraph={{ rows: 8 }} />;
@@ -1,6 +1,6 @@
1
1
  import React, { Suspense, lazy } from 'react';
2
2
 
3
- import Loading from '@/components/CircleLoading';
3
+ import Loading from '@/components/Loading/BrandTextLoading';
4
4
  import { isMobileDevice } from '@/utils/server/responsive';
5
5
 
6
6
  import Desktop from './_layout/Desktop';
@@ -1,3 +1,3 @@
1
- import Loading from '@/components/CircleLoading';
1
+ import Loading from '@/components/Loading/BrandTextLoading';
2
2
 
3
3
  export default () => <Loading />;
@@ -1,5 +1,6 @@
1
1
  import { Suspense, lazy } from 'react';
2
2
 
3
+ import CircleLoading from '@/components/Loading/CircleLoading';
3
4
  import ServerLayout from '@/components/server/ServerLayout';
4
5
 
5
6
  import Desktop from './_layout/Desktop';
@@ -13,14 +14,14 @@ const Layout = ServerLayout({ Desktop, Mobile });
13
14
 
14
15
  const Session = () => {
15
16
  return (
16
- <>
17
+ <Suspense fallback={<CircleLoading />}>
17
18
  <Layout>
18
19
  <Suspense fallback={<SkeletonList />}>
19
20
  <SessionListContent />
20
21
  </Suspense>
21
22
  </Layout>
22
23
  <SessionHydration />
23
- </>
24
+ </Suspense>
24
25
  );
25
26
  };
26
27
 
@@ -1,3 +1,3 @@
1
- import CircleLoading from '@/components/CircleLoading';
1
+ import CircleLoading from '@/components/Loading/BrandTextLoading';
2
2
 
3
3
  export default () => <CircleLoading />;
@@ -1,3 +1,3 @@
1
- import SkeletonLoading from '@/components/SkeletonLoading';
1
+ import SkeletonLoading from '@/components/Loading/SkeletonLoading';
2
2
 
3
3
  export default () => <SkeletonLoading paragraph={{ rows: 8 }} />;
@@ -1,6 +1,6 @@
1
1
  import { Center } from 'react-layout-kit';
2
2
 
3
- import CircleLoading from '@/components/CircleLoading';
3
+ import CircleLoading from '@/components/Loading/BrandTextLoading';
4
4
 
5
5
  export default () => (
6
6
  <Center height={'90vh'} width={'100%'}>
@@ -1,23 +1,3 @@
1
- 'use client';
1
+ import CircleLoading from '@/components/Loading/BrandTextLoading';
2
2
 
3
- import { Icon } from '@lobehub/ui';
4
- import { Typography } from 'antd';
5
- import { LoaderCircle } from 'lucide-react';
6
- import { useTranslation } from 'react-i18next';
7
- import { Center, Flexbox } from 'react-layout-kit';
8
-
9
- export default () => {
10
- const { t } = useTranslation('common');
11
- return (
12
- <Center height={'100%'} width={'100%'}>
13
- <Flexbox align={'center'} gap={8}>
14
- <div>
15
- <Icon icon={LoaderCircle} size={'large'} spin />
16
- </div>
17
- <Typography.Text style={{ letterSpacing: '0.1em' }} type={'secondary'}>
18
- {t('loading')}
19
- </Typography.Text>
20
- </Flexbox>
21
- </Center>
22
- );
23
- };
3
+ export default () => <CircleLoading />;
@@ -1,6 +1,6 @@
1
1
  import { Flexbox } from 'react-layout-kit';
2
2
 
3
- import SkeletonLoading from '@/components/SkeletonLoading';
3
+ import SkeletonLoading from '@/components/Loading/SkeletonLoading';
4
4
  import { isMobileDevice } from '@/utils/server/responsive';
5
5
 
6
6
  const Loading = async () => {
@@ -3,7 +3,7 @@
3
3
  import { createStyles } from 'antd-style';
4
4
  import { Flexbox } from 'react-layout-kit';
5
5
 
6
- import CircleLoading from '@/components/CircleLoading';
6
+ import CircleLoading from '@/components/Loading/BrandTextLoading';
7
7
  import { useKnowledgeBaseStore } from '@/store/knowledgeBase';
8
8
 
9
9
  import DatasetDetail from './DatasetDetail';
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { Flexbox } from 'react-layout-kit';
4
4
 
5
- import CircleLoading from '@/components/CircleLoading';
5
+ import CircleLoading from '@/components/Loading/BrandTextLoading';
6
6
  import { useKnowledgeBaseStore } from '@/store/knowledgeBase';
7
7
 
8
8
  import EmptyGuide from './EmptyGuide';
@@ -1,12 +1,16 @@
1
+ import { Suspense } from 'react';
2
+
3
+ import SkeletonLoading from '@/components/Loading/SkeletonLoading';
4
+
1
5
  import UpgradeAlert from '../features/UpgradeAlert';
2
6
  import CategoryContent from './features/CategoryContent';
3
7
 
4
8
  const Category = () => {
5
9
  return (
6
- <>
10
+ <Suspense fallback={<SkeletonLoading paragraph={{ rows: 7 }} title={false} />}>
7
11
  <CategoryContent />
8
12
  <UpgradeAlert />
9
- </>
13
+ </Suspense>
10
14
  );
11
15
  };
12
16
 
@@ -33,7 +33,7 @@ const SidebarLayout = ({ children, className, title, desc, ...rest }: SidebarLay
33
33
  {...rest}
34
34
  >
35
35
  <PanelTitle desc={desc || t('header.desc')} title={title || t('header.title')} />
36
- {children}
36
+ <Flexbox flex={1}>{children}</Flexbox>
37
37
  <BrandWatermark paddingInline={12} />
38
38
  </Flexbox>
39
39
  );
@@ -20,6 +20,7 @@ import {
20
20
  OpenRouterProviderCard,
21
21
  PerplexityProviderCard,
22
22
  QwenProviderCard,
23
+ SenseNovaProviderCard,
23
24
  SiliconCloudProviderCard,
24
25
  SparkProviderCard,
25
26
  StepfunProviderCard,
@@ -39,7 +40,6 @@ import { useGithubProvider } from './Github';
39
40
  import { useHuggingFaceProvider } from './HuggingFace';
40
41
  import { useOllamaProvider } from './Ollama';
41
42
  import { useOpenAIProvider } from './OpenAI';
42
- import { useSenseNovaProvider } from './SenseNova';
43
43
  import { useWenxinProvider } from './Wenxin';
44
44
 
45
45
  export const useProviderList = (): ProviderItem[] => {
@@ -51,7 +51,6 @@ export const useProviderList = (): ProviderItem[] => {
51
51
  const GithubProvider = useGithubProvider();
52
52
  const HuggingFaceProvider = useHuggingFaceProvider();
53
53
  const WenxinProvider = useWenxinProvider();
54
- const SenseNovaProvider = useSenseNovaProvider();
55
54
 
56
55
  return useMemo(
57
56
  () => [
@@ -81,7 +80,7 @@ export const useProviderList = (): ProviderItem[] => {
81
80
  SparkProviderCard,
82
81
  ZhiPuProviderCard,
83
82
  ZeroOneProviderCard,
84
- SenseNovaProvider,
83
+ SenseNovaProviderCard,
85
84
  StepfunProviderCard,
86
85
  MoonshotProviderCard,
87
86
  BaichuanProviderCard,
@@ -102,7 +101,6 @@ export const useProviderList = (): ProviderItem[] => {
102
101
  GithubProvider,
103
102
  WenxinProvider,
104
103
  HuggingFaceProvider,
105
- SenseNovaProvider,
106
104
  ],
107
105
  );
108
106
  };
@@ -1,9 +1,3 @@
1
- import SkeletonLoading from '@/components/SkeletonLoading';
1
+ import FullLoading from '@/components/Loading/BrandTextLoading';
2
2
 
3
- export default () => {
4
- return (
5
- <div style={{ flex: 1 }}>
6
- <SkeletonLoading paragraph={{ rows: 8 }} title={false} />
7
- </div>
8
- );
9
- };
3
+ export default () => <FullLoading />;
@@ -2,7 +2,7 @@ import dynamic from 'next/dynamic';
2
2
  import React, { memo } from 'react';
3
3
  import { useTranslation } from 'react-i18next';
4
4
 
5
- import FullscreenLoading from '@/components/FullscreenLoading';
5
+ import FullscreenLoading from '@/components/Loading/FullscreenLoading';
6
6
  import { useGlobalStore } from '@/store/global';
7
7
  import { systemStatusSelectors } from '@/store/global/selectors';
8
8
  import { DatabaseLoadingState } from '@/types/clientDB';
@@ -1,7 +1,7 @@
1
1
  import React, { memo } from 'react';
2
2
  import { useTranslation } from 'react-i18next';
3
3
 
4
- import FullscreenLoading from '@/components/FullscreenLoading';
4
+ import FullscreenLoading from '@/components/Loading/FullscreenLoading';
5
5
 
6
6
  import { AppLoadingStage, SERVER_LOADING_STAGES } from '../stage';
7
7
 
@@ -0,0 +1,44 @@
1
+ import { memo } from 'react';
2
+
3
+ const LobeChatText = memo<{ size?: number }>(({ size = '1em' }) => (
4
+ <svg
5
+ fill="currentColor"
6
+ fillRule="evenodd"
7
+ height={size}
8
+ style={{ flex: 'none', lineHeight: 1, opacity: 0.6 }}
9
+ viewBox="0 0 980 320"
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ >
12
+ <title>LobeChat</title>
13
+ <path
14
+ className="animate-draw"
15
+ d="M696.999 135.08c-.455.472-.895.949-1.32 1.434V77h-34.98v162.8h35.42v-69.52c0-2.933.514-5.573 1.54-7.92a18.279 18.279 0 014.4-6.16c2.054-1.907 4.4-3.3 7.04-4.18 2.64-1.027 5.5-1.54 8.58-1.54 3.96-.147 7.26.513 9.9 1.98 2.64 1.467 4.62 3.74 5.94 6.82 1.32 3.08 1.98 6.967 1.98 11.66v68.86h35.42v-71.5c0-10.413-1.54-19.14-4.62-26.18-2.933-7.187-7.406-12.54-13.42-16.06-6.013-3.667-13.42-5.5-22.22-5.5-6.453 0-12.613 1.32-18.48 3.96-5.866 2.64-10.926 6.16-15.18 10.56zM15 240.035V87.172h39.24V205.75h66.192v34.285H15z"
16
+ />
17
+ <path
18
+ className="animate-draw"
19
+ d="M183.731 242c-11.759 0-22.196-2.621-31.313-7.862-9.116-5.241-16.317-12.447-21.601-21.619-5.153-9.317-7.729-19.945-7.729-31.883 0-11.937 2.576-22.492 7.729-31.664 5.164-8.963 12.159-15.98 20.982-21.05l.619-.351c9.117-5.241 19.554-7.861 31.313-7.861s22.196 2.62 31.313 7.861c9.248 5.096 16.449 12.229 21.601 21.401 5.153 9.172 7.729 19.727 7.729 31.664 0 11.938-2.576 22.566-7.729 31.883-5.152 9.172-12.353 16.378-21.601 21.619-9.117 5.241-19.554 7.862-31.313 7.862zm0-32.975c4.36 0 8.191-1.092 11.494-3.275 3.436-2.184 6.144-5.387 8.126-9.609 1.982-4.367 2.973-9.536 2.973-15.505 0-5.968-.991-10.991-2.973-15.067-1.906-4.06-4.483-7.177-7.733-9.352l-.393-.257c-3.303-2.184-7.134-3.276-11.494-3.276-4.228 0-8.059 1.092-11.495 3.276-3.303 2.184-6.011 5.387-8.125 9.609-1.982 4.076-2.973 9.099-2.973 15.067 0 5.969.991 11.138 2.973 15.505 2.114 4.222 4.822 7.425 8.125 9.609 3.436 2.183 7.267 3.275 11.495 3.275z"
20
+ />
21
+ <path
22
+ className="animate-draw"
23
+ d="M295.508 78l-.001 54.042a34.071 34.071 0 016.541-5.781c6.474-4.367 14.269-6.551 23.385-6.551 9.777 0 18.629 2.475 26.557 7.424 7.872 4.835 14.105 11.684 18.7 20.546l.325.637c4.756 9.026 7.135 19.799 7.135 32.319 0 12.666-2.379 23.585-7.135 32.757-4.624 9.026-10.966 16.087-19.025 21.182-7.928 4.95-16.78 7.425-26.557 7.425-9.644 0-17.704-2.184-24.178-6.551-2.825-1.946-5.336-4.355-7.532-7.226l.001 11.812h-35.87V78h37.654zm21.998 74.684c-4.228 0-8.059 1.092-11.494 3.276-3.303 2.184-6.012 5.387-8.126 9.609-1.982 4.076-2.972 9.099-2.972 15.067 0 5.969.99 11.138 2.972 15.505 2.114 4.222 4.823 7.425 8.126 9.609 3.435 2.183 7.266 3.275 11.494 3.275s7.994-1.092 11.297-3.275c3.435-2.184 6.143-5.387 8.125-9.609 2.114-4.367 3.171-9.536 3.171-15.505 0-5.968-1.057-10.991-3.171-15.067-1.906-4.06-4.483-7.177-7.732-9.352l-.393-.257c-3.303-2.184-7.069-3.276-11.297-3.276z"
24
+ />
25
+ <path
26
+ className="animate-draw"
27
+ d="M422.841 191.337l.084.337a27.857 27.857 0 002.057 5.559c2.246 4.222 5.417 7.498 9.513 9.827 4.096 2.184 8.984 3.276 14.665 3.276 5.285 0 9.777-.801 13.477-2.403 3.579-1.632 7.1-4.025 10.564-7.182l.732-.679 19.818 22.711c-5.153 6.26-11.494 11.064-19.025 14.413-7.531 3.203-16.449 4.804-26.755 4.804-12.683 0-23.782-2.621-33.294-7.862-9.381-5.386-16.713-12.665-21.998-21.837-5.153-9.317-7.729-19.872-7.729-31.665 0-11.792 2.51-22.274 7.53-31.446 5.036-9.105 11.902-16.195 20.596-21.268l.61-.351c8.984-5.241 19.091-7.861 30.322-7.861 10.311 0 19.743 2.286 28.294 6.859l.64.347c8.72 4.659 15.656 11.574 20.809 20.746 5.153 9.172 7.729 20.309 7.729 33.411 0 1.294-.052 2.761-.156 4.4l-.042.623-.17 2.353c-.075 1.01-.151 1.973-.227 2.888h-78.044zm21.365-42.147c-4.492 0-8.456 1.092-11.891 3.276-3.303 2.184-5.879 5.314-7.729 9.39a26.04 26.04 0 00-1.117 2.79 30.164 30.164 0 00-1.121 4.499l-.058.354h43.96l-.015-.106c-.401-2.638-1.122-5.055-2.163-7.252l-.246-.503c-1.776-3.774-4.282-6.742-7.519-8.906l-.409-.266c-3.303-2.184-7.2-3.276-11.692-3.276z"
28
+ />
29
+ <path
30
+ className="animate-draw"
31
+ d="M846.763 155.12c3.373 2.786 5.06 7.186 5.06 13.2v2.64h-17.38c-8.654 0-16.28.806-22.88 2.42-6.454 1.466-11.88 3.74-16.28 6.82-4.254 2.933-7.48 6.673-9.68 11.22-2.2 4.546-3.3 9.826-3.3 15.84 0 7.04 1.686 13.2 5.06 18.48 3.52 5.133 8.213 9.166 14.08 12.1 6.013 2.933 12.686 4.4 20.02 4.4 5.573 0 10.853-1.1 15.84-3.3 5.133-2.2 9.826-5.207 14.08-9.02l.44-.385v10.505h34.1V161.5c0-9.24-1.98-16.867-5.94-22.88-3.96-6.014-9.534-10.487-16.72-13.42-7.187-2.934-15.694-4.4-25.52-4.4-10.707 0-20.607 2.053-29.7 6.16-9.094 4.106-17.16 9.753-24.2 16.94l21.12 20.46c4.106-4.84 8.36-8.287 12.76-10.34 4.546-2.2 9.68-3.3 15.4-3.3 5.866 0 10.413 1.466 13.64 4.4zm5.06 52.071V193.18h-16.5c-3.08 0-5.794.293-8.14.88-2.347.44-4.327 1.246-5.94 2.42-1.614 1.026-2.86 2.273-3.74 3.74-.734 1.466-1.1 3.226-1.1 5.28 0 2.2.586 4.106 1.76 5.72 1.173 1.613 2.713 2.86 4.62 3.74 2.053.88 4.4 1.32 7.04 1.32 3.813 0 7.406-.587 10.78-1.76 3.52-1.32 6.6-3.154 9.24-5.5a29.32 29.32 0 001.98-1.829z"
32
+ />
33
+ <path
34
+ className="animate-draw"
35
+ d="M592.64 242c-11.587 0-22.293-1.907-32.12-5.72-9.68-3.96-18.113-9.46-25.3-16.5-7.04-7.187-12.54-15.62-16.5-25.3-3.813-9.827-5.72-20.534-5.72-32.12 0-11.44 1.98-22 5.94-31.68 4.107-9.68 9.827-18.114 17.16-25.3 7.333-7.187 15.913-12.76 25.74-16.72 9.973-3.96 20.753-5.94 32.34-5.94 7.333 0 14.52.953 21.56 2.86 7.04 1.906 13.567 4.766 19.58 8.58 6.16 3.666 11.44 8.14 15.84 13.42l-23.1 26.18c-4.547-4.987-9.68-8.874-15.4-11.66-5.573-2.787-11.807-4.18-18.7-4.18-5.867 0-11.44 1.026-16.72 3.08-5.133 2.053-9.607 5.06-13.42 9.02-3.813 3.96-6.82 8.653-9.02 14.08-2.2 5.426-3.3 11.586-3.3 18.48 0 6.746 1.027 12.906 3.08 18.48 2.2 5.426 5.28 10.12 9.24 14.08 4.107 3.813 8.947 6.746 14.52 8.8 5.72 2.053 12.027 3.08 18.92 3.08 4.547 0 8.873-.587 12.98-1.76a48.746 48.746 0 0011.88-5.5c3.667-2.347 6.82-4.987 9.46-7.92l18.26 29.04c-3.52 3.96-8.36 7.553-14.52 10.78-6.013 3.226-12.76 5.793-20.24 7.7a95.814 95.814 0 01-22.44 2.64z"
36
+ />
37
+ <path
38
+ className="animate-draw"
39
+ d="M942.281 202.6v-48.59h27.14V123.4h-27.14V92.8h-33.58v30.6h-16.79v30.61h16.79v48.36c0 26.526 13.263 39.79 39.79 39.79 9.66 0 17.327-1.227 23-3.68v-27.83c-4.753 3.066-10.197 4.6-16.33 4.6-3.833 0-6.977-1.074-9.43-3.22-2.3-2.147-3.45-5.29-3.45-9.43z"
40
+ />
41
+ </svg>
42
+ ));
43
+
44
+ export default LobeChatText;
@@ -0,0 +1,6 @@
1
+ import LobeChatText from './SVG';
2
+ import './style.css';
3
+
4
+ const LobeChatTextLoading = () => <LobeChatText size={40} />;
5
+
6
+ export default LobeChatTextLoading;
@@ -0,0 +1,32 @@
1
+ @keyframes draw {
2
+ 0% {
3
+ stroke-dashoffset: 1000;
4
+ }
5
+
6
+ 100% {
7
+ stroke-dashoffset: 0;
8
+ }
9
+ }
10
+
11
+ @keyframes fill {
12
+ 30% {
13
+ fill-opacity: 0%;
14
+ }
15
+
16
+ 100% {
17
+ fill-opacity: 100%;
18
+ }
19
+ }
20
+
21
+ .animate-draw {
22
+ fill: currentcolor;
23
+ fill-opacity: 0%;
24
+ stroke: currentcolor;
25
+ stroke-dasharray: 1000;
26
+ stroke-dashoffset: 1000;
27
+ stroke-width: 1.5;
28
+
29
+ animation:
30
+ draw 2s cubic-bezier(0.4, 0, 0.2, 1) infinite,
31
+ fill 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;
32
+ }
@@ -0,0 +1,11 @@
1
+ import { Center } from 'react-layout-kit';
2
+
3
+ import LobeChatText from './LobeChatText';
4
+
5
+ export default () => {
6
+ return (
7
+ <Center height={'100%'} width={'100%'}>
8
+ <LobeChatText />
9
+ </Center>
10
+ );
11
+ };
@@ -15,7 +15,7 @@ const useStyles = createStyles(
15
15
  const SkeletonLoading = memo<SkeletonProps>(({ className, ...rest }) => {
16
16
  const { cx, styles } = useStyles();
17
17
 
18
- return <Skeleton className={cx(styles, className)} paragraph={{ rows: 8 }} {...rest} />;
18
+ return <Skeleton active className={cx(styles, className)} paragraph={{ rows: 8 }} {...rest} />;
19
19
  });
20
20
 
21
21
  export default SkeletonLoading;
package/src/config/llm.ts CHANGED
@@ -113,8 +113,7 @@ export const getLLMConfig = () => {
113
113
  HUGGINGFACE_API_KEY: z.string().optional(),
114
114
 
115
115
  ENABLED_SENSENOVA: z.boolean(),
116
- SENSENOVA_ACCESS_KEY_ID: z.string().optional(),
117
- SENSENOVA_ACCESS_KEY_SECRET: z.string().optional(),
116
+ SENSENOVA_API_KEY: z.string().optional(),
118
117
 
119
118
  ENABLED_XAI: z.boolean(),
120
119
  XAI_API_KEY: z.string().optional(),
@@ -234,10 +233,8 @@ export const getLLMConfig = () => {
234
233
  ENABLED_HUGGINGFACE: !!process.env.HUGGINGFACE_API_KEY,
235
234
  HUGGINGFACE_API_KEY: process.env.HUGGINGFACE_API_KEY,
236
235
 
237
- ENABLED_SENSENOVA:
238
- !!process.env.SENSENOVA_ACCESS_KEY_ID && !!process.env.SENSENOVA_ACCESS_KEY_SECRET,
239
- SENSENOVA_ACCESS_KEY_ID: process.env.SENSENOVA_ACCESS_KEY_ID,
240
- SENSENOVA_ACCESS_KEY_SECRET: process.env.SENSENOVA_ACCESS_KEY_SECRET,
236
+ ENABLED_SENSENOVA: !!process.env.SENSENOVA_API_KEY,
237
+ SENSENOVA_API_KEY: process.env.SENSENOVA_API_KEY,
241
238
 
242
239
  ENABLED_XAI: !!process.env.XAI_API_KEY,
243
240
  XAI_API_KEY: process.env.XAI_API_KEY,
package/src/const/auth.ts CHANGED
@@ -42,9 +42,6 @@ export interface JWTPayload {
42
42
  wenxinAccessKey?: string;
43
43
  wenxinSecretKey?: string;
44
44
 
45
- sensenovaAccessKeyID?: string;
46
- sensenovaAccessKeySecret?: string;
47
-
48
45
  /**
49
46
  * user id
50
47
  * in client db mode it's a uuid
@@ -10,7 +10,6 @@ import { GlobalLLMProviderKey } from '@/types/user/settings';
10
10
 
11
11
  import BedrockForm from './Bedrock';
12
12
  import ProviderApiKeyForm from './ProviderApiKeyForm';
13
- import SenseNovaForm from './SenseNova';
14
13
  import WenxinForm from './Wenxin';
15
14
 
16
15
  interface APIKeyFormProps {
@@ -67,8 +66,6 @@ const APIKeyForm = memo<APIKeyFormProps>(({ id, provider }) => {
67
66
  <Center gap={16} style={{ maxWidth: 300 }}>
68
67
  {provider === ModelProvider.Bedrock ? (
69
68
  <BedrockForm />
70
- ) : provider === ModelProvider.SenseNova ? (
71
- <SenseNovaForm />
72
69
  ) : provider === ModelProvider.Wenxin ? (
73
70
  <WenxinForm />
74
71
  ) : (
@@ -4,7 +4,7 @@ import { createStyles } from 'antd-style';
4
4
  import React from 'react';
5
5
  import { Center, Flexbox } from 'react-layout-kit';
6
6
 
7
- import CircleLoading from '@/components/CircleLoading';
7
+ import CircleLoading from '@/components/Loading/CircleLoading';
8
8
 
9
9
  const useStyles = createStyles(({ css, token }) => ({
10
10
  page: css`
@@ -5,7 +5,7 @@ import { useState } from 'react';
5
5
  import { useTranslation } from 'react-i18next';
6
6
  import { Flexbox } from 'react-layout-kit';
7
7
 
8
- import Loading from '@/components/CircleLoading';
8
+ import Loading from '@/components/Loading/CircleLoading';
9
9
  import FileViewer from '@/features/FileViewer';
10
10
  import { useChatStore } from '@/store/chat';
11
11
  import { chatPortalSelectors } from '@/store/chat/selectors';
@@ -7,7 +7,7 @@ import { useTranslation } from 'react-i18next';
7
7
  import { Center, Flexbox } from 'react-layout-kit';
8
8
  import Balancer from 'react-wrap-balancer';
9
9
 
10
- import SkeletonLoading from '@/components/SkeletonLoading';
10
+ import SkeletonLoading from '@/components/Loading/SkeletonLoading';
11
11
  import { useChatStore } from '@/store/chat';
12
12
  import { chatSelectors } from '@/store/chat/selectors';
13
13
 
@@ -32,7 +32,7 @@ const Footer = memo<PropsWithChildren>(() => {
32
32
 
33
33
  return hideGitHub ? null : (
34
34
  <>
35
- <Flexbox flex={1} justify={'flex-end'}>
35
+ <Flexbox justify={'flex-end'}>
36
36
  <Center
37
37
  as={'footer'}
38
38
  className={styles}
@@ -98,4 +98,6 @@ const Footer = memo<PropsWithChildren>(() => {
98
98
  );
99
99
  });
100
100
 
101
+ Footer.displayName = 'SettingFooter';
102
+
101
103
  export default Footer;
@@ -33,6 +33,7 @@ const SettingContainer = memo<PropsWithChildren<SettingContainerProps>>(
33
33
  >
34
34
  {addonBefore}
35
35
  <Flexbox
36
+ flex={1}
36
37
  gap={64}
37
38
  paddingInline={mobile ? undefined : 24}
38
39
  style={{
@@ -333,7 +333,7 @@ class AgentRuntime {
333
333
  }
334
334
 
335
335
  case ModelProvider.SenseNova: {
336
- runtimeModel = await LobeSenseNovaAI.fromAPIKey(params.sensenova);
336
+ runtimeModel = new LobeSenseNovaAI(params.sensenova);
337
337
  break;
338
338
  }
339
339
 
@@ -15,7 +15,6 @@ export { LobeOpenAI } from './openai';
15
15
  export { LobeOpenRouterAI } from './openrouter';
16
16
  export { LobePerplexityAI } from './perplexity';
17
17
  export { LobeQwenAI } from './qwen';
18
- export { LobeSenseNovaAI } from './sensenova';
19
18
  export { LobeTogetherAI } from './togetherai';
20
19
  export * from './types';
21
20
  export { AgentRuntimeError } from './utils/createError';