@lobehub/chat 1.15.21 → 1.15.23

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.

Potentially problematic release.


This version of @lobehub/chat might be problematic. Click here for more details.

Files changed (135) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/locales/ar/metadata.json +6 -6
  3. package/locales/ar/migration.json +9 -9
  4. package/locales/ar/plugin.json +1 -1
  5. package/locales/ar/setting.json +4 -4
  6. package/locales/ar/welcome.json +13 -13
  7. package/locales/bg-BG/metadata.json +7 -7
  8. package/locales/bg-BG/migration.json +12 -12
  9. package/locales/bg-BG/plugin.json +1 -1
  10. package/locales/bg-BG/setting.json +4 -4
  11. package/locales/bg-BG/welcome.json +13 -13
  12. package/locales/de-DE/metadata.json +6 -6
  13. package/locales/de-DE/migration.json +9 -9
  14. package/locales/de-DE/plugin.json +1 -1
  15. package/locales/de-DE/setting.json +4 -4
  16. package/locales/de-DE/welcome.json +15 -15
  17. package/locales/en-US/metadata.json +8 -8
  18. package/locales/en-US/migration.json +9 -9
  19. package/locales/en-US/plugin.json +1 -1
  20. package/locales/en-US/setting.json +4 -4
  21. package/locales/en-US/welcome.json +16 -16
  22. package/locales/es-ES/metadata.json +8 -8
  23. package/locales/es-ES/migration.json +9 -9
  24. package/locales/es-ES/plugin.json +1 -1
  25. package/locales/es-ES/setting.json +4 -4
  26. package/locales/es-ES/welcome.json +15 -15
  27. package/locales/fr-FR/metadata.json +7 -7
  28. package/locales/fr-FR/migration.json +8 -8
  29. package/locales/fr-FR/plugin.json +1 -1
  30. package/locales/fr-FR/setting.json +4 -4
  31. package/locales/fr-FR/welcome.json +12 -12
  32. package/locales/it-IT/metadata.json +6 -6
  33. package/locales/it-IT/migration.json +11 -11
  34. package/locales/it-IT/plugin.json +1 -1
  35. package/locales/it-IT/setting.json +4 -4
  36. package/locales/it-IT/welcome.json +16 -16
  37. package/locales/ja-JP/metadata.json +6 -6
  38. package/locales/ja-JP/migration.json +9 -9
  39. package/locales/ja-JP/plugin.json +1 -1
  40. package/locales/ja-JP/setting.json +4 -4
  41. package/locales/ja-JP/welcome.json +15 -15
  42. package/locales/ko-KR/metadata.json +6 -6
  43. package/locales/ko-KR/migration.json +9 -9
  44. package/locales/ko-KR/plugin.json +1 -1
  45. package/locales/ko-KR/setting.json +4 -4
  46. package/locales/ko-KR/welcome.json +13 -13
  47. package/locales/nl-NL/metadata.json +7 -7
  48. package/locales/nl-NL/migration.json +9 -9
  49. package/locales/nl-NL/plugin.json +1 -1
  50. package/locales/nl-NL/setting.json +4 -4
  51. package/locales/nl-NL/welcome.json +15 -15
  52. package/locales/pl-PL/metadata.json +6 -6
  53. package/locales/pl-PL/migration.json +11 -11
  54. package/locales/pl-PL/plugin.json +1 -1
  55. package/locales/pl-PL/setting.json +4 -4
  56. package/locales/pl-PL/welcome.json +16 -16
  57. package/locales/pt-BR/metadata.json +8 -8
  58. package/locales/pt-BR/migration.json +13 -13
  59. package/locales/pt-BR/plugin.json +1 -1
  60. package/locales/pt-BR/setting.json +4 -4
  61. package/locales/pt-BR/welcome.json +16 -16
  62. package/locales/ru-RU/metadata.json +6 -6
  63. package/locales/ru-RU/migration.json +11 -11
  64. package/locales/ru-RU/plugin.json +1 -1
  65. package/locales/ru-RU/setting.json +4 -4
  66. package/locales/ru-RU/welcome.json +16 -16
  67. package/locales/tr-TR/metadata.json +6 -6
  68. package/locales/tr-TR/migration.json +12 -12
  69. package/locales/tr-TR/plugin.json +1 -1
  70. package/locales/tr-TR/setting.json +4 -4
  71. package/locales/tr-TR/welcome.json +15 -15
  72. package/locales/vi-VN/metadata.json +6 -6
  73. package/locales/vi-VN/migration.json +8 -8
  74. package/locales/vi-VN/plugin.json +1 -1
  75. package/locales/vi-VN/setting.json +4 -4
  76. package/locales/vi-VN/welcome.json +9 -9
  77. package/locales/zh-CN/common.json +3 -3
  78. package/locales/zh-CN/market.json +1 -1
  79. package/locales/zh-CN/metadata.json +6 -6
  80. package/locales/zh-CN/migration.json +4 -4
  81. package/locales/zh-CN/plugin.json +2 -2
  82. package/locales/zh-CN/setting.json +4 -4
  83. package/locales/zh-CN/welcome.json +8 -8
  84. package/locales/zh-TW/metadata.json +6 -6
  85. package/locales/zh-TW/migration.json +6 -6
  86. package/locales/zh-TW/plugin.json +1 -1
  87. package/locales/zh-TW/setting.json +4 -4
  88. package/locales/zh-TW/welcome.json +10 -10
  89. package/package.json +1 -1
  90. package/src/app/(auth)/login/[[...login]]/page.tsx +2 -1
  91. package/src/app/(main)/chat/(workspace)/features/ShareButton/useScreenshot.ts +2 -1
  92. package/src/app/(main)/chat/(workspace)/features/TelemetryNotification.tsx +5 -2
  93. package/src/app/(main)/chat/(workspace)/page.tsx +5 -4
  94. package/src/app/(main)/chat/@session/_layout/Desktop/SessionHeader.tsx +2 -2
  95. package/src/app/(main)/chat/@session/_layout/Mobile/SessionHeader.tsx +2 -2
  96. package/src/app/(main)/chat/features/Migration/ExportConfigButton.tsx +3 -1
  97. package/src/app/(main)/chat/features/Migration/Modal.tsx +3 -2
  98. package/src/app/(main)/chat/features/Migration/Start.tsx +4 -2
  99. package/src/app/(main)/files/(content)/NotSupportClient.tsx +2 -1
  100. package/src/app/(main)/market/_layout/Desktop/Header.tsx +3 -2
  101. package/src/app/(main)/market/features/ShareAgentButton/Inner.tsx +2 -1
  102. package/src/app/(main)/settings/about/features/Analytics.tsx +2 -1
  103. package/src/app/(main)/settings/about/features/Version.tsx +3 -2
  104. package/src/app/(main)/settings/about/index.tsx +6 -1
  105. package/src/app/(main)/welcome/features/Hero.tsx +3 -1
  106. package/src/app/(main)/welcome/page.tsx +5 -4
  107. package/src/app/metadata.ts +11 -12
  108. package/src/components/Branding/ProductLogo.tsx +14 -0
  109. package/src/components/Branding/index.ts +1 -0
  110. package/src/config/featureFlags/schema.ts +11 -5
  111. package/src/config/modelProviders/deepseek.ts +1 -9
  112. package/src/config/modelProviders/groq.ts +3 -3
  113. package/src/config/modelProviders/novita.ts +5 -5
  114. package/src/config/modelProviders/ollama.ts +6 -6
  115. package/src/config/modelProviders/perplexity.ts +6 -6
  116. package/src/config/modelProviders/qwen.ts +1 -10
  117. package/src/config/modelProviders/siliconcloud.ts +61 -27
  118. package/src/config/modelProviders/stepfun.ts +8 -0
  119. package/src/const/branding.ts +5 -0
  120. package/src/features/Conversation/components/InboxWelcome/QuestionSuggest.tsx +2 -1
  121. package/src/features/Conversation/components/InboxWelcome/index.tsx +4 -1
  122. package/src/features/Conversation/components/VirtualizedList/index.tsx +2 -2
  123. package/src/features/PluginDevModal/UrlManifestForm.tsx +2 -1
  124. package/src/features/Setting/Footer.tsx +2 -1
  125. package/src/locales/default/common.ts +3 -3
  126. package/src/locales/default/market.ts +1 -1
  127. package/src/locales/default/metadata.ts +6 -6
  128. package/src/locales/default/migration.ts +4 -4
  129. package/src/locales/default/plugin.ts +2 -2
  130. package/src/locales/default/setting.ts +4 -5
  131. package/src/locales/default/welcome.ts +8 -8
  132. package/src/server/ld.ts +2 -1
  133. package/src/server/metadata.ts +2 -1
  134. package/src/store/user/slices/auth/selectors.ts +2 -1
  135. package/src/utils/config.ts +2 -1
@@ -1,4 +1,5 @@
1
1
  import StructuredData from '@/components/StructuredData';
2
+ import { BRANDING_NAME } from '@/const/branding';
2
3
  import { ldModule } from '@/server/ld';
3
4
  import { metadataModule } from '@/server/metadata';
4
5
  import { translation } from '@/server/translation';
@@ -10,8 +11,8 @@ import TelemetryNotification from './features/TelemetryNotification';
10
11
  export const generateMetadata = async () => {
11
12
  const { t } = await translation('metadata');
12
13
  return metadataModule.generate({
13
- description: t('chat.description'),
14
- title: t('chat.title'),
14
+ description: t('chat.title', { appName: BRANDING_NAME }),
15
+ title: t('chat.title', { appName: BRANDING_NAME }),
15
16
  url: '/chat',
16
17
  });
17
18
  };
@@ -20,8 +21,8 @@ const Page = async () => {
20
21
  const mobile = isMobileDevice();
21
22
  const { t } = await translation('metadata');
22
23
  const ld = ldModule.generate({
23
- description: t('chat.description'),
24
- title: t('chat.title'),
24
+ description: t('chat.title', { appName: BRANDING_NAME }),
25
+ title: t('chat.title', { appName: BRANDING_NAME }),
25
26
  url: '/chat',
26
27
  });
27
28
 
@@ -1,13 +1,13 @@
1
1
  'use client';
2
2
 
3
3
  import { ActionIcon } from '@lobehub/ui';
4
- import { LobeChat } from '@lobehub/ui/brand';
5
4
  import { createStyles } from 'antd-style';
6
5
  import { MessageSquarePlus } from 'lucide-react';
7
6
  import { memo } from 'react';
8
7
  import { useTranslation } from 'react-i18next';
9
8
  import { Flexbox } from 'react-layout-kit';
10
9
 
10
+ import { ProductLogo } from '@/components/Branding';
11
11
  import { DESKTOP_HEADER_ICON_SIZE } from '@/const/layoutTokens';
12
12
  import SyncStatusTag from '@/features/SyncStatusInspector';
13
13
  import { useActionSWR } from '@/libs/swr';
@@ -38,7 +38,7 @@ const Header = memo(() => {
38
38
  <Flexbox className={styles.top} gap={16} padding={16}>
39
39
  <Flexbox distribution={'space-between'} horizontal>
40
40
  <Flexbox align={'center'} gap={4} horizontal>
41
- <LobeChat className={styles.logo} size={36} type={'text'} />
41
+ <ProductLogo className={styles.logo} size={36} />
42
42
  {enableWebrtc && <SyncStatusTag />}
43
43
  </Flexbox>
44
44
  {showCreateSession && (
@@ -1,12 +1,12 @@
1
1
  'use client';
2
2
 
3
3
  import { ActionIcon, MobileNavBar } from '@lobehub/ui';
4
- import { LobeChat } from '@lobehub/ui/brand';
5
4
  import { MessageSquarePlus } from 'lucide-react';
6
5
  import { useRouter } from 'next/navigation';
7
6
  import { memo } from 'react';
8
7
  import { Flexbox } from 'react-layout-kit';
9
8
 
9
+ import { ProductLogo } from '@/components/Branding';
10
10
  import { MOBILE_HEADER_ICON_SIZE } from '@/const/layoutTokens';
11
11
  import SyncStatusInspector from '@/features/SyncStatusInspector';
12
12
  import UserAvatar from '@/features/User/UserAvatar';
@@ -24,7 +24,7 @@ const Header = memo(() => {
24
24
  left={
25
25
  <Flexbox align={'center'} gap={8} horizontal style={{ marginLeft: 8 }}>
26
26
  <UserAvatar onClick={() => router.push('/me')} size={32} />
27
- <LobeChat type={'text'} />
27
+ <ProductLogo />
28
28
  {enableWebrtc && <SyncStatusInspector placement={'bottom'} />}
29
29
  </Flexbox>
30
30
  }
@@ -2,6 +2,8 @@ import { Button } from 'antd';
2
2
  import { memo } from 'react';
3
3
  import { useTranslation } from 'react-i18next';
4
4
 
5
+ import { BRANDING_NAME } from '@/const/branding';
6
+
5
7
  const ExportConfigButton = memo<{ primary?: boolean; state: any }>(({ state, primary }) => {
6
8
  const { t } = useTranslation('migration');
7
9
 
@@ -14,7 +16,7 @@ const ExportConfigButton = memo<{ primary?: boolean; state: any }>(({ state, pri
14
16
 
15
17
  const a = document.createElement('a');
16
18
  a.href = url;
17
- a.download = 'LobeChat-backup-v1.json';
19
+ a.download = `${BRANDING_NAME}-backup-v1.json`;
18
20
 
19
21
  document.body.append(a);
20
22
  a.click();
@@ -6,6 +6,7 @@ import { useTranslation } from 'react-i18next';
6
6
  import { Center } from 'react-layout-kit';
7
7
 
8
8
  import DataStyleModal from '@/components/DataStyleModal';
9
+ import { BRANDING_NAME } from '@/const/branding';
9
10
 
10
11
  import Failed from './Failed';
11
12
  import MigrationStart from './Start';
@@ -51,7 +52,7 @@ const MigrationModal = memo<MigrationModalProps>(({ setOpen, open, state: dbStat
51
52
  icon={<Icon icon={CheckCircle} />}
52
53
  status={'success'}
53
54
  style={{ paddingBlock: 24 }}
54
- subTitle={t('dbV1.upgrade.success.subTitle')}
55
+ subTitle={t('dbV1.upgrade.success.subTitle', { appName: BRANDING_NAME })}
55
56
  title={t('dbV1.upgrade.success.title')}
56
57
  />
57
58
  );
@@ -71,7 +72,7 @@ const MigrationModal = memo<MigrationModalProps>(({ setOpen, open, state: dbStat
71
72
  };
72
73
 
73
74
  return (
74
- <DataStyleModal icon={CpuIcon} open={open} title={t('dbV1.title')}>
75
+ <DataStyleModal icon={CpuIcon} open={open} title={t('dbV1.title', { appName: BRANDING_NAME })}>
75
76
  <Center gap={48}>{renderContent()}</Center>
76
77
  </DataStyleModal>
77
78
  );
@@ -6,6 +6,8 @@ import { useTranslation } from 'react-i18next';
6
6
  import { Center, Flexbox } from 'react-layout-kit';
7
7
  import Balancer from 'react-wrap-balancer';
8
8
 
9
+ import { BRANDING_NAME } from '@/const/branding';
10
+
9
11
  import ExportConfigButton from './ExportConfigButton';
10
12
  import UpgradeButton, { UpgradeButtonProps } from './UpgradeButton';
11
13
 
@@ -72,7 +74,7 @@ const MigrationStart = memo<UpgradeButtonProps>((props) => {
72
74
  <>
73
75
  <Flexbox>
74
76
  <Flexbox className={styles.intro} style={{ textAlign: 'center' }} width={460}>
75
- {t('dbV1.description')}
77
+ {t('dbV1.description', { appName: BRANDING_NAME })}
76
78
  </Flexbox>
77
79
  </Flexbox>
78
80
  <Flexbox gap={32}>
@@ -96,7 +98,7 @@ const MigrationStart = memo<UpgradeButtonProps>((props) => {
96
98
  <UpgradeButton {...props} />
97
99
  </Flexbox>
98
100
  <Flexbox align={'center'} className={styles.hint}>
99
- <Balancer>{t('dbV1.upgradeTip')}</Balancer>
101
+ <Balancer>{t('dbV1.upgradeTip', { appName: BRANDING_NAME })}</Balancer>
100
102
  </Flexbox>
101
103
  </Flexbox>
102
104
  </>
@@ -9,6 +9,7 @@ import { Trans, useTranslation } from 'react-i18next';
9
9
  import { Center, Flexbox } from 'react-layout-kit';
10
10
 
11
11
  import FeatureList from '@/components/FeatureList';
12
+ import { LOBE_CHAT_CLOUD } from '@/const/branding';
12
13
  import { DATABASE_SELF_HOSTING_URL, OFFICIAL_URL, UTM_SOURCE } from '@/const/url';
13
14
 
14
15
  const BLOCK_SIZE = 100;
@@ -136,7 +137,7 @@ const NotSupportClient = () => {
136
137
  <Link
137
138
  href={`${OFFICIAL_URL}?utm_source=${UTM_SOURCE}&utm_medium=client_not_support_file`}
138
139
  >
139
- LobeChat Cloud
140
+ {LOBE_CHAT_CLOUD}
140
141
  </Link>
141
142
  </Trans>
142
143
  </Typography.Text>
@@ -1,10 +1,11 @@
1
1
  'use client';
2
2
 
3
3
  import { ChatHeader } from '@lobehub/ui';
4
- import { LobeChat } from '@lobehub/ui/brand';
5
4
  import { createStyles } from 'antd-style';
6
5
  import { memo } from 'react';
7
6
 
7
+ import { ProductLogo } from '@/components/Branding';
8
+
8
9
  import ShareAgentButton from '../../features/ShareAgentButton';
9
10
 
10
11
  export const useStyles = createStyles(({ css, token }) => ({
@@ -19,7 +20,7 @@ const Header = memo(() => {
19
20
 
20
21
  return (
21
22
  <ChatHeader
22
- left={<LobeChat className={styles.logo} extra={'Discover'} size={36} type={'text'} />}
23
+ left={<ProductLogo className={styles.logo} extra={'Discover'} size={36} />}
23
24
  right={<ShareAgentButton />}
24
25
  />
25
26
  );
@@ -5,6 +5,7 @@ import Image from 'next/image';
5
5
  import { memo } from 'react';
6
6
  import { useTranslation } from 'react-i18next';
7
7
 
8
+ import { BRANDING_NAME } from '@/const/branding';
8
9
  import { AGENTS_INDEX_GITHUB, imageUrl } from '@/const/url';
9
10
 
10
11
  const Inner = memo(() => {
@@ -20,7 +21,7 @@ const Inner = memo(() => {
20
21
  />
21
22
  <h3>
22
23
  <Tag color={'cyan'}>{t('guide.func1.tag')}</Tag>
23
- <span>{t('guide.func1.title')}</span>
24
+ <span>{t('guide.func1.title', { appName: BRANDING_NAME })}</span>
24
25
  </h3>
25
26
  <p>
26
27
  <kbd>
@@ -5,6 +5,7 @@ import { Switch } from 'antd';
5
5
  import { memo } from 'react';
6
6
  import { useTranslation } from 'react-i18next';
7
7
 
8
+ import { BRANDING_NAME } from '@/const/branding';
8
9
  import { FORM_STYLE } from '@/const/layoutTokens';
9
10
  import { useUserStore } from '@/store/user';
10
11
  import { preferenceSelectors } from '@/store/user/selectors';
@@ -27,7 +28,7 @@ const Analytics = memo(() => {
27
28
  }}
28
29
  />
29
30
  ),
30
- desc: t('analytics.telemetry.desc'),
31
+ desc: t('analytics.telemetry.desc', { appName: BRANDING_NAME }),
31
32
  label: t('analytics.telemetry.title'),
32
33
  minWidth: undefined,
33
34
  valuePropName: 'checked',
@@ -6,6 +6,7 @@ import { memo } from 'react';
6
6
  import { useTranslation } from 'react-i18next';
7
7
  import { Center, Flexbox } from 'react-layout-kit';
8
8
 
9
+ import { BRANDING_NAME } from '@/const/branding';
9
10
  import { MANUAL_UPGRADE_URL, OFFICIAL_SITE, RELEASES_URL } from '@/const/url';
10
11
  import { CURRENT_VERSION } from '@/const/version';
11
12
  import { useNewVersion } from '@/features/User/UserPanel/useNewVersion';
@@ -37,11 +38,11 @@ const Version = memo<{ mobile?: boolean }>(({ mobile }) => {
37
38
  <Flexbox align={'center'} flex={'none'} gap={16} horizontal>
38
39
  <Link href={OFFICIAL_SITE} target={'_blank'}>
39
40
  <Center className={styles.logo} height={64} width={64}>
40
- <Image alt={'LobeChat'} height={52} src={'/icons/icon-192x192.png'} width={52} />
41
+ <Image alt={BRANDING_NAME} height={52} src={'/icons/icon-192x192.png'} width={52} />
41
42
  </Center>
42
43
  </Link>
43
44
  <Flexbox>
44
- <div style={{ fontSize: 18, fontWeight: 'bolder' }}>LobeChat</div>
45
+ <div style={{ fontSize: 18, fontWeight: 'bolder' }}>${BRANDING_NAME}</div>
45
46
  <div>
46
47
  <Tag color={theme.colorFillSecondary} style={{ color: theme.colorTextSecondary }}>
47
48
  v{CURRENT_VERSION}
@@ -8,6 +8,7 @@ import { memo } from 'react';
8
8
  import { useTranslation } from 'react-i18next';
9
9
  import { Flexbox } from 'react-layout-kit';
10
10
 
11
+ import { BRANDING_NAME } from '@/const/branding';
11
12
  import {
12
13
  BLOG,
13
14
  DISCORD,
@@ -45,7 +46,11 @@ const Page = memo<{ mobile?: boolean }>(({ mobile }) => {
45
46
 
46
47
  return (
47
48
  <>
48
- <Form.Group style={{ width: '100%' }} title={`${t('about')} LobeChat`} variant={'pure'}>
49
+ <Form.Group
50
+ style={{ width: '100%' }}
51
+ title={`${t('about')} ${BRANDING_NAME}`}
52
+ variant={'pure'}
53
+ >
49
54
  <Flexbox gap={20} paddingBlock={20} width={'100%'}>
50
55
  <div className={styles.title}>{t('version')}</div>
51
56
  <Version mobile={mobile} />
@@ -6,6 +6,8 @@ import { memo } from 'react';
6
6
  import { useTranslation } from 'react-i18next';
7
7
  import { Flexbox } from 'react-layout-kit';
8
8
 
9
+ import { BRANDING_NAME } from '@/const/branding';
10
+
9
11
  const useStyles = createStyles(({ css, token }) => {
10
12
  return {
11
13
  desc: css`
@@ -43,7 +45,7 @@ const Hero = memo(() => {
43
45
  justify={'center'}
44
46
  wrap={'wrap'}
45
47
  >
46
- <strong style={{ fontSize: 'min(56px, 8vw)' }}>LobeChat</strong>
48
+ <strong style={{ fontSize: 'min(56px, 8vw)' }}>{BRANDING_NAME}</strong>
47
49
  <span>{t('slogan.title')}</span>
48
50
  </Flexbox>
49
51
  <Flexbox
@@ -1,4 +1,5 @@
1
1
  import StructuredData from '@/components/StructuredData';
2
+ import { BRANDING_NAME } from '@/const/branding';
2
3
  import { ldModule } from '@/server/ld';
3
4
  import { metadataModule } from '@/server/metadata';
4
5
  import { translation } from '@/server/translation';
@@ -11,8 +12,8 @@ import Logo from './features/Logo';
11
12
  export const generateMetadata = async () => {
12
13
  const { t } = await translation('metadata');
13
14
  return metadataModule.generate({
14
- description: t('welcome.description'),
15
- title: t('welcome.title'),
15
+ description: t('welcome.description', { appName: BRANDING_NAME }),
16
+ title: t('welcome.title', { appName: BRANDING_NAME }),
16
17
  url: '/welcome',
17
18
  });
18
19
  };
@@ -21,8 +22,8 @@ const Page = async () => {
21
22
  const mobile = isMobileDevice();
22
23
  const { t } = await translation('metadata');
23
24
  const ld = ldModule.generate({
24
- description: t('welcome.description'),
25
- title: t('welcome.title'),
25
+ description: t('welcome.description', { appName: BRANDING_NAME }),
26
+ title: t('welcome.title', { appName: BRANDING_NAME }),
26
27
  url: '/welcome',
27
28
  });
28
29
 
@@ -1,11 +1,10 @@
1
1
  import { Metadata } from 'next';
2
2
 
3
3
  import { appEnv } from '@/config/app';
4
+ import { BRANDING_NAME } from '@/const/branding';
4
5
  import { OFFICIAL_URL, OG_URL } from '@/const/url';
5
6
  import { translation } from '@/server/translation';
6
7
 
7
- const title = 'LobeChat';
8
-
9
8
  const BASE_PATH = appEnv.NEXT_PUBLIC_BASE_PATH;
10
9
 
11
10
  // if there is a base path, then we don't need the manifest
@@ -17,9 +16,9 @@ export const generateMetadata = async (): Promise<Metadata> => {
17
16
  return {
18
17
  appleWebApp: {
19
18
  statusBarStyle: 'black-translucent',
20
- title,
19
+ title: BRANDING_NAME,
21
20
  },
22
- description: t('chat.description'),
21
+ description: t('chat.description', { appName: BRANDING_NAME }),
23
22
  icons: {
24
23
  apple: '/apple-touch-icon.png?v=1',
25
24
  icon: '/favicon.ico?v=1',
@@ -28,31 +27,31 @@ export const generateMetadata = async (): Promise<Metadata> => {
28
27
  manifest: noManifest ? undefined : '/manifest.json',
29
28
  metadataBase: new URL(OFFICIAL_URL),
30
29
  openGraph: {
31
- description: t('chat.description'),
30
+ description: t('chat.description', { appName: BRANDING_NAME }),
32
31
  images: [
33
32
  {
34
- alt: t('chat.title'),
33
+ alt: t('chat.title', { appName: BRANDING_NAME }),
35
34
  height: 640,
36
35
  url: OG_URL,
37
36
  width: 1200,
38
37
  },
39
38
  ],
40
39
  locale: 'en-US',
41
- siteName: title,
42
- title: title,
40
+ siteName: BRANDING_NAME,
41
+ title: BRANDING_NAME,
43
42
  type: 'website',
44
43
  url: OFFICIAL_URL,
45
44
  },
46
45
  title: {
47
- default: t('chat.title'),
48
- template: '%s · LobeChat',
46
+ default: t('chat.title', { appName: BRANDING_NAME }),
47
+ template: `%s · ${BRANDING_NAME}`,
49
48
  },
50
49
  twitter: {
51
50
  card: 'summary_large_image',
52
- description: t('chat.description'),
51
+ description: t('chat.description', { appName: BRANDING_NAME }),
53
52
  images: [OG_URL],
54
53
  site: '@lobehub',
55
- title: t('chat.title'),
54
+ title: t('chat.title', { appName: BRANDING_NAME }),
56
55
  },
57
56
  };
58
57
  };
@@ -0,0 +1,14 @@
1
+ import { LobeChat } from '@lobehub/ui/brand';
2
+ import { memo } from 'react';
3
+
4
+ interface ProductLogoProps {
5
+ className?: string;
6
+ extra?: string;
7
+ size?: number;
8
+ }
9
+
10
+ export const ProductLogo = memo<ProductLogoProps>(({ size, className, extra }) => {
11
+ return <LobeChat className={className} extra={extra} size={size} type={'text'} />;
12
+ });
13
+
14
+ export default ProductLogo;
@@ -0,0 +1 @@
1
+ export { ProductLogo } from './ProductLogo';
@@ -2,8 +2,13 @@
2
2
  import { z } from 'zod';
3
3
 
4
4
  export const FeatureFlagsSchema = z.object({
5
+ /**
6
+ *
7
+ */
5
8
  webrtc_sync: z.boolean().optional(),
9
+ check_updates: z.boolean().optional(),
6
10
 
11
+ // settings
7
12
  language_model_settings: z.boolean().optional(),
8
13
 
9
14
  openai_api_key: z.boolean().optional(),
@@ -13,19 +18,20 @@ export const FeatureFlagsSchema = z.object({
13
18
  edit_agent: z.boolean().optional(),
14
19
 
15
20
  dalle: z.boolean().optional(),
21
+ speech_to_text: z.boolean().optional(),
22
+ token_counter: z.boolean().optional(),
16
23
 
17
- check_updates: z.boolean().optional(),
18
24
  welcome_suggest: z.boolean().optional(),
19
25
 
20
26
  clerk_sign_up: z.boolean().optional(),
21
27
 
22
- cloud_promotion: z.boolean().optional(),
23
-
24
28
  market: z.boolean().optional(),
25
- speech_to_text: z.boolean().optional(),
26
-
27
29
  knowledge_base: z.boolean().optional(),
30
+
28
31
  rag_eval: z.boolean().optional(),
32
+
33
+ // internal flag
34
+ cloud_promotion: z.boolean().optional(),
29
35
  });
30
36
 
31
37
  export type IFeatureFlags = z.infer<typeof FeatureFlagsSchema>;
@@ -5,20 +5,12 @@ const DeepSeek: ModelProviderCard = {
5
5
  chatModels: [
6
6
  {
7
7
  description: '擅长通用对话任务',
8
- displayName: 'DeepSeek-V2',
8
+ displayName: 'DeepSeek V2.5',
9
9
  enabled: true,
10
10
  functionCall: true,
11
11
  id: 'deepseek-chat',
12
12
  tokens: 128_000,
13
13
  },
14
- {
15
- description: '擅长处理编程和数学任务',
16
- displayName: 'DeepSeek-Coder-V2',
17
- enabled: true,
18
- functionCall: true,
19
- id: 'deepseek-coder',
20
- tokens: 128_000,
21
- },
22
14
  ],
23
15
  checkModel: 'deepseek-chat',
24
16
  id: 'deepseek',
@@ -10,14 +10,14 @@ const Groq: ModelProviderCard = {
10
10
  enabled: true,
11
11
  functionCall: true,
12
12
  id: 'llama-3.1-8b-instant',
13
- tokens: 8000,
13
+ tokens: 131_072,
14
14
  },
15
15
  {
16
16
  displayName: 'Llama 3.1 70B (Preview)',
17
17
  enabled: true,
18
18
  functionCall: true,
19
19
  id: 'llama-3.1-70b-versatile',
20
- tokens: 8000,
20
+ tokens: 131_072,
21
21
  },
22
22
  /*
23
23
  // Offline due to overwhelming demand! Stay tuned for updates.
@@ -25,7 +25,7 @@ const Groq: ModelProviderCard = {
25
25
  displayName: 'Llama 3.1 405B (Preview)',
26
26
  functionCall: true,
27
27
  id: 'llama-3.1-405b-reasoning',
28
- tokens: 8000,
28
+ tokens: 8_192,
29
29
  },
30
30
  */
31
31
  {
@@ -4,30 +4,30 @@ import { ModelProviderCard } from '@/types/llm';
4
4
  const Novita: ModelProviderCard = {
5
5
  chatModels: [
6
6
  {
7
- displayName: 'Llama3.1 8B Instruct',
7
+ displayName: 'Llama 3.1 8B Instruct',
8
8
  enabled: true,
9
9
  id: 'meta-llama/llama-3.1-8b-instruct',
10
10
  tokens: 8192,
11
11
  },
12
12
  {
13
- displayName: 'Llama3.1 70B Instruct',
13
+ displayName: 'Llama 3.1 70B Instruct',
14
14
  enabled: true,
15
15
  id: 'meta-llama/llama-3.1-70b-instruct',
16
16
  tokens: 131_072,
17
17
  },
18
18
  {
19
- displayName: 'Llama3.1 405B Instruct',
19
+ displayName: 'Llama 3.1 405B Instruct',
20
20
  enabled: true,
21
21
  id: 'meta-llama/llama-3.1-405b-instruct',
22
22
  tokens: 32_768,
23
23
  },
24
24
  {
25
- displayName: 'Llama3 8B Instruct',
25
+ displayName: 'Llama 3 8B Instruct',
26
26
  id: 'meta-llama/llama-3-8b-instruct',
27
27
  tokens: 8192,
28
28
  },
29
29
  {
30
- displayName: 'Llama3 70B Instruct',
30
+ displayName: 'Llama 3 70B Instruct',
31
31
  id: 'meta-llama/llama-3-70b-instruct',
32
32
  tokens: 8192,
33
33
  },
@@ -4,18 +4,18 @@ import { ModelProviderCard } from '@/types/llm';
4
4
  const Ollama: ModelProviderCard = {
5
5
  chatModels: [
6
6
  {
7
- displayName: 'Llama3.1 8B',
7
+ displayName: 'Llama 3.1 8B',
8
8
  enabled: true,
9
9
  id: 'llama3.1',
10
10
  tokens: 128_000,
11
11
  },
12
12
  {
13
- displayName: 'Llama3.1 70B',
13
+ displayName: 'Llama 3.1 70B',
14
14
  id: 'llama3.1:70b',
15
15
  tokens: 128_000,
16
16
  },
17
17
  {
18
- displayName: 'Llama3.1 405B',
18
+ displayName: 'Llama 3.1 405B',
19
19
  id: 'llama3.1:405b',
20
20
  tokens: 128_000,
21
21
  },
@@ -41,18 +41,18 @@ const Ollama: ModelProviderCard = {
41
41
  tokens: 16_384,
42
42
  },
43
43
  {
44
- displayName: 'Gemma2 2B',
44
+ displayName: 'Gemma 2 2B',
45
45
  id: 'gemma2:2b',
46
46
  tokens: 8192,
47
47
  },
48
48
  {
49
- displayName: 'Gemma2 9B',
49
+ displayName: 'Gemma 2 9B',
50
50
  enabled: true,
51
51
  id: 'gemma2',
52
52
  tokens: 8192,
53
53
  },
54
54
  {
55
- displayName: 'Gemma2 27B',
55
+ displayName: 'Gemma 2 27B',
56
56
  id: 'gemma2:27b',
57
57
  tokens: 8192,
58
58
  },
@@ -4,36 +4,36 @@ import { ModelProviderCard } from '@/types/llm';
4
4
  const Perplexity: ModelProviderCard = {
5
5
  chatModels: [
6
6
  {
7
- displayName: 'Llama3.1 Sonar Small Chat',
7
+ displayName: 'Llama 3.1 Sonar Small Chat',
8
8
  enabled: true,
9
9
  id: 'llama-3.1-sonar-small-128k-chat',
10
10
  tokens: 128_000,
11
11
  },
12
12
  {
13
- displayName: 'Llama3.1 Sonar Large Chat',
13
+ displayName: 'Llama 3.1 Sonar Large Chat',
14
14
  enabled: true,
15
15
  id: 'llama-3.1-sonar-large-128k-chat',
16
16
  tokens: 128_000,
17
17
  },
18
18
  {
19
- displayName: 'Llama3.1 Sonar Small Online',
19
+ displayName: 'Llama 3.1 Sonar Small Online',
20
20
  enabled: true,
21
21
  id: 'llama-3.1-sonar-small-128k-online',
22
22
  tokens: 128_000,
23
23
  },
24
24
  {
25
- displayName: 'Llama3.1 Sonar Large Online',
25
+ displayName: 'Llama 3.1 Sonar Large Online',
26
26
  enabled: true,
27
27
  id: 'llama-3.1-sonar-large-128k-online',
28
28
  tokens: 128_000,
29
29
  },
30
30
  {
31
- displayName: 'Llama3.1 8B Instruct',
31
+ displayName: 'Llama 3.1 8B Instruct',
32
32
  id: 'llama-3.1-8b-instruct',
33
33
  tokens: 128_000,
34
34
  },
35
35
  {
36
- displayName: 'Llama3.1 70B Instruct',
36
+ displayName: 'Llama 3.1 70B Instruct',
37
37
  id: 'llama-3.1-70b-instruct',
38
38
  tokens: 128_000,
39
39
  },
@@ -58,15 +58,6 @@ const Qwen: ModelProviderCard = {
58
58
  displayName: 'Qwen VL Max',
59
59
  enabled: true,
60
60
  id: 'qwen-vl-max',
61
- tokens: 8192,
62
- vision: true,
63
- },
64
- {
65
- description:
66
- '抢先体验即将升级的 qwen-vl-max 大模型。',
67
- displayName: 'Qwen VL Max 0809',
68
- enabled: true,
69
- id: 'qwen-vl-max-0809',
70
61
  tokens: 32_768,
71
62
  vision: true,
72
63
  },
@@ -79,7 +70,7 @@ const Qwen: ModelProviderCard = {
79
70
  },
80
71
  {
81
72
  description: '通义千问2对外开源的57B规模14B激活参数的MOE模型',
82
- displayName: 'Qwen2 57B-A14B MoE',
73
+ displayName: 'Qwen2 57B A14B MoE',
83
74
  id: 'qwen2-57b-a14b-instruct',
84
75
  tokens: 65_536, // https://huggingface.co/Qwen/Qwen2-57B-A14B-Instruct
85
76
  },