@lobehub/chat 1.47.13 → 1.47.15
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 +50 -0
- package/changelog/v1.json +18 -0
- package/locales/ar/models.json +6 -0
- package/locales/bg-BG/models.json +6 -0
- package/locales/de-DE/models.json +6 -0
- package/locales/en-US/common.json +1 -1
- package/locales/en-US/models.json +6 -0
- package/locales/es-ES/models.json +6 -0
- package/locales/fa-IR/models.json +6 -0
- package/locales/fr-FR/models.json +6 -0
- package/locales/it-IT/models.json +6 -0
- package/locales/ja-JP/models.json +6 -0
- package/locales/ko-KR/models.json +6 -0
- package/locales/nl-NL/models.json +6 -0
- package/locales/pl-PL/models.json +6 -0
- package/locales/pt-BR/models.json +6 -0
- package/locales/ru-RU/models.json +6 -0
- package/locales/tr-TR/models.json +6 -0
- package/locales/vi-VN/models.json +6 -0
- package/locales/zh-CN/models.json +6 -0
- package/locales/zh-TW/models.json +6 -0
- package/package.json +3 -3
- package/src/app/(main)/discover/(detail)/model/[...slugs]/features/Header.tsx +9 -3
- package/src/app/(main)/discover/(detail)/model/[...slugs]/features/InfoSidebar/SuggestionItem.tsx +2 -2
- package/src/app/(main)/discover/(detail)/model/[...slugs]/features/ParameterList/index.tsx +2 -2
- package/src/app/(main)/discover/(detail)/model/[...slugs]/features/ProviderList/index.tsx +5 -5
- package/src/app/(main)/settings/provider/(detail)/[id]/index.tsx +1 -1
- package/src/app/(main)/settings/provider/features/ModelList/ModelTitle/index.tsx +118 -110
- package/src/app/(main)/settings/provider/features/ModelList/index.tsx +9 -6
- package/src/features/DevPanel/PostgresViewer/DataTable/Table.tsx +2 -11
- package/src/features/DevPanel/PostgresViewer/DataTable/index.tsx +9 -1
- package/src/features/DevPanel/PostgresViewer/Schema.tsx +2 -11
- package/src/features/DevPanel/PostgresViewer/TableColumns.tsx +1 -1
- package/src/features/DevPanel/PostgresViewer/usePgTable.ts +31 -0
- package/src/server/globalConfig/genServerAiProviderConfig.ts +4 -1
- package/src/server/globalConfig/index.ts +3 -0
- package/src/services/chat.ts +7 -3
- package/src/services/config.ts +3 -0
- package/src/types/aiProvider.ts +1 -0
- package/src/features/DevPanel/PostgresViewer/useTableColumns.ts +0 -13
package/CHANGELOG.md
CHANGED
@@ -2,6 +2,56 @@
|
|
2
2
|
|
3
3
|
# Changelog
|
4
4
|
|
5
|
+
### [Version 1.47.15](https://github.com/lobehub/lobe-chat/compare/v1.47.14...v1.47.15)
|
6
|
+
|
7
|
+
<sup>Released on **2025-01-22**</sup>
|
8
|
+
|
9
|
+
#### 💄 Styles
|
10
|
+
|
11
|
+
- **misc**: Improve discover model page.
|
12
|
+
|
13
|
+
<br/>
|
14
|
+
|
15
|
+
<details>
|
16
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
17
|
+
|
18
|
+
#### Styles
|
19
|
+
|
20
|
+
- **misc**: Improve discover model page, closes [#5544](https://github.com/lobehub/lobe-chat/issues/5544) ([979849c](https://github.com/lobehub/lobe-chat/commit/979849c))
|
21
|
+
|
22
|
+
</details>
|
23
|
+
|
24
|
+
<div align="right">
|
25
|
+
|
26
|
+
[](#readme-top)
|
27
|
+
|
28
|
+
</div>
|
29
|
+
|
30
|
+
### [Version 1.47.14](https://github.com/lobehub/lobe-chat/compare/v1.47.13...v1.47.14)
|
31
|
+
|
32
|
+
<sup>Released on **2025-01-22**</sup>
|
33
|
+
|
34
|
+
#### 💄 Styles
|
35
|
+
|
36
|
+
- **misc**: Support model list with model fetcher settings.
|
37
|
+
|
38
|
+
<br/>
|
39
|
+
|
40
|
+
<details>
|
41
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
42
|
+
|
43
|
+
#### Styles
|
44
|
+
|
45
|
+
- **misc**: Support model list with model fetcher settings, closes [#5540](https://github.com/lobehub/lobe-chat/issues/5540) ([637fbf4](https://github.com/lobehub/lobe-chat/commit/637fbf4))
|
46
|
+
|
47
|
+
</details>
|
48
|
+
|
49
|
+
<div align="right">
|
50
|
+
|
51
|
+
[](#readme-top)
|
52
|
+
|
53
|
+
</div>
|
54
|
+
|
5
55
|
### [Version 1.47.13](https://github.com/lobehub/lobe-chat/compare/v1.47.12...v1.47.13)
|
6
56
|
|
7
57
|
<sup>Released on **2025-01-21**</sup>
|
package/changelog/v1.json
CHANGED
@@ -1,4 +1,22 @@
|
|
1
1
|
[
|
2
|
+
{
|
3
|
+
"children": {
|
4
|
+
"improvements": [
|
5
|
+
"Improve discover model page."
|
6
|
+
]
|
7
|
+
},
|
8
|
+
"date": "2025-01-22",
|
9
|
+
"version": "1.47.15"
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"children": {
|
13
|
+
"improvements": [
|
14
|
+
"Support model list with model fetcher settings."
|
15
|
+
]
|
16
|
+
},
|
17
|
+
"date": "2025-01-22",
|
18
|
+
"version": "1.47.14"
|
19
|
+
},
|
2
20
|
{
|
3
21
|
"children": {
|
4
22
|
"improvements": [
|
package/locales/ar/models.json
CHANGED
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "محسن لمشاهد الحوار باللغة الصينية، يوفر قدرة توليد حوار سلس ومتوافق مع عادات التعبير الصينية."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "تحسين كبير في قدرات النموذج مقارنة بسلسلة abab6.5 في النصوص الطويلة، الرياضيات، والكتابة."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "نموذج استدعاء الدوال مفتوح المصدر من Fireworks، يوفر قدرة تنفيذ تعليمات ممتازة وخصائص قابلة للتخصيص."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 هو نموذج شيفرة مفتوح المصدر من نوع خبير مختلط، يقدم أداءً ممتازًا في مهام الشيفرة، ويضاهي GPT4-Turbo."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "نموذج الاستدلال الذي أطلقته DeepSeek. قبل تقديم الإجابة النهائية، يقوم النموذج أولاً بإخراج سلسلة من المحتوى الفكري لتحسين دقة الإجابة النهائية."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 هو نموذج لغوي فعال من نوع Mixture-of-Experts، مناسب لاحتياجات المعالجة الاقتصادية."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "Оптимизирана за диалогови сценарии на китайски, предлагаща плавно и съответстващо на китайските изразни навици генериране на диалози."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "В сравнение с моделите от серията abab6.5, този модел предлага значително подобрение в способностите за работа с дълги текстове, математика и писане."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Fireworks отворен модел за извикване на функции, предлагащ отлични способности за изпълнение на инструкции и отворени, персонализируеми характеристики."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 е отворен хибриден експертен кодов модел, който се представя отлично в кодовите задачи, сравним с GPT4-Turbo."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "Модел за извеждане, разработен от DeepSeek. Преди да предостави окончателния отговор, моделът първо извежда част от веригата на мислене, за да повиши точността на крайния отговор."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 е ефективен модел на Mixture-of-Experts, подходящ за икономически ефективни нужди от обработка."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "Für chinesische Charakterdialoge optimiert, bietet es flüssige und den chinesischen Ausdrucksgewohnheiten entsprechende Dialoggenerierung."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "Im Vergleich zur abab6.5-Modellreihe gibt es erhebliche Verbesserungen in den Fähigkeiten bei langen Texten, Mathematik und Schreiben."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Das Open-Source-Funktionsaufrufmodell von Fireworks bietet hervorragende Anweisungsdurchführungsfähigkeiten und anpassbare Funktionen."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 ist ein Open-Source-Mischexperten-Code-Modell, das in Codeaufgaben hervorragende Leistungen erbringt und mit GPT4-Turbo vergleichbar ist."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "Das von DeepSeek entwickelte Inferenzmodell. Bevor das Modell die endgültige Antwort ausgibt, gibt es zunächst eine Denkprozesskette aus, um die Genauigkeit der endgültigen Antwort zu erhöhen."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 ist ein effizientes Mixture-of-Experts-Sprachmodell, das für wirtschaftliche Verarbeitungsanforderungen geeignet ist."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "Optimized for Chinese persona dialogue scenarios, providing smooth dialogue generation that aligns with Chinese expression habits."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "Significant improvements in capabilities such as long text, mathematics, and writing compared to the abab6.5 series models."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Fireworks open-source function-calling model provides excellent instruction execution capabilities and customizable features."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 is an open-source hybrid expert code model that performs excellently in coding tasks, comparable to GPT4-Turbo."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "The reasoning model launched by DeepSeek. Before outputting the final answer, the model first provides a chain of thought to enhance the accuracy of the final response."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 is an efficient Mixture-of-Experts language model, suitable for cost-effective processing needs."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "Optimizado para escenarios de diálogo de personajes en chino, ofrece capacidades de generación de diálogos fluidos y acordes con las expresiones chinas."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "En comparación con la serie de modelos abab6.5, ha habido una mejora significativa en habilidades como el manejo de textos largos, matemáticas y escritura."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Modelo de llamada de función de código abierto de Fireworks, que ofrece capacidades de ejecución de instrucciones sobresalientes y características personalizables."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 es un modelo de código de expertos híbrido de código abierto, que destaca en tareas de codificación, comparable a GPT4-Turbo."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "Modelo de inferencia lanzado por DeepSeek. Antes de proporcionar la respuesta final, el modelo genera primero una cadena de pensamiento para mejorar la precisión de la respuesta final."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 es un modelo de lenguaje Mixture-of-Experts eficiente, adecuado para necesidades de procesamiento económico."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "بهینهسازی شده برای سناریوهای مکالمه با شخصیتهای چینی، ارائه توانایی تولید مکالمات روان و مطابق با عادات بیانی چینی."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "نسبت به مدلهای سری abab6.5، در تواناییهای مربوط به متنهای طولانی، ریاضیات و نوشتن به طور قابل توجهی بهبود یافته است."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "مدل فراخوانی تابع Fireworks منبعباز، ارائهدهنده قابلیت اجرای دستورالعملهای برجسته و ویژگیهای باز و قابل سفارشیسازی."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 یک مدل کد نویسی ترکیبی و متنباز است که در وظایف کدنویسی عملکرد بسیار خوبی دارد و با GPT4-Turbo قابل مقایسه است."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "مدل استدلالی ارائه شده توسط DeepSeek. قبل از ارائه پاسخ نهایی، مدل ابتدا یک زنجیره تفکر را تولید میکند تا دقت پاسخ نهایی را افزایش دهد."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 یک مدل زبانی Mixture-of-Experts کارآمد است که برای پردازش نیازهای اقتصادی و کارآمد مناسب میباشد."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "Optimisé pour des scénarios de dialogue en chinois, offrant une capacité de génération de dialogues fluide et conforme aux habitudes d'expression en chinois."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "Par rapport à la série de modèles abab6.5, il y a eu une amélioration significative des capacités en matière de textes longs, de mathématiques et d'écriture."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Le modèle d'appel de fonction open source de Fireworks offre d'excellentes capacités d'exécution d'instructions et des caractéristiques personnalisables."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 est un modèle de code open source de type expert mixte, performant dans les tâches de code, rivalisant avec GPT4-Turbo."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "Modèle d'inférence proposé par DeepSeek. Avant de fournir la réponse finale, le modèle génère d'abord une chaîne de pensée pour améliorer l'exactitude de la réponse finale."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 est un modèle de langage Mixture-of-Experts efficace, adapté aux besoins de traitement économique."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "Ottimizzato per scenari di dialogo con personaggi cinesi, offre capacità di generazione di dialoghi fluida e conforme alle espressioni cinesi."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "Rispetto alla serie di modelli abab6.5, ci sono stati notevoli miglioramenti nelle capacità di elaborazione di testi lunghi, matematica e scrittura."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Il modello open source di chiamata di funzione di Fireworks offre capacità di esecuzione di istruzioni eccezionali e caratteristiche personalizzabili."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 è un modello di codice open source di esperti misti, eccelle nei compiti di codice, paragonabile a GPT4-Turbo."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "Modello di ragionamento lanciato da DeepSeek. Prima di fornire la risposta finale, il modello genera una catena di pensiero per migliorare l'accuratezza della risposta finale."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 è un modello di linguaggio Mixture-of-Experts efficiente, adatto per esigenze di elaborazione economica."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "中国語のキャラクター対話シーンに最適化されており、流暢で中国語の表現習慣に合った対話生成能力を提供します。"
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "abab6.5シリーズモデルに比べて、長文、数学、執筆などの能力が大幅に向上しています。"
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Fireworksのオープンソース関数呼び出しモデルは、卓越した指示実行能力とオープンでカスタマイズ可能な特性を提供します。"
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2は、オープンソースの混合エキスパートコードモデルであり、コードタスクにおいて優れた性能を発揮し、GPT4-Turboに匹敵します。"
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "DeepSeekが提供する推論モデルです。最終的な回答を出力する前に、モデルは思考の連鎖を出力し、最終的な答えの正確性を高めます。"
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2は、高効率なMixture-of-Experts言語モデルであり、経済的な処理ニーズに適しています。"
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "중국어 캐릭터 대화 시나리오에 최적화되어 있으며, 유창하고 중국어 표현 습관에 맞는 대화 생성 능력을 제공합니다."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "abab6.5 시리즈 모델에 비해 긴 글, 수학, 작문 등에서 능력이 크게 향상되었습니다."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Fireworks 오픈 소스 함수 호출 모델로, 뛰어난 지시 실행 능력과 개방형 커스터마이징 기능을 제공합니다."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2는 오픈 소스 혼합 전문가 코드 모델로, 코드 작업에서 뛰어난 성능을 발휘하며, GPT4-Turbo와 경쟁할 수 있습니다."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "DeepSeek에서 제공하는 추론 모델입니다. 최종 답변을 출력하기 전에 모델은 먼저 사고 과정을 출력하여 최종 답변의 정확성을 높입니다."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2는 경제적이고 효율적인 처리 요구에 적합한 Mixture-of-Experts 언어 모델입니다."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "Geoptimaliseerd voor Chinese personagegesprekken, biedt vloeiende en cultureel passende gespreksgeneratiecapaciteiten."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "In vergelijking met de abab6.5-serie modellen zijn er aanzienlijke verbeteringen in de capaciteiten op het gebied van lange teksten, wiskunde, schrijven, enzovoort."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Fireworks open-source functie-aanroepmodel biedt uitstekende instructie-uitvoeringscapaciteiten en aanpasbare functies."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 is een open-source hybride expertcode-model, presteert uitstekend in code-taken en is vergelijkbaar met GPT4-Turbo."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "Het redeneer model van DeepSeek. Voordat het model het uiteindelijke antwoord geeft, genereert het eerst een stuk denkproces om de nauwkeurigheid van het uiteindelijke antwoord te verbeteren."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 is een efficiënt Mixture-of-Experts taalmodel, geschikt voor kosteneffectieve verwerkingsbehoeften."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "Optymalizowany do scenariuszy dialogowych w języku chińskim, oferujący płynne i zgodne z chińskimi zwyczajami generowanie dialogów."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "W porównaniu do modeli z serii abab6.5, zdolności w zakresie długich tekstów, matematyki i pisania uległy znacznej poprawie."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Open source model wywołań funkcji od Fireworks, oferujący doskonałe możliwości wykonania poleceń i otwarte, konfigurowalne cechy."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 to otwarty model kodowy Mixture-of-Experts, który doskonale radzi sobie z zadaniami kodowymi, porównywalny z GPT4-Turbo."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "Model inferency wprowadzony przez DeepSeek. Przed wygenerowaniem ostatecznej odpowiedzi, model najpierw przedstawia fragment łańcucha myślowego, aby zwiększyć dokładność końcowej odpowiedzi."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 to wydajny model językowy Mixture-of-Experts, odpowiedni do ekonomicznych potrzeb przetwarzania."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "Otimizado para cenários de diálogo de personagens em chinês, oferecendo capacidade de geração de diálogos fluentes e que respeitam os hábitos de expressão em chinês."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "Em comparação com a série de modelos abab6.5, houve uma melhoria significativa nas habilidades em textos longos, matemática, escrita, entre outros."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Modelo de chamada de função de código aberto da Fireworks, oferecendo excelente capacidade de execução de instruções e características personalizáveis."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 é um modelo de código de especialistas abertos, destacando-se em tarefas de codificação, comparável ao GPT4-Turbo."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "Modelo de raciocínio lançado pela DeepSeek. Antes de fornecer a resposta final, o modelo gera uma cadeia de pensamento para aumentar a precisão da resposta final."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 é um modelo de linguagem eficiente Mixture-of-Experts, adequado para demandas de processamento econômico."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "Оптимизирован для диалогов на китайском языке, обеспечивая плавную генерацию диалогов, соответствующую китайским языковым привычкам."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "По сравнению с серией моделей abab6.5, значительно улучшены способности в области длинных текстов, математики и написания."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Открытая модель вызова функций от Fireworks, обеспечивающая выдающиеся возможности выполнения команд и открытые настраиваемые функции."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 — это открытая смешанная экспертная модель кода, показывающая отличные результаты в задачах кода, сопоставимая с GPT4-Turbo."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "Модель вывода, представленная DeepSeek. Перед тем как выдать окончательный ответ, модель сначала выводит цепочку размышлений, чтобы повысить точность окончательного ответа."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 — это эффективная языковая модель Mixture-of-Experts, подходящая для экономически эффективных потребностей обработки."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "Çin karakter diyalog senaryoları için optimize edilmiş, akıcı ve Çin ifade alışkanlıklarına uygun diyalog üretim yeteneği sunar."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "abab6.5 serisi modellere kıyasla uzun metin, matematik, yazım gibi yeteneklerde büyük bir gelişim göstermektedir."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Fireworks açık kaynak fonksiyon çağrı modeli, mükemmel talimat yürütme yetenekleri ve özelleştirilebilir özellikler sunar."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2, açık kaynaklı bir karışık uzman kod modelidir, kod görevlerinde mükemmel performans sergiler ve GPT4-Turbo ile karşılaştırılabilir."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "DeepSeek tarafından sunulan bir akıl yürütme modeli. Model, nihai yanıtı vermeden önce bir düşünce zinciri içeriği sunarak nihai cevabın doğruluğunu artırır."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2, ekonomik ve verimli işleme ihtiyaçları için uygun, etkili bir Mixture-of-Experts dil modelidir."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "Tối ưu hóa cho các tình huống đối thoại bằng tiếng Trung, cung cấp khả năng sinh đối thoại mượt mà và phù hợp với thói quen diễn đạt tiếng Trung."
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "So với các mô hình trong series abab6.5, khả năng xử lý văn bản dài, toán học, viết lách, v.v. đã được cải thiện đáng kể."
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Mô hình gọi hàm mã nguồn mở của Fireworks, cung cấp khả năng thực hiện chỉ dẫn xuất sắc và tính năng tùy chỉnh mở."
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 là mô hình mã nguồn mở hỗn hợp chuyên gia, thể hiện xuất sắc trong các nhiệm vụ mã, tương đương với GPT4-Turbo."
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "Mô hình suy diễn do DeepSeek phát triển. Trước khi đưa ra câu trả lời cuối cùng, mô hình sẽ xuất ra một đoạn nội dung chuỗi suy nghĩ để nâng cao độ chính xác của câu trả lời cuối."
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 là mô hình ngôn ngữ Mixture-of-Experts hiệu quả, phù hợp cho các nhu cầu xử lý tiết kiệm."
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "针对中文人设对话场景优化,提供流畅且符合中文表达习惯的对话生成能力。"
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "相对于abab6.5系列模型在长文、数学、写作等能力有大幅度提升。"
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Fireworks 开源函数调用模型,提供卓越的指令执行能力和开放可定制的特性。"
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 是开源的混合专家代码模型,在代码任务方面表现优异,与 GPT4-Turbo 相媲美。"
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "DeepSeek 推出的推理模型。在输出最终回答之前,模型会先输出一段思维链内容,以提升最终答案的准确性。"
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 是高效的 Mixture-of-Experts 语言模型,适用于经济高效的处理需求。"
|
541
547
|
},
|
@@ -305,6 +305,9 @@
|
|
305
305
|
"abab6.5t-chat": {
|
306
306
|
"description": "針對中文人設對話場景優化,提供流暢且符合中文表達習慣的對話生成能力。"
|
307
307
|
},
|
308
|
+
"abab7-chat-preview": {
|
309
|
+
"description": "相對於abab6.5系列模型在長文、數學、寫作等能力有大幅度提升。"
|
310
|
+
},
|
308
311
|
"accounts/fireworks/models/firefunction-v1": {
|
309
312
|
"description": "Fireworks 開源函數調用模型,提供卓越的指令執行能力和開放可定制的特性。"
|
310
313
|
},
|
@@ -536,6 +539,9 @@
|
|
536
539
|
"deepseek-coder-v2:236b": {
|
537
540
|
"description": "DeepSeek Coder V2 是開源的混合專家代碼模型,在代碼任務方面表現優異,與 GPT4-Turbo 相媲美。"
|
538
541
|
},
|
542
|
+
"deepseek-reasoner": {
|
543
|
+
"description": "DeepSeek 推出的推理模型。在輸出最終回答之前,模型會先輸出一段思維鏈內容,以提升最終答案的準確性。"
|
544
|
+
},
|
539
545
|
"deepseek-v2": {
|
540
546
|
"description": "DeepSeek V2 是高效的 Mixture-of-Experts 語言模型,適用於經濟高效的處理需求。"
|
541
547
|
},
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@lobehub/chat",
|
3
|
-
"version": "1.47.
|
3
|
+
"version": "1.47.15",
|
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",
|
@@ -185,7 +185,7 @@
|
|
185
185
|
"officeparser": "^5.1.1",
|
186
186
|
"ollama": "^0.5.11",
|
187
187
|
"openai": "^4.77.3",
|
188
|
-
"openapi-fetch": "^0.
|
188
|
+
"openapi-fetch": "^0.9.8",
|
189
189
|
"partial-json": "^0.1.7",
|
190
190
|
"pdf-parse": "^1.1.1",
|
191
191
|
"pdfjs-dist": "4.8.69",
|
@@ -219,7 +219,7 @@
|
|
219
219
|
"semver": "^7.6.3",
|
220
220
|
"sharp": "^0.33.5",
|
221
221
|
"shiki": "^1.26.1",
|
222
|
-
"stripe": "^
|
222
|
+
"stripe": "^16.12.0",
|
223
223
|
"superjson": "^2.2.2",
|
224
224
|
"svix": "^1.45.1",
|
225
225
|
"swr": "^2.3.0",
|
@@ -3,6 +3,7 @@
|
|
3
3
|
import { ModelIcon } from '@lobehub/icons';
|
4
4
|
import { Button } from 'antd';
|
5
5
|
import { createStyles } from 'antd-style';
|
6
|
+
import dayjs from 'dayjs';
|
6
7
|
import Link from 'next/link';
|
7
8
|
import { memo } from 'react';
|
8
9
|
import { useTranslation } from 'react-i18next';
|
@@ -20,7 +21,9 @@ export const useStyles = createStyles(({ css, token }) => ({
|
|
20
21
|
background: ${token.colorFillSecondary};
|
21
22
|
`,
|
22
23
|
time: css`
|
24
|
+
display: flex;
|
23
25
|
font-size: 12px;
|
26
|
+
line-height: 22px;
|
24
27
|
color: ${token.colorTextDescription};
|
25
28
|
`,
|
26
29
|
title: css`
|
@@ -41,6 +44,7 @@ const Header = memo<HeaderProps>(({ identifier, data, mobile }) => {
|
|
41
44
|
const { styles, theme } = useStyles();
|
42
45
|
const { t } = useTranslation(['discover', 'models']);
|
43
46
|
|
47
|
+
const releasedAt = data.meta.releasedAt;
|
44
48
|
return (
|
45
49
|
<Flexbox gap={12} width={'100%'}>
|
46
50
|
{!mobile && <Back href={'/discover/models'} />}
|
@@ -56,9 +60,11 @@ const Header = memo<HeaderProps>(({ identifier, data, mobile }) => {
|
|
56
60
|
style={{ color: theme.colorTextSecondary }}
|
57
61
|
>
|
58
62
|
<div>{identifier}</div>
|
59
|
-
|
60
|
-
{
|
61
|
-
|
63
|
+
{releasedAt && (
|
64
|
+
<time className={styles.time} dateTime={dayjs(releasedAt).toISOString()}>
|
65
|
+
{releasedAt}
|
66
|
+
</time>
|
67
|
+
)}
|
62
68
|
</Flexbox>
|
63
69
|
</Flexbox>
|
64
70
|
</Flexbox>
|
package/src/app/(main)/discover/(detail)/model/[...slugs]/features/InfoSidebar/SuggestionItem.tsx
CHANGED
@@ -44,13 +44,13 @@ export interface SuggestionItemProps
|
|
44
44
|
extends Omit<DiscoverModelItem, 'suggestions' | 'socialData' | 'providers'>,
|
45
45
|
FlexboxProps {}
|
46
46
|
|
47
|
-
const SuggestionItem = memo<SuggestionItemProps>(({ className, meta, identifier
|
47
|
+
const SuggestionItem = memo<SuggestionItemProps>(({ className, meta, identifier }) => {
|
48
48
|
const { title, description, contextWindowTokens, vision, functionCall } = meta;
|
49
49
|
const { t } = useTranslation('models');
|
50
50
|
const { cx, styles } = useStyles();
|
51
51
|
|
52
52
|
return (
|
53
|
-
<Flexbox className={cx(styles.container, className)} gap={12} key={identifier}
|
53
|
+
<Flexbox className={cx(styles.container, className)} gap={12} key={identifier}>
|
54
54
|
<Flexbox align={'center'} gap={12} horizontal width={'100%'}>
|
55
55
|
<ModelIcon model={identifier} size={36} type={'avatar'} />
|
56
56
|
<Flexbox style={{ overflow: 'hidden' }}>
|
@@ -89,10 +89,10 @@ const ParameterList = memo<ParameterListProps>(({ data }) => {
|
|
89
89
|
<Block title={t('models.parameterList.title')}>
|
90
90
|
<Collapse
|
91
91
|
defaultActiveKey={items.map((item) => item.key)}
|
92
|
-
expandIconPosition={'
|
92
|
+
expandIconPosition={'end'}
|
93
93
|
gap={16}
|
94
94
|
items={items.map((item) => ({
|
95
|
-
children: <ParameterItem {...item} />,
|
95
|
+
children: <ParameterItem {...item} key={item.key} />,
|
96
96
|
key: item.key,
|
97
97
|
label: (
|
98
98
|
<Flexbox align={'center'} gap={8} horizontal>
|
@@ -4,7 +4,7 @@ import { ModelIcon } from '@lobehub/icons';
|
|
4
4
|
import { Divider } from 'antd';
|
5
5
|
import { useTheme } from 'antd-style';
|
6
6
|
import { BrainCircuit } from 'lucide-react';
|
7
|
-
import { memo } from 'react';
|
7
|
+
import { Fragment, memo } from 'react';
|
8
8
|
import { useTranslation } from 'react-i18next';
|
9
9
|
|
10
10
|
import { DiscoverProviderItem } from '@/types/discover';
|
@@ -33,10 +33,10 @@ const ProviderList = memo<ProviderListProps>(({ mobile, data, identifier }) => {
|
|
33
33
|
title={t('models.supportedProviders')}
|
34
34
|
>
|
35
35
|
{data.map((item, index) => (
|
36
|
-
|
37
|
-
<ProviderItem
|
38
|
-
{index < data.length - 1 && <Divider
|
39
|
-
|
36
|
+
<Fragment key={item.identifier}>
|
37
|
+
<ProviderItem mobile={mobile} modelId={identifier} {...item} />
|
38
|
+
{index < data.length - 1 && <Divider style={{ margin: 0 }} />}
|
39
|
+
</Fragment>
|
40
40
|
))}
|
41
41
|
</HighlightBlock>
|
42
42
|
);
|
@@ -16,7 +16,7 @@ const ProviderDetail = memo<ProviderDetailProps>(({ showConfig = true, ...card }
|
|
16
16
|
|
17
17
|
{/* ↑ cloud slot ↑ */}
|
18
18
|
{showConfig && <ProviderConfig {...card} />}
|
19
|
-
<ModelList id={card.id} />
|
19
|
+
<ModelList id={card.id} {...card.settings} />
|
20
20
|
</Flexbox>
|
21
21
|
);
|
22
22
|
});
|
@@ -15,131 +15,139 @@ import Search from './Search';
|
|
15
15
|
|
16
16
|
interface ModelFetcherProps {
|
17
17
|
provider: string;
|
18
|
+
showAddNewModel?: boolean;
|
19
|
+
showModelFetcher?: boolean;
|
18
20
|
}
|
19
21
|
|
20
|
-
const ModelTitle = memo<ModelFetcherProps>(
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
s
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
22
|
+
const ModelTitle = memo<ModelFetcherProps>(
|
23
|
+
({ provider, showAddNewModel = true, showModelFetcher = true }) => {
|
24
|
+
const theme = useTheme();
|
25
|
+
const { t } = useTranslation('modelProvider');
|
26
|
+
const [
|
27
|
+
searchKeyword,
|
28
|
+
totalModels,
|
29
|
+
isEmpty,
|
30
|
+
hasRemoteModels,
|
31
|
+
fetchRemoteModelList,
|
32
|
+
clearObtainedModels,
|
33
|
+
useFetchAiProviderModels,
|
34
|
+
] = useAiInfraStore((s) => [
|
35
|
+
s.modelSearchKeyword,
|
36
|
+
aiModelSelectors.totalAiProviderModelList(s),
|
37
|
+
aiModelSelectors.isEmptyAiProviderModelList(s),
|
38
|
+
aiModelSelectors.hasRemoteModels(s),
|
39
|
+
s.fetchRemoteModelList,
|
40
|
+
s.clearRemoteModels,
|
41
|
+
s.useFetchAiProviderModels,
|
42
|
+
]);
|
40
43
|
|
41
|
-
|
44
|
+
const { isLoading } = useFetchAiProviderModels(provider);
|
42
45
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
+
const [fetchRemoteModelsLoading, setFetchRemoteModelsLoading] = useState(false);
|
47
|
+
const [clearRemoteModelsLoading, setClearRemoteModelsLoading] = useState(false);
|
48
|
+
const [showModal, setShowModal] = useState(false);
|
46
49
|
|
47
|
-
|
50
|
+
const mobile = useIsMobile();
|
48
51
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
52
|
+
return (
|
53
|
+
<Flexbox
|
54
|
+
gap={12}
|
55
|
+
paddingBlock={8}
|
56
|
+
style={{
|
57
|
+
background: theme.colorBgLayout,
|
58
|
+
position: 'sticky',
|
59
|
+
top: mobile ? -2 : -16,
|
60
|
+
zIndex: 15,
|
61
|
+
}}
|
62
|
+
>
|
63
|
+
<Flexbox align={'center'} gap={0} horizontal justify={'space-between'}>
|
64
|
+
<Flexbox align={'center'} gap={8} horizontal>
|
65
|
+
<Typography.Text style={{ fontSize: 16, fontWeight: 'bold' }}>
|
66
|
+
{t('providerModels.list.title')}
|
67
|
+
</Typography.Text>
|
65
68
|
|
69
|
+
{isLoading ? (
|
70
|
+
<Skeleton.Button active style={{ height: 22 }} />
|
71
|
+
) : (
|
72
|
+
<Typography.Text style={{ fontSize: 12 }} type={'secondary'}>
|
73
|
+
<div style={{ display: 'flex', lineHeight: '24px' }}>
|
74
|
+
{t('providerModels.list.total', { count: totalModels })}
|
75
|
+
{hasRemoteModels && (
|
76
|
+
<ActionIcon
|
77
|
+
icon={CircleX}
|
78
|
+
loading={clearRemoteModelsLoading}
|
79
|
+
onClick={async () => {
|
80
|
+
setClearRemoteModelsLoading(true);
|
81
|
+
await clearObtainedModels(provider);
|
82
|
+
setClearRemoteModelsLoading(false);
|
83
|
+
}}
|
84
|
+
size={'small'}
|
85
|
+
title={t('providerModels.list.fetcher.clear')}
|
86
|
+
/>
|
87
|
+
)}
|
88
|
+
</div>
|
89
|
+
</Typography.Text>
|
90
|
+
)}
|
91
|
+
</Flexbox>
|
66
92
|
{isLoading ? (
|
67
|
-
<Skeleton.Button active style={{
|
68
|
-
) : (
|
69
|
-
<
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
93
|
+
<Skeleton.Button active size={'small'} style={{ width: 120 }} />
|
94
|
+
) : isEmpty ? null : (
|
95
|
+
<Flexbox gap={8} horizontal>
|
96
|
+
{!mobile && (
|
97
|
+
<Search
|
98
|
+
onChange={(value) => {
|
99
|
+
useAiInfraStore.setState({ modelSearchKeyword: value });
|
100
|
+
}}
|
101
|
+
value={searchKeyword}
|
102
|
+
/>
|
103
|
+
)}
|
104
|
+
<Space.Compact>
|
105
|
+
{showModelFetcher && (
|
106
|
+
<Button
|
107
|
+
icon={<Icon icon={LucideRefreshCcwDot} />}
|
108
|
+
loading={fetchRemoteModelsLoading}
|
76
109
|
onClick={async () => {
|
77
|
-
|
78
|
-
|
79
|
-
|
110
|
+
setFetchRemoteModelsLoading(true);
|
111
|
+
try {
|
112
|
+
await fetchRemoteModelList(provider);
|
113
|
+
} catch (e) {
|
114
|
+
console.error(e);
|
115
|
+
}
|
116
|
+
setFetchRemoteModelsLoading(false);
|
117
|
+
}}
|
118
|
+
size={'small'}
|
119
|
+
>
|
120
|
+
{fetchRemoteModelsLoading
|
121
|
+
? t('providerModels.list.fetcher.fetching')
|
122
|
+
: t('providerModels.list.fetcher.fetch')}
|
123
|
+
</Button>
|
124
|
+
)}
|
125
|
+
{showAddNewModel && (
|
126
|
+
<Button
|
127
|
+
icon={<Icon icon={PlusIcon} />}
|
128
|
+
onClick={() => {
|
129
|
+
setShowModal(true);
|
80
130
|
}}
|
81
131
|
size={'small'}
|
82
|
-
title={t('providerModels.list.fetcher.clear')}
|
83
132
|
/>
|
84
133
|
)}
|
85
|
-
|
86
|
-
|
134
|
+
<CreateNewModelModal open={showModal} setOpen={setShowModal} />
|
135
|
+
</Space.Compact>
|
136
|
+
</Flexbox>
|
87
137
|
)}
|
88
138
|
</Flexbox>
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
value={searchKeyword}
|
99
|
-
/>
|
100
|
-
)}
|
101
|
-
<Space.Compact>
|
102
|
-
<Button
|
103
|
-
icon={<Icon icon={LucideRefreshCcwDot} />}
|
104
|
-
loading={fetchRemoteModelsLoading}
|
105
|
-
onClick={async () => {
|
106
|
-
setFetchRemoteModelsLoading(true);
|
107
|
-
try {
|
108
|
-
await fetchRemoteModelList(provider);
|
109
|
-
} catch (e) {
|
110
|
-
console.error(e);
|
111
|
-
}
|
112
|
-
setFetchRemoteModelsLoading(false);
|
113
|
-
}}
|
114
|
-
size={'small'}
|
115
|
-
>
|
116
|
-
{fetchRemoteModelsLoading
|
117
|
-
? t('providerModels.list.fetcher.fetching')
|
118
|
-
: t('providerModels.list.fetcher.fetch')}
|
119
|
-
</Button>
|
120
|
-
<Button
|
121
|
-
icon={<Icon icon={PlusIcon} />}
|
122
|
-
onClick={() => {
|
123
|
-
setShowModal(true);
|
124
|
-
}}
|
125
|
-
size={'small'}
|
126
|
-
/>
|
127
|
-
<CreateNewModelModal open={showModal} setOpen={setShowModal} />
|
128
|
-
</Space.Compact>
|
129
|
-
</Flexbox>
|
139
|
+
|
140
|
+
{mobile && (
|
141
|
+
<Search
|
142
|
+
onChange={(value) => {
|
143
|
+
useAiInfraStore.setState({ modelSearchKeyword: value });
|
144
|
+
}}
|
145
|
+
value={searchKeyword}
|
146
|
+
variant={'filled'}
|
147
|
+
/>
|
130
148
|
)}
|
131
149
|
</Flexbox>
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
onChange={(value) => {
|
136
|
-
useAiInfraStore.setState({ modelSearchKeyword: value });
|
137
|
-
}}
|
138
|
-
value={searchKeyword}
|
139
|
-
variant={'filled'}
|
140
|
-
/>
|
141
|
-
)}
|
142
|
-
</Flexbox>
|
143
|
-
);
|
144
|
-
});
|
150
|
+
);
|
151
|
+
},
|
152
|
+
);
|
145
153
|
export default ModelTitle;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
'use client';
|
2
2
|
|
3
|
-
import {
|
3
|
+
import { Suspense, memo } from 'react';
|
4
4
|
import { Flexbox } from 'react-layout-kit';
|
5
5
|
|
6
6
|
import { useIsMobile } from '@/hooks/useIsMobile';
|
@@ -38,17 +38,20 @@ const Content = memo<{ id: string }>(({ id }) => {
|
|
38
38
|
|
39
39
|
interface ModelListProps {
|
40
40
|
id: string;
|
41
|
-
|
42
|
-
|
43
|
-
showAzureDeployName?: boolean;
|
41
|
+
showAddNewModel?: boolean;
|
42
|
+
showModelFetcher?: boolean;
|
44
43
|
}
|
45
44
|
|
46
|
-
const ModelList = memo<ModelListProps>(({ id }) => {
|
45
|
+
const ModelList = memo<ModelListProps>(({ id, showModelFetcher, showAddNewModel }) => {
|
47
46
|
const mobile = useIsMobile();
|
48
47
|
|
49
48
|
return (
|
50
49
|
<Flexbox gap={16} paddingInline={mobile ? 12 : 0}>
|
51
|
-
<ModelTitle
|
50
|
+
<ModelTitle
|
51
|
+
provider={id}
|
52
|
+
showAddNewModel={showAddNewModel}
|
53
|
+
showModelFetcher={showModelFetcher}
|
54
|
+
/>
|
52
55
|
<Suspense fallback={<SkeletonList />}>
|
53
56
|
<Content id={id} />
|
54
57
|
</Suspense>
|
@@ -2,13 +2,8 @@ import { createStyles } from 'antd-style';
|
|
2
2
|
import React from 'react';
|
3
3
|
import { Center } from 'react-layout-kit';
|
4
4
|
import { TableVirtuoso } from 'react-virtuoso';
|
5
|
-
import useSWR from 'swr';
|
6
5
|
|
7
|
-
import {
|
8
|
-
import { useGlobalStore } from '@/store/global';
|
9
|
-
import { systemStatusSelectors } from '@/store/global/selectors';
|
10
|
-
|
11
|
-
import { useTableColumns } from '../useTableColumns';
|
6
|
+
import { usePgTable, useTableColumns } from '../usePgTable';
|
12
7
|
import TableCell from './TableCell';
|
13
8
|
|
14
9
|
const useStyles = createStyles(({ token, css }) => ({
|
@@ -100,12 +95,8 @@ const Table = ({ tableName }: TableProps) => {
|
|
100
95
|
const { styles } = useStyles();
|
101
96
|
|
102
97
|
const tableColumns = useTableColumns(tableName);
|
103
|
-
const isDBInited = useGlobalStore(systemStatusSelectors.isDBInited);
|
104
98
|
|
105
|
-
const tableData =
|
106
|
-
isDBInited && tableName ? ['fetch-table-data', tableName] : null,
|
107
|
-
([, table]) => tableViewerService.getTableData(table),
|
108
|
-
);
|
99
|
+
const tableData = usePgTable(tableName);
|
109
100
|
|
110
101
|
const columns = tableColumns.data?.map((t) => t.name) || [];
|
111
102
|
const isLoading = tableColumns.isLoading || tableData.isLoading;
|
@@ -3,7 +3,9 @@ import { Button } from 'antd';
|
|
3
3
|
import { createStyles } from 'antd-style';
|
4
4
|
import { Download, Filter, RefreshCw } from 'lucide-react';
|
5
5
|
import React from 'react';
|
6
|
+
import { mutate } from 'swr';
|
6
7
|
|
8
|
+
import { FETCH_TABLE_DATA_KEY } from '../usePgTable';
|
7
9
|
import Table from './Table';
|
8
10
|
|
9
11
|
const useStyles = createStyles(({ token, css }) => ({
|
@@ -54,7 +56,13 @@ const DataTable = ({ tableName }: DataTableProps) => {
|
|
54
56
|
Filter
|
55
57
|
</Button>
|
56
58
|
<ActionIcon icon={Download} title={'Export'} />
|
57
|
-
<ActionIcon
|
59
|
+
<ActionIcon
|
60
|
+
icon={RefreshCw}
|
61
|
+
onClick={async () => {
|
62
|
+
await mutate(FETCH_TABLE_DATA_KEY(tableName));
|
63
|
+
}}
|
64
|
+
title={'Refresh'}
|
65
|
+
/>
|
58
66
|
</div>
|
59
67
|
</div>
|
60
68
|
|
@@ -3,15 +3,10 @@ import { createStyles } from 'antd-style';
|
|
3
3
|
import { ChevronDown, ChevronRight, Database, Table as TableIcon } from 'lucide-react';
|
4
4
|
import React, { useState } from 'react';
|
5
5
|
import { Flexbox } from 'react-layout-kit';
|
6
|
-
import useSWR from 'swr';
|
7
|
-
|
8
|
-
import { tableViewerService } from '@/services/tableViewer';
|
9
|
-
import { useGlobalStore } from '@/store/global';
|
10
|
-
import { systemStatusSelectors } from '@/store/global/selectors';
|
11
6
|
|
12
7
|
import TableColumns from './TableColumns';
|
8
|
+
import { useFetchTables } from './usePgTable';
|
13
9
|
|
14
|
-
// 样式定义
|
15
10
|
const useStyles = createStyles(({ token, css }) => ({
|
16
11
|
button: css`
|
17
12
|
cursor: pointer;
|
@@ -138,11 +133,7 @@ const SchemaPanel = ({ onTableSelect, selectedTable }: SchemaPanelProps) => {
|
|
138
133
|
const { styles, cx } = useStyles();
|
139
134
|
const [expandedTables, setExpandedTables] = useState(new Set());
|
140
135
|
|
141
|
-
const
|
142
|
-
|
143
|
-
const { data, isLoading } = useSWR(isDBInited ? 'fetch-tables' : null, () =>
|
144
|
-
tableViewerService.getAllTables(),
|
145
|
-
);
|
136
|
+
const { data, isLoading } = useFetchTables();
|
146
137
|
|
147
138
|
const toggleTable = (tableName: string) => {
|
148
139
|
const newExpanded = new Set(expandedTables);
|
@@ -3,7 +3,7 @@ import { createStyles } from 'antd-style';
|
|
3
3
|
import React from 'react';
|
4
4
|
import { Flexbox } from 'react-layout-kit';
|
5
5
|
|
6
|
-
import { useTableColumns } from './
|
6
|
+
import { useTableColumns } from './usePgTable';
|
7
7
|
|
8
8
|
const useStyles = createStyles(({ token, css }) => ({
|
9
9
|
container: css`
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import useSWR from 'swr';
|
2
|
+
|
3
|
+
import { tableViewerService } from '@/services/tableViewer';
|
4
|
+
import { useGlobalStore } from '@/store/global';
|
5
|
+
import { systemStatusSelectors } from '@/store/global/selectors';
|
6
|
+
|
7
|
+
const FETCH_TABLES = 'fetch-tables';
|
8
|
+
const FETCH_TABLE_COLUMN_KEY = (tableName: string) => ['fetch-table-columns', tableName];
|
9
|
+
export const FETCH_TABLE_DATA_KEY = (tableName: string) => ['fetch-table-data', tableName];
|
10
|
+
|
11
|
+
export const useFetchTables = () => {
|
12
|
+
const isDBInited = useGlobalStore(systemStatusSelectors.isDBInited);
|
13
|
+
|
14
|
+
return useSWR(isDBInited ? FETCH_TABLES : null, () => tableViewerService.getAllTables());
|
15
|
+
};
|
16
|
+
|
17
|
+
export const useTableColumns = (tableName?: string) => {
|
18
|
+
const isDBInited = useGlobalStore(systemStatusSelectors.isDBInited);
|
19
|
+
|
20
|
+
return useSWR(isDBInited && tableName ? FETCH_TABLE_COLUMN_KEY(tableName) : null, ([, table]) =>
|
21
|
+
tableViewerService.getTableDetails(table),
|
22
|
+
);
|
23
|
+
};
|
24
|
+
|
25
|
+
export const usePgTable = (tableName?: string) => {
|
26
|
+
const isDBInited = useGlobalStore(systemStatusSelectors.isDBInited);
|
27
|
+
|
28
|
+
return useSWR(isDBInited && tableName ? FETCH_TABLE_DATA_KEY(tableName) : null, ([, table]) =>
|
29
|
+
tableViewerService.getTableData(table),
|
30
|
+
);
|
31
|
+
};
|
@@ -25,7 +25,10 @@ export const genServerAiProvidersConfig = (specificConfig: Record<any, any>) =>
|
|
25
25
|
const defaultChatModels = providerCard.filter((c) => c.type === 'chat');
|
26
26
|
|
27
27
|
config[provider] = {
|
28
|
-
enabled:
|
28
|
+
enabled:
|
29
|
+
providerConfig.enabled ||
|
30
|
+
llmConfig[providerConfig.enabledKey || `ENABLED_${providerUpperCase}`],
|
31
|
+
|
29
32
|
enabledModels: extractEnabledModels(
|
30
33
|
providerModelList,
|
31
34
|
providerConfig.withDeploymentName || false,
|
package/src/services/chat.ts
CHANGED
@@ -294,9 +294,13 @@ class ChatService {
|
|
294
294
|
onFinish: options?.onFinish,
|
295
295
|
onMessageHandle: options?.onMessageHandle,
|
296
296
|
signal,
|
297
|
-
|
298
|
-
|
299
|
-
|
297
|
+
smoothing:
|
298
|
+
providerConfig?.settings?.smoothing ||
|
299
|
+
// @deprecated in V2
|
300
|
+
providerConfig?.smoothing ||
|
301
|
+
// use smoothing when enable client fetch
|
302
|
+
// https://github.com/lobehub/lobe-chat/issues/3800
|
303
|
+
enableFetchOnClient,
|
300
304
|
});
|
301
305
|
};
|
302
306
|
|
package/src/services/config.ts
CHANGED
package/src/types/aiProvider.ts
CHANGED
@@ -1,13 +0,0 @@
|
|
1
|
-
import useSWR from 'swr';
|
2
|
-
|
3
|
-
import { tableViewerService } from '@/services/tableViewer';
|
4
|
-
import { useGlobalStore } from '@/store/global';
|
5
|
-
import { systemStatusSelectors } from '@/store/global/selectors';
|
6
|
-
|
7
|
-
export const useTableColumns = (tableName?: string) => {
|
8
|
-
const isDBInited = useGlobalStore(systemStatusSelectors.isDBInited);
|
9
|
-
|
10
|
-
return useSWR(isDBInited && tableName ? ['fetch-table-columns', tableName] : null, ([, table]) =>
|
11
|
-
tableViewerService.getTableDetails(table),
|
12
|
-
);
|
13
|
-
};
|