mirror of
https://github.com/lobehub/lobehub
synced 2026-04-21 17:47:27 +00:00
🔨 chore: pre-merge some desktop relative code to check stable (#7294)
* pre some electron update code * update chat test * update i18n * update code * fix desktop hotkey display * fix test ahead
This commit is contained in:
parent
05a05be81e
commit
a63e1f0ab7
67 changed files with 437 additions and 65 deletions
7
.github/scripts/pr-comment.js
vendored
7
.github/scripts/pr-comment.js
vendored
|
|
@ -13,19 +13,20 @@ module.exports = async ({ github, context, releaseUrl, version, tag }) => {
|
|||
// Organize assets by platform
|
||||
const macAssets = release.data.assets.filter(
|
||||
(asset) =>
|
||||
asset.name.includes('.dmg') ||
|
||||
((asset.name.includes('.dmg') || asset.name.includes('.zip')) &&
|
||||
!asset.name.includes('.blockmap')) ||
|
||||
(asset.name.includes('latest-mac') && asset.name.endsWith('.yml')),
|
||||
);
|
||||
|
||||
const winAssets = release.data.assets.filter(
|
||||
(asset) =>
|
||||
asset.name.includes('.exe') ||
|
||||
(asset.name.includes('.exe') && !asset.name.includes('.blockmap')) ||
|
||||
(asset.name.includes('latest-win') && asset.name.endsWith('.yml')),
|
||||
);
|
||||
|
||||
const linuxAssets = release.data.assets.filter(
|
||||
(asset) =>
|
||||
asset.name.includes('.AppImage') ||
|
||||
(asset.name.includes('.AppImage') && !asset.name.includes('.blockmap')) ||
|
||||
(asset.name.includes('latest-linux') && asset.name.endsWith('.yml')),
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "عرض جميع تعليمات استخدام الاختصارات",
|
||||
"title": "فتح مساعدة الاختصارات"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "فتح صفحة إعدادات التطبيق",
|
||||
"title": "إعدادات التطبيق"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "إعادة توليد آخر رسالة",
|
||||
"title": "إعادة توليد الرسالة"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) يوفر قدرة أساسية على معالجة التعليمات، مناسب للتطبيقات الخفيفة."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "جيمّا 3 27B هو نموذج لغوي مفتوح المصدر من جوجل، وقد وضع معايير جديدة من حيث الكفاءة والأداء."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "نموذج GPT 3.5 Turbo، مناسب لمجموعة متنوعة من مهام توليد وفهم النصوص، يشير حاليًا إلى gpt-3.5-turbo-0125."
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "نموذج QVQ هو نموذج بحث تجريبي تم تطويره بواسطة فريق Qwen، يركز على تعزيز قدرات الاستدلال البصري، خاصة في مجال الاستدلال الرياضي."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "نموذج الاستدلال البصري QVQ، يدعم الإدخال البصري وإخراج سلسلة التفكير، وقد أظهر قدرات أقوى في الرياضيات، البرمجة، التحليل البصري، الإبداع، والمهام العامة."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "نموذج كود Qwen الشامل."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "Прегледайте инструкциите за използване на всички клавишни комбинации",
|
||||
"title": "Отворете помощта за клавишни комбинации"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "Отворете страницата с настройки на приложението",
|
||||
"title": "Настройки на приложението"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "Прегенерирайте последното съобщение",
|
||||
"title": "Прегенериране на съобщение"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) предлага основни способности за обработка на инструкции, подходящи за леки приложения."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B е отворен езиков модел на Google, който поставя нови стандарти за ефективност и производителност."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turbo, подходящ за различни задачи по генериране и разбиране на текст, в момента сочи към gpt-3.5-turbo-0125."
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "QVQ моделът е експериментален изследователски модел, разработен от екипа на Qwen, фокусиран върху повишаване на визуалните способности за разсъждение, особено в областта на математическото разсъждение."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "Моделът за визуално разсъждение QVQ на Tongyi Qianwen поддържа визуален вход и изход на мисловни вериги, демонстрирайки по-силни способности в математика, програмиране, визуален анализ, творчество и общи задачи."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "Модел за кодиране Qwen с общо предназначение."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "Anleitung zur Verwendung aller Tastenkombinationen anzeigen",
|
||||
"title": "Tastenkombinationshilfe öffnen"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "Öffnen Sie die Anwendungseinstellungen",
|
||||
"title": "Anwendungseinstellungen"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "Die letzte Nachricht neu generieren",
|
||||
"title": "Nachricht neu generieren"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) bietet grundlegende Anweisungsverarbeitungsfähigkeiten und eignet sich für leichte Anwendungen."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B ist ein Open-Source-Sprachmodell von Google, das neue Maßstäbe in Bezug auf Effizienz und Leistung setzt."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turbo eignet sich für eine Vielzahl von Textgenerierungs- und Verständnisaufgaben. Derzeit verweist es auf gpt-3.5-turbo-0125."
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "Das QVQ-Modell ist ein experimentelles Forschungsmodell, das vom Qwen-Team entwickelt wurde und sich auf die Verbesserung der visuellen Schlussfolgerungsfähigkeiten konzentriert, insbesondere im Bereich der mathematischen Schlussfolgerungen."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "Das QVQ-Vision-Reasoning-Modell von Tongyi Qianwen unterstützt visuelle Eingaben und Denkketten-Ausgaben und zeigt in Mathematik, Programmierung, visueller Analyse, Kreativität und allgemeinen Aufgaben eine stärkere Leistungsfähigkeit."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "Tongyi Qianwen Code-Modell."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "View instructions for all keyboard shortcuts",
|
||||
"title": "Open Hotkey Help"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "Open the application settings page",
|
||||
"title": "Application Settings"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "Regenerate the last message",
|
||||
"title": "Regenerate Message"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) provides basic instruction processing capabilities, suitable for lightweight applications."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B is an open-source language model from Google that sets new standards in efficiency and performance."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turbo is suitable for various text generation and understanding tasks. Currently points to gpt-3.5-turbo-0125."
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "The QVQ model is an experimental research model developed by the Qwen team, focusing on enhancing visual reasoning capabilities, particularly in the field of mathematical reasoning."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "The Tongyi Qianwen QVQ visual reasoning model supports visual input and chain-of-thought output, demonstrating enhanced capabilities in mathematics, programming, visual analysis, creative tasks, and general tasks."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "Tongyi Qianwen code model."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "Ver las instrucciones de uso de todos los atajos de teclado",
|
||||
"title": "Abrir ayuda de atajos de teclado"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "Abrir la página de configuración de la aplicación",
|
||||
"title": "Configuración de la aplicación"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "Regenerar el último mensaje",
|
||||
"title": "Regenerar mensaje"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) ofrece capacidades básicas de procesamiento de instrucciones, adecuado para aplicaciones ligeras."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B es un modelo de lenguaje de código abierto de Google, que establece nuevos estándares en eficiencia y rendimiento."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turbo, adecuado para diversas tareas de generación y comprensión de texto, actualmente apunta a gpt-3.5-turbo-0125."
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "El modelo QVQ es un modelo de investigación experimental desarrollado por el equipo de Qwen, enfocado en mejorar la capacidad de razonamiento visual, especialmente en el ámbito del razonamiento matemático."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "El modelo de razonamiento visual QVQ de Tongyi Qianwen admite entradas visuales y salidas de cadena de pensamiento, mostrando una mayor capacidad en matemáticas, programación, análisis visual, creación y tareas generales."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "Modelo de código Qwen de Tongyi."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "مشاهده تمام توضیحات استفاده از کلیدهای میانبر",
|
||||
"title": "باز کردن راهنمای کلیدهای میانبر"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "صفحه تنظیمات برنامه را باز کنید",
|
||||
"title": "تنظیمات برنامه"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "آخرین پیام را دوباره تولید کنید",
|
||||
"title": "تولید مجدد پیام"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) توانایی پردازش دستورات پایه را فراهم میکند و برای برنامههای سبک مناسب است."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B یک مدل زبان متن باز از گوگل است که استانداردهای جدیدی را در زمینه کارایی و عملکرد تعیین کرده است."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 توربو، مناسب برای انواع وظایف تولید و درک متن، در حال حاضر به gpt-3.5-turbo-0125 اشاره میکند"
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "مدل QVQ یک مدل تحقیقاتی تجربی است که توسط تیم Qwen توسعه یافته و بر بهبود توانایی استدلال بصری، بهویژه در زمینه استدلال ریاضی تمرکز دارد."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "مدل استدلال بصری QVQ با قابلیت ورودی بصری و خروجی زنجیره تفکر، در ریاضیات، برنامهنویسی، تحلیل بصری، خلاقیت و وظایف عمومی عملکرد بهتری از خود نشان داده است."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "مدل کد Qwen با قابلیتهای جامع."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "Voir les instructions d'utilisation de tous les raccourcis",
|
||||
"title": "Ouvrir l'aide des raccourcis"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "Ouvrir la page des paramètres de l'application",
|
||||
"title": "Paramètres de l'application"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "Régénérer le dernier message",
|
||||
"title": "Régénérer le message"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) offre des capacités de traitement d'instructions de base, adapté aux applications légères."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B est un modèle de langage open source de Google, qui a établi de nouvelles normes en matière d'efficacité et de performance."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turbo, adapté à diverses tâches de génération et de compréhension de texte, pointe actuellement vers gpt-3.5-turbo-0125."
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "Le modèle QVQ est un modèle de recherche expérimental développé par l'équipe Qwen, axé sur l'amélioration des capacités de raisonnement visuel, en particulier dans le domaine du raisonnement mathématique."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "Le modèle de raisonnement visuel QVQ de Tongyi Qianwen prend en charge les entrées visuelles et les sorties de chaînes de pensée, montrant de meilleures capacités dans les domaines des mathématiques, de la programmation, de l'analyse visuelle, de la création et des tâches générales."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "Modèle de code Qwen universel."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "Visualizza le istruzioni per l'uso di tutte le scorciatoie da tastiera",
|
||||
"title": "Apri aiuto scorciatoie"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "Apri la pagina delle impostazioni dell'app",
|
||||
"title": "Impostazioni dell'app"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "Rigenera l'ultimo messaggio",
|
||||
"title": "Rigenera messaggio"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) offre capacità di elaborazione di istruzioni di base, adatta per applicazioni leggere."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B è un modello linguistico open source di Google, che ha stabilito nuovi standard in termini di efficienza e prestazioni."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turbo, adatto a una varietà di compiti di generazione e comprensione del testo, attualmente punta a gpt-3.5-turbo-0125."
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "Il modello QVQ è un modello di ricerca sperimentale sviluppato dal team Qwen, focalizzato sul miglioramento delle capacità di ragionamento visivo, in particolare nel campo del ragionamento matematico."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "Il modello di ragionamento visivo QVQ di Tongyi Qianwen supporta input visivi e output di catene di pensiero, dimostrando capacità superiori in matematica, programmazione, analisi visiva, creazione e compiti generali."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "Modello di codice Qwen di Tongyi."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "すべてのショートカットキーの使用説明を表示する",
|
||||
"title": "ショートカットヘルプを開く"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "アプリの設定ページを開く",
|
||||
"title": "アプリ設定"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "最後のメッセージを再生成します",
|
||||
"title": "メッセージを再生成"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B)は、基本的な指示処理能力を提供し、軽量アプリケーションに適しています。"
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27Bは、Googleのオープンソース言語モデルで、効率と性能の面で新たな基準を打ち立てました。"
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turboは、さまざまなテキスト生成と理解タスクに適しており、現在はgpt-3.5-turbo-0125を指しています。"
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "QVQモデルはQwenチームによって開発された実験的研究モデルで、視覚推論能力の向上に特化しており、特に数学推論の分野で優れた性能を発揮。"
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "通義千問QVQ視覚推論モデルは、視覚入力と思考連鎖出力をサポートし、数学、プログラミング、視覚分析、創作、一般的なタスクにおいてより強力な能力を発揮します。"
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "通義千問コードモデル。"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "모든 단축키 사용 설명을 확인합니다.",
|
||||
"title": "단축키 도움말 열기"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "앱 설정 페이지 열기",
|
||||
"title": "앱 설정"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "마지막 메시지를 다시 생성합니다",
|
||||
"title": "메시지 다시 생성"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B)는 기본적인 지시 처리 능력을 제공하며, 경량 애플리케이션에 적합합니다."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B는 구글의 오픈 소스 언어 모델로, 효율성과 성능 면에서 새로운 기준을 세웠습니다."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turbo는 다양한 텍스트 생성 및 이해 작업에 적합하며, 현재 gpt-3.5-turbo-0125를 가리킵니다."
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "QVQ 모델은 Qwen 팀이 개발한 실험적 연구 모델로, 시각적 추론 능력 향상에 중점을 두고 있으며, 특히 수학적 추론 분야에서 두드러진 성과를 보입니다."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "통의천문 QVQ 비주얼 추론 모델로, 비주얼 입력과 사고 체인 출력을 지원하며, 수학, 프로그래밍, 비주얼 분석, 창작 및 일반 작업에서 더 강력한 능력을 보여줍니다."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "통의 천문 코드 모델입니다."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "Bekijk de gebruiksaanwijzing voor alle sneltoetsen",
|
||||
"title": "Open sneltoets hulp"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "Open de applicatie-instellingenpagina",
|
||||
"title": "Applicatie-instellingen"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "Genereer het laatste bericht opnieuw",
|
||||
"title": "Genereer bericht opnieuw"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) biedt basis instructieverwerkingscapaciteiten, geschikt voor lichte toepassingen."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B is een open-source taalmodel van Google dat nieuwe normen heeft gesteld op het gebied van efficiëntie en prestaties."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turbo, geschikt voor verschillende tekstgeneratie- en begrijptaken, wijst momenteel naar gpt-3.5-turbo-0125."
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "Het QVQ-model is een experimenteel onderzoeksmodel ontwikkeld door het Qwen-team, gericht op het verbeteren van visuele redeneervaardigheden, vooral in het domein van wiskundige redenering."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "De QVQ visuele redeneermodel van Tongyi Qianwen ondersteunt visuele invoer en output van denkprocessen, en heeft betere prestaties getoond in wiskunde, programmeren, visuele analyse, creatie en algemene taken."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "Tongyi Qianwen code model."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "Zobacz wszystkie instrukcje dotyczące skrótów klawiszowych",
|
||||
"title": "Otwórz pomoc dotyczącą skrótów klawiszowych"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "Otwórz stronę ustawień aplikacji",
|
||||
"title": "Ustawienia aplikacji"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "Ponownie wygeneruj ostatnią wiadomość",
|
||||
"title": "Ponownie wygeneruj wiadomość"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) oferuje podstawowe możliwości przetwarzania poleceń, idealne do lekkich aplikacji."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B to otwarty model językowy stworzony przez Google, który ustanowił nowe standardy w zakresie wydajności i efektywności."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turbo, odpowiedni do różnych zadań generowania i rozumienia tekstu, obecnie wskazuje na gpt-3.5-turbo-0125."
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "Model QVQ jest eksperymentalnym modelem badawczym opracowanym przez zespół Qwen, skoncentrowanym na zwiększeniu zdolności w zakresie rozumowania wizualnego, szczególnie w dziedzinie rozumowania matematycznego."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "Model wnioskowania wizualnego QVQ, wspierający wejścia wizualne oraz wyjścia w postaci łańcucha myślowego, wykazuje silniejsze zdolności w matematyce, programowaniu, analizie wizualnej, twórczości oraz w zadaniach ogólnych."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "Model kodowania Qwen, oparty na ogólnym zrozumieniu."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "Ver as instruções de uso de todos os atalhos",
|
||||
"title": "Abrir ajuda de atalhos"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "Abra a página de configurações do aplicativo",
|
||||
"title": "Configurações do Aplicativo"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "Regenerar a última mensagem",
|
||||
"title": "Regenerar mensagem"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) oferece capacidade básica de processamento de instruções, adequada para aplicações leves."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B é um modelo de linguagem de código aberto do Google, que estabelece novos padrões em eficiência e desempenho."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "O GPT 3.5 Turbo é adequado para uma variedade de tarefas de geração e compreensão de texto, atualmente apontando para gpt-3.5-turbo-0125."
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "O modelo QVQ é um modelo de pesquisa experimental desenvolvido pela equipe Qwen, focado em melhorar a capacidade de raciocínio visual, especialmente na área de raciocínio matemático."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "O modelo de raciocínio visual QVQ, da Tongyi Qianwen, suporta entrada visual e saída de cadeia de pensamento, demonstrando habilidades superiores em matemática, programação, análise visual, criação e tarefas gerais."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "Modelo de código Qwen."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "Просмотреть инструкции по использованию всех горячих клавиш",
|
||||
"title": "Открыть справку по горячим клавишам"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "Открыть страницу настроек приложения",
|
||||
"title": "Настройки приложения"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "Сгенерировать последнее сообщение заново",
|
||||
"title": "Перегенерировать сообщение"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) предлагает базовые возможности обработки команд, подходящие для легковесных приложений."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B — это открытая языковая модель от Google, которая установила новые стандарты в области эффективности и производительности."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turbo подходит для различных задач генерации и понимания текста, в настоящее время ссылается на gpt-3.5-turbo-0125."
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "Модель QVQ, разработанная командой Qwen, является экспериментальной исследовательской моделью, сосредоточенной на повышении визуальных способностей рассуждения, особенно в области математического рассуждения."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "Модель визуального вывода QVQ от Tongyi Qianwen поддерживает визуальный ввод и вывод цепочек мышления, демонстрируя более высокие способности в математике, программировании, визуальном анализе, творчестве и общих задачах."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "Модель кода Tongyi Qianwen."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "Tüm kısayol tuşlarının kullanım talimatlarını görüntüle",
|
||||
"title": "Kısayol Yardımını Aç"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "Uygulama ayarları sayfasını aç",
|
||||
"title": "Uygulama Ayarları"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "Son mesajı yeniden oluştur",
|
||||
"title": "Mesajı yeniden oluştur"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B), temel talimat işleme yetenekleri sunar ve hafif uygulamalar için uygundur."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B, Google'ın verimlilik ve performans açısından yeni standartlar belirleyen açık kaynaklı bir dil modelidir."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turbo, çeşitli metin üretimi ve anlama görevleri için uygundur, şu anda gpt-3.5-turbo-0125'e işaret ediyor."
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "QVQ modeli, Qwen ekibi tarafından geliştirilen deneysel bir araştırma modelidir; görsel akıl yürütme yeteneğini artırmaya odaklanır, özellikle matematik akıl yürütme alanında."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "Tongyi Qianwen QVQ görsel akıl yürütme modeli, görsel girdi ve düşünce zinciri çıktısını destekler; matematik, programlama, görsel analiz, yaratıcılık ve genel görevlerde daha güçlü yetenekler sergilemektedir."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "Tongyi Qianwen kod modeli."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "Xem hướng dẫn sử dụng tất cả các phím tắt",
|
||||
"title": "Mở trợ giúp phím tắt"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "Mở trang cài đặt ứng dụng",
|
||||
"title": "Cài đặt ứng dụng"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "Tạo lại tin nhắn cuối cùng",
|
||||
"title": "Tạo lại tin nhắn"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) cung cấp khả năng xử lý chỉ dẫn cơ bản, phù hợp cho các ứng dụng nhẹ."
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B là một mô hình ngôn ngữ mã nguồn mở của Google, thiết lập tiêu chuẩn mới về hiệu suất và hiệu quả."
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turbo, phù hợp cho nhiều nhiệm vụ sinh và hiểu văn bản, hiện tại trỏ đến gpt-3.5-turbo-0125."
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "Mô hình QVQ là mô hình nghiên cứu thử nghiệm do đội ngũ Qwen phát triển, tập trung vào việc nâng cao khả năng suy luận hình ảnh, đặc biệt trong lĩnh vực suy luận toán học."
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "Mô hình suy luận thị giác QVQ của Tongyi Qianwen, hỗ trợ đầu vào thị giác và đầu ra chuỗi tư duy, thể hiện khả năng mạnh mẽ hơn trong toán học, lập trình, phân tích thị giác, sáng tạo và các nhiệm vụ chung."
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "Mô hình mã Qwen."
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "查看所有快捷键的使用说明",
|
||||
"title": "打开快捷键帮助"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "打开应用设置页面",
|
||||
"title": "应用设置"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "重新生成最后一条消息",
|
||||
"title": "重新生成消息"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) 提供基本的指令处理能力,适合轻量级应用。"
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B 是谷歌的一款开源语言模型,以其在效率和性能方面设立了新的标准。"
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turbo,适用于各种文本生成和理解任务,Currently points to gpt-3.5-turbo-0125"
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "QVQ-72B-Preview 是由 Qwen 团队开发的实验性研究模型,专注于提升视觉推理能力。"
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "通义千问QVQ视觉推理模型,支持视觉输入及思维链输出,在数学、编程、视觉分析、创作以及通用任务上都表现了更强的能力。"
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "通义千问代码模型。"
|
||||
},
|
||||
|
|
@ -1722,7 +1728,7 @@
|
|||
"description": "Qwen-Omni 系列模型支持输入多种模态的数据,包括视频、音频、图片、文本,并输出音频与文本。"
|
||||
},
|
||||
"qwen2.5-vl-32b-instruct": {
|
||||
"description": "Qwen2.5-VL 系列模型提升了模型的智能水平、实用性和适用性,使其在自然对话、内容创作、专业知识服务及代码开发等场景中表现更优。32B 版本使用了强化学习技术优化模型,与 Qwen2.5 VL 系列的其它模型相比,提供了更符合人类偏好的输出风格、复杂数学问题的推理能力,以及图像细粒度理解与推理能力。"
|
||||
"description": "Qwen2.5VL系列模型,在math和学科问题解答达到了接近Qwen2.5VL-72B的水平,回复风格面向人类偏好进行大幅调整,尤其是数学、逻辑推理、知识问答等客观类query,模型回复详实程度和格式清晰度明显改善。此版本为32B版本。"
|
||||
},
|
||||
"qwen2.5-vl-72b-instruct": {
|
||||
"description": "指令跟随、数学、解题、代码整体提升,万物识别能力提升,支持多样格式直接精准定位视觉元素,支持对长视频文件(最长10分钟)进行理解和秒级别的事件时刻定位,能理解时间先后和快慢,基于解析和定位能力支持操控OS或Mobile的Agent,关键信息抽取能力和Json格式输出能力强,此版本为72B版本,本系列能力最强的版本。"
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
"desc": "查看所有快捷鍵的使用說明",
|
||||
"title": "打開快捷鍵幫助"
|
||||
},
|
||||
"openSettings": {
|
||||
"desc": "打開應用設定頁面",
|
||||
"title": "應用設定"
|
||||
},
|
||||
"regenerateMessage": {
|
||||
"desc": "重新生成最後一條消息",
|
||||
"title": "重新生成消息"
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@
|
|||
"google/gemma-2b-it": {
|
||||
"description": "Gemma Instruct (2B) 提供基本的指令處理能力,適合輕量級應用。"
|
||||
},
|
||||
"google/gemma-3-27b-it": {
|
||||
"description": "Gemma 3 27B 是谷歌的一款開源語言模型,以其在效率和性能方面設立了新的標準。"
|
||||
},
|
||||
"gpt-3.5-turbo": {
|
||||
"description": "GPT 3.5 Turbo,適用於各種文本生成和理解任務,Currently points to gpt-3.5-turbo-0125"
|
||||
},
|
||||
|
|
@ -1592,6 +1595,9 @@
|
|||
"qvq-72b-preview": {
|
||||
"description": "QVQ模型是由 Qwen 團隊開發的實驗性研究模型,專注於提升視覺推理能力,尤其在數學推理領域。"
|
||||
},
|
||||
"qvq-max-latest": {
|
||||
"description": "通義千問QVQ視覺推理模型,支持視覺輸入及思維鏈輸出,在數學、程式設計、視覺分析、創作以及通用任務上都表現了更強的能力。"
|
||||
},
|
||||
"qwen-coder-plus-latest": {
|
||||
"description": "通義千問代碼模型。"
|
||||
},
|
||||
|
|
|
|||
29
packages/electron-client-ipc/src/dispatch.ts
Normal file
29
packages/electron-client-ipc/src/dispatch.ts
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
import { DispatchInvoke } from './types';
|
||||
|
||||
interface IElectronAPI {
|
||||
invoke: DispatchInvoke;
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
electronAPI: IElectronAPI;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* client 端请求 sketch 端 event 数据的方法
|
||||
*/
|
||||
export const dispatch: DispatchInvoke = async (event, ...data) => {
|
||||
if (!window.electronAPI || !window.electronAPI.invoke)
|
||||
throw new Error(`electronAPI.invoke not found. Please expose \`ipcRenderer.invoke\` to \`window.electronAPI.invoke\` in the preload:
|
||||
|
||||
import { contextBridge, ipcRenderer } from 'electron';
|
||||
|
||||
const invoke = async (event, ...data) =>
|
||||
ipcRenderer.invoke(event, ...data);
|
||||
|
||||
contextBridge.exposeInMainWorld('electronAPI', { invoke });
|
||||
`);
|
||||
|
||||
return window.electronAPI.invoke(event, ...data);
|
||||
};
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
export interface DevtoolsDispatchEvents {
|
||||
/**
|
||||
* open the LobeHub Devtools
|
||||
*/
|
||||
openDevtools: () => void;
|
||||
}
|
||||
|
|
@ -1,10 +1,17 @@
|
|||
import { DevtoolsDispatchEvents } from './devtools';
|
||||
import { MenuDispatchEvents } from './menu';
|
||||
import { FilesSearchDispatchEvents } from './search';
|
||||
import { SystemDispatchEvents } from './system';
|
||||
import { WindowsDispatchEvents } from './windows';
|
||||
|
||||
/**
|
||||
* renderer -> main dispatch events
|
||||
*/
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
||||
export interface ClientDispatchEvents extends DevtoolsDispatchEvents {}
|
||||
export interface ClientDispatchEvents
|
||||
extends WindowsDispatchEvents,
|
||||
FilesSearchDispatchEvents,
|
||||
SystemDispatchEvents,
|
||||
MenuDispatchEvents {}
|
||||
|
||||
export type ClientDispatchEventKey = keyof ClientDispatchEvents;
|
||||
|
||||
|
|
|
|||
5
packages/electron-client-ipc/src/events/menu.ts
Normal file
5
packages/electron-client-ipc/src/events/menu.ts
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
export interface MenuDispatchEvents {
|
||||
refreshAppMenu: () => { success: boolean };
|
||||
setDevMenuVisibility: (visible: boolean) => { success: boolean };
|
||||
showContextMenu: (type: string, data?: any) => { success: boolean };
|
||||
}
|
||||
4
packages/electron-client-ipc/src/events/search.ts
Normal file
4
packages/electron-client-ipc/src/events/search.ts
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
export interface FilesSearchDispatchEvents {
|
||||
readFiles: (paths: string[]) => any[];
|
||||
searchFiles: (query: string) => void;
|
||||
}
|
||||
3
packages/electron-client-ipc/src/events/system.ts
Normal file
3
packages/electron-client-ipc/src/events/system.ts
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
export interface SystemDispatchEvents {
|
||||
checkSystemAccessibility: () => boolean | undefined;
|
||||
}
|
||||
8
packages/electron-client-ipc/src/events/windows.ts
Normal file
8
packages/electron-client-ipc/src/events/windows.ts
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
export interface WindowsDispatchEvents {
|
||||
/**
|
||||
* open the LobeHub Devtools
|
||||
*/
|
||||
openDevtools: () => void;
|
||||
|
||||
openSettingsWindow: (tab?: string) => void;
|
||||
}
|
||||
|
|
@ -1,2 +1,3 @@
|
|||
export * from './dispatch';
|
||||
export * from './events';
|
||||
export * from './types';
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ vi.mock('@/features/User/UserLoginOrSignup/Community', () => ({
|
|||
|
||||
vi.mock('@/const/version', () => ({
|
||||
isDeprecatedEdition: false,
|
||||
isDesktop: false,
|
||||
}));
|
||||
|
||||
// 定义一个变量来存储 enableAuth 的值
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import { Compass, FolderClosed, MessageSquare } from 'lucide-react';
|
|||
import Link from 'next/link';
|
||||
import { memo } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Flexbox } from 'react-layout-kit';
|
||||
|
||||
import { useGlobalStore } from '@/store/global';
|
||||
import { SidebarTabKey } from '@/store/global/initialState';
|
||||
|
|
@ -20,7 +21,7 @@ const TopActions = memo<TopActionProps>(({ tab, isPinned }) => {
|
|||
const { showMarket, enableKnowledgeBase } = useServerConfigStore(featureFlagsSelectors);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Flexbox gap={8}>
|
||||
<Link
|
||||
aria-label={t('tab.chat')}
|
||||
href={'/chat'}
|
||||
|
|
@ -59,7 +60,7 @@ const TopActions = memo<TopActionProps>(({ tab, isPinned }) => {
|
|||
/>
|
||||
</Link>
|
||||
)}
|
||||
</>
|
||||
</Flexbox>
|
||||
);
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -4,10 +4,12 @@ import { SideNav } from '@lobehub/ui';
|
|||
import { parseAsBoolean, useQueryState } from 'nuqs';
|
||||
import { Suspense, memo } from 'react';
|
||||
|
||||
import { isDesktop } from '@/const/version';
|
||||
import { useActiveTabKey } from '@/hooks/useActiveTabKey';
|
||||
import { useGlobalStore } from '@/store/global';
|
||||
import { systemStatusSelectors } from '@/store/global/selectors';
|
||||
import { featureFlagsSelectors, useServerConfigStore } from '@/store/serverConfig';
|
||||
import { electronStylish } from '@/styles/electron';
|
||||
|
||||
import Avatar from './Avatar';
|
||||
import BottomActions from './BottomActions';
|
||||
|
|
@ -28,13 +30,30 @@ const Nav = memo(() => {
|
|||
return (
|
||||
!inZenMode && (
|
||||
<SideNav
|
||||
avatar={<Avatar />}
|
||||
bottomActions={<BottomActions />}
|
||||
style={{ height: '100%', zIndex: 100 }}
|
||||
avatar={
|
||||
<div className={electronStylish.nodrag}>
|
||||
<Avatar />
|
||||
</div>
|
||||
}
|
||||
bottomActions={
|
||||
<div className={electronStylish.nodrag}>
|
||||
<BottomActions />
|
||||
</div>
|
||||
}
|
||||
className={electronStylish.draggable}
|
||||
style={{
|
||||
height: '100%',
|
||||
zIndex: 100,
|
||||
...(isDesktop
|
||||
? { background: 'transparent', borderInlineEnd: 0, paddingBlockStart: 8 }
|
||||
: {}),
|
||||
}}
|
||||
topActions={
|
||||
<Suspense>
|
||||
<Top />
|
||||
{showPinList && <PinList />}
|
||||
<div className={electronStylish.nodrag}>
|
||||
<Top />
|
||||
{showPinList && <PinList />}
|
||||
</div>
|
||||
</Suspense>
|
||||
}
|
||||
/>
|
||||
|
|
|
|||
27
src/app/[variants]/(main)/_layout/Desktop/Titlebar.tsx
Normal file
27
src/app/[variants]/(main)/_layout/Desktop/Titlebar.tsx
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
import { memo } from 'react';
|
||||
import { Flexbox } from 'react-layout-kit';
|
||||
|
||||
import { electronStylish } from '@/styles/electron';
|
||||
|
||||
export const TITLE_BAR_HEIGHT = 36;
|
||||
|
||||
const TitleBar = memo(() => {
|
||||
return (
|
||||
<Flexbox
|
||||
align={'center'}
|
||||
className={electronStylish.draggable}
|
||||
height={TITLE_BAR_HEIGHT}
|
||||
horizontal
|
||||
justify={'space-between'}
|
||||
paddingInline={12}
|
||||
style={{ minHeight: TITLE_BAR_HEIGHT }}
|
||||
width={'100%'}
|
||||
>
|
||||
<div />
|
||||
<div>{/* TODO */}</div>
|
||||
<div>{/* TODO */}</div>
|
||||
</Flexbox>
|
||||
);
|
||||
});
|
||||
|
||||
export default TitleBar;
|
||||
|
|
@ -2,10 +2,12 @@
|
|||
|
||||
import { useTheme } from 'antd-style';
|
||||
import dynamic from 'next/dynamic';
|
||||
import { usePathname } from 'next/navigation';
|
||||
import { PropsWithChildren, Suspense, memo } from 'react';
|
||||
import { HotkeysProvider } from 'react-hotkeys-hook';
|
||||
import { Flexbox } from 'react-layout-kit';
|
||||
|
||||
import { isDesktop } from '@/const/version';
|
||||
import { BANNER_HEIGHT } from '@/features/AlertBanner/CloudBanner';
|
||||
import HotkeyHelperPanel from '@/features/HotkeyHelperPanel';
|
||||
import { usePlatform } from '@/hooks/usePlatform';
|
||||
|
|
@ -14,19 +16,31 @@ import { HotkeyScopeEnum } from '@/types/hotkey';
|
|||
|
||||
import RegisterHotkeys from './RegisterHotkeys';
|
||||
import SideBar from './SideBar';
|
||||
import TitleBar, { TITLE_BAR_HEIGHT } from './Titlebar';
|
||||
|
||||
const CloudBanner = dynamic(() => import('@/features/AlertBanner/CloudBanner'));
|
||||
|
||||
const Layout = memo<PropsWithChildren>(({ children }) => {
|
||||
const { isPWA } = usePlatform();
|
||||
const theme = useTheme();
|
||||
|
||||
const pathname = usePathname();
|
||||
const { showCloudPromotion } = useServerConfigStore(featureFlagsSelectors);
|
||||
|
||||
// setting page not show sidebar
|
||||
const hideSideBar = isDesktop && pathname.startsWith('/settings');
|
||||
return (
|
||||
<HotkeysProvider initiallyActiveScopes={[HotkeyScopeEnum.Global]}>
|
||||
{isDesktop && <TitleBar />}
|
||||
{showCloudPromotion && <CloudBanner />}
|
||||
<Flexbox
|
||||
height={showCloudPromotion ? `calc(100% - ${BANNER_HEIGHT}px)` : '100%'}
|
||||
height={
|
||||
isDesktop
|
||||
? `calc(100% - ${TITLE_BAR_HEIGHT}px)`
|
||||
: showCloudPromotion
|
||||
? `calc(100% - ${BANNER_HEIGHT}px)`
|
||||
: '100%'
|
||||
}
|
||||
horizontal
|
||||
style={{
|
||||
borderTop: isPWA ? `1px solid ${theme.colorBorder}` : undefined,
|
||||
|
|
@ -34,8 +48,23 @@ const Layout = memo<PropsWithChildren>(({ children }) => {
|
|||
}}
|
||||
width={'100%'}
|
||||
>
|
||||
<SideBar />
|
||||
{children}
|
||||
{!hideSideBar && <SideBar />}
|
||||
{isDesktop ? (
|
||||
<Flexbox
|
||||
style={{
|
||||
background: theme.colorBgLayout,
|
||||
borderInlineStart: `1px solid ${theme.colorBorderSecondary}`,
|
||||
borderStartStartRadius: !hideSideBar ? 12 : undefined,
|
||||
borderTop: `1px solid ${theme.colorBorderSecondary}`,
|
||||
overflow: 'hidden',
|
||||
}}
|
||||
width={'100%'}
|
||||
>
|
||||
{children}
|
||||
</Flexbox>
|
||||
) : (
|
||||
children
|
||||
)}
|
||||
</Flexbox>
|
||||
<HotkeyHelperPanel />
|
||||
<Suspense>
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import { ChatHeader } from '@lobehub/ui/chat';
|
|||
|
||||
import { useGlobalStore } from '@/store/global';
|
||||
import { systemStatusSelectors } from '@/store/global/selectors';
|
||||
import { electronStylish } from '@/styles/electron';
|
||||
|
||||
import HeaderAction from './HeaderAction';
|
||||
import Main from './Main';
|
||||
|
|
@ -14,8 +15,17 @@ const Header = () => {
|
|||
return (
|
||||
showHeader && (
|
||||
<ChatHeader
|
||||
left={<Main />}
|
||||
right={<HeaderAction />}
|
||||
className={electronStylish.draggable}
|
||||
left={
|
||||
<div className={electronStylish.nodrag}>
|
||||
<Main />
|
||||
</div>
|
||||
}
|
||||
right={
|
||||
<div className={electronStylish.nodrag}>
|
||||
<HeaderAction />
|
||||
</div>
|
||||
}
|
||||
style={{ height: 48, minHeight: 48, paddingInline: 8, position: 'initial', zIndex: 11 }}
|
||||
/>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import { Suspense } from 'react';
|
|||
import StructuredData from '@/components/StructuredData';
|
||||
import { serverFeatureFlags } from '@/config/featureFlags';
|
||||
import { BRANDING_NAME } from '@/const/branding';
|
||||
import { isDesktop } from '@/const/version';
|
||||
import { ldModule } from '@/server/ld';
|
||||
import { metadataModule } from '@/server/metadata';
|
||||
import { translation } from '@/server/translation';
|
||||
|
|
@ -38,7 +39,7 @@ const Page = async (props: DynamicLayoutProps) => {
|
|||
<StructuredData ld={ld} />
|
||||
<PageTitle />
|
||||
<TelemetryNotification mobile={isMobile} />
|
||||
{showChangelog && !hideDocs && !isMobile && (
|
||||
{!isDesktop && showChangelog && !hideDocs && !isMobile && (
|
||||
<Suspense>
|
||||
<Changelog />
|
||||
</Suspense>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,19 @@ import { useTranslation } from 'react-i18next';
|
|||
|
||||
import { HOTKEYS_REGISTRATION } from '@/const/hotkeys';
|
||||
import { FORM_STYLE } from '@/const/layoutTokens';
|
||||
import { isDesktop } from '@/const/version';
|
||||
import hotkeyMeta from '@/locales/default/hotkey';
|
||||
import { useUserStore } from '@/store/user';
|
||||
import { settingsSelectors } from '@/store/user/selectors';
|
||||
import { HotkeyGroupEnum, HotkeyItem } from '@/types/hotkey';
|
||||
|
||||
const filterByDesktop = (item: HotkeyItem) => {
|
||||
if (isDesktop) return true;
|
||||
|
||||
// is not desktop, filter out desktop only items
|
||||
if (!isDesktop) return !item.isDesktop;
|
||||
};
|
||||
|
||||
type SettingItemGroup = ItemGroup;
|
||||
|
||||
const HOTKEY_SETTING_KEY = 'hotkey';
|
||||
|
|
@ -30,6 +38,7 @@ const HotkeySetting = memo(() => {
|
|||
return value;
|
||||
})
|
||||
.filter(Boolean) as string[];
|
||||
|
||||
return {
|
||||
children: (
|
||||
<HotkeyInput
|
||||
|
|
@ -51,16 +60,16 @@ const HotkeySetting = memo(() => {
|
|||
};
|
||||
|
||||
const essential: SettingItemGroup = {
|
||||
children: HOTKEYS_REGISTRATION.filter((item) => item.group === HotkeyGroupEnum.Essential).map(
|
||||
(item) => mapHotkeyItem(item),
|
||||
),
|
||||
children: HOTKEYS_REGISTRATION.filter((item) => item.group === HotkeyGroupEnum.Essential)
|
||||
.filter((item) => filterByDesktop(item))
|
||||
.map((item) => mapHotkeyItem(item)),
|
||||
title: t('hotkey.group.essential'),
|
||||
};
|
||||
|
||||
const conversation: SettingItemGroup = {
|
||||
children: HOTKEYS_REGISTRATION.filter(
|
||||
(item) => item.group === HotkeyGroupEnum.Conversation,
|
||||
).map((item) => mapHotkeyItem(item)),
|
||||
children: HOTKEYS_REGISTRATION.filter((item) => item.group === HotkeyGroupEnum.Conversation)
|
||||
.filter((item) => filterByDesktop(item))
|
||||
.map((item) => mapHotkeyItem(item)),
|
||||
title: t('hotkey.group.conversation'),
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
import HotkeySetting from './features/HotkeySetting';
|
||||
|
||||
const Page = () => {
|
||||
return <HotkeySetting />;
|
||||
};
|
||||
|
||||
Page.displayName = 'HotkeySetting';
|
||||
|
||||
export default Page;
|
||||
|
|
@ -3,6 +3,8 @@ import { translation } from '@/server/translation';
|
|||
import { DynamicLayoutProps } from '@/types/next';
|
||||
import { RouteVariants } from '@/utils/server/routeVariants';
|
||||
|
||||
import HotkeySetting from './features/HotkeySetting';
|
||||
|
||||
export const generateMetadata = async (props: DynamicLayoutProps) => {
|
||||
const locale = await RouteVariants.getLocale(props);
|
||||
const { t } = await translation('setting', locale);
|
||||
|
|
@ -12,4 +14,11 @@ export const generateMetadata = async (props: DynamicLayoutProps) => {
|
|||
url: '/settings/hotkey',
|
||||
});
|
||||
};
|
||||
export { default } from './index';
|
||||
|
||||
const Page = () => {
|
||||
return <HotkeySetting />;
|
||||
};
|
||||
|
||||
Page.displayName = 'HotkeySetting';
|
||||
|
||||
export default Page;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
'use client';
|
||||
|
||||
import { ActionIcon, FluentEmoji, SideNav } from '@lobehub/ui';
|
||||
import { ActionIcon, SideNav } from '@lobehub/ui';
|
||||
import { Cog, DatabaseIcon } from 'lucide-react';
|
||||
import { memo, useState } from 'react';
|
||||
import { Flexbox } from 'react-layout-kit';
|
||||
|
|
@ -33,13 +33,13 @@ const DevTools = memo(() => {
|
|||
<Flexbox
|
||||
height={'100%'}
|
||||
horizontal
|
||||
style={{ overflow: 'hidden', position: 'relative' }}
|
||||
style={{ background: theme.colorBgLayout, overflow: 'hidden', position: 'relative' }}
|
||||
width={'100%'}
|
||||
>
|
||||
<SideNav
|
||||
avatar={<FluentEmoji emoji={'🧰'} size={24} />}
|
||||
bottomActions={[]}
|
||||
style={{
|
||||
background: 'transparent',
|
||||
paddingBlock: 32,
|
||||
width: 48,
|
||||
}}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,15 @@
|
|||
import { AIChatModelCard } from '@/types/aiModel';
|
||||
|
||||
const ollamaChatModels: AIChatModelCard[] = [
|
||||
{
|
||||
contextWindowTokens: 65_536,
|
||||
description:
|
||||
'DeepSeek-V3 是一个强大的专家混合(MoE)语言模型,总参数量为 671B,每个 Token 激活 37B 参数。该模型采用多头潜在注意力(MLA)和 DeepSeekMoE 架构,实现了高效推理和经济训练,并在前代 DeepSeek-V3 的基础上显著提升了性能。',
|
||||
displayName: 'DeepSeek V3',
|
||||
enabled: true,
|
||||
id: 'deepseek-v3',
|
||||
type: 'chat',
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
reasoning: true,
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import {
|
|||
|
||||
// mod 在 Mac 上是 command 键,alt 在 Win 上是 ctrl 键
|
||||
export const HOTKEYS_REGISTRATION: HotkeyRegistration = [
|
||||
// basic
|
||||
{
|
||||
group: HotkeyGroupEnum.Essential,
|
||||
id: HotkeyEnum.Search,
|
||||
|
|
@ -47,6 +48,15 @@ export const HOTKEYS_REGISTRATION: HotkeyRegistration = [
|
|||
keys: combineKeys([KeyEnum.Ctrl, KeyEnum.Shift, KeyEnum.QuestionMark]),
|
||||
scopes: [HotkeyScopeEnum.Global],
|
||||
},
|
||||
{
|
||||
group: HotkeyGroupEnum.Essential,
|
||||
id: HotkeyEnum.OpenSettings,
|
||||
isDesktop: true,
|
||||
keys: combineKeys([KeyEnum.Mod, KeyEnum.Comma]),
|
||||
nonEditable: true,
|
||||
scopes: [HotkeyScopeEnum.Global],
|
||||
},
|
||||
// Chat
|
||||
{
|
||||
group: HotkeyGroupEnum.Conversation,
|
||||
id: HotkeyEnum.OpenChatSettings,
|
||||
|
|
|
|||
|
|
@ -17,6 +17,10 @@ const hotkey: HotkeyI18nTranslations = {
|
|||
desc: '查看所有快捷键的使用说明',
|
||||
title: '打开快捷键帮助',
|
||||
},
|
||||
openSettings: {
|
||||
desc: '打开应用设置页面',
|
||||
title: '应用设置',
|
||||
},
|
||||
regenerateMessage: {
|
||||
desc: '重新生成最后一条消息',
|
||||
title: '重新生成消息',
|
||||
|
|
|
|||
|
|
@ -5,7 +5,15 @@ import { AiFullModelCard } from '@/types/aiModel';
|
|||
import { ProviderConfig } from '@/types/user/settings';
|
||||
import { extractEnabledModels, transformToAiChatModelList } from '@/utils/parseModels';
|
||||
|
||||
export const genServerAiProvidersConfig = (specificConfig: Record<any, any>) => {
|
||||
interface ProviderSpecificConfig {
|
||||
enabled?: boolean;
|
||||
enabledKey?: string;
|
||||
fetchOnClient?: boolean;
|
||||
modelListKey?: string;
|
||||
withDeploymentName?: boolean;
|
||||
}
|
||||
|
||||
export const genServerAiProvidersConfig = (specificConfig: Record<any, ProviderSpecificConfig>) => {
|
||||
const llmConfig = getLLMConfig() as Record<string, any>;
|
||||
|
||||
return Object.values(ModelProvider).reduce(
|
||||
|
|
@ -26,8 +34,9 @@ export const genServerAiProvidersConfig = (specificConfig: Record<any, any>) =>
|
|||
|
||||
config[provider] = {
|
||||
enabled:
|
||||
providerConfig.enabled ||
|
||||
llmConfig[providerConfig.enabledKey || `ENABLED_${providerUpperCase}`],
|
||||
typeof providerConfig.enabled !== 'undefined'
|
||||
? providerConfig.enabled
|
||||
: llmConfig[providerConfig.enabledKey || `ENABLED_${providerUpperCase}`],
|
||||
|
||||
enabledModels: extractEnabledModels(
|
||||
providerModelList,
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import { fileEnv } from '@/config/file';
|
|||
import { knowledgeEnv } from '@/config/knowledge';
|
||||
import { langfuseEnv } from '@/config/langfuse';
|
||||
import { enableNextAuth } from '@/const/auth';
|
||||
import { isDesktop } from '@/const/version';
|
||||
import { parseSystemAgent } from '@/server/globalConfig/parseSystemAgent';
|
||||
import { GlobalServerConfig } from '@/types/serverConfig';
|
||||
|
||||
|
|
@ -36,7 +37,11 @@ export const getServerGlobalConfig = async () => {
|
|||
|
||||
/* ↑ cloud slot ↑ */
|
||||
ollama: {
|
||||
fetchOnClient: !process.env.OLLAMA_PROXY_URL,
|
||||
enabled: isDesktop ? true : undefined,
|
||||
fetchOnClient: isDesktop ? false : !process.env.OLLAMA_PROXY_URL,
|
||||
},
|
||||
openai: {
|
||||
enabled: isDesktop ? false : undefined,
|
||||
},
|
||||
volcengine: {
|
||||
withDeploymentName: true,
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ beforeEach(() => {
|
|||
vi.mock('@/const/version', () => ({
|
||||
isServerMode: false,
|
||||
isDeprecatedEdition: true,
|
||||
isDesktop: false,
|
||||
}));
|
||||
});
|
||||
|
||||
|
|
@ -878,6 +879,7 @@ describe('ChatService', () => {
|
|||
vi.doMock('@/const/version', () => ({
|
||||
isServerMode: true,
|
||||
isDeprecatedEdition: false,
|
||||
isDesktop: false,
|
||||
}));
|
||||
|
||||
// 需要在修改模拟后重新导入相关模块
|
||||
|
|
@ -965,6 +967,7 @@ describe('ChatService', () => {
|
|||
vi.doMock('@/const/version', () => ({
|
||||
isServerMode: true,
|
||||
isDeprecatedEdition: true,
|
||||
isDesktop: false,
|
||||
}));
|
||||
|
||||
// 需要在修改模拟后重新导入相关模块
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { isProviderDisableBrowserRequest } from '@/config/modelProviders';
|
||||
import { isDesktop } from '@/const/version';
|
||||
import { UserStore } from '@/store/user';
|
||||
import { GlobalLLMProviderKey } from '@/types/user/settings';
|
||||
|
||||
|
|
@ -19,6 +20,9 @@ const providerWhitelist = new Set(['ollama']);
|
|||
const isProviderFetchOnClient = (provider: GlobalLLMProviderKey | string) => (s: UserStore) => {
|
||||
const config = getProviderConfigById(provider)(s);
|
||||
|
||||
// if is desktop, force on Server.
|
||||
if (isDesktop) return false;
|
||||
|
||||
// If the provider already disable browser request in model config, force on Server.
|
||||
if (isProviderDisableBrowserRequest(provider)) return false;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,7 @@
|
|||
import { Theme, css } from 'antd-style';
|
||||
import { rgba } from 'polished';
|
||||
|
||||
import { isDesktop } from '@/const/version';
|
||||
|
||||
// fix ios input keyboard
|
||||
// overflow: hidden;
|
||||
|
|
@ -22,6 +25,17 @@ export default ({ token }: { prefixCls: string; token: Theme }) => css`
|
|||
}
|
||||
}
|
||||
|
||||
html {
|
||||
background: ${isDesktop ? 'none' : token.colorBgLayout};
|
||||
}
|
||||
|
||||
body {
|
||||
/* 提高合成层级,强制硬件加速,否则会有渲染黑边出现 */
|
||||
will-change: opacity;
|
||||
transform: translateZ(0);
|
||||
background: ${isDesktop ? rgba(token.colorBgLayout, 0.66) : token.colorBgLayout};
|
||||
}
|
||||
|
||||
* {
|
||||
scrollbar-color: ${token.colorFill} transparent;
|
||||
scrollbar-width: thin;
|
||||
|
|
|
|||
|
|
@ -1,11 +0,0 @@
|
|||
import type { DispatchInvoke } from '@lobechat/electron-client-ipc';
|
||||
|
||||
export interface IElectronAPI {
|
||||
invoke: DispatchInvoke;
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
electronAPI: IElectronAPI;
|
||||
}
|
||||
}
|
||||
|
|
@ -10,6 +10,7 @@ export const HotkeyEnum = {
|
|||
EditMessage: 'editMessage',
|
||||
OpenChatSettings: 'openChatSettings',
|
||||
OpenHotkeyHelper: 'openHotkeyHelper',
|
||||
OpenSettings: 'openSettings',
|
||||
RegenerateMessage: 'regenerateMessage',
|
||||
SaveTopic: 'saveTopic',
|
||||
Search: 'search',
|
||||
|
|
|
|||
|
|
@ -37,10 +37,5 @@
|
|||
"src",
|
||||
"tests",
|
||||
"vitest.config.ts"
|
||||
],
|
||||
"ts-node": {
|
||||
"compilerOptions": {
|
||||
"module": "commonjs"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue