@lobehub/chat 1.1.6 → 1.1.7
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 +25 -0
- package/locales/ar/setting.json +2 -1
- package/locales/bg-BG/setting.json +2 -1
- package/locales/de-DE/setting.json +2 -1
- package/locales/en-US/setting.json +2 -1
- package/locales/es-ES/setting.json +2 -1
- package/locales/fr-FR/setting.json +2 -1
- package/locales/it-IT/setting.json +2 -1
- package/locales/ja-JP/setting.json +2 -1
- package/locales/ko-KR/setting.json +2 -1
- package/locales/nl-NL/setting.json +2 -1
- package/locales/pl-PL/setting.json +2 -1
- package/locales/pt-BR/setting.json +2 -1
- package/locales/ru-RU/setting.json +2 -1
- package/locales/tr-TR/setting.json +2 -1
- package/locales/vi-VN/setting.json +2 -1
- package/locales/zh-CN/setting.json +2 -1
- package/locales/zh-TW/setting.json +2 -1
- package/package.json +1 -1
- package/src/app/(main)/settings/about/features/Version.tsx +17 -8
- package/src/app/(main)/settings/llm/components/ProviderConfig/index.tsx +50 -2
- package/src/app/(main)/settings/llm/{components → features}/Footer.tsx +1 -1
- package/src/app/(main)/settings/llm/index.tsx +1 -1
- package/src/app/trpc/tools/[trpc]/route.ts +0 -2
- package/src/const/url.ts +2 -0
- package/src/locales/default/setting.ts +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
# Changelog
|
|
4
4
|
|
|
5
|
+
### [Version 1.1.7](https://github.com/lobehub/lobe-chat/compare/v1.1.6...v1.1.7)
|
|
6
|
+
|
|
7
|
+
<sup>Released on **2024-06-24**</sup>
|
|
8
|
+
|
|
9
|
+
#### 💄 Styles
|
|
10
|
+
|
|
11
|
+
- **misc**: Add AES-GCM footer and tooltip.
|
|
12
|
+
|
|
13
|
+
<br/>
|
|
14
|
+
|
|
15
|
+
<details>
|
|
16
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
|
17
|
+
|
|
18
|
+
#### Styles
|
|
19
|
+
|
|
20
|
+
- **misc**: Add AES-GCM footer and tooltip, closes [#2976](https://github.com/lobehub/lobe-chat/issues/2976) ([5d9bef4](https://github.com/lobehub/lobe-chat/commit/5d9bef4))
|
|
21
|
+
|
|
22
|
+
</details>
|
|
23
|
+
|
|
24
|
+
<div align="right">
|
|
25
|
+
|
|
26
|
+
[](#readme-top)
|
|
27
|
+
|
|
28
|
+
</div>
|
|
29
|
+
|
|
5
30
|
### [Version 1.1.6](https://github.com/lobehub/lobe-chat/compare/v1.1.5...v1.1.6)
|
|
6
31
|
|
|
7
32
|
<sup>Released on **2024-06-23**</sup>
|
package/locales/ar/setting.json
CHANGED
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "إعدادات"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "سيتم استخدام خوارزمية التشفير <1>AES-GCM</1> لتشفير مفتاحك وعنوان الوكيل",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "يرجى ملء مفتاح API الخاص بك {{name}}",
|
|
48
49
|
"placeholder": "{{name}} مفتاح API",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "يجب أن يتضمن عنوان الوكيل API بالإضافة إلى العنوان الافتراضي http(s)://",
|
|
114
115
|
"title": "عنوان وكيل API"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "يتم <1>التخطيط لتوفير</1> المزيد من النماذج، ترقبوا المزيد
|
|
117
|
+
"waitingForMore": "يتم <1>التخطيط لتوفير</1> المزيد من النماذج، ترقبوا المزيد"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "إضافة البرنامج المساعد",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "Настройки"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "Вашият ключ и адрес на агента ще бъдат криптирани с алгоритъма за криптиране <1>AES-GCM</1>",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "Моля, въведете вашия {{name}} API ключ",
|
|
48
49
|
"placeholder": "{{name}} API ключ",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "Включващ адреса по подразбиране, трябва да включва http(s)://",
|
|
114
115
|
"title": "Адрес на API прокси"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "Още модели са <1>планирани да бъдат добавени</1>, очаквайте
|
|
117
|
+
"waitingForMore": "Още модели са <1>планирани да бъдат добавени</1>, очаквайте"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "Персонализиран плъгин",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "Einstellungen"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "Ihr Schlüssel und Ihre Proxy-Adresse werden mit dem <1>AES-GCM</1> Verschlüsselungsalgorithmus verschlüsselt.",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "Bitte geben Sie Ihren {{name}} API-Schlüssel ein",
|
|
48
49
|
"placeholder": "{{name}} API-Schlüssel",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "Außer der Standardadresse muss http(s):// enthalten sein",
|
|
114
115
|
"title": "API-Proxy-Adresse"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "Weitere Modelle werden <1>geplant</1>, bitte freuen Sie sich auf weitere Updates
|
|
117
|
+
"waitingForMore": "Weitere Modelle werden <1>geplant</1>, bitte freuen Sie sich auf weitere Updates"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "Benutzerdefiniertes Plugin",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "Settings"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "Your keys and proxy address will be encrypted using the <1>AES-GCM</1> encryption algorithm",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "Please enter your {{name}} API Key",
|
|
48
49
|
"placeholder": "{{name}} API Key",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "Must include http(s):// in addition to the default address",
|
|
114
115
|
"title": "API Proxy Address"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "More models are <1>planned to be added</1>, stay tuned
|
|
117
|
+
"waitingForMore": "More models are <1>planned to be added</1>, stay tuned"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "Custom Plugin",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "Configuración"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "Su clave y dirección del agente se cifrarán utilizando el algoritmo de cifrado <1>AES-GCM</1>",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "Por favor, introduce tu clave de API de {{name}}",
|
|
48
49
|
"placeholder": "Clave de API de {{name}}",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "Además de la dirección predeterminada, debe incluir http(s)://",
|
|
114
115
|
"title": "Dirección del proxy de la API"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "Más modelos están en <1>planificación para su incorporación</1>, ¡estén atentos!
|
|
117
|
+
"waitingForMore": "Más modelos están en <1>planificación para su incorporación</1>, ¡estén atentos!"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "Agregar complemento personalizado",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "Paramètres"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "Votre clé, votre adresse de proxy, etc. seront cryptées à l'aide de l'algorithme de chiffrement <1>AES-GCM</1>",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "Veuillez saisir votre clé API {{name}}",
|
|
48
49
|
"placeholder": "Clé API {{name}}",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "Doit inclure http(s):// en plus de l'adresse par défaut",
|
|
114
115
|
"title": "Adresse du proxy de l'API"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "Plus de modèles sont en cours de <1>planification pour être ajoutés</1>, restez à l'écoute
|
|
117
|
+
"waitingForMore": "Plus de modèles sont en cours de <1>planification pour être ajoutés</1>, restez à l'écoute"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "Ajouter un plugin personnalisé",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "Impostazioni"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "La tua chiave e l'indirizzo dell'agente saranno crittografati utilizzando l'algoritmo di crittografia <1>AES-GCM</1>",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "Inserisci la tua chiave API {{name}}",
|
|
48
49
|
"placeholder": "Chiave API {{name}}",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "Deve includere http(s):// oltre all'indirizzo predefinito",
|
|
114
115
|
"title": "Indirizzo del proxy API"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "Altri modelli sono in fase di <1> pianificazione per l'integrazione </1>, resta sintonizzato
|
|
117
|
+
"waitingForMore": "Altri modelli sono in fase di <1> pianificazione per l'integrazione </1>, resta sintonizzato"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "Aggiungi plugin personalizzato",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "設定"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "キーとプロキシアドレスなどは <1>AES-GCM</1> 暗号化アルゴリズムを使用して暗号化されます",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "あなたの {{name}} API キーを入力してください",
|
|
48
49
|
"placeholder": "{{name}} API キー",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "デフォルトのアドレスに加えて、http(s)://を含める必要があります",
|
|
114
115
|
"title": "APIプロキシアドレス"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "さらに多くのモデルが <1>計画されています</1>。お楽しみに
|
|
117
|
+
"waitingForMore": "さらに多くのモデルが <1>計画されています</1>。お楽しみに"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "カスタムプラグイン",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "설정"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "귀하의 키 및 프록시 주소는 <1>AES-GCM</1> 암호화 알고리즘을 사용하여 암호화됩니다",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "당신의 {{name}} API 키를 입력해주세요",
|
|
48
49
|
"placeholder": "{{name}} API 키",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "기본 주소 이외에 http(s)://를 포함해야 합니다.",
|
|
114
115
|
"title": "API 프록시 주소"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "<1>계획에 따라 더 많은 모델이 추가될 예정</1>이니 기대해 주세요
|
|
117
|
+
"waitingForMore": "<1>계획에 따라 더 많은 모델이 추가될 예정</1>이니 기대해 주세요"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "플러그인 추가",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "Instellingen"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "Uw sleutel en proxy-adres zullen worden versleuteld met het <1>AES-GCM</1> encryptie-algoritme",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "Vul je {{name}} API-sleutel in",
|
|
48
49
|
"placeholder": "{{name}} API-sleutel",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "Moet http(s):// bevatten, naast het standaardadres",
|
|
114
115
|
"title": "API Proxy Adres"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "Meer modellen worden <1>gepland om te worden toegevoegd</1>, dus blijf op de hoogte
|
|
117
|
+
"waitingForMore": "Meer modellen worden <1>gepland om te worden toegevoegd</1>, dus blijf op de hoogte"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "Voeg aangepaste plug-in toe",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "Ustawienia"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "Twój klucz, adres proxy i inne będą szyfrowane za pomocą algorytmu szyfrowania <1>AES-GCM</1>",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "Proszę wprowadź swój klucz API {{name}}",
|
|
48
49
|
"placeholder": "{{name}} klucz API",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "Oprócz domyślnego adresu, musi zawierać http(s)://",
|
|
114
115
|
"title": "Adres proxy API"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "Więcej modeli jest obecnie w <1>planach dołączenia</1>, prosimy o cierpliwość
|
|
117
|
+
"waitingForMore": "Więcej modeli jest obecnie w <1>planach dołączenia</1>, prosimy o cierpliwość"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "Dodaj niestandardowy dodatek",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "Configurações"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "Suas chaves, endereço do agente, etc., serão criptografados usando o algoritmo de criptografia <1>AES-GCM</1>",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "Por favor, insira sua chave de API {{name}}",
|
|
48
49
|
"placeholder": "Chave de API {{name}}",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "Além do endereço padrão, deve incluir http(s)://",
|
|
114
115
|
"title": "Endereço do Proxy da API"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "Mais modelos estão sendo <1>planejados para serem adicionados</1>, aguarde ansiosamente
|
|
117
|
+
"waitingForMore": "Mais modelos estão sendo <1>planejados para serem adicionados</1>, aguarde ansiosamente"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "Adicionar plug-in personalizado",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "Настройки"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "Ваши ключи и адреса агентов будут зашифрованы с использованием алгоритма шифрования <1>AES-GCM</1>",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "Введите ваш {{name}} ключ API",
|
|
48
49
|
"placeholder": "{{name}} ключ API",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "За исключением адреса по умолчанию, должен включать http(s)://",
|
|
114
115
|
"title": "Адрес прокси API"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "Больше моделей доступно в <1>плане подключения</1>, ожидайте
|
|
117
|
+
"waitingForMore": "Больше моделей доступно в <1>плане подключения</1>, ожидайте"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "Добавить настраиваемый плагин",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "Ayarlar"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "Anahtarınız ve vekil adresiniz <1>AES-GCM</1> şifreleme algoritması kullanılarak şifrelenecektir",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "Lütfen {{name}} API Anahtarınızı girin",
|
|
48
49
|
"placeholder": "{{name}} API Anahtarı",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "Varsayılan adres dışında, http(s):// içermelidir",
|
|
114
115
|
"title": "API Proxy Adresi"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "Daha fazla model eklenmesi planlanıyor
|
|
117
|
+
"waitingForMore": "Daha fazla model eklenmesi planlanıyor"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "Eklenti Ekle",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "Cài đặt"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "Khóa và địa chỉ proxy của bạn sẽ được mã hóa bằng thuật toán mã hóa <1>AES-GCM</1>",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "Vui lòng nhập {{name}} API Key của bạn",
|
|
48
49
|
"placeholder": "{{name}} API Key",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "Ngoài địa chỉ mặc định, phải bao gồm http(s)://",
|
|
114
115
|
"title": "Địa chỉ Proxy API"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "Có thêm mô hình đang <1>được lên kế hoạch tích hợp</1>, hãy chờ đợi
|
|
117
|
+
"waitingForMore": "Có thêm mô hình đang <1>được lên kế hoạch tích hợp</1>, hãy chờ đợi"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "Thêm tiện ích",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "设置"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "您的秘钥与代理地址等将使用 <1>AES-GCM</1> 加密算法进行加密",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "请填写你的 {{name}} API Key",
|
|
48
49
|
"placeholder": "{{name}} API Key",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "除默认地址外,必须包含 http(s)://",
|
|
114
115
|
"title": "API 代理地址"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "更多模型正在 <1>计划接入</1> 中,敬请期待
|
|
117
|
+
"waitingForMore": "更多模型正在 <1>计划接入</1> 中,敬请期待"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "自定义插件",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"title": "設定"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"aesGcm": "您的金鑰與代理地址等將使用 <1>AES-GCM</1> 加密演算法進行加密",
|
|
46
47
|
"apiKey": {
|
|
47
48
|
"desc": "請填寫您的 {{name}} API 金鑰",
|
|
48
49
|
"placeholder": "{{name}} API 金鑰",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"desc": "必須包含 http(s):// 以外的預設地址",
|
|
114
115
|
"title": "API 代理位址"
|
|
115
116
|
},
|
|
116
|
-
"waitingForMore": "更多模型正在 <1>計劃接入</1> 中,敬請期待
|
|
117
|
+
"waitingForMore": "更多模型正在 <1>計劃接入</1> 中,敬請期待"
|
|
117
118
|
},
|
|
118
119
|
"plugin": {
|
|
119
120
|
"addTooltip": "新增自訂外掛程式",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lobehub/chat",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.7",
|
|
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",
|
|
@@ -20,12 +20,19 @@ const useStyles = createStyles(({ css, token }) => ({
|
|
|
20
20
|
}));
|
|
21
21
|
|
|
22
22
|
const Version = memo<{ mobile?: boolean }>(({ mobile }) => {
|
|
23
|
-
const [hasNewVersion, latestVersion] = useGlobalStore((s) => [
|
|
23
|
+
const [hasNewVersion, latestVersion, useCheckLatestVersion] = useGlobalStore((s) => [
|
|
24
|
+
s.hasNewVersion,
|
|
25
|
+
s.latestVersion,
|
|
26
|
+
s.useCheckLatestVersion,
|
|
27
|
+
]);
|
|
24
28
|
const { t } = useTranslation('common');
|
|
25
29
|
const { styles, theme } = useStyles();
|
|
30
|
+
|
|
31
|
+
useCheckLatestVersion();
|
|
32
|
+
|
|
26
33
|
return (
|
|
27
34
|
<Flexbox
|
|
28
|
-
align={'center'}
|
|
35
|
+
align={mobile ? 'stretch' : 'center'}
|
|
29
36
|
gap={16}
|
|
30
37
|
horizontal={!mobile}
|
|
31
38
|
justify={'space-between'}
|
|
@@ -40,15 +47,17 @@ const Version = memo<{ mobile?: boolean }>(({ mobile }) => {
|
|
|
40
47
|
<Flexbox>
|
|
41
48
|
<div style={{ fontSize: 18, fontWeight: 'bolder' }}>LobeChat</div>
|
|
42
49
|
<div>
|
|
43
|
-
<Tag
|
|
44
|
-
bordered={false}
|
|
45
|
-
color={theme.colorFillSecondary}
|
|
46
|
-
style={{ color: theme.colorTextSecondary }}
|
|
47
|
-
>
|
|
50
|
+
<Tag color={theme.colorFillSecondary} style={{ color: theme.colorTextSecondary }}>
|
|
48
51
|
v{CURRENT_VERSION}
|
|
49
52
|
</Tag>
|
|
50
53
|
{hasNewVersion && (
|
|
51
|
-
<Tag
|
|
54
|
+
<Tag
|
|
55
|
+
bordered={false}
|
|
56
|
+
style={{
|
|
57
|
+
background: theme.colorInfoBgHover,
|
|
58
|
+
color: theme.colorInfo,
|
|
59
|
+
}}
|
|
60
|
+
>
|
|
52
61
|
{t('upgradeVersion.newVersion', { version: `v${latestVersion}` })}
|
|
53
62
|
</Tag>
|
|
54
63
|
)}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import { Form, type FormItemProps, type ItemGroup, Tooltip } from '@lobehub/ui';
|
|
3
|
+
import { Form, type FormItemProps, Icon, type ItemGroup, Tooltip } from '@lobehub/ui';
|
|
4
4
|
import { Input, Switch } from 'antd';
|
|
5
5
|
import { createStyles } from 'antd-style';
|
|
6
6
|
import { debounce } from 'lodash-es';
|
|
7
|
+
import { LockIcon } from 'lucide-react';
|
|
7
8
|
import Link from 'next/link';
|
|
8
9
|
import { ReactNode, memo } from 'react';
|
|
9
|
-
import { useTranslation } from 'react-i18next';
|
|
10
|
+
import { Trans, useTranslation } from 'react-i18next';
|
|
10
11
|
import { Center, Flexbox } from 'react-layout-kit';
|
|
11
12
|
|
|
12
13
|
import { useSyncSettings } from '@/app/(main)/settings/hooks/useSyncSettings';
|
|
@@ -18,6 +19,8 @@ import {
|
|
|
18
19
|
LLMProviderModelListKey,
|
|
19
20
|
} from '@/app/(main)/settings/llm/const';
|
|
20
21
|
import { FORM_STYLE } from '@/const/layoutTokens';
|
|
22
|
+
import { AES_GCM_URL } from '@/const/url';
|
|
23
|
+
import { isServerMode } from '@/const/version';
|
|
21
24
|
import { useUserStore } from '@/store/user';
|
|
22
25
|
import { keyVaultsConfigSelectors, modelConfigSelectors } from '@/store/user/selectors';
|
|
23
26
|
import { ModelProviderCard } from '@/types/llm';
|
|
@@ -27,6 +30,27 @@ import Checker from '../Checker';
|
|
|
27
30
|
import ProviderModelListSelect from '../ProviderModelList';
|
|
28
31
|
|
|
29
32
|
const useStyles = createStyles(({ css, prefixCls, responsive, token }) => ({
|
|
33
|
+
aceGcm: css`
|
|
34
|
+
padding-block: 0 !important;
|
|
35
|
+
.${prefixCls}-form-item-label {
|
|
36
|
+
display: none;
|
|
37
|
+
}
|
|
38
|
+
.${prefixCls}-form-item-control {
|
|
39
|
+
width: 100%;
|
|
40
|
+
|
|
41
|
+
font-size: 12px;
|
|
42
|
+
color: ${token.colorTextSecondary};
|
|
43
|
+
text-align: center;
|
|
44
|
+
|
|
45
|
+
opacity: 0.66;
|
|
46
|
+
|
|
47
|
+
transition: opacity 0.2s ${token.motionEaseInOut};
|
|
48
|
+
|
|
49
|
+
&:hover {
|
|
50
|
+
opacity: 1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
`,
|
|
30
54
|
form: css`
|
|
31
55
|
.${prefixCls}-form-item-control:has(.${prefixCls}-input,.${prefixCls}-select) {
|
|
32
56
|
flex: none;
|
|
@@ -67,6 +91,7 @@ export interface ProviderConfigProps extends Omit<ModelProviderCard, 'id' | 'cha
|
|
|
67
91
|
checkerItem?: FormItemProps;
|
|
68
92
|
className?: string;
|
|
69
93
|
docUrl?: string;
|
|
94
|
+
extra?: ReactNode;
|
|
70
95
|
hideSwitch?: boolean;
|
|
71
96
|
id: GlobalLLMProviderKey;
|
|
72
97
|
modelList?: {
|
|
@@ -75,6 +100,7 @@ export interface ProviderConfigProps extends Omit<ModelProviderCard, 'id' | 'cha
|
|
|
75
100
|
placeholder?: string;
|
|
76
101
|
showModelFetcher?: boolean;
|
|
77
102
|
};
|
|
103
|
+
showAceGcm?: boolean;
|
|
78
104
|
title: ReactNode;
|
|
79
105
|
}
|
|
80
106
|
|
|
@@ -94,6 +120,8 @@ const ProviderConfig = memo<ProviderConfigProps>(
|
|
|
94
120
|
className,
|
|
95
121
|
name,
|
|
96
122
|
docUrl,
|
|
123
|
+
showAceGcm = true,
|
|
124
|
+
extra,
|
|
97
125
|
}) => {
|
|
98
126
|
const { t } = useTranslation('setting');
|
|
99
127
|
const [form] = Form.useForm();
|
|
@@ -132,7 +160,25 @@ const ProviderConfig = memo<ProviderConfigProps>(
|
|
|
132
160
|
},
|
|
133
161
|
];
|
|
134
162
|
|
|
163
|
+
const aceGcmItem: FormItemProps = {
|
|
164
|
+
children: (
|
|
165
|
+
<>
|
|
166
|
+
<Icon icon={LockIcon} style={{ marginRight: 4 }} />
|
|
167
|
+
<Trans i18nKey="llm.aesGcm" ns={'setting'}>
|
|
168
|
+
您的秘钥与代理地址等将使用
|
|
169
|
+
<Link href={AES_GCM_URL} style={{ marginInline: 4 }} target={'_blank'}>
|
|
170
|
+
AES-GCM
|
|
171
|
+
</Link>
|
|
172
|
+
加密算法进行加密
|
|
173
|
+
</Trans>
|
|
174
|
+
</>
|
|
175
|
+
),
|
|
176
|
+
className: styles.aceGcm,
|
|
177
|
+
minWidth: undefined,
|
|
178
|
+
};
|
|
179
|
+
|
|
135
180
|
const showEndpoint = !!proxyUrl;
|
|
181
|
+
|
|
136
182
|
const formItems = [
|
|
137
183
|
...apiKeyItem,
|
|
138
184
|
showEndpoint && {
|
|
@@ -184,6 +230,7 @@ const ProviderConfig = memo<ProviderConfigProps>(
|
|
|
184
230
|
label: t('llm.checker.title'),
|
|
185
231
|
minWidth: undefined,
|
|
186
232
|
},
|
|
233
|
+
showAceGcm && isServerMode && aceGcmItem,
|
|
187
234
|
].filter(Boolean) as FormItemProps[];
|
|
188
235
|
|
|
189
236
|
/* ↓ cloud slot ↓ */
|
|
@@ -197,6 +244,7 @@ const ProviderConfig = memo<ProviderConfigProps>(
|
|
|
197
244
|
|
|
198
245
|
extra: (
|
|
199
246
|
<Flexbox align={'center'} gap={8} horizontal>
|
|
247
|
+
{extra}
|
|
200
248
|
{docUrl && (
|
|
201
249
|
<Tooltip title={t('llm.helpDoc')}>
|
|
202
250
|
<Link href={docUrl} onClick={(e) => e.stopPropagation()} target={'_blank'}>
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import { Flexbox } from 'react-layout-kit';
|
|
4
4
|
|
|
5
5
|
import { useProviderList } from './ProviderList/providers';
|
|
6
|
-
import Footer from './components/Footer';
|
|
7
6
|
import ProviderConfig from './components/ProviderConfig';
|
|
7
|
+
import Footer from './features/Footer';
|
|
8
8
|
|
|
9
9
|
const Page = () => {
|
|
10
10
|
const list = useProviderList();
|
package/src/const/url.ts
CHANGED
|
@@ -57,3 +57,5 @@ export const X = 'https://x.com/lobehub';
|
|
|
57
57
|
export const RELEASES_URL = urlJoin(GITHUB, 'releases');
|
|
58
58
|
|
|
59
59
|
export const mailTo = (email: string) => `mailto:${email}`;
|
|
60
|
+
|
|
61
|
+
export const AES_GCM_URL = 'https://datatracker.ietf.org/doc/html/draft-ietf-avt-srtp-aes-gcm-01';
|
|
@@ -43,6 +43,7 @@ export default {
|
|
|
43
43
|
title: '设置',
|
|
44
44
|
},
|
|
45
45
|
llm: {
|
|
46
|
+
aesGcm: '您的秘钥与代理地址等将使用 <1>AES-GCM</1> 加密算法进行加密',
|
|
46
47
|
apiKey: {
|
|
47
48
|
desc: '请填写你的 {{name}} API Key',
|
|
48
49
|
placeholder: '{{name}} API Key',
|
|
@@ -116,7 +117,7 @@ export default {
|
|
|
116
117
|
desc: '除默认地址外,必须包含 http(s)://',
|
|
117
118
|
title: 'API 代理地址',
|
|
118
119
|
},
|
|
119
|
-
waitingForMore: '更多模型正在 <1>计划接入</1> 中,敬请期待
|
|
120
|
+
waitingForMore: '更多模型正在 <1>计划接入</1> 中,敬请期待',
|
|
120
121
|
},
|
|
121
122
|
plugin: {
|
|
122
123
|
addTooltip: '自定义插件',
|