@lobehub/chat 1.22.27 → 1.23.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.
- package/CHANGELOG.md +51 -0
- package/Dockerfile +17 -15
- package/Dockerfile.database +18 -16
- package/locales/ar/error.json +1 -1
- package/locales/ar/setting.json +7 -1
- package/locales/bg-BG/error.json +1 -1
- package/locales/bg-BG/setting.json +7 -1
- package/locales/de-DE/error.json +1 -1
- package/locales/de-DE/setting.json +7 -1
- package/locales/en-US/error.json +1 -1
- package/locales/en-US/setting.json +7 -1
- package/locales/es-ES/error.json +1 -1
- package/locales/es-ES/setting.json +7 -1
- package/locales/fr-FR/error.json +1 -1
- package/locales/fr-FR/setting.json +7 -1
- package/locales/it-IT/error.json +1 -1
- package/locales/it-IT/setting.json +7 -1
- package/locales/ja-JP/error.json +1 -1
- package/locales/ja-JP/setting.json +7 -1
- package/locales/ko-KR/error.json +1 -1
- package/locales/ko-KR/setting.json +7 -1
- package/locales/nl-NL/error.json +1 -1
- package/locales/nl-NL/setting.json +7 -1
- package/locales/pl-PL/error.json +1 -1
- package/locales/pl-PL/setting.json +7 -1
- package/locales/pt-BR/error.json +1 -1
- package/locales/pt-BR/setting.json +7 -1
- package/locales/ru-RU/error.json +1 -1
- package/locales/ru-RU/setting.json +7 -1
- package/locales/tr-TR/error.json +1 -1
- package/locales/tr-TR/setting.json +7 -1
- package/locales/vi-VN/error.json +1 -1
- package/locales/vi-VN/setting.json +7 -1
- package/locales/zh-CN/error.json +1 -1
- package/locales/zh-CN/setting.json +7 -1
- package/locales/zh-TW/error.json +1 -1
- package/locales/zh-TW/setting.json +7 -1
- package/package.json +2 -2
- package/src/app/(main)/settings/system-agent/features/createForm.tsx +90 -41
- package/src/app/(main)/settings/system-agent/index.tsx +15 -0
- package/src/chains/rewriteQuery.ts +3 -2
- package/src/components/TextArea/index.tsx +42 -0
- package/src/config/llm.ts +28 -0
- package/src/config/modelProviders/spark.ts +6 -6
- package/src/const/settings/systemAgent.ts +15 -2
- package/src/features/AgentSetting/AgentModal/ModelSelect.tsx +6 -2
- package/src/features/ModelSelect/index.tsx +5 -4
- package/src/features/User/UserPanel/useMenu.tsx +11 -11
- package/src/locales/default/setting.ts +7 -1
- package/src/server/globalConfig/index.ts +146 -16
- package/src/server/globalConfig/parseSystemAgent.ts +2 -1
- package/src/server/services/chunk/index.ts +2 -2
- package/src/store/chat/slices/aiChat/actions/rag.ts +13 -4
- package/src/store/user/slices/settings/action.ts +6 -3
- package/src/types/user/settings/systemAgent.ts +7 -1
package/locales/ru-RU/error.json
CHANGED
@@ -51,10 +51,10 @@
|
|
51
51
|
"431": "Извините, ваш заголовок запроса слишком велик, сервер не может его обработать",
|
52
52
|
"451": "Извините, по юридическим причинам сервер отказывается предоставить этот ресурс",
|
53
53
|
"500": "К сожалению, сервер, похоже, испытывает некоторые трудности и временно не может выполнить ваш запрос. Повторите попытку позже.",
|
54
|
+
"501": "Извините, сервер еще не знает, как обработать этот запрос. Пожалуйста, убедитесь, что ваши действия правильны.",
|
54
55
|
"502": "К сожалению, сервер, похоже, потерян и временно не может предоставлять услуги. Повторите попытку позже.",
|
55
56
|
"503": "К сожалению, сервер в настоящее время не может обработать ваш запрос, возможно, из-за перегрузки или технического обслуживания. Повторите попытку позже.",
|
56
57
|
"504": "К сожалению, сервер не получил ответа от вышестоящего сервера. Повторите попытку позже.",
|
57
|
-
"501": "Извините, сервер еще не знает, как обработать этот запрос. Пожалуйста, убедитесь, что ваши действия правильны.",
|
58
58
|
"505": "Извините, сервер не поддерживает используемую вами версию HTTP. Пожалуйста, обновите и попробуйте снова.",
|
59
59
|
"506": "Извините, возникла проблема с конфигурацией сервера. Пожалуйста, свяжитесь с администратором для решения проблемы.",
|
60
60
|
"507": "Извините, на сервере недостаточно места для хранения, чтобы обработать ваш запрос. Пожалуйста, попробуйте позже.",
|
@@ -372,10 +372,16 @@
|
|
372
372
|
"modelDesc": "Модель, используемая для генерации имени агента, описания, аватара и меток",
|
373
373
|
"title": "Автоматическое создание информации об агенте"
|
374
374
|
},
|
375
|
+
"customPrompt": {
|
376
|
+
"addPrompt": "Добавить пользовательский запрос",
|
377
|
+
"desc": "После заполнения система будет использовать пользовательский запрос при генерации контента",
|
378
|
+
"placeholder": "Введите пользовательский запрос",
|
379
|
+
"title": "Пользовательский запрос"
|
380
|
+
},
|
375
381
|
"queryRewrite": {
|
376
382
|
"label": "Модель переформулирования вопросов",
|
377
383
|
"modelDesc": "Модель, предназначенная для оптимизации вопросов пользователей",
|
378
|
-
"title": "
|
384
|
+
"title": "Переписывание вопросов базы знаний"
|
379
385
|
},
|
380
386
|
"title": "Системный агент",
|
381
387
|
"topic": {
|
package/locales/tr-TR/error.json
CHANGED
@@ -51,10 +51,10 @@
|
|
51
51
|
"431": "Üzgünüz, istek başlık alanı çok büyük, sunucu işleyemiyor",
|
52
52
|
"451": "Üzgünüz, yasal nedenlerle sunucu bu kaynağı sağlamayı reddediyor",
|
53
53
|
"500": "Üzgünüm, sunucu bazı zorluklar yaşıyor ve geçici olarak isteğinizi tamamlayamıyor. Lütfen daha sonra tekrar deneyin.",
|
54
|
+
"501": "Üzgünüm, sunucu bu isteği nasıl işleyeceğini henüz bilmiyor, lütfen işleminizin doğru olduğundan emin olun",
|
54
55
|
"502": "Üzgünüm, sunucu kayboldu ve geçici olarak hizmet veremiyor. Lütfen daha sonra tekrar deneyin.",
|
55
56
|
"503": "Üzgünüm, sunucu şu anda isteğinizi işleyemiyor, muhtemelen aşırı yüklenme veya bakım nedeniyle. Lütfen daha sonra tekrar deneyin.",
|
56
57
|
"504": "Üzgünüm, sunucu yukarı akış sunucusundan bir yanıt alamadı. Lütfen daha sonra tekrar deneyin.",
|
57
|
-
"501": "Üzgünüm, sunucu bu isteği nasıl işleyeceğini henüz bilmiyor, lütfen işleminizin doğru olduğundan emin olun",
|
58
58
|
"505": "Üzgünüm, sunucu kullandığınız HTTP sürümünü desteklemiyor, lütfen güncelleyip tekrar deneyin",
|
59
59
|
"506": "Üzgünüm, sunucu yapılandırmasında bir sorun var, lütfen çözüm için yöneticinizle iletişime geçin",
|
60
60
|
"507": "Üzgünüm, sunucunun depolama alanı yetersiz, isteğinizi işleyemiyor, lütfen daha sonra tekrar deneyin",
|
@@ -372,10 +372,16 @@
|
|
372
372
|
"modelDesc": "Asistan adı, açıklaması, avatar ve etiket oluşturmak için belirlenen model",
|
373
373
|
"title": "Asistan Bilgilerini Otomatik Oluştur"
|
374
374
|
},
|
375
|
+
"customPrompt": {
|
376
|
+
"addPrompt": "Özel İpucu Ekle",
|
377
|
+
"desc": "Doldurduğunuzda, sistem asistanı içerik oluştururken özel ipucunu kullanacaktır",
|
378
|
+
"placeholder": "Lütfen özel ipucu kelimelerini girin",
|
379
|
+
"title": "Özel İpucu"
|
380
|
+
},
|
375
381
|
"queryRewrite": {
|
376
382
|
"label": "Soru Yeniden Yazım Modeli",
|
377
383
|
"modelDesc": "Kullanıcı sorularını optimize etmek için kullanılan model",
|
378
|
-
"title": "Bilgi Tabanı"
|
384
|
+
"title": "Bilgi Tabanı Soru Yeniden Yazımı"
|
379
385
|
},
|
380
386
|
"title": "Sistem Asistanı",
|
381
387
|
"topic": {
|
package/locales/vi-VN/error.json
CHANGED
@@ -51,10 +51,10 @@
|
|
51
51
|
"431": "Xin lỗi, trường tiêu đề yêu cầu của bạn quá lớn, máy chủ không thể xử lý",
|
52
52
|
"451": "Xin lỗi, do lý do pháp lý, máy chủ từ chối cung cấp tài nguyên này",
|
53
53
|
"500": "Xin lỗi, máy chủ có vẻ gặp một số khó khăn, tạm thời không thể hoàn thành yêu cầu của bạn, vui lòng thử lại sau",
|
54
|
+
"501": "Xin lỗi, máy chủ chưa biết cách xử lý yêu cầu này, vui lòng xác nhận rằng thao tác của bạn là chính xác",
|
54
55
|
"502": "Xin lỗi, máy chủ có vẻ lạc đường, tạm thời không thể cung cấp dịch vụ, vui lòng thử lại sau",
|
55
56
|
"503": "Xin lỗi, máy chủ hiện không thể xử lý yêu cầu của bạn, có thể do quá tải hoặc đang bảo trì, vui lòng thử lại sau",
|
56
57
|
"504": "Xin lỗi, máy chủ không đợi được phản hồi từ máy chủ upstream, vui lòng thử lại sau",
|
57
|
-
"501": "Xin lỗi, máy chủ chưa biết cách xử lý yêu cầu này, vui lòng xác nhận rằng thao tác của bạn là chính xác",
|
58
58
|
"505": "Xin lỗi, máy chủ không hỗ trợ phiên bản HTTP bạn đang sử dụng, vui lòng cập nhật và thử lại",
|
59
59
|
"506": "Xin lỗi, có vấn đề với cấu hình máy chủ, vui lòng liên hệ với quản trị viên để giải quyết",
|
60
60
|
"507": "Xin lỗi, máy chủ không đủ dung lượng lưu trữ để xử lý yêu cầu của bạn, vui lòng thử lại sau",
|
@@ -372,10 +372,16 @@
|
|
372
372
|
"modelDesc": "Xác định mô hình được sử dụng để tạo tên, mô tả, hình đại diện, nhãn cho trợ lý",
|
373
373
|
"title": "Tự động tạo thông tin trợ lý"
|
374
374
|
},
|
375
|
+
"customPrompt": {
|
376
|
+
"addPrompt": "Thêm gợi ý tùy chỉnh",
|
377
|
+
"desc": "Sau khi điền, trợ lý hệ thống sẽ sử dụng gợi ý tùy chỉnh khi tạo nội dung",
|
378
|
+
"placeholder": "Nhập từ gợi ý tùy chỉnh",
|
379
|
+
"title": "Từ gợi ý tùy chỉnh"
|
380
|
+
},
|
375
381
|
"queryRewrite": {
|
376
382
|
"label": "Mô hình viết lại câu hỏi",
|
377
383
|
"modelDesc": "Mô hình được chỉ định để tối ưu hóa câu hỏi của người dùng",
|
378
|
-
"title": "
|
384
|
+
"title": "Viết lại câu hỏi trong kho kiến thức"
|
379
385
|
},
|
380
386
|
"title": "Trợ lý hệ thống",
|
381
387
|
"topic": {
|
package/locales/zh-CN/error.json
CHANGED
@@ -51,10 +51,10 @@
|
|
51
51
|
"431": "很抱歉,您的请求头字段太大,服务器无法处理",
|
52
52
|
"451": "很抱歉,由于法律原因,服务器拒绝提供此资源",
|
53
53
|
"500": "很抱歉,服务器似乎遇到了一些困难,暂时无法完成您的请求,请稍后再试",
|
54
|
+
"501": "很抱歉,服务器还不知道如何处理这个请求,请确认您的操作是否正确",
|
54
55
|
"502": "很抱歉,服务器似乎迷失了方向,暂时无法提供服务,请稍后再试",
|
55
56
|
"503": "很抱歉,服务器当前无法处理您的请求,可能是由于过载或正在进行维护,请稍后再试",
|
56
57
|
"504": "很抱歉,服务器没有等到上游服务器的回应,请稍后再试",
|
57
|
-
"501": "很抱歉,服务器还不知道如何处理这个请求,请确认您的操作是否正确",
|
58
58
|
"505": "很抱歉,服务器不支持您使用的HTTP版本,请更新后再试",
|
59
59
|
"506": "很抱歉,服务器配置出现问题,请联系管理员解决",
|
60
60
|
"507": "很抱歉,服务器存储空间不足,无法处理您的请求,请稍后再试",
|
@@ -372,10 +372,16 @@
|
|
372
372
|
"modelDesc": "指定用于生成助理名称、描述、头像、标签的模型",
|
373
373
|
"title": "自动生成助理信息"
|
374
374
|
},
|
375
|
+
"customPrompt": {
|
376
|
+
"addPrompt": "添加自定义提示",
|
377
|
+
"desc": "填写后,系统助理将在生成内容时使用自定义提示",
|
378
|
+
"placeholder": "请输入自定义提示词",
|
379
|
+
"title": "自定义提示词"
|
380
|
+
},
|
375
381
|
"queryRewrite": {
|
376
382
|
"label": "提问重写模型",
|
377
383
|
"modelDesc": "指定用于优化用户提问的模型",
|
378
|
-
"title": "
|
384
|
+
"title": "知识库提问重写"
|
379
385
|
},
|
380
386
|
"title": "系统助手",
|
381
387
|
"topic": {
|
package/locales/zh-TW/error.json
CHANGED
@@ -51,10 +51,10 @@
|
|
51
51
|
"431": "很抱歉,您的請求頭字段太大,伺服器無法處理",
|
52
52
|
"451": "很抱歉,由於法律原因,伺服器拒絕提供此資源",
|
53
53
|
"500": "抱歉,伺服器似乎遇到一些困難,暫時無法完成您的請求。請稍後再試。",
|
54
|
+
"501": "很抱歉,伺服器尚未知道如何處理此請求,請確認您的操作是否正確",
|
54
55
|
"502": "抱歉,伺服器似乎迷失了方向,暫時無法提供服務。請稍後再試。",
|
55
56
|
"503": "抱歉,伺服器目前無法處理您的請求,可能是因為過載或正在進行維護。請稍後再試。",
|
56
57
|
"504": "抱歉,伺服器沒有收到上游伺服器的回應。請稍後再試。",
|
57
|
-
"501": "很抱歉,伺服器尚未知道如何處理此請求,請確認您的操作是否正確",
|
58
58
|
"505": "很抱歉,伺服器不支援您使用的HTTP版本,請更新後再試",
|
59
59
|
"506": "很抱歉,伺服器配置出現問題,請聯繫管理員解決",
|
60
60
|
"507": "很抱歉,伺服器儲存空間不足,無法處理您的請求,請稍後再試",
|
@@ -372,10 +372,16 @@
|
|
372
372
|
"modelDesc": "指定用於生成助理名稱、描述、頭像、標籤的模型",
|
373
373
|
"title": "自動生成助理資訊"
|
374
374
|
},
|
375
|
+
"customPrompt": {
|
376
|
+
"addPrompt": "新增自訂提示",
|
377
|
+
"desc": "填寫後,系統助理將在生成內容時使用自訂提示",
|
378
|
+
"placeholder": "請輸入自訂提示詞",
|
379
|
+
"title": "自訂提示詞"
|
380
|
+
},
|
375
381
|
"queryRewrite": {
|
376
382
|
"label": "提問重寫模型",
|
377
383
|
"modelDesc": "指定用於優化用戶提問的模型",
|
378
|
-
"title": "
|
384
|
+
"title": "知識庫提問重寫"
|
379
385
|
},
|
380
386
|
"title": "系統助手",
|
381
387
|
"topic": {
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@lobehub/chat",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.23.1",
|
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",
|
@@ -143,7 +143,7 @@
|
|
143
143
|
"ahooks": "^3.8.1",
|
144
144
|
"ai": "^3.4.16",
|
145
145
|
"antd": "^5.21.4",
|
146
|
-
"antd-style": "^3.7.
|
146
|
+
"antd-style": "^3.7.1",
|
147
147
|
"brotli-wasm": "^3.0.1",
|
148
148
|
"chroma-js": "^2.6.0",
|
149
149
|
"dayjs": "^1.11.13",
|
@@ -1,11 +1,14 @@
|
|
1
1
|
'use client';
|
2
2
|
|
3
|
-
import { Form, type ItemGroup } from '@lobehub/ui';
|
4
|
-
import {
|
3
|
+
import { Form, Icon, type ItemGroup } from '@lobehub/ui';
|
4
|
+
import type { FormItemProps } from '@lobehub/ui/es/Form/components/FormItem';
|
5
|
+
import { Form as AntForm, Button, Switch } from 'antd';
|
5
6
|
import isEqual from 'fast-deep-equal';
|
7
|
+
import { PencilIcon } from 'lucide-react';
|
6
8
|
import { memo } from 'react';
|
7
9
|
import { useTranslation } from 'react-i18next';
|
8
10
|
|
11
|
+
import TextArea from '@/components/TextArea';
|
9
12
|
import { FORM_STYLE } from '@/const/layoutTokens';
|
10
13
|
import ModelSelect from '@/features/ModelSelect';
|
11
14
|
import { useUserStore } from '@/store/user';
|
@@ -16,44 +19,90 @@ import { useSyncSystemAgent } from './useSync';
|
|
16
19
|
|
17
20
|
type SettingItemGroup = ItemGroup;
|
18
21
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
}
|
22
|
+
interface SystemAgentFormProps {
|
23
|
+
allowCustomPrompt?: boolean;
|
24
|
+
allowDisable?: boolean;
|
25
|
+
defaultPrompt?: string;
|
26
|
+
systemAgentKey: UserSystemAgentConfigKey;
|
27
|
+
}
|
28
|
+
|
29
|
+
const SystemAgentForm = memo(
|
30
|
+
({ systemAgentKey, allowDisable, allowCustomPrompt, defaultPrompt }: SystemAgentFormProps) => {
|
31
|
+
const { t } = useTranslation('setting');
|
32
|
+
|
33
|
+
const settings = useUserStore(settingsSelectors.currentSystemAgent, isEqual);
|
34
|
+
const [updateSystemAgent] = useUserStore((s) => [s.updateSystemAgent]);
|
35
|
+
|
36
|
+
const [form] = AntForm.useForm();
|
37
|
+
const value = settings[systemAgentKey];
|
38
|
+
|
39
|
+
const systemAgentSettings: SettingItemGroup = {
|
40
|
+
children: [
|
41
|
+
{
|
42
|
+
children: (
|
43
|
+
<ModelSelect
|
44
|
+
onChange={(props) => {
|
45
|
+
updateSystemAgent(systemAgentKey, props);
|
46
|
+
}}
|
47
|
+
showAbility={false}
|
48
|
+
// value={value}
|
49
|
+
/>
|
50
|
+
),
|
51
|
+
desc: t(`systemAgent.${systemAgentKey}.modelDesc`),
|
52
|
+
label: t(`systemAgent.${systemAgentKey}.label`),
|
53
|
+
name: systemAgentKey,
|
54
|
+
},
|
55
|
+
(!!allowCustomPrompt && {
|
56
|
+
children: !!value.customPrompt ? (
|
57
|
+
<TextArea
|
58
|
+
onChange={(e) => {
|
59
|
+
updateSystemAgent(systemAgentKey, { customPrompt: e });
|
60
|
+
}}
|
61
|
+
placeholder={t('systemAgent.customPrompt.placeholder')}
|
62
|
+
style={{ minHeight: 160 }}
|
63
|
+
value={value.customPrompt}
|
64
|
+
/>
|
65
|
+
) : (
|
66
|
+
<Button
|
67
|
+
block
|
68
|
+
icon={<Icon icon={PencilIcon} />}
|
69
|
+
onClick={async () => {
|
70
|
+
await updateSystemAgent(systemAgentKey, { customPrompt: defaultPrompt });
|
71
|
+
}}
|
72
|
+
>
|
73
|
+
{t('systemAgent.customPrompt.addPrompt')}
|
74
|
+
</Button>
|
75
|
+
),
|
76
|
+
desc: t('systemAgent.customPrompt.desc'),
|
77
|
+
label: t('systemAgent.customPrompt.title'),
|
78
|
+
name: [systemAgentKey, 'customPrompt'],
|
79
|
+
}) as FormItemProps,
|
80
|
+
].filter(Boolean),
|
81
|
+
extra: allowDisable && (
|
82
|
+
<Switch
|
83
|
+
onChange={(enabled) => {
|
84
|
+
updateSystemAgent(systemAgentKey, { enabled });
|
85
|
+
}}
|
86
|
+
value={value.enabled}
|
87
|
+
/>
|
88
|
+
),
|
89
|
+
title: (
|
90
|
+
<span
|
91
|
+
style={{
|
92
|
+
opacity: typeof value.enabled === 'boolean' && !value.enabled ? 0.45 : 1,
|
93
|
+
}}
|
94
|
+
>
|
95
|
+
{t(`systemAgent.${systemAgentKey}.title`)}
|
96
|
+
</span>
|
97
|
+
),
|
98
|
+
};
|
99
|
+
|
100
|
+
useSyncSystemAgent(form, settings);
|
101
|
+
|
102
|
+
return (
|
103
|
+
<Form form={form} initialValues={settings} items={[systemAgentSettings]} {...FORM_STYLE} />
|
104
|
+
);
|
105
|
+
},
|
106
|
+
);
|
58
107
|
|
59
108
|
export default SystemAgentForm;
|
@@ -1,11 +1,26 @@
|
|
1
|
+
'use client';
|
2
|
+
|
3
|
+
import { DEFAULT_REWRITE_QUERY } from '@/const/settings';
|
4
|
+
import { isServerMode } from '@/const/version';
|
5
|
+
import { featureFlagsSelectors, useServerConfigStore } from '@/store/serverConfig';
|
6
|
+
|
1
7
|
import SystemAgentForm from './features/createForm';
|
2
8
|
|
3
9
|
const Page = () => {
|
10
|
+
const { enableKnowledgeBase } = useServerConfigStore(featureFlagsSelectors);
|
4
11
|
return (
|
5
12
|
<>
|
6
13
|
<SystemAgentForm systemAgentKey="topic" />
|
7
14
|
<SystemAgentForm systemAgentKey="translation" />
|
8
15
|
<SystemAgentForm systemAgentKey="agentMeta" />
|
16
|
+
{isServerMode && enableKnowledgeBase && (
|
17
|
+
<SystemAgentForm
|
18
|
+
allowCustomPrompt
|
19
|
+
allowDisable
|
20
|
+
defaultPrompt={DEFAULT_REWRITE_QUERY}
|
21
|
+
systemAgentKey="queryRewrite"
|
22
|
+
/>
|
23
|
+
)}
|
9
24
|
</>
|
10
25
|
);
|
11
26
|
};
|
@@ -1,13 +1,14 @@
|
|
1
|
+
import { DEFAULT_REWRITE_QUERY } from '@/const/settings';
|
1
2
|
import { ChatStreamPayload } from '@/types/openai/chat';
|
2
3
|
|
3
4
|
export const chainRewriteQuery = (
|
4
5
|
query: string,
|
5
6
|
context: string[],
|
7
|
+
instruction: string = DEFAULT_REWRITE_QUERY,
|
6
8
|
): Partial<ChatStreamPayload> => ({
|
7
9
|
messages: [
|
8
10
|
{
|
9
|
-
content:
|
10
|
-
|
11
|
+
content: `${instruction}
|
11
12
|
<chatHistory>
|
12
13
|
${context.join('\n')}
|
13
14
|
</chatHistory>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
import { Input } from 'antd';
|
2
|
+
import { TextAreaProps as Props, TextAreaRef } from 'antd/es/input/TextArea';
|
3
|
+
import { memo, useRef, useState } from 'react';
|
4
|
+
|
5
|
+
interface TextAreaProps extends Omit<Props, 'onChange'> {
|
6
|
+
onChange?: (value: string) => void;
|
7
|
+
}
|
8
|
+
|
9
|
+
const TextArea = memo<TextAreaProps>(({ onChange, value: defaultValue, ...props }) => {
|
10
|
+
const ref = useRef<TextAreaRef>(null);
|
11
|
+
const isChineseInput = useRef(false);
|
12
|
+
|
13
|
+
const [value, setValue] = useState(defaultValue as string);
|
14
|
+
|
15
|
+
return (
|
16
|
+
<Input.TextArea
|
17
|
+
onBlur={() => {
|
18
|
+
onChange?.(value);
|
19
|
+
}}
|
20
|
+
onChange={(e) => {
|
21
|
+
setValue(e.target.value);
|
22
|
+
}}
|
23
|
+
onCompositionEnd={() => {
|
24
|
+
isChineseInput.current = false;
|
25
|
+
}}
|
26
|
+
onCompositionStart={() => {
|
27
|
+
isChineseInput.current = true;
|
28
|
+
}}
|
29
|
+
onPressEnter={() => {
|
30
|
+
if (isChineseInput.current) return;
|
31
|
+
onChange?.(value);
|
32
|
+
}}
|
33
|
+
ref={ref}
|
34
|
+
{...props}
|
35
|
+
value={value}
|
36
|
+
/>
|
37
|
+
);
|
38
|
+
});
|
39
|
+
|
40
|
+
TextArea.displayName = 'TextArea';
|
41
|
+
|
42
|
+
export default TextArea;
|
package/src/config/llm.ts
CHANGED
@@ -24,6 +24,7 @@ export const getLLMConfig = () => {
|
|
24
24
|
|
25
25
|
ENABLED_DEEPSEEK: z.boolean(),
|
26
26
|
DEEPSEEK_API_KEY: z.string().optional(),
|
27
|
+
DEEPSEEK_MODEL_LIST: z.string().optional(),
|
27
28
|
|
28
29
|
ENABLED_GOOGLE: z.boolean(),
|
29
30
|
GOOGLE_API_KEY: z.string().optional(),
|
@@ -32,21 +33,26 @@ export const getLLMConfig = () => {
|
|
32
33
|
|
33
34
|
ENABLED_MOONSHOT: z.boolean(),
|
34
35
|
MOONSHOT_API_KEY: z.string().optional(),
|
36
|
+
MOONSHOT_MODEL_LIST: z.string().optional(),
|
35
37
|
MOONSHOT_PROXY_URL: z.string().optional(),
|
36
38
|
|
37
39
|
ENABLED_PERPLEXITY: z.boolean(),
|
38
40
|
PERPLEXITY_API_KEY: z.string().optional(),
|
41
|
+
PERPLEXITY_MODEL_LIST: z.string().optional(),
|
39
42
|
PERPLEXITY_PROXY_URL: z.string().optional(),
|
40
43
|
|
41
44
|
ENABLED_ANTHROPIC: z.boolean(),
|
42
45
|
ANTHROPIC_API_KEY: z.string().optional(),
|
46
|
+
ANTHROPIC_MODEL_LIST: z.string().optional(),
|
43
47
|
ANTHROPIC_PROXY_URL: z.string().optional(),
|
44
48
|
|
45
49
|
ENABLED_MINIMAX: z.boolean(),
|
50
|
+
MINIMAX_MODEL_LIST: z.string().optional(),
|
46
51
|
MINIMAX_API_KEY: z.string().optional(),
|
47
52
|
|
48
53
|
ENABLED_MISTRAL: z.boolean(),
|
49
54
|
MISTRAL_API_KEY: z.string().optional(),
|
55
|
+
MISTRAL_MODEL_LIST: z.string().optional(),
|
50
56
|
|
51
57
|
ENABLED_GROQ: z.boolean(),
|
52
58
|
GROQ_API_KEY: z.string().optional(),
|
@@ -83,6 +89,7 @@ export const getLLMConfig = () => {
|
|
83
89
|
ENABLED_WENXIN: z.boolean(),
|
84
90
|
WENXIN_ACCESS_KEY: z.string().optional(),
|
85
91
|
WENXIN_SECRET_KEY: z.string().optional(),
|
92
|
+
WENXIN_MODEL_LIST: z.string().optional(),
|
86
93
|
|
87
94
|
ENABLED_OLLAMA: z.boolean(),
|
88
95
|
OLLAMA_PROXY_URL: z.string().optional(),
|
@@ -94,6 +101,7 @@ export const getLLMConfig = () => {
|
|
94
101
|
|
95
102
|
ENABLED_STEPFUN: z.boolean(),
|
96
103
|
STEPFUN_API_KEY: z.string().optional(),
|
104
|
+
STEPFUN_MODEL_LIST: z.string().optional(),
|
97
105
|
|
98
106
|
ENABLED_NOVITA: z.boolean(),
|
99
107
|
NOVITA_API_KEY: z.string().optional(),
|
@@ -101,12 +109,15 @@ export const getLLMConfig = () => {
|
|
101
109
|
|
102
110
|
ENABLED_BAICHUAN: z.boolean(),
|
103
111
|
BAICHUAN_API_KEY: z.string().optional(),
|
112
|
+
BAICHUAN_MODEL_LIST: z.string().optional(),
|
104
113
|
|
105
114
|
ENABLED_TAICHU: z.boolean(),
|
106
115
|
TAICHU_API_KEY: z.string().optional(),
|
116
|
+
TAICHU_MODEL_LIST: z.string().optional(),
|
107
117
|
|
108
118
|
ENABLED_AI360: z.boolean(),
|
109
119
|
AI360_API_KEY: z.string().optional(),
|
120
|
+
AI360_MODEL_LIST: z.string().optional(),
|
110
121
|
|
111
122
|
ENABLED_SILICONCLOUD: z.boolean(),
|
112
123
|
SILICONCLOUD_API_KEY: z.string().optional(),
|
@@ -115,12 +126,15 @@ export const getLLMConfig = () => {
|
|
115
126
|
|
116
127
|
ENABLED_UPSTAGE: z.boolean(),
|
117
128
|
UPSTAGE_API_KEY: z.string().optional(),
|
129
|
+
UPSTAGE_MODEL_LIST: z.string().optional(),
|
118
130
|
|
119
131
|
ENABLED_SPARK: z.boolean(),
|
120
132
|
SPARK_API_KEY: z.string().optional(),
|
133
|
+
SPARK_MODEL_LIST: z.string().optional(),
|
121
134
|
|
122
135
|
ENABLED_AI21: z.boolean(),
|
123
136
|
AI21_API_KEY: z.string().optional(),
|
137
|
+
AI21_MODEL_LIST: z.string().optional(),
|
124
138
|
|
125
139
|
ENABLED_HUNYUAN: z.boolean(),
|
126
140
|
HUNYUAN_API_KEY: z.string().optional(),
|
@@ -151,6 +165,7 @@ export const getLLMConfig = () => {
|
|
151
165
|
|
152
166
|
ENABLED_DEEPSEEK: !!process.env.DEEPSEEK_API_KEY,
|
153
167
|
DEEPSEEK_API_KEY: process.env.DEEPSEEK_API_KEY,
|
168
|
+
DEEPSEEK_MODEL_LIST: process.env.DEEPSEEK_MODEL_LIST,
|
154
169
|
|
155
170
|
ENABLED_GOOGLE: !!process.env.GOOGLE_API_KEY,
|
156
171
|
GOOGLE_API_KEY: process.env.GOOGLE_API_KEY,
|
@@ -159,17 +174,21 @@ export const getLLMConfig = () => {
|
|
159
174
|
|
160
175
|
ENABLED_PERPLEXITY: !!process.env.PERPLEXITY_API_KEY,
|
161
176
|
PERPLEXITY_API_KEY: process.env.PERPLEXITY_API_KEY,
|
177
|
+
PERPLEXITY_MODEL_LIST: process.env.PERPLEXITY_MODEL_LIST,
|
162
178
|
PERPLEXITY_PROXY_URL: process.env.PERPLEXITY_PROXY_URL,
|
163
179
|
|
164
180
|
ENABLED_ANTHROPIC: !!process.env.ANTHROPIC_API_KEY,
|
165
181
|
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY,
|
182
|
+
ANTHROPIC_MODEL_LIST: process.env.ANTHROPIC_MODEL_LIST,
|
166
183
|
ANTHROPIC_PROXY_URL: process.env.ANTHROPIC_PROXY_URL,
|
167
184
|
|
168
185
|
ENABLED_MINIMAX: !!process.env.MINIMAX_API_KEY,
|
169
186
|
MINIMAX_API_KEY: process.env.MINIMAX_API_KEY,
|
187
|
+
MINIMAX_MODEL_LIST: process.env.MINIMAX_MODEL_LIST,
|
170
188
|
|
171
189
|
ENABLED_MISTRAL: !!process.env.MISTRAL_API_KEY,
|
172
190
|
MISTRAL_API_KEY: process.env.MISTRAL_API_KEY,
|
191
|
+
MISTRAL_MODEL_LIST: process.env.MISTRAL_MODEL_LIST,
|
173
192
|
|
174
193
|
ENABLED_OPENROUTER: !!process.env.OPENROUTER_API_KEY,
|
175
194
|
OPENROUTER_API_KEY: process.env.OPENROUTER_API_KEY,
|
@@ -185,6 +204,7 @@ export const getLLMConfig = () => {
|
|
185
204
|
|
186
205
|
ENABLED_MOONSHOT: !!process.env.MOONSHOT_API_KEY,
|
187
206
|
MOONSHOT_API_KEY: process.env.MOONSHOT_API_KEY,
|
207
|
+
MOONSHOT_MODEL_LIST: process.env.MOONSHOT_MODEL_LIST,
|
188
208
|
MOONSHOT_PROXY_URL: process.env.MOONSHOT_PROXY_URL,
|
189
209
|
|
190
210
|
ENABLED_GROQ: !!process.env.GROQ_API_KEY,
|
@@ -210,6 +230,7 @@ export const getLLMConfig = () => {
|
|
210
230
|
ENABLED_WENXIN: !!process.env.WENXIN_ACCESS_KEY && !!process.env.WENXIN_SECRET_KEY,
|
211
231
|
WENXIN_ACCESS_KEY: process.env.WENXIN_ACCESS_KEY,
|
212
232
|
WENXIN_SECRET_KEY: process.env.WENXIN_SECRET_KEY,
|
233
|
+
WENXIN_MODEL_LIST: process.env.WENXIN_MODEL_LIST,
|
213
234
|
|
214
235
|
ENABLED_OLLAMA: process.env.ENABLED_OLLAMA !== '0',
|
215
236
|
OLLAMA_PROXY_URL: process.env.OLLAMA_PROXY_URL || '',
|
@@ -221,6 +242,7 @@ export const getLLMConfig = () => {
|
|
221
242
|
|
222
243
|
ENABLED_STEPFUN: !!process.env.STEPFUN_API_KEY,
|
223
244
|
STEPFUN_API_KEY: process.env.STEPFUN_API_KEY,
|
245
|
+
STEPFUN_MODEL_LIST: process.env.STEPFUN_MODEL_LIST,
|
224
246
|
|
225
247
|
ENABLED_NOVITA: !!process.env.NOVITA_API_KEY,
|
226
248
|
NOVITA_API_KEY: process.env.NOVITA_API_KEY,
|
@@ -228,12 +250,15 @@ export const getLLMConfig = () => {
|
|
228
250
|
|
229
251
|
ENABLED_BAICHUAN: !!process.env.BAICHUAN_API_KEY,
|
230
252
|
BAICHUAN_API_KEY: process.env.BAICHUAN_API_KEY,
|
253
|
+
BAICHUAN_MODEL_LIST: process.env.BAICHUAN_MODEL_LIST,
|
231
254
|
|
232
255
|
ENABLED_TAICHU: !!process.env.TAICHU_API_KEY,
|
233
256
|
TAICHU_API_KEY: process.env.TAICHU_API_KEY,
|
257
|
+
TAICHU_MODEL_LIST: process.env.TAICHU_MODEL_LIST,
|
234
258
|
|
235
259
|
ENABLED_AI360: !!process.env.AI360_API_KEY,
|
236
260
|
AI360_API_KEY: process.env.AI360_API_KEY,
|
261
|
+
AI360_MODEL_LIST: process.env.AI360_MODEL_LIST,
|
237
262
|
|
238
263
|
ENABLED_SILICONCLOUD: !!process.env.SILICONCLOUD_API_KEY,
|
239
264
|
SILICONCLOUD_API_KEY: process.env.SILICONCLOUD_API_KEY,
|
@@ -242,12 +267,15 @@ export const getLLMConfig = () => {
|
|
242
267
|
|
243
268
|
ENABLED_UPSTAGE: !!process.env.UPSTAGE_API_KEY,
|
244
269
|
UPSTAGE_API_KEY: process.env.UPSTAGE_API_KEY,
|
270
|
+
UPSTAGE_MODEL_LIST: process.env.UPSTAGE_MODEL_LIST,
|
245
271
|
|
246
272
|
ENABLED_SPARK: !!process.env.SPARK_API_KEY,
|
247
273
|
SPARK_API_KEY: process.env.SPARK_API_KEY,
|
274
|
+
SPARK_MODEL_LIST: process.env.SPARK_MODEL_LIST,
|
248
275
|
|
249
276
|
ENABLED_AI21: !!process.env.AI21_API_KEY,
|
250
277
|
AI21_API_KEY: process.env.AI21_API_KEY,
|
278
|
+
AI21_MODEL_LIST: process.env.AI21_MODEL_LIST,
|
251
279
|
|
252
280
|
ENABLED_HUNYUAN: !!process.env.HUNYUAN_API_KEY,
|
253
281
|
HUNYUAN_API_KEY: process.env.HUNYUAN_API_KEY,
|
@@ -10,7 +10,7 @@ const Spark: ModelProviderCard = {
|
|
10
10
|
displayName: 'Spark Lite',
|
11
11
|
enabled: true,
|
12
12
|
functionCall: false,
|
13
|
-
id: '
|
13
|
+
id: 'lite',
|
14
14
|
maxOutput: 4096,
|
15
15
|
tokens: 8192,
|
16
16
|
},
|
@@ -30,14 +30,14 @@ const Spark: ModelProviderCard = {
|
|
30
30
|
displayName: 'Spark Pro 128K',
|
31
31
|
enabled: true,
|
32
32
|
functionCall: false,
|
33
|
-
id: '
|
33
|
+
id: 'pro-128k',
|
34
34
|
maxOutput: 4096,
|
35
35
|
tokens: 131_072,
|
36
36
|
},
|
37
37
|
{
|
38
38
|
description:
|
39
39
|
'Spark Max 为功能最为全面的版本,支持联网搜索及众多内置插件。其全面优化的核心能力以及系统角色设定和函数调用功能,使其在各种复杂应用场景中的表现极为优异和出色。',
|
40
|
-
displayName: 'Spark
|
40
|
+
displayName: 'Spark Max',
|
41
41
|
enabled: true,
|
42
42
|
functionCall: false,
|
43
43
|
id: 'generalv3.5',
|
@@ -47,10 +47,10 @@ const Spark: ModelProviderCard = {
|
|
47
47
|
{
|
48
48
|
description:
|
49
49
|
'Spark Max 32K 配置了大上下文处理能力,更强的上下文理解和逻辑推理能力,支持32K tokens的文本输入,适用于长文档阅读、私有知识问答等场景',
|
50
|
-
displayName: 'Spark
|
50
|
+
displayName: 'Spark Max 32K',
|
51
51
|
enabled: true,
|
52
52
|
functionCall: false,
|
53
|
-
id: '
|
53
|
+
id: 'max-32k',
|
54
54
|
maxOutput: 8192,
|
55
55
|
tokens: 32_768,
|
56
56
|
},
|
@@ -65,7 +65,7 @@ const Spark: ModelProviderCard = {
|
|
65
65
|
tokens: 8192,
|
66
66
|
},
|
67
67
|
],
|
68
|
-
checkModel: '
|
68
|
+
checkModel: 'lite',
|
69
69
|
description:
|
70
70
|
'科大讯飞星火大模型提供多领域、多语言的强大 AI 能力,利用先进的自然语言处理技术,构建适用于智能硬件、智慧医疗、智慧金融等多种垂直场景的创新应用。',
|
71
71
|
id: 'spark',
|