@lobehub/chat 1.26.13 → 1.26.14

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 (64) hide show
  1. package/.i18nrc.js +1 -0
  2. package/CHANGELOG.md +25 -0
  3. package/locales/ar/common.json +1 -0
  4. package/locales/ar/models.json +3 -0
  5. package/locales/bg-BG/common.json +1 -0
  6. package/locales/bg-BG/models.json +3 -0
  7. package/locales/de-DE/common.json +1 -0
  8. package/locales/de-DE/models.json +3 -0
  9. package/locales/en-US/common.json +1 -0
  10. package/locales/en-US/models.json +3 -0
  11. package/locales/es-ES/common.json +1 -0
  12. package/locales/es-ES/models.json +3 -0
  13. package/locales/fa-IR/auth.json +8 -0
  14. package/locales/fa-IR/chat.json +189 -0
  15. package/locales/fa-IR/clerk.json +769 -0
  16. package/locales/fa-IR/common.json +238 -0
  17. package/locales/fa-IR/components.json +84 -0
  18. package/locales/fa-IR/discover.json +204 -0
  19. package/locales/fa-IR/error.json +138 -0
  20. package/locales/fa-IR/file.json +94 -0
  21. package/locales/fa-IR/knowledgeBase.json +32 -0
  22. package/locales/fa-IR/market.json +32 -0
  23. package/locales/fa-IR/metadata.json +35 -0
  24. package/locales/fa-IR/migration.json +45 -0
  25. package/locales/fa-IR/modelProvider.json +164 -0
  26. package/locales/fa-IR/models.json +1108 -0
  27. package/locales/fa-IR/plugin.json +166 -0
  28. package/locales/fa-IR/portal.json +35 -0
  29. package/locales/fa-IR/providers.json +94 -0
  30. package/locales/fa-IR/ragEval.json +91 -0
  31. package/locales/fa-IR/setting.json +421 -0
  32. package/locales/fa-IR/tool.json +10 -0
  33. package/locales/fa-IR/welcome.json +50 -0
  34. package/locales/fr-FR/common.json +1 -0
  35. package/locales/fr-FR/models.json +3 -0
  36. package/locales/it-IT/common.json +1 -0
  37. package/locales/it-IT/models.json +3 -0
  38. package/locales/ja-JP/common.json +1 -0
  39. package/locales/ja-JP/models.json +3 -0
  40. package/locales/ko-KR/common.json +1 -0
  41. package/locales/ko-KR/models.json +3 -0
  42. package/locales/nl-NL/common.json +1 -0
  43. package/locales/nl-NL/models.json +3 -0
  44. package/locales/pl-PL/common.json +1 -0
  45. package/locales/pl-PL/models.json +3 -0
  46. package/locales/pt-BR/common.json +1 -0
  47. package/locales/pt-BR/models.json +3 -0
  48. package/locales/ru-RU/common.json +1 -0
  49. package/locales/ru-RU/models.json +3 -0
  50. package/locales/tr-TR/common.json +1 -0
  51. package/locales/tr-TR/models.json +3 -0
  52. package/locales/vi-VN/common.json +1 -0
  53. package/locales/vi-VN/models.json +3 -0
  54. package/locales/zh-CN/common.json +1 -0
  55. package/locales/zh-CN/models.json +3 -0
  56. package/locales/zh-TW/common.json +1 -0
  57. package/locales/zh-TW/models.json +3 -0
  58. package/package.json +2 -2
  59. package/src/config/app.ts +4 -1
  60. package/src/layout/GlobalProvider/AppTheme.tsx +49 -29
  61. package/src/layout/GlobalProvider/index.tsx +2 -0
  62. package/src/locales/default/common.ts +1 -0
  63. package/src/locales/resources.ts +5 -0
  64. package/src/server/sitemap.test.ts +4 -4
@@ -112,6 +112,7 @@
112
112
  "en": "İngilizce",
113
113
  "en-US": "İngilizce",
114
114
  "es-ES": "İspanyolca",
115
+ "fa-IR": "Farsça",
115
116
  "fi-FI": "Fince",
116
117
  "fr-FR": "Fransızca",
117
118
  "hi-IN": "Hintçe",
@@ -131,6 +131,9 @@
131
131
  "Qwen/Qwen2.5-32B-Instruct": {
132
132
  "description": "Qwen2.5, talimat tabanlı görevlerin işlenmesini optimize etmek için tasarlanmış yeni bir büyük dil modeli serisidir."
133
133
  },
134
+ "Qwen/Qwen2.5-72B-Instruct": {
135
+ "description": "Alibaba Cloud Tongyi Qianwen ekibi tarafından geliştirilen büyük bir dil modeli"
136
+ },
134
137
  "Qwen/Qwen2.5-72B-Instruct-128K": {
135
138
  "description": "Qwen2.5, daha güçlü anlama ve üretim yeteneği ile yeni bir büyük dil modeli serisidir."
136
139
  },
@@ -112,6 +112,7 @@
112
112
  "en": "Tiếng Anh",
113
113
  "en-US": "Tiếng Anh (Mỹ)",
114
114
  "es-ES": "Tiếng Tây Ban Nha",
115
+ "fa-IR": "Tiếng Ba Tư",
115
116
  "fi-FI": "Tiếng Phần Lan",
116
117
  "fr-FR": "Tiếng Pháp",
117
118
  "hi-IN": "Tiếng Hin-ddi",
@@ -131,6 +131,9 @@
131
131
  "Qwen/Qwen2.5-32B-Instruct": {
132
132
  "description": "Qwen2.5 là một loạt mô hình ngôn ngữ lớn hoàn toàn mới, nhằm tối ưu hóa việc xử lý các nhiệm vụ theo hướng dẫn."
133
133
  },
134
+ "Qwen/Qwen2.5-72B-Instruct": {
135
+ "description": "Mô hình ngôn ngữ lớn được phát triển bởi đội ngũ Qianwen của Alibaba Cloud"
136
+ },
134
137
  "Qwen/Qwen2.5-72B-Instruct-128K": {
135
138
  "description": "Qwen2.5 là một loạt mô hình ngôn ngữ lớn hoàn toàn mới, sở hữu khả năng hiểu và tạo ra mạnh mẽ hơn."
136
139
  },
@@ -112,6 +112,7 @@
112
112
  "en": "英语",
113
113
  "en-US": "英语",
114
114
  "es-ES": "西班牙语",
115
+ "fa-IR": "波斯语",
115
116
  "fi-FI": "芬兰语",
116
117
  "fr-FR": "法语",
117
118
  "hi-IN": "印地语",
@@ -131,6 +131,9 @@
131
131
  "Qwen/Qwen2.5-32B-Instruct": {
132
132
  "description": "Qwen2.5 是全新的大型语言模型系列,旨在优化指令式任务的处理。"
133
133
  },
134
+ "Qwen/Qwen2.5-72B-Instruct": {
135
+ "description": "阿里云通义千问团队开发的大型语言模型"
136
+ },
134
137
  "Qwen/Qwen2.5-72B-Instruct-128K": {
135
138
  "description": "Qwen2.5 是全新的大型语言模型系列,具有更强的理解和生成能力。"
136
139
  },
@@ -112,6 +112,7 @@
112
112
  "en": "英文",
113
113
  "en-US": "英文",
114
114
  "es-ES": "西班牙語",
115
+ "fa-IR": "波斯語",
115
116
  "fi-FI": "芬蘭語",
116
117
  "fr-FR": "法語",
117
118
  "hi-IN": "印地語",
@@ -131,6 +131,9 @@
131
131
  "Qwen/Qwen2.5-32B-Instruct": {
132
132
  "description": "Qwen2.5是全新的大型語言模型系列,旨在優化指令式任務的處理。"
133
133
  },
134
+ "Qwen/Qwen2.5-72B-Instruct": {
135
+ "description": "阿里雲通義千問團隊開發的大型語言模型"
136
+ },
134
137
  "Qwen/Qwen2.5-72B-Instruct-128K": {
135
138
  "description": "Qwen2.5 是全新的大型語言模型系列,具有更強的理解和生成能力。"
136
139
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/chat",
3
- "version": "1.26.13",
3
+ "version": "1.26.14",
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",
@@ -125,7 +125,7 @@
125
125
  "@lobehub/chat-plugins-gateway": "^1.9.0",
126
126
  "@lobehub/icons": "^1.35.4",
127
127
  "@lobehub/tts": "^1.25.1",
128
- "@lobehub/ui": "^1.151.5",
128
+ "@lobehub/ui": "^1.152.0",
129
129
  "@neondatabase/serverless": "^0.10.1",
130
130
  "@next/third-parties": "^14.2.15",
131
131
  "@react-spring/web": "^9.7.5",
package/src/config/app.ts CHANGED
@@ -44,6 +44,8 @@ export const getAppConfig = () => {
44
44
 
45
45
  APP_URL: z.string().optional(),
46
46
  CDN_USE_GLOBAL: z.boolean().optional(),
47
+ CUSTOM_FONT_FAMILY: z.string().optional(),
48
+ CUSTOM_FONT_URL: z.string().optional(),
47
49
  },
48
50
  runtimeEnv: {
49
51
  NEXT_PUBLIC_BASE_PATH: process.env.NEXT_PUBLIC_BASE_PATH || '',
@@ -67,7 +69,8 @@ export const getAppConfig = () => {
67
69
  PLUGIN_SETTINGS: process.env.PLUGIN_SETTINGS,
68
70
 
69
71
  APP_URL,
70
-
72
+ CUSTOM_FONT_FAMILY: process.env.CUSTOM_FONT_FAMILY,
73
+ CUSTOM_FONT_URL: process.env.CUSTOM_FONT_URL,
71
74
  CDN_USE_GLOBAL: process.env.CDN_USE_GLOBAL === '1',
72
75
  },
73
76
  });
@@ -1,7 +1,12 @@
1
1
  'use client';
2
2
 
3
- import { ConfigProvider, NeutralColors, PrimaryColors, ThemeProvider } from '@lobehub/ui';
4
- import { ConfigProvider as AntdConfigProvider } from 'antd';
3
+ import {
4
+ ConfigProvider,
5
+ FontLoader,
6
+ NeutralColors,
7
+ PrimaryColors,
8
+ ThemeProvider,
9
+ } from '@lobehub/ui';
5
10
  import { ThemeAppearance, createStyles } from 'antd-style';
6
11
  import 'antd/dist/reset.css';
7
12
  import Image from 'next/image';
@@ -77,6 +82,8 @@ const useStyles = createStyles(({ css, token }) => ({
77
82
 
78
83
  export interface AppThemeProps {
79
84
  children?: ReactNode;
85
+ customFontFamily?: string;
86
+ customFontURL?: string;
80
87
  defaultAppearance?: ThemeAppearance;
81
88
  defaultNeutralColor?: NeutralColors;
82
89
  defaultPrimaryColor?: PrimaryColors;
@@ -84,12 +91,20 @@ export interface AppThemeProps {
84
91
  }
85
92
 
86
93
  const AppTheme = memo<AppThemeProps>(
87
- ({ children, defaultAppearance, defaultPrimaryColor, defaultNeutralColor, globalCDN }) => {
94
+ ({
95
+ children,
96
+ defaultAppearance,
97
+ defaultPrimaryColor,
98
+ defaultNeutralColor,
99
+ globalCDN,
100
+ customFontURL,
101
+ customFontFamily,
102
+ }) => {
88
103
  // console.debug('server:appearance', defaultAppearance);
89
104
  // console.debug('server:primaryColor', defaultPrimaryColor);
90
105
  // console.debug('server:neutralColor', defaultNeutralColor);
91
106
  const themeMode = useUserStore(userGeneralSettingsSelectors.currentThemeMode);
92
- const { styles, cx } = useStyles();
107
+ const { styles, cx, theme } = useStyles();
93
108
  const [primaryColor, neutralColor] = useUserStore((s) => [
94
109
  userGeneralSettingsSelectors.primaryColor(s),
95
110
  userGeneralSettingsSelectors.neutralColor(s),
@@ -104,33 +119,38 @@ const AppTheme = memo<AppThemeProps>(
104
119
  }, [neutralColor]);
105
120
 
106
121
  return (
107
- <AntdConfigProvider theme={{ cssVar: true }}>
108
- <ThemeProvider
109
- className={cx(styles.app, styles.scrollbar, styles.scrollbarPolyfill)}
110
- customTheme={{
111
- neutralColor: neutralColor ?? defaultNeutralColor,
112
- primaryColor: primaryColor ?? defaultPrimaryColor,
113
- }}
114
- defaultAppearance={defaultAppearance}
115
- onAppearanceChange={(appearance) => {
116
- setCookie(LOBE_THEME_APPEARANCE, appearance);
122
+ <ThemeProvider
123
+ className={cx(styles.app, styles.scrollbar, styles.scrollbarPolyfill)}
124
+ customTheme={{
125
+ neutralColor: neutralColor ?? defaultNeutralColor,
126
+ primaryColor: primaryColor ?? defaultPrimaryColor,
127
+ }}
128
+ defaultAppearance={defaultAppearance}
129
+ onAppearanceChange={(appearance) => {
130
+ setCookie(LOBE_THEME_APPEARANCE, appearance);
131
+ }}
132
+ theme={{
133
+ cssVar: true,
134
+ token: {
135
+ fontFamily: customFontFamily ? `${customFontFamily},${theme.fontFamily}` : undefined,
136
+ },
137
+ }}
138
+ themeMode={themeMode}
139
+ >
140
+ {!!customFontURL && <FontLoader url={customFontURL} />}
141
+ <GlobalStyle />
142
+ <AntdStaticMethods />
143
+ <ConfigProvider
144
+ config={{
145
+ aAs: Link,
146
+ imgAs: Image,
147
+ imgUnoptimized: true,
148
+ proxy: globalCDN ? 'unpkg' : undefined,
117
149
  }}
118
- themeMode={themeMode}
119
150
  >
120
- <GlobalStyle />
121
- <AntdStaticMethods />
122
- <ConfigProvider
123
- config={{
124
- aAs: Link,
125
- imgAs: Image,
126
- imgUnoptimized: true,
127
- proxy: globalCDN ? 'unpkg' : undefined,
128
- }}
129
- >
130
- {children}
131
- </ConfigProvider>
132
- </ThemeProvider>
133
- </AntdConfigProvider>
151
+ {children}
152
+ </ConfigProvider>
153
+ </ThemeProvider>
134
154
  );
135
155
  },
136
156
  );
@@ -69,6 +69,8 @@ const GlobalLayout = async ({ children }: PropsWithChildren) => {
69
69
  <StyleRegistry>
70
70
  <Locale antdLocale={antdLocale} defaultLang={userLocale}>
71
71
  <AppTheme
72
+ customFontFamily={appEnv.CUSTOM_FONT_FAMILY}
73
+ customFontURL={appEnv.CUSTOM_FONT_URL}
72
74
  defaultAppearance={appearance?.value}
73
75
  defaultNeutralColor={neutralColor?.value as any}
74
76
  defaultPrimaryColor={primaryColor?.value as any}
@@ -113,6 +113,7 @@ export default {
113
113
  'en': '英语',
114
114
  'en-US': '英语',
115
115
  'es-ES': '西班牙语',
116
+ 'fa-IR': '波斯语',
116
117
  'fi-FI': '芬兰语',
117
118
  'fr-FR': '法语',
118
119
  'hi-IN': '印地语',
@@ -15,6 +15,7 @@ export const locales = [
15
15
  'zh-CN',
16
16
  'zh-TW',
17
17
  'vi-VN',
18
+ 'fa-IR',
18
19
  ] as const;
19
20
 
20
21
  export type DefaultResources = typeof resources;
@@ -111,6 +112,10 @@ export const localeOptions: LocaleOptions = [
111
112
  label: 'Български',
112
113
  value: 'bg-BG',
113
114
  },
115
+ {
116
+ label: 'فارسی',
117
+ value: 'fa-IR',
118
+ },
114
119
  ] as LocaleOptions;
115
120
 
116
121
  export const supportLocales: string[] = [...locales, 'en', 'zh'];
@@ -73,7 +73,7 @@ describe('Sitemap', () => {
73
73
  ]);
74
74
 
75
75
  const assistantsSitemap = await sitemap.getAssistants();
76
- expect(assistantsSitemap.length).toBe(14);
76
+ expect(assistantsSitemap.length).toBe(15);
77
77
  expect(assistantsSitemap).toContainEqual(
78
78
  expect.objectContaining({
79
79
  url: getCanonicalUrl('/discover/assistant/test-assistant'),
@@ -97,7 +97,7 @@ describe('Sitemap', () => {
97
97
  ]);
98
98
 
99
99
  const pluginsSitemap = await sitemap.getPlugins();
100
- expect(pluginsSitemap.length).toBe(14);
100
+ expect(pluginsSitemap.length).toBe(15);
101
101
  expect(pluginsSitemap).toContainEqual(
102
102
  expect.objectContaining({
103
103
  url: getCanonicalUrl('/discover/plugin/test-plugin'),
@@ -121,7 +121,7 @@ describe('Sitemap', () => {
121
121
  ]);
122
122
 
123
123
  const modelsSitemap = await sitemap.getModels();
124
- expect(modelsSitemap.length).toBe(14);
124
+ expect(modelsSitemap.length).toBe(15);
125
125
  expect(modelsSitemap).toContainEqual(
126
126
  expect.objectContaining({
127
127
  url: getCanonicalUrl('/discover/model/test:model'),
@@ -145,7 +145,7 @@ describe('Sitemap', () => {
145
145
  ]);
146
146
 
147
147
  const providersSitemap = await sitemap.getProviders();
148
- expect(providersSitemap.length).toBe(14);
148
+ expect(providersSitemap.length).toBe(15);
149
149
  expect(providersSitemap).toContainEqual(
150
150
  expect.objectContaining({
151
151
  url: getCanonicalUrl('/discover/provider/test-provider'),