diff --git a/src/assets/locale/da/common.json b/src/assets/locale/da/common.json index 4d0de2d..de82642 100644 --- a/src/assets/locale/da/common.json +++ b/src/assets/locale/da/common.json @@ -70,6 +70,10 @@ "label": "Længden af Kontekst", "placeholder": "Instast Længden af Kontekst værdien (standard: 2048)" }, + "numPredict": { + "label": "Maks Tokens (num_predict)", + "placeholder": "Indtast Maks Tokens værdi (fx. 2048, 4096)" + }, "seed": { "label": "Seed", "placeholder": "Indtast Seed værdi (fx. 1234)", @@ -112,5 +116,6 @@ "older": "Ældre" }, "pin": "Fastgør", - "unpin": "Frigør" + "unpin": "Frigør", + "generationInfo": "Genererings Info" } \ No newline at end of file diff --git a/src/assets/locale/da/openai.json b/src/assets/locale/da/openai.json index 3410ae6..8ef3c07 100644 --- a/src/assets/locale/da/openai.json +++ b/src/assets/locale/da/openai.json @@ -42,7 +42,7 @@ "delete": "Slet", "edit": "Rediger", "newModel": "Tilføj Modeller til Udbyder", - "noNewModel": "For LMStudio henter vi dynamisk. Ingen manuel tilføjelse nødvendig.", + "noNewModel": "For LMStudio, Ollama, Llamafile, henter vi dynamisk. Ingen manuel tilføjelse nødvendig.", "searchModel": "Søg Model", "selectAll": "Vælg Alle", "save": "Gem", diff --git a/src/assets/locale/da/option.json b/src/assets/locale/da/option.json index 4548680..5fc0281 100644 --- a/src/assets/locale/da/option.json +++ b/src/assets/locale/da/option.json @@ -8,5 +8,6 @@ "somethingWentWrong": "Noget gik galt", "validationSelectModel": "Venligst vælg en model for at forsæætte", "deleteHistoryConfirmation": "Er du sikker på at du vil slette denne historik?", - "editHistoryTitle": "Indtast en ny titel" + "editHistoryTitle": "Indtast en ny titel", + "temporaryChat": "Midlertidig Chat" } \ No newline at end of file diff --git a/src/assets/locale/da/playground.json b/src/assets/locale/da/playground.json index f8df2b2..8fdcd54 100644 --- a/src/assets/locale/da/playground.json +++ b/src/assets/locale/da/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Stop Streaming", "knowledge": "Viden" }, - "sendWhenEnter": "Søg, når Indtast trykkes" + "sendWhenEnter": "Søg, når Indtast trykkes", + "welcome": "Hej! Hvordan kan jeg hjælpe dig i dag?" } \ No newline at end of file diff --git a/src/assets/locale/da/settings.json b/src/assets/locale/da/settings.json index 1666d9c..1d088d1 100644 --- a/src/assets/locale/da/settings.json +++ b/src/assets/locale/da/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Generer titel med AI" + }, + "ollamaStatus": { + "label": "Aktivér eller deaktivér Ollama forbindelsesstatus kontrol" } }, "sidepanelRag": { diff --git a/src/assets/locale/de/common.json b/src/assets/locale/de/common.json index 739e0dd..65b72ab 100644 --- a/src/assets/locale/de/common.json +++ b/src/assets/locale/de/common.json @@ -70,6 +70,10 @@ "label": "Anzahl der Kontexte", "placeholder": "Geben Sie die Anzahl der Kontexte ein (Standard: 2048)" }, + "numPredict": { + "label": "Max Tokens (num_predict)", + "placeholder": "Geben Sie den Max-Tokens-Wert ein (z.B. 2048, 4096)" + }, "seed": { "label": "Seed", "placeholder": "Geben Sie den Seed-Wert ein (z.B. 1234)", @@ -112,5 +116,6 @@ "older": "Älter" }, "pin": "Anheften", - "unpin": "Losheften" + "unpin": "Losheften", + "generationInfo": "Generierungsinformationen" } \ No newline at end of file diff --git a/src/assets/locale/de/openai.json b/src/assets/locale/de/openai.json index 23a684e..98e7519 100644 --- a/src/assets/locale/de/openai.json +++ b/src/assets/locale/de/openai.json @@ -42,7 +42,7 @@ "delete": "Löschen", "edit": "Bearbeiten", "newModel": "Modelle zum Anbieter hinzufügen", - "noNewModel": "Für LMStudio holen wir die Daten dynamisch. Keine manuelle Hinzufügung erforderlich.", + "noNewModel": "Für LMStudio, Ollama, Llamafile, holen wir die Daten dynamisch. Keine manuelle Hinzufügung erforderlich.", "searchModel": "Modell suchen", "selectAll": "Alle auswählen", "save": "Speichern", diff --git a/src/assets/locale/de/option.json b/src/assets/locale/de/option.json index f6ec7f9..4303931 100644 --- a/src/assets/locale/de/option.json +++ b/src/assets/locale/de/option.json @@ -8,5 +8,6 @@ "somethingWentWrong": "Etwas ist schiefgelaufen", "validationSelectModel": "Bitte wähle ein Modell aus, um fortzufahren", "deleteHistoryConfirmation": "Bist du sicher, dass du diesen Verlauf löschen möchtest?", - "editHistoryTitle": "Gib einen neuen Titel ein" + "editHistoryTitle": "Gib einen neuen Titel ein", + "temporaryChat": "Temporärer Chat" } \ No newline at end of file diff --git a/src/assets/locale/de/playground.json b/src/assets/locale/de/playground.json index 119d87f..43eafb9 100644 --- a/src/assets/locale/de/playground.json +++ b/src/assets/locale/de/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Streaming stoppen", "knowledge": "Wissen" }, - "sendWhenEnter": "Senden bei Drücken der Eingabetaste" + "sendWhenEnter": "Senden bei Drücken der Eingabetaste", + "welcome": "Hallo! Wie kann ich Ihnen heute helfen?" } \ No newline at end of file diff --git a/src/assets/locale/de/settings.json b/src/assets/locale/de/settings.json index 30a5da3..c6b134b 100644 --- a/src/assets/locale/de/settings.json +++ b/src/assets/locale/de/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Titel mit KI generieren" + }, + "ollamaStatus": { + "label": "Ollama-Verbindungsstatus-Überprüfung aktivieren oder deaktivieren" } }, "sidepanelRag": { diff --git a/src/assets/locale/en/common.json b/src/assets/locale/en/common.json index f5b9e39..d033144 100644 --- a/src/assets/locale/en/common.json +++ b/src/assets/locale/en/common.json @@ -70,6 +70,10 @@ "label": "Number of Contexts", "placeholder": "Enter Number of Contexts value (default: 2048)" }, + "numPredict": { + "label": "Max Tokens (num_predict)", + "placeholder": "Enter Max Tokens value (e.g. 2048, 4096)" + }, "seed": { "label": "Seed", "placeholder": "Enter Seed value (e.g. 1234)", @@ -116,5 +120,6 @@ "older": "Older" }, "pin": "Pin", - "unpin": "Unpin" + "unpin": "Unpin", + "generationInfo": "Generation Info" } diff --git a/src/assets/locale/en/openai.json b/src/assets/locale/en/openai.json index c0838cb..f8ad298 100644 --- a/src/assets/locale/en/openai.json +++ b/src/assets/locale/en/openai.json @@ -42,7 +42,7 @@ "delete": "Delete", "edit": "Edit", "newModel": "Add Models to Provider", - "noNewModel": "For LMStudio, we fetch dynamically. No manual addition needed.", + "noNewModel": "For LMStudio, Ollama, Llamafile, we fetch dynamically. No manual addition needed.", "searchModel": "Search Model", "selectAll": "Select All", "save": "Save", diff --git a/src/assets/locale/en/option.json b/src/assets/locale/en/option.json index 5739b40..7d11938 100644 --- a/src/assets/locale/en/option.json +++ b/src/assets/locale/en/option.json @@ -8,5 +8,6 @@ "somethingWentWrong": "Something went wrong", "validationSelectModel": "Please select a model to continue", "deleteHistoryConfirmation": "Are you sure you want to delete this history?", - "editHistoryTitle": "Enter a new title" + "editHistoryTitle": "Enter a new title", + "temporaryChat": "Temporary Chat" } \ No newline at end of file diff --git a/src/assets/locale/en/playground.json b/src/assets/locale/en/playground.json index 05da9ad..c4f5f5c 100644 --- a/src/assets/locale/en/playground.json +++ b/src/assets/locale/en/playground.json @@ -23,7 +23,9 @@ "speechToText": "Speech to Text", "uploadImage": "Upload Image", "stopStreaming": "Stop Streaming", - "knowledge": "Knowledge" + "knowledge": "Knowledge", + "vision": "[Experimental] Vision Chat" }, - "sendWhenEnter": "Send when Enter pressed" + "sendWhenEnter": "Send when Enter pressed", + "welcome": "Hello! How can I help you today?" } \ No newline at end of file diff --git a/src/assets/locale/en/settings.json b/src/assets/locale/en/settings.json index 8f19b6a..eb98bf4 100644 --- a/src/assets/locale/en/settings.json +++ b/src/assets/locale/en/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Generate Title using AI" + }, + "ollamaStatus" :{ + "label":"Enable or disable Ollama connection status check" } }, "sidepanelRag": { diff --git a/src/assets/locale/es/common.json b/src/assets/locale/es/common.json index 65590aa..210e043 100644 --- a/src/assets/locale/es/common.json +++ b/src/assets/locale/es/common.json @@ -70,6 +70,10 @@ "label": "Cantidad de contextos", "placeholder": "Ingresar el valor de tamaño de la ventana de contexto (por defecto: 2048)" }, + "numPredict": { + "label": "Máximo de Tokens (num_predict)", + "placeholder": "Ingrese el valor máximo de Tokens (ej: 2048, 4096)" + }, "seed": { "label": "Semilla", "placeholder": "Ingresar el valor de la semilla (ej: 1234)", @@ -111,5 +115,6 @@ "older": "Más antiguo" }, "pin": "Fijar", - "unpin": "Desfijar" + "unpin": "Desfijar", + "generationInfo": "Información de Generación" } \ No newline at end of file diff --git a/src/assets/locale/es/openai.json b/src/assets/locale/es/openai.json index 2e84a19..b4bd9b2 100644 --- a/src/assets/locale/es/openai.json +++ b/src/assets/locale/es/openai.json @@ -42,7 +42,7 @@ "delete": "Eliminar", "edit": "Editar", "newModel": "Añadir Modelos al Proveedor", - "noNewModel": "Para LMStudio, obtenemos dinámicamente. No se necesita adición manual.", + "noNewModel": "Para LMStudio, Ollama, Llamafile, obtenemos dinámicamente. No se necesita adición manual.", "searchModel": "Buscar Modelo", "selectAll": "Seleccionar Todo", "save": "Guardar", diff --git a/src/assets/locale/es/option.json b/src/assets/locale/es/option.json index 3c48761..d9ab8cf 100644 --- a/src/assets/locale/es/option.json +++ b/src/assets/locale/es/option.json @@ -8,5 +8,6 @@ "somethingWentWrong": "Hubo un error", "validationSelectModel": "Selecione un modelo para continuar", "deleteHistoryConfirmation": "¿Esta seguro que quiere borrar éste histórico?", - "editHistoryTitle": "Ingrese un nuevo título" + "editHistoryTitle": "Ingrese un nuevo título", + "temporaryChat": "Chat Temporal" } diff --git a/src/assets/locale/es/playground.json b/src/assets/locale/es/playground.json index afc3771..2e16639 100644 --- a/src/assets/locale/es/playground.json +++ b/src/assets/locale/es/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Parar Transmisión", "knowledge": "Conocimiento" }, - "sendWhenEnter": "Enviar cuando presione Enter" + "sendWhenEnter": "Enviar cuando presione Enter", + "welcome": "¡Hola! ¿Cómo puedo ayudarte hoy?" } diff --git a/src/assets/locale/es/settings.json b/src/assets/locale/es/settings.json index 241df94..4ed17d8 100644 --- a/src/assets/locale/es/settings.json +++ b/src/assets/locale/es/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Generar título usando IA" + }, + "ollamaStatus": { + "label": "Habilitar o deshabilitar la verificación del estado de conexión de Ollama" } }, "sidepanelRag": { diff --git a/src/assets/locale/fa/common.json b/src/assets/locale/fa/common.json index 4adb307..72301c7 100644 --- a/src/assets/locale/fa/common.json +++ b/src/assets/locale/fa/common.json @@ -70,6 +70,10 @@ "label": "Number of Contexts", "placeholder": "مقدار Number of Contexts را وارد کنید (پیش فرض: 2048)" }, + "numPredict": { + "label": "حداکثر توکن‌ها (num_predict)", + "placeholder": "مقدار حداکثر توکن‌ها را وارد کنید (مثلا 2048، 4096)" + }, "seed": { "label": "Seed", "placeholder": "مقدار Seed را وارد کنید (e.g. 1234)", @@ -105,5 +109,6 @@ "older": "قدیمی‌تر" }, "pin": "پین کردن", - "unpin": "حذف پین" + "unpin": "حذف پین", + "generationInfo": "اطلاعات تولید" } \ No newline at end of file diff --git a/src/assets/locale/fa/openai.json b/src/assets/locale/fa/openai.json index 479e509..7258e83 100644 --- a/src/assets/locale/fa/openai.json +++ b/src/assets/locale/fa/openai.json @@ -42,7 +42,7 @@ "delete": "حذف", "edit": "ویرایش", "newModel": "افزودن مدل‌ها به ارائه‌دهنده", - "noNewModel": "برای LMStudio، ما به صورت پویا دریافت می‌کنیم. نیازی به افزودن دستی نیست.", + "noNewModel": "برای LMStudio, Ollama, Llamafile, ما به صورت پویا دریافت می‌کنیم. نیازی به افزودن دستی نیست.", "searchModel": "جستجوی مدل", "selectAll": "انتخاب همه", "save": "ذخیره", diff --git a/src/assets/locale/fa/option.json b/src/assets/locale/fa/option.json index 9188710..5278cd0 100644 --- a/src/assets/locale/fa/option.json +++ b/src/assets/locale/fa/option.json @@ -8,5 +8,6 @@ "somethingWentWrong": "مشکلی پیش آمد", "validationSelectModel": "لطفا یک مدل را برای ادامه انتخاب کنید", "deleteHistoryConfirmation": "آیا مطمئن هستید که می خواهید این تاریخچه را حذف کنید؟", - "editHistoryTitle": "یک عنوان جدید وارد کنید" + "editHistoryTitle": "یک عنوان جدید وارد کنید", + "temporaryChat": "گپ موقت" } diff --git a/src/assets/locale/fa/playground.json b/src/assets/locale/fa/playground.json index e9161a7..3732e7f 100644 --- a/src/assets/locale/fa/playground.json +++ b/src/assets/locale/fa/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "توقف Streaming", "knowledge": "دانش" }, - "sendWhenEnter": "با فشار دادن Enter ارسال شود" + "sendWhenEnter": "با فشار دادن Enter ارسال شود", + "welcome": "سلام! امروز چطور می‌توانم به شما کمک کنم؟" } diff --git a/src/assets/locale/fa/settings.json b/src/assets/locale/fa/settings.json index 039f222..0a0cde8 100644 --- a/src/assets/locale/fa/settings.json +++ b/src/assets/locale/fa/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "تولید عنوان با استفاده از هوش مصنوعی" + }, + "ollamaStatus": { + "label": "فعال یا غیرفعال کردن بررسی وضعیت اتصال Ollama" } }, "sidepanelRag": { diff --git a/src/assets/locale/fr/common.json b/src/assets/locale/fr/common.json index 8dbe609..d11ef8c 100644 --- a/src/assets/locale/fr/common.json +++ b/src/assets/locale/fr/common.json @@ -70,6 +70,10 @@ "label": "Nombre de contextes", "placeholder": "Entrez la valeur du nombre de contextes (par défaut: 2048)" }, + "numPredict": { + "label": "Tokens maximum (num_predict)", + "placeholder": "Entrez la valeur des tokens maximum (par exemple 2048, 4096)" + }, "seed": { "label": "Graine", "placeholder": "Entrez la valeur des semences (par exemple 1234)", @@ -111,5 +115,6 @@ "older": "Plus ancien" }, "pin": "Épingler", - "unpin": "Désépingler" + "unpin": "Désépingler", + "generationInfo": "Informations de génération" } \ No newline at end of file diff --git a/src/assets/locale/fr/openai.json b/src/assets/locale/fr/openai.json index a71256c..2d9a0c2 100644 --- a/src/assets/locale/fr/openai.json +++ b/src/assets/locale/fr/openai.json @@ -42,7 +42,7 @@ "delete": "Supprimer", "edit": "Modifier", "newModel": "Ajouter des modèles au fournisseur", - "noNewModel": "Pour LMStudio, nous récupérons dynamiquement. Pas besoin d'ajout manuel.", + "noNewModel": "Pour LMStudio, Ollama, Llamafile, nous récupérons dynamiquement. Pas besoin d'ajout manuel.", "searchModel": "Rechercher un modèle", "selectAll": "Tout sélectionner", "save": "Enregistrer", diff --git a/src/assets/locale/fr/option.json b/src/assets/locale/fr/option.json index ec40c0e..ad374aa 100644 --- a/src/assets/locale/fr/option.json +++ b/src/assets/locale/fr/option.json @@ -8,5 +8,6 @@ "somethingWentWrong": "Quelque chose s'est mal passé", "validationSelectModel": "Veuillez sélectionner un modèle pour continuer", "deleteHistoryConfirmation": "Êtes-vous sûr de vouloir supprimer cette historique ?", - "editHistoryTitle": "Entrez un nouveau titre" + "editHistoryTitle": "Entrez un nouveau titre", + "temporaryChat": "Chat temporaire" } \ No newline at end of file diff --git a/src/assets/locale/fr/playground.json b/src/assets/locale/fr/playground.json index fddf9c0..e81c542 100644 --- a/src/assets/locale/fr/playground.json +++ b/src/assets/locale/fr/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Arrêtez la diffusion", "knowledge": "Connaissance" }, - "sendWhenEnter": "Envoyer en appuyant sur Entrée" + "sendWhenEnter": "Envoyer en appuyant sur Entrée", + "welcome": "Bonjour ! Comment puis-je vous aider aujourd'hui ?" } \ No newline at end of file diff --git a/src/assets/locale/fr/settings.json b/src/assets/locale/fr/settings.json index 027c1b3..7d3b191 100644 --- a/src/assets/locale/fr/settings.json +++ b/src/assets/locale/fr/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Générer le titre en utilisant l'IA" + }, + "ollamaStatus": { + "label": "Activer ou désactiver la vérification de l'état de la connexion Ollama" } }, "sidepanelRag": { diff --git a/src/assets/locale/it/common.json b/src/assets/locale/it/common.json index 80ede68..6b08509 100644 --- a/src/assets/locale/it/common.json +++ b/src/assets/locale/it/common.json @@ -70,6 +70,10 @@ "label": "Dimensione del Contesto", "placeholder": "Inserisci la Dimensione del Contesto (default: 2048)" }, + "numPredict": { + "label": "Token Massimi (num_predict)", + "placeholder": "Inserisci il valore dei Token Massimi (es. 2048, 4096)" + }, "seed": { "label": "Seed", "placeholder": "Inserisci il Valore Seed (e.g. 1234)", @@ -111,5 +115,6 @@ "older": "Più Vecchi" }, "pin": "Fissa", - "unpin": "Rimuovi" + "unpin": "Rimuovi", + "generationInfo": "Informazioni sulla Generazione" } \ No newline at end of file diff --git a/src/assets/locale/it/openai.json b/src/assets/locale/it/openai.json index c9d27ef..589da51 100644 --- a/src/assets/locale/it/openai.json +++ b/src/assets/locale/it/openai.json @@ -42,7 +42,7 @@ "delete": "Elimina", "edit": "Modifica", "newModel": "Aggiungi Modelli al Provider", - "noNewModel": "Per LMStudio, recuperiamo dinamicamente. Non è necessaria l'aggiunta manuale.", + "noNewModel": "Per LMStudio, Ollama, Llamafile, recuperiamo dinamicamente. Non è necessaria l'aggiunta manuale.", "searchModel": "Cerca Modello", "selectAll": "Seleziona Tutto", "save": "Salva", diff --git a/src/assets/locale/it/option.json b/src/assets/locale/it/option.json index 6fcd098..fb222c3 100644 --- a/src/assets/locale/it/option.json +++ b/src/assets/locale/it/option.json @@ -8,5 +8,6 @@ "somethingWentWrong": "Qualcosa è andato storto", "validationSelectModel": "Scegliere un modello per continuare", "deleteHistoryConfirmation": "Sei sicuro che vuoi eliminare la cronologia?", - "editHistoryTitle": "Inserisci un nuovo titolo" + "editHistoryTitle": "Inserisci un nuovo titolo", + "temporaryChat": "Chat Temporanea" } \ No newline at end of file diff --git a/src/assets/locale/it/playground.json b/src/assets/locale/it/playground.json index 766fe20..c43cf87 100644 --- a/src/assets/locale/it/playground.json +++ b/src/assets/locale/it/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Ferma lo Streaming", "knowledge": "Conoscenza" }, - "sendWhenEnter": "Invia subito dopo Enter" + "sendWhenEnter": "Invia subito dopo Enter", + "welcome": "Ciao! Come posso aiutarti oggi?" } \ No newline at end of file diff --git a/src/assets/locale/it/settings.json b/src/assets/locale/it/settings.json index af15a71..e227d22 100644 --- a/src/assets/locale/it/settings.json +++ b/src/assets/locale/it/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Genera titolo utilizzando l'IA" + }, + "ollamaStatus": { + "label": "Abilita o disabilita il controllo dello stato della connessione Ollama" } }, "sidepanelRag": { diff --git a/src/assets/locale/ja-JP/common.json b/src/assets/locale/ja-JP/common.json index df20028..92ba8e0 100644 --- a/src/assets/locale/ja-JP/common.json +++ b/src/assets/locale/ja-JP/common.json @@ -70,6 +70,10 @@ "label": "コンテキストの数", "placeholder": "コンテキスト数を入力してください(デフォルト:2048)" }, + "numPredict": { + "label": "最大トークン数 (num_predict)", + "placeholder": "最大トークン数を入力してください(例:2048、4096)" + }, "seed": { "label": "シード", "placeholder": "シード値を入力してください(例:1234)", @@ -111,5 +115,6 @@ "older": "それ以前" }, "pin": "固定", - "unpin": "固定解除" + "unpin": "固定解除", + "generationInfo": "生成情報" } \ No newline at end of file diff --git a/src/assets/locale/ja-JP/openai.json b/src/assets/locale/ja-JP/openai.json index 829e886..2e755e8 100644 --- a/src/assets/locale/ja-JP/openai.json +++ b/src/assets/locale/ja-JP/openai.json @@ -42,7 +42,7 @@ "delete": "削除", "edit": "編集", "newModel": "プロバイダーにモデルを追加", - "noNewModel": "LMStudioの場合、動的に取得します。手動での追加は不要です。", + "noNewModel": "LMStudio, Ollama, Llamafile,の場合、動的に取得します。手動での追加は不要です。", "searchModel": "モデルを検索", "selectAll": "すべて選択", "save": "保存", diff --git a/src/assets/locale/ja-JP/option.json b/src/assets/locale/ja-JP/option.json index 57b023b..76dc343 100644 --- a/src/assets/locale/ja-JP/option.json +++ b/src/assets/locale/ja-JP/option.json @@ -8,5 +8,6 @@ "somethingWentWrong": "何かが間違っています", "validationSelectModel": "続行するにはモデルを選択してください", "deleteHistoryConfirmation": "この履歴を削除しますか?", - "editHistoryTitle": "新しいタイトルを入力" + "editHistoryTitle": "新しいタイトルを入力", + "temporaryChat": "一時的なチャット" } \ No newline at end of file diff --git a/src/assets/locale/ja-JP/playground.json b/src/assets/locale/ja-JP/playground.json index 96c4d1a..f89911c 100644 --- a/src/assets/locale/ja-JP/playground.json +++ b/src/assets/locale/ja-JP/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "ストリーミングを停止", "knowledge": "知識" }, - "sendWhenEnter": "Enterキーを押すと送信" + "sendWhenEnter": "Enterキーを押すと送信", + "welcome": "こんにちは!本日はどのようなお手伝いができますか?" } \ No newline at end of file diff --git a/src/assets/locale/ja-JP/settings.json b/src/assets/locale/ja-JP/settings.json index af5a1f5..0058062 100644 --- a/src/assets/locale/ja-JP/settings.json +++ b/src/assets/locale/ja-JP/settings.json @@ -35,6 +35,9 @@ }, "generateTitle": { "label": "AIを使用してタイトルを生成" + }, + "ollamaStatus": { + "label": "Ollamaの接続状態チェックを有効または無効にする" } }, "sidepanelRag": { diff --git a/src/assets/locale/ko/chrome.json b/src/assets/locale/ko/chrome.json new file mode 100644 index 0000000..8f89fc1 --- /dev/null +++ b/src/assets/locale/ko/chrome.json @@ -0,0 +1,13 @@ +{ + "heading": "Chrome AI 설정", + "status": { + "label": "Page Assist에서 Chrome AI 지원을 활성화하거나 비활성화하기" + }, + "error": { + "browser_not_supported": "이 Chrome 버전은 Gemini Nano 모델을 지원하지 않습니다. 버전을 127 이상으로 업데이트해 주세요.", + "ai_not_supported": "설정 `chrome://flags/#prompt-api-for-gemini-nano`가 활성화되지 않았습니다. 활성화해 주세요.", + "ai_not_ready": "Gemini Nano가 아직 준비되지 않았습니다. Chrome 설정을 다시 확인해 주세요.", + "internal_error": "내부 오류가 발생했습니다. 나중에 다시 시도해 주세요." + }, + "errorDescription": "Chrome AI를 사용하려면 현재 Dev 및 Canary 채널에 있는 127 이상의 브라우저 버전이 필요합니다. 지원되는 버전을 다운로드한 후, 다음 단계를 따르세요:\n\n1. `chrome://flags/#prompt-api-for-gemini-nano`에 접속하여 '활성화'를 선택합니다.\n2. `chrome://flags/#optimization-guide-on-device-model`에 접속하여 'EnabledBypassPrefRequirement'를 선택합니다.\n3. `chrome://components`에 접속하여 'Optimization Guide On Device Model'을 검색한 후 '업데이트 확인'을 클릭합니다. 이를 통해 모델이 다운로드됩니다. 설정이 표시되지 않는 경우, 단계 1과 2를 반복하고 브라우저를 재시작해 주세요." +} diff --git a/src/assets/locale/ko/common.json b/src/assets/locale/ko/common.json new file mode 100644 index 0000000..ed9e0b9 --- /dev/null +++ b/src/assets/locale/ko/common.json @@ -0,0 +1,119 @@ +{ + "pageAssist": "페이지 어시스트", + "selectAModel": "모델 선택", + "save": "저장", + "saved": "저장됨", + "cancel": "취소", + "retry": "재시도", + "share": { + "tooltip": { + "share": "공유" + }, + "modal": { + "title": "채팅 링크 공유" + }, + "form": { + "defaultValue": { + "name": "익명", + "title": "제목 없는 채팅" + }, + "title": { + "label": "채팅 제목", + "placeholder": "채팅 제목을 입력하세요", + "required": "채팅 제목은 필수 항목입니다" + }, + "name": { + "label": "이름", + "placeholder": "이름을 입력하세요", + "required": "이름은 필수 항목입니다" + }, + "btn": { + "save": "링크 생성", + "saving": "링크 생성 중..." + } + }, + "notification": { + "successGenerate": "링크가 클립보드에 복사되었습니다", + "failGenerate": "링크 생성에 실패했습니다" + } + }, + "copyToClipboard": "클립보드에 복사", + "webSearch": "웹 검색 중", + "regenerate": "재생성", + "edit": "편집", + "delete": "삭제", + "saveAndSubmit": "저장하고 제출", + "editMessage": { + "placeholder": "메시지를 입력하세요..." + }, + "submit": "제출", + "noData": "데이터가 없습니다", + "noHistory": "채팅 기록이 없습니다", + "chatWithCurrentPage": "현재 페이지에서 채팅", + "beta": "베타", + "tts": "TTS", + "currentChatModelSettings": "현재 채팅 모델 설정", + "modelSettings": { + "label": "모델 설정", + "description": "모든 채팅에 대해 글로벌 모델 옵션을 설정합니다", + "form": { + "keepAlive": { + "label": "Keep Alive", + "help": "요청 후 모델이 메모리에 유지되는 시간을 설정합니다 (기본값: 5분)", + "placeholder": "Keep Alive 기간을 입력하세요 (예: 5분, 10분, 1시간)" + }, + "temperature": { + "label": "온도", + "placeholder": "온도 값을 입력하세요 (예: 0.7, 1.0)" + }, + "numCtx": { + "label": "컨텍스트 수", + "placeholder": "컨텍스트 수를 입력하세요 (기본값: 2048)" + }, + "numPredict": { + "label": "최대 토큰 수 (num_predict)", + "placeholder": "최대 토큰 수를 입력하세요 (예: 2048, 4096)" + }, "seed": { + "label": "시드", + "placeholder": "시드 값을 입력하세요 (예: 1234)", + "help": "모델 출력의 재현성" + }, + "topK": { + "label": "Top K", + "placeholder": "Top K 값을 입력하세요 (예: 40, 100)" + }, + "topP": { + "label": "Top P", + "placeholder": "Top P 값을 입력하세요 (예: 0.9, 0.95)" + }, + "numGpu": { + "label": "GPU 수", + "placeholder": "GPU에 할당할 레이어 수를 입력하세요" + }, + "systemPrompt": { + "label": "임시 시스템 프롬프트", + "placeholder": "시스템 프롬프트를 입력하세요", + "help": "현재 채팅에서 시스템 프롬프트를 빠르게 설정하는 방법이며, 선택된 시스템 프롬프트가 있을 경우 이를 덮어씁니다." + } + }, + "advanced": "기타 모델 설정" + }, + "copilot": { + "summary": "요약", + "explain": "설명", + "rephrase": "다르게 표현", + "translate": "번역" + }, + "citations": "인용", + "downloadCode": "코드 다운로드", + "date": { + "pinned": "고정됨", + "today": "오늘", + "yesterday": "어제", + "last7Days": "지난 7일", + "older": "그 이전" + }, + "pin": "고정", + "unpin": "고정 해제", + "generationInfo": "생성 정보" +} diff --git a/src/assets/locale/ko/knowledge.json b/src/assets/locale/ko/knowledge.json new file mode 100644 index 0000000..1bf8536 --- /dev/null +++ b/src/assets/locale/ko/knowledge.json @@ -0,0 +1,40 @@ +{ + "addBtn": "새 지식 추가", + "columns": { + "title": "제목", + "status": "상태", + "embeddings": "임베딩 모델", + "createdAt": "생성일", + "action": "작업" + }, + "expandedColumns": { + "name": "이름" + }, + "confirm": { + "delete": "이 지식을 삭제하시겠습니까?" + }, + "deleteSuccess": "지식이 정상적으로 삭제되었습니다", + "status": { + "pending": "대기 중", + "finished": "완료", + "processing": "처리 중", + "failed": "실패" + }, + "addKnowledge": "지식 추가", + "form": { + "title": { + "label": "지식 제목", + "placeholder": "지식 제목을 입력하세요", + "required": "지식 제목은 필수 항목입니다" + }, + "uploadFile": { + "label": "파일 업로드", + "uploadText": "파일을 여기에 드래그 앤 드롭하거나 클릭하여 업로드하세요", + "uploadHint": "지원되는 파일 형식: .pdf, .csv, .txt", + "required": "파일은 필수 항목입니다" + }, + "submit": "제출", + "success": "지식이 정상적으로 추가되었습니다" + }, + "noEmbeddingModel": "먼저 RAG 설정 페이지에서 임베딩 모델을 추가해 주세요" +} diff --git a/src/assets/locale/ko/openai.json b/src/assets/locale/ko/openai.json new file mode 100644 index 0000000..fae6aca --- /dev/null +++ b/src/assets/locale/ko/openai.json @@ -0,0 +1,90 @@ +{ + "settings": "OpenAI 호환 API", + "heading": "OpenAI 호환 API", + "subheading": "여기에서 OpenAI API 호환 공급자를 관리하고 설정할 수 있습니다.", + "addBtn": "공급자 추가", + "table": { + "name": "공급자 이름", + "baseUrl": "기본 URL", + "actions": "작업" + }, + "modal": { + "titleAdd": "새 공급자 추가", + "name": { + "label": "공급자 이름", + "required": "공급자 이름은 필수 항목입니다.", + "placeholder": "공급자 이름 입력" + }, + "baseUrl": { + "label": "기본 URL", + "help": "OpenAI API 공급자의 기본 URL 예시: (http://localhost:1234/v1)", + "required": "기본 URL은 필수 항목입니다.", + "placeholder": "기본 URL 입력" + }, + "apiKey": { + "label": "API 키", + "required": "API 키는 필수 항목입니다.", + "placeholder": "API 키 입력" + }, + "submit": "저장", + "update": "업데이트", + "deleteConfirm": "이 공급자를 삭제하시겠습니까?", + "model": { + "title": "모델 목록", + "subheading": "이 공급자에서 사용하고자 하는 챗 모델을 선택하세요.", + "success": "새로운 모델이 정상적으로 추가되었습니다." + }, + "tipLMStudio": "Page Assist는 LM Studio에 로드된 모델을 자동으로 가져옵니다. 수동 추가가 필요하지 않습니다." + }, + "addSuccess": "공급자가 정상적으로 추가되었습니다.", + "deleteSuccess": "공급자가 정상적으로 삭제되었습니다.", + "updateSuccess": "공급자가 정상적으로 업데이트되었습니다.", + "delete": "삭제", + "edit": "편집", + "newModel": "공급자에 모델 추가", + "noNewModel": "LMStudio, Ollama, Llamafile,의 경우 동적으로 가져옵니다. 수동 추가는 필요하지 않습니다.", + "searchModel": "모델 검색", + "selectAll": "모두 선택", + "save": "저장", + "saving": "저장 중...", + "manageModels": { + "columns": { + "name": "모델 이름", + "model_type": "모델 타입", + "model_id": "모델 ID", + "provider": "공급자 이름", + "actions": "작업" + }, + "tooltip": { + "delete": "삭제" + }, + "confirm": { + "delete": "이 모델을 삭제하시겠습니까?" + }, + "modal": { + "title": "사용자 정의 모델 추가", + "form": { + "name": { + "label": "모델 ID", + "placeholder": "llama3.2", + "required": "모델 ID는 필수 항목입니다." + }, + "provider": { + "label": "공급자", + "placeholder": "공급자 선택", + "required": "공급자는 필수 항목입니다." + }, + "type": { + "label": "모델 타입" + } + } + } + }, + "noModelFound": "모델을 찾을 수 없습니다. 올바른 기본 URL과 API 키를 가진 공급자가 추가되었는지 확인하세요.", + "radio": { + "chat": "챗 모델", + "embedding": "임베딩 모델", + "chatInfo": "는 챗 완료 및 대화 생성에 사용됩니다", + "embeddingInfo": "는 RAG 및 기타 의미 검색 관련 작업에 사용됩니다." + } +} diff --git a/src/assets/locale/ko/option.json b/src/assets/locale/ko/option.json new file mode 100644 index 0000000..2db30cc --- /dev/null +++ b/src/assets/locale/ko/option.json @@ -0,0 +1,13 @@ +{ + "newChat": "새 채팅", + "selectAPrompt": "프롬프트 선택", + "githubRepository": "GitHub 리포지토리", + "settings": "설정", + "sidebarTitle": "채팅 기록", + "error": "오류", + "somethingWentWrong": "문제가 발생했습니다", + "validationSelectModel": "계속하려면 모델을 선택하세요", + "deleteHistoryConfirmation": "이 기록을 삭제하시겠습니까?", + "editHistoryTitle": "새 제목 입력", + "temporaryChat": "임시 채팅" +} diff --git a/src/assets/locale/ko/playground.json b/src/assets/locale/ko/playground.json new file mode 100644 index 0000000..d60b102 --- /dev/null +++ b/src/assets/locale/ko/playground.json @@ -0,0 +1,30 @@ +{ + "ollamaState": { + "searching": "Ollama 검색 중 🦙", + "running": "Ollama 실행 중 🦙", + "notRunning": "Ollama에 연결할 수 없습니다 🦙", + "connectionError": "연결 오류가 발생한 것 같습니다. 문제 해결에 대한 자세한 내용은 문서를 참조하세요." + }, + "formError": { + "noModel": "모델을 선택하세요", + "noEmbeddingModel": "설정 > RAG 페이지에서 임베딩 모델을 설정하세요" + }, + "form": { + "textarea": { + "placeholder": "메시지를 입력하세요..." + }, + "webSearch": { + "on": "켜짐", + "off": "꺼짐" + } + }, + "tooltip": { + "searchInternet": "인터넷 검색", + "speechToText": "음성 입력", + "uploadImage": "이미지 업로드", + "stopStreaming": "스트리밍 중지", + "knowledge": "지식" + }, + "sendWhenEnter": "Enter 키를 누르면 전송", + "welcome": "안녕하세요! 오늘 어떻게 도와드릴까요?" +} diff --git a/src/assets/locale/ko/settings.json b/src/assets/locale/ko/settings.json new file mode 100644 index 0000000..f3c7109 --- /dev/null +++ b/src/assets/locale/ko/settings.json @@ -0,0 +1,347 @@ +{ + "generalSettings": { + "title": "일반 설정", + "settings": { + "heading": "웹 UI 설정", + "speechRecognitionLang": { + "label": "음성 인식 언어", + "placeholder": "언어 선택" + }, + "language": { + "label": "언어", + "placeholder": "언어 선택" + }, + "darkMode": { + "label": "테마 변경", + "options": { + "light": "라이트", + "dark": "다크" + } + }, + "searchMode": { + "label": "간편 인터넷 검색 실행" + }, + "copilotResumeLastChat": { + "label": "사이드 패널을 열 때 마지막 채팅 재개 (Copilot)" + }, + "hideCurrentChatModelSettings": { + "label": "현재 채팅 모델 설정 숨기기" + }, + "restoreLastChatModel": { + "label": "이전 채팅에서 마지막 사용한 모델 복원" + }, + "sendNotificationAfterIndexing": { + "label": "지식 베이스 처리 완료 후 알림 전송" + }, + "generateTitle": { + "label": "AI로 제목 생성" + }, + "ollamaStatus": { + "label": "Ollama 연결 상태 확인 활성화 또는 비활성화" + } + }, + "sidepanelRag": { + "heading": "웹사이트와의 Copilot 채팅 설정", + "ragEnabled": { + "label": "벡터 임베딩을 사용하여 웹사이트와 채팅" + }, + "maxWebsiteContext": { + "label": "일반 모드 웹사이트 콘텐츠 크기", + "placeholder": "콘텐츠 크기 (기본값 4028)" + } + }, + "webSearch": { + "heading": "웹 검색 관리", + "searchMode": { + "label": "간편한 인터넷 검색 실행" + }, + "provider": { + "label": "검색 엔진", + "placeholder": "검색 엔진 선택" + }, + "totalSearchResults": { + "label": "총 검색 결과", + "placeholder": "총 검색 결과 입력" + }, + "visitSpecificWebsite": { + "label": "메시지에 언급된 웹사이트 방문" + } + }, + "system": { + "heading": "시스템 설정", + "deleteChatHistory": { + "label": "채팅 기록 삭제", + "button": "삭제", + "confirm": "채팅 기록을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다." + }, + "export": { + "label": "채팅 기록, 지식 베이스, 프롬프트 내보내기", + "button": "데이터 내보내기", + "success": "내보내기 성공" + }, + "import": { + "label": "채팅 기록, 지식 베이스, 프롬프트 가져오기", + "button": "데이터 가져오기", + "success": "가져오기 성공", + "error": "가져오기 오류" + } + }, + "tts": { + "heading": "텍스트 음성 변환 설정", + "ttsEnabled": { + "label": "텍스트 음성 변환 활성화" + }, + "ttsProvider": { + "label": "텍스트 음성 변환 제공자", + "placeholder": "제공자 선택" + }, + "ttsVoice": { + "label": "텍스트 음성 변환 음성", + "placeholder": "음성 선택" + }, + "ssmlEnabled": { + "label": "SSML (Speech Synthesis Markup Language) 활성화" + } + } + }, + "manageModels": { + "title": "모델 관리", + "addBtn": "새 모델 추가", + "columns": { + "name": "이름", + "digest": "다이제스트", + "modifiedAt": "수정 일시", + "size": "크기", + "actions": "동작" + }, + "expandedColumns": { + "parentModel": "상위 모델", + "format": "형식", + "family": "패밀리", + "parameterSize": "파라미터 크기", + "quantizationLevel": "양자화 수준" + }, + "tooltip": { + "delete": "모델 삭제", + "repull": "모델 다시 가져오기" + }, + "confirm": { + "delete": "이 모델을 정말 삭제하시겠습니까?", + "repull": "이 모델을 정말 다시 가져오시겠습니까?" + }, + "modal": { + "title": "새 모델 추가", + "placeholder": "모델 이름 입력", + "pull": "모델 가져오기" + }, + "notification": { + "pullModel": "모델 가져오는 중", + "pullModelDescription": "{{modelName}} 모델을 가져오는 중입니다. 자세한 내용은 확장 기능 아이콘을 확인하세요.", + "success": "성공", + "error": "오류", + "successDescription": "모델 가져오기가 완료되었습니다", + "successDeleteDescription": "모델 삭제가 완료되었습니다", + "someError": "문제가 발생했습니다. 나중에 다시 시도해 주세요." + } + }, + "managePrompts": { + "title": "프롬프트 관리", + "addBtn": "새 프롬프트 추가", + "option1": "일반", + "option2": "RAG", + "questionPrompt": "질문 프롬프트", + "columns": { + "title": "제목", + "prompt": "프롬프트", + "type": "프롬프트 유형", + "actions": "동작" + }, + "systemPrompt": "시스템 프롬프트", + "quickPrompt": "퀵 프롬프트", + "tooltip": { + "delete": "프롬프트 삭제", + "edit": "프롬프트 수정" + }, + "confirm": { + "delete": "이 프롬프트를 정말 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다." + }, + "modal": { + "addTitle": "새 프롬프트 추가", + "editTitle": "프롬프트 수정" + }, + "segmented": { + "custom": "커스텀 프롬프트", + "copilot": "Copilot 프롬프트" + }, + "form": { + "title": { + "label": "제목", + "placeholder": "훌륭한 프롬프트", + "required": "제목을 입력하세요" + }, + "prompt": { + "label": "프롬프트", + "placeholder": "프롬프트 입력", + "required": "프롬프트를 입력하세요", + "help": "프롬프트 내에서 {key}를 변수로 사용할 수 있습니다.", + "missingTextPlaceholder": "프롬프트에 {text} 변수가 없습니다. 추가해 주세요." + }, + "isSystem": { + "label": "시스템 프롬프트" + }, + "btnSave": { + "saving": "프롬프트 추가 중...", + "save": "프롬프트 추가" + }, + "btnEdit": { + "saving": "프롬프트 업데이트 중...", + "save": "프롬프트 업데이트" + } + }, + "notification": { + "addSuccess": "프롬프트가 추가되었습니다", + "addSuccessDesc": "프롬프트가 정상적으로 추가되었습니다", + "error": "오류", + "someError": "문제가 발생했습니다. 나중에 다시 시도해 주세요.", + "updatedSuccess": "프롬프트가 업데이트되었습니다", + "updatedSuccessDesc": "프롬프트가 정상적으로 업데이트되었습니다", + "deletedSuccess": "프롬프트가 삭제되었습니다", + "deletedSuccessDesc": "프롬프트가 정상적으로 삭제되었습니다" + } + }, + "manageShare": { + "title": "공유 관리", + "heading": "페이지 공유 URL 설정", + "form": { + "url": { + "label": "페이지 공유 URL", + "placeholder": "페이지 공유 URL 입력", + "required": "페이지 공유 URL을 입력해 주세요!", + "help": "개인정보 보호를 위해 페이지 공유를 자체 호스팅하고, 해당 URL을 여기에 입력할 수 있습니다. 자세히 보기" + } + }, + "webshare": { + "heading": "웹 공유", + "columns": { + "title": "제목", + "url": "URL", + "actions": "동작" + }, + "tooltip": { + "delete": "공유 삭제" + }, + "confirm": { + "delete": "이 공유를 정말 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다." + }, + "label": "페이지 공유 관리", + "description": "페이지 공유 기능을 활성화 또는 비활성화" + }, + "notification": { + "pageShareSuccess": "페이지 공유 URL이 정상적으로 업데이트되었습니다", + "someError": "문제가 발생했습니다. 나중에 다시 시도해 주세요.", + "webShareDeleteSuccess": "웹 공유가 정상적으로 삭제되었습니다" + } + }, + "ollamaSettings": { + "title": "Ollama 설정", + "heading": "Ollama 설정하기", + "settings": { + "ollamaUrl": { + "label": "Ollama URL", + "placeholder": "Ollama URL 입력" + }, + "advanced": { + "label": "Ollama URL 고급 설정", + "urlRewriteEnabled": { + "label": "사용자 지정 Origin URL 활성화 또는 비활성화" + }, + "rewriteUrl": { + "label": "사용자 지정 Origin URL", + "placeholder": "사용자 지정 Origin URL 입력" + }, + "headers": { + "label": "사용자 지정 헤더", + "add": "헤더 추가", + "key": { + "label": "헤더 키", + "placeholder": "인증" + }, + "value": { + "label": "헤더 값", + "placeholder": "베어러 토큰" + } + }, + "help": "Page Assist에서 Ollama 연결에 문제가 있는 경우 사용자 지정 Origin URL을 설정할 수 있습니다. 설정에 대한 자세한 내용은 여기를 클릭하세요." + } + } + }, + "manageSearch": { + "title": "웹 검색 관리", + "heading": "웹 검색 설정하기" + }, + "about": { + "title": "소개", + "heading": "소개", + "chromeVersion": "Page Assist 버전", + "ollamaVersion": "Ollama 버전", + "support": "Page Assist 프로젝트는 다음 플랫폼에서 기부나 후원을 통해 지원할 수 있습니다:", + "koFi": "Ko-fi로 후원하기", + "githubSponsor": "GitHub에서 후원하기", + "githubRepo": "GitHub 저장소" + }, + "manageKnowledge": { + "title": "지식 관리", + "heading": "지식 베이스 구성하기" + }, + "rag": { + "title": "RAG 설정", + "ragSettings": { + "label": "RAG 설정", + "model": { + "label": "임베딩 모델", + "required": "모델을 선택해주세요", + "help": "`nomic-embed-text`와 같은 임베딩 모델 사용을 강력히 권장합니다.", + "placeholder": "모델 선택" + }, + "chunkSize": { + "label": "청크 크기", + "placeholder": "청크 크기 입력", + "required": "청크 크기를 입력해주세요" + }, + "chunkOverlap": { + "label": "청크 오버랩", + "placeholder": "청크 오버랩 입력", + "required": "청크 오버랩을 입력해주세요" + }, + "totalFilePerKB": { + "label": "지식 베이스 기본 파일 업로드 제한", + "placeholder": "기본 파일 업로드 제한 입력 (예: 10)", + "required": "기본 파일 업로드 제한을 입력해주세요" + }, + "noOfRetrievedDocs": { + "label": "검색 문서 수", + "placeholder": "검색 문서 수 입력", + "required": "검색 문서 수를 입력해주세요" + } + }, + "prompt": { + "label": "RAG 프롬프트 설정", + "option1": "일반", + "option2": "웹", + "alert": "여기서 시스템 프롬프트를 설정하는 것은 더 이상 권장되지 않습니다. 프롬프트 추가 및 편집은 '프롬프트 관리' 섹션을 이용해주세요. 이 섹션은 향후 릴리스에서 제거될 예정입니다.", + "systemPrompt": "시스템 프롬프트", + "systemPromptPlaceholder": "시스템 프롬프트 입력", + "webSearchPrompt": "웹 검색 프롬프트", + "webSearchPromptHelp": "프롬프트에서 `{search_results}`를 제거하지 마세요.", + "webSearchPromptError": "웹 검색 프롬프트를 입력해주세요", + "webSearchPromptPlaceholder": "웹 검색 프롬프트 입력", + "webSearchFollowUpPrompt": "웹 검색 후속 프롬프트", + "webSearchFollowUpPromptHelp": "프롬프트에서 `{chat_history}`와 `{question}`를 제거하지 마세요.", + "webSearchFollowUpPromptError": "웹 검색 후속 프롬프트를 입력해주세요!", + "webSearchFollowUpPromptPlaceholder": "웹 검색 후속 프롬프트" + } + }, + "chromeAiSettings": { + "title": "Chrome AI 설정" + } +} diff --git a/src/assets/locale/ko/sidepanel.json b/src/assets/locale/ko/sidepanel.json new file mode 100644 index 0000000..b7a5eea --- /dev/null +++ b/src/assets/locale/ko/sidepanel.json @@ -0,0 +1,5 @@ +{ + "tooltip": { + "embed": "페이지를 임베드하는 데 몇 분이 걸릴 수 있습니다. 잠시만 기다려 주세요..." + } +} diff --git a/src/assets/locale/ml/common.json b/src/assets/locale/ml/common.json index bb1149a..cd6868d 100644 --- a/src/assets/locale/ml/common.json +++ b/src/assets/locale/ml/common.json @@ -69,6 +69,10 @@ "label": "സന്ദർഭങ്ങളുടെ എണ്ണം", "placeholder": "സന്ദർഭങ്ങളുടെ സംഖ്യ നൽകുക (സ്ഥിരം: 2048)" }, + "numPredict": { + "label": "പരമാവധി ടോക്കണുകൾ (num_predict)", + "placeholder": "പരമാവധി ടോക്കൺ മൂല്യം നൽകുക (ഉദാ: 2048, 4096)" + }, "seed": { "label": "സീഡ്", "placeholder": "സീഡ് വില്യമ നൽകുക (ഉദാ: 1234)", @@ -110,5 +114,7 @@ "older": "പഴയത്" }, "pin": "പിൻ ചെയ്യുക", - "unpin": "അൺപിൻ ചെയ്യുക" + "unpin": "അൺപിൻ ചെയ്യുക", + "generationInfo": "ജനറേഷൻ വിവരങ്ങൾ" + } \ No newline at end of file diff --git a/src/assets/locale/ml/openai.json b/src/assets/locale/ml/openai.json index 6fe486e..5bbaaea 100644 --- a/src/assets/locale/ml/openai.json +++ b/src/assets/locale/ml/openai.json @@ -42,7 +42,7 @@ "delete": "ഇല്ലാതാക്കുക", "edit": "തിരുത്തുക", "newModel": "ദാതാവിലേക്ക് മോഡലുകൾ ചേർക്കുക", - "noNewModel": "LMStudio-യ്ക്കായി, ഞങ്ങൾ ഡൈനാമിക്കായി ലഭ്യമാക്കുന്നു. മാനുവലായി ചേർക്കേണ്ടതില്ല.", + "noNewModel": "LMStudio, Ollama, Llamafile-യ്ക്കായി, ഞങ്ങൾ ഡൈനാമിക്കായി ലഭ്യമാക്കുന്നു. മാനുവലായി ചേർക്കേണ്ടതില്ല.", "searchModel": "മോഡൽ തിരയുക", "selectAll": "എല്ലാം തിരഞ്ഞെടുക്കുക", "save": "സംരക്ഷിക്കുക", diff --git a/src/assets/locale/ml/option.json b/src/assets/locale/ml/option.json index f8fcf70..1004b13 100644 --- a/src/assets/locale/ml/option.json +++ b/src/assets/locale/ml/option.json @@ -8,5 +8,6 @@ "somethingWentWrong": "എന്തോ തെറ്റായി", "deleteHistoryConfirmation": "നിങ്ങളുടെ ചാറ്റ് ചരിത്രം ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ?", "editHistoryTitle": "ചാറ്റ് title എഡിറ്റുചെയ്യുക", - "validationSelectModel": "തുടരുന്നതിന് ഒരു മോഡല്‍ തിരഞ്ഞെടുക്കുക" + "validationSelectModel": "തുടരുന്നതിന് ഒരു മോഡല്‍ തിരഞ്ഞെടുക്കുക", + "temporaryChat": "താൽക്കാലിക ചാറ്റ്" } \ No newline at end of file diff --git a/src/assets/locale/ml/playground.json b/src/assets/locale/ml/playground.json index 8297aa4..e789350 100644 --- a/src/assets/locale/ml/playground.json +++ b/src/assets/locale/ml/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "സ്ട്രീമിംഗ് നിർത്തുക", "knowledge": "അറിവ്" }, - "sendWhenEnter": "എന്റര്‍ അമര്‍ത്തുമ്പോള്‍ അയയ്ക്കുക" + "sendWhenEnter": "എന്റര്‍ അമര്‍ത്തുമ്പോള്‍ അയയ്ക്കുക", + "welcome": "നമസ്കാരം! ഇന്ന് എനിക്ക് നിങ്ങളെ എങ്ങനെ സഹായിക്കാൻ കഴിയും?" } \ No newline at end of file diff --git a/src/assets/locale/ml/settings.json b/src/assets/locale/ml/settings.json index b6ebd30..03d67f1 100644 --- a/src/assets/locale/ml/settings.json +++ b/src/assets/locale/ml/settings.json @@ -35,6 +35,9 @@ }, "generateTitle": { "label": "എഐ ഉപയോഗിച്ച് ശീർഷകം സൃഷ്ടിക്കുക" + }, + "ollamaStatus": { + "label": "ഒല്ലാമ കണക്ഷൻ സ്റ്റാറ്റസ് പരിശോധന പ്രവർത്തനക്ഷമമാക്കുകയോ പ്രവർത്തനരഹിതമാക്കുകയോ ചെയ്യുക" } }, "sidepanelRag": { diff --git a/src/assets/locale/no/common.json b/src/assets/locale/no/common.json index 6665280..1720d1f 100644 --- a/src/assets/locale/no/common.json +++ b/src/assets/locale/no/common.json @@ -70,6 +70,10 @@ "label": "Kontekstlengde", "placeholder": "Skriv inn kontekstlengdeverdi (standard: 2048)" }, + "numPredict": { + "label": "Maks Tokens (num_predict)", + "placeholder": "Skriv inn Maks Tokens-verdi (f.eks. 2048, 4096)" + }, "seed": { "label": "Seed", "placeholder": "Skriv inn seedverdi (f.eks. 1234)", @@ -112,5 +116,6 @@ "older": "Eldre" }, "pin": "Fest", - "unpin": "Løsne" + "unpin": "Løsne", + "generationInfo": "Generasjonsinformasjon" } \ No newline at end of file diff --git a/src/assets/locale/no/openai.json b/src/assets/locale/no/openai.json index 91ddc3d..aa748bb 100644 --- a/src/assets/locale/no/openai.json +++ b/src/assets/locale/no/openai.json @@ -42,7 +42,7 @@ "delete": "Slett", "edit": "Rediger", "newModel": "Legg til modeller for leverandør", - "noNewModel": "For LMStudio henter vi dynamisk. Ingen manuell tillegging nødvendig.", + "noNewModel": "For LMStudio, Ollama, Llamafile, henter vi dynamisk. Ingen manuell tillegging nødvendig.", "searchModel": "Søk etter modell", "selectAll": "Velg alle", "save": "Lagre", diff --git a/src/assets/locale/no/option.json b/src/assets/locale/no/option.json index 76d335e..64adb7b 100644 --- a/src/assets/locale/no/option.json +++ b/src/assets/locale/no/option.json @@ -8,5 +8,6 @@ "somethingWentWrong": "Noe gikk galt", "validationSelectModel": "Vennligst velg en modell for å fortsette", "deleteHistoryConfirmation": "Er du sikker på at du vil slette denne historikken?", - "editHistoryTitle": "Skriv inn en ny tittel" + "editHistoryTitle": "Skriv inn en ny tittel", + "temporaryChat": "Midlertidig Chat" } diff --git a/src/assets/locale/no/playground.json b/src/assets/locale/no/playground.json index b812649..43e2fa3 100644 --- a/src/assets/locale/no/playground.json +++ b/src/assets/locale/no/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Stopp Streaming", "knowledge": "Kunnskap" }, - "sendWhenEnter": "Søk når Enter trykkes" + "sendWhenEnter": "Søk når Enter trykkes", + "welcome": "Hei! Hvordan kan jeg hjelpe deg i dag?" } diff --git a/src/assets/locale/no/settings.json b/src/assets/locale/no/settings.json index f31a65d..1d9c2cd 100644 --- a/src/assets/locale/no/settings.json +++ b/src/assets/locale/no/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Generer tittel med AI" + }, + "ollamaStatus": { + "label": "Aktiver eller deaktiver Ollama tilkoblingsstatussjekk" } }, "sidepanelRag": { diff --git a/src/assets/locale/pt-BR/common.json b/src/assets/locale/pt-BR/common.json index ba4f252..660514d 100644 --- a/src/assets/locale/pt-BR/common.json +++ b/src/assets/locale/pt-BR/common.json @@ -70,6 +70,10 @@ "label": "Número de Contextos", "placeholder": "Digite o valor do Número de Contextos (padrão: 2048)" }, + "numPredict": { + "label": "Máximo de Tokens (num_predict)", + "placeholder": "Digite o valor do Máximo de Tokens (ex: 2048, 4096)" + }, "seed": { "label": "Semente", "placeholder": "Digite o valor da Semente (ex: 1234)", @@ -111,5 +115,6 @@ "older": "Mais Antigos" }, "pin": "Fixar", - "unpin": "Desafixar" + "unpin": "Desafixar", + "generationInfo": "Informações de Geração" } \ No newline at end of file diff --git a/src/assets/locale/pt-BR/option.json b/src/assets/locale/pt-BR/option.json index de29ff1..eeffe1c 100644 --- a/src/assets/locale/pt-BR/option.json +++ b/src/assets/locale/pt-BR/option.json @@ -8,5 +8,6 @@ "somethingWentWrong": "Algo deu errado", "validationSelectModel": "Por favor, selecione um modelo para continuar", "deleteHistoryConfirmation": "Tem certeza de que deseja excluir este histórico?", - "editHistoryTitle": "Digite um novo título" + "editHistoryTitle": "Digite um novo título", + "temporaryChat": "Chat Temporário" } \ No newline at end of file diff --git a/src/assets/locale/pt-BR/playground.json b/src/assets/locale/pt-BR/playground.json index 6e91e97..ea11ffa 100644 --- a/src/assets/locale/pt-BR/playground.json +++ b/src/assets/locale/pt-BR/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Parar Streaming", "knowledge": "Conhecimento" }, - "sendWhenEnter": "Enviar ao pressionar Enter" + "sendWhenEnter": "Enviar ao pressionar Enter", + "welcome": "Olá! Como posso ajudar você hoje?" } \ No newline at end of file diff --git a/src/assets/locale/pt-BR/settings.json b/src/assets/locale/pt-BR/settings.json index ac7e70b..fad3b11 100644 --- a/src/assets/locale/pt-BR/settings.json +++ b/src/assets/locale/pt-BR/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Gerar título usando IA" + }, + "ollamaStatus": { + "label": "Ativar ou desativar verificação de status da conexão Ollama" } }, "sidepanelRag": { diff --git a/src/assets/locale/ru/common.json b/src/assets/locale/ru/common.json index b619def..31291a0 100644 --- a/src/assets/locale/ru/common.json +++ b/src/assets/locale/ru/common.json @@ -70,6 +70,10 @@ "label": "Количество контекстов", "placeholder": "Введите значение количества контекстов (по умолчанию: 2048)" }, + "numPredict": { + "label": "Максимальное количество токенов (num_predict)", + "placeholder": "Введите значение максимального количества токенов (например, 2048, 4096)" + }, "seed": { "label": "Сид", "placeholder": "Введите значение сида (например, 1234)", @@ -111,5 +115,6 @@ "older": "Ранее" }, "pin": "Закрепить", - "unpin": "Открепить" + "unpin": "Открепить", + "generationInfo": "Информация о генерации" } \ No newline at end of file diff --git a/src/assets/locale/ru/openai.json b/src/assets/locale/ru/openai.json index 436c676..2b63545 100644 --- a/src/assets/locale/ru/openai.json +++ b/src/assets/locale/ru/openai.json @@ -42,7 +42,7 @@ "delete": "Удалить", "edit": "Редактировать", "newModel": "Добавить модели к провайдеру", - "noNewModel": "Для LMStudio мы загружаем динамически. Ручное добавление не требуется.", + "noNewModel": "Для LMStudio, Ollama, Llamafile, мы загружаем динамически. Ручное добавление не требуется.", "searchModel": "Поиск модели", "selectAll": "Выбрать все", "save": "Сохранить", diff --git a/src/assets/locale/ru/option.json b/src/assets/locale/ru/option.json index f15c106..bd8f987 100644 --- a/src/assets/locale/ru/option.json +++ b/src/assets/locale/ru/option.json @@ -8,5 +8,6 @@ "somethingWentWrong": "Что-то пошло не так", "validationSelectModel": "Пожалуйста, выберите модель, чтобы продолжить", "deleteHistoryConfirmation": "Вы уверены, что хотите удалить эту историю?", - "editHistoryTitle": "Введите новое название" + "editHistoryTitle": "Введите новое название", + "temporaryChat": "Временный чат" } diff --git a/src/assets/locale/ru/playground.json b/src/assets/locale/ru/playground.json index fdc2933..39ba724 100644 --- a/src/assets/locale/ru/playground.json +++ b/src/assets/locale/ru/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Остановить поток", "knowledge": "Знание" }, - "sendWhenEnter": "Отправить при нажатии клавиши Enter" + "sendWhenEnter": "Отправить при нажатии клавиши Enter", + "welcome": "Здравствуйте! Как я могу помочь вам сегодня?" } diff --git a/src/assets/locale/ru/settings.json b/src/assets/locale/ru/settings.json index 0c3c183..adf0008 100644 --- a/src/assets/locale/ru/settings.json +++ b/src/assets/locale/ru/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Сгенерировать заголовок с помощью ИИ" + }, + "ollamaStatus": { + "label": "Включить или отключить проверку состояния подключения Ollama" } }, "sidepanelRag": { diff --git a/src/assets/locale/sv/common.json b/src/assets/locale/sv/common.json index 3127267..4698dc7 100644 --- a/src/assets/locale/sv/common.json +++ b/src/assets/locale/sv/common.json @@ -70,6 +70,10 @@ "label": "Antal kontexter", "placeholder": "Ange antal kontextvärden (standard: 2048)" }, + "numPredict": { + "label": "Max antal tokens (num_predict)", + "placeholder": "Ange Max antal tokens värde (t.ex. 2048, 4096)" + }, "seed": { "label": "Frö", "placeholder": "Ange frövärde (t.ex. 1234)", @@ -116,5 +120,6 @@ "older": "Äldre" }, "pin": "Fäst", - "unpin": "Ta bort fäst" + "unpin": "Ta bort fäst", + "generationInfo": "Generationsinformation" } diff --git a/src/assets/locale/sv/option.json b/src/assets/locale/sv/option.json index d7017ee..98e1012 100644 --- a/src/assets/locale/sv/option.json +++ b/src/assets/locale/sv/option.json @@ -8,5 +8,6 @@ "somethingWentWrong": "Något gick fel", "validationSelectModel": "Vänligen välj en modell för att fortsätta", "deleteHistoryConfirmation": "Är du säker på att du vill radera denna historik?", - "editHistoryTitle": "Ange en ny titel" + "editHistoryTitle": "Ange en ny titel", + "temporaryChat": "Tillfällig chatt" } diff --git a/src/assets/locale/sv/playground.json b/src/assets/locale/sv/playground.json index d7195c5..16c8e80 100644 --- a/src/assets/locale/sv/playground.json +++ b/src/assets/locale/sv/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Stoppa strömning", "knowledge": "Kunskap" }, - "sendWhenEnter": "Skicka när Enter trycks" + "sendWhenEnter": "Skicka när Enter trycks", + "welcome": "Hej! Hur kan jag hjälpa dig idag?" } diff --git a/src/assets/locale/sv/settings.json b/src/assets/locale/sv/settings.json index cb28f1e..d1e11d0 100644 --- a/src/assets/locale/sv/settings.json +++ b/src/assets/locale/sv/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Generera titel med AI" + }, + "ollamaStatus": { + "label": "Aktivera eller inaktivera Ollama anslutningsstatuskontroll" } }, "sidepanelRag": { diff --git a/src/assets/locale/uk/chrome.json b/src/assets/locale/uk/chrome.json new file mode 100644 index 0000000..12fa7ee --- /dev/null +++ b/src/assets/locale/uk/chrome.json @@ -0,0 +1,13 @@ +{ + "heading": "Налаштування Chrome AI", + "status": { + "label": "Ввімкнути або вимкнути підтримку Chrome AI на Page Assist" + }, + "error": { + "browser_not_supported": "Ця версія Chrome не підтримується моделлю Gemini Nano. Будь ласка, оновіть до версії 127 або новішої", + "ai_not_supported": "Налаштування chrome://flags/#prompt-api-for-gemini-nano не увімкнено. Будь ласка, увімкніть його.", + "ai_not_ready": "Модель Gemini Nano ще не готова; вам потрібно перевірити налаштування Chrome знову", + "internal_error": "Стався внутрішній збій. Будь ласка, спробуйте пізніше." + }, + "errorDescription": "Щоб використовувати Chrome AI, вам потрібна версія переглядача новіша за 127-му, яка наразі доступна в каналах Dev і Canary. Після завантаження підтримуваної версії виконайте наступні кроки:\n\n1. Перейдіть до `chrome://flags/#prompt-api-for-gemini-nano` та виберіть \"Ввімкнути\".\n2. Перейдіть до `chrome://flags/#optimization-guide-on-device-model` та виберіть \"EnabledBypassPrefRequirement\".\n3. Перейдіть до `chrome://components`, знайдіть \"Optimization Guide On Device Model\" і натисніть \"Перевірити оновлення\". Це завантажить модель. Якщо ви не бачите налаштувань, повторіть кроки 1 і 2 та перезапустіть переглядач." +} diff --git a/src/assets/locale/uk/common.json b/src/assets/locale/uk/common.json new file mode 100644 index 0000000..899e12b --- /dev/null +++ b/src/assets/locale/uk/common.json @@ -0,0 +1,125 @@ +{ + "pageAssist": "Допомога на сторінці", + "selectAModel": "Виберіть модель", + "save": "Зберегти", + "saved": "Збережено", + "cancel": "Скасувати", + "retry": "Спробувати знову", + "share": { + "tooltip": { + "share": "Поділитися" + }, + "modal": { + "title": "Поділитися посиланням на чат" + }, + "form": { + "defaultValue": { + "name": "Анонімний", + "title": "Неназваний чат" + }, + "title": { + "label": "Назва чату", + "placeholder": "Введіть назву чату", + "required": "Назва чату обовʼязкова" + }, + "name": { + "label": "Ваше імʼя", + "placeholder": "Введіть ваше імʼя", + "required": "Ваше імʼя обов'язкове" + }, + "btn": { + "save": "Створити посилання", + "saving": "Створення посилання..." + } + }, + "notification": { + "successGenerate": "Посилання скопійовано до буфера обміну", + "failGenerate": "Не вдалося створити посилання" + } + }, + "copyToClipboard": "Копіювати в буфер обміну", + "webSearch": "Пошук у мережі", + "regenerate": "Перегенерувати", + "edit": "Редагувати", + "delete": "Видалити", + "saveAndSubmit": "Зберегти та надіслати", + "editMessage": { + "placeholder": "Введіть повідомлення..." + }, + "submit": "Надіслати", + "noData": "Немає даних", + "noHistory": "Немає історії чату", + "chatWithCurrentPage": "Чат з поточної сторінки", + "beta": "Бета", + "tts": "Читання вголос", + "currentChatModelSettings": "Налаштування поточної моделі чату", + "modelSettings": { + "label": "Налаштування моделі", + "description": "Встановіть глобальні параметри моделі для всіх чатів", + "form": { + "keepAlive": { + "label": "Тривалість збереження в памʼяті", + "help": "вказує, як довго модель залишатиметься завантаженою у памʼять після запиту (за замовчуванням: 5 хв)", + "placeholder": "Введіть тривалість збереження у памʼяті (наприклад, 5m, 10m, 1h)" + }, + "temperature": { + "label": "Температура", + "placeholder": "Введіть значення температури (наприклад, 0.7, 1.0)" + }, + "numCtx": { + "label": "Кількість контекстів", + "placeholder": "Введіть кількість контекстів (типово: 2048)" + }, + "numPredict": { + "label": "Максимальна кількість токенів", + "placeholder": "Введіть максимальну кількість токенів (наприклад, 2048, 4096)" + }, + "seed": { + "label": "Зерно", + "placeholder": "Введіть значення зерна (наприклад, 1234)", + "help": "Повторюваність виводу моделі" + }, + "topK": { + "label": "Top K", + "placeholder": "Введіть значення для Верхніх K (наприклад, 40, 100)" + }, + "topP": { + "label": "Top P", + "placeholder": "Введіть значення для Верхнього P (наприклад, 0.9, 0.95)" + }, + "numGpu": { + "label": "Кількість GPU", + "placeholder": "Введіть кількість шарів для відправки на GPU" + }, + "systemPrompt": { + "label": "Тимчасовий системний запит", + "placeholder": "Введіть системний запит", + "help": "Швидкий спосіб встановити системний запит для поточного чату, який замінить вибраний системний запит, якщо він існує." + } + }, + "advanced": "Додаткові налаштування моделі" + }, + "copilot": { + "summary": "Підсумувати", + "explain": "Пояснити", + "rephrase": "Перефразувати", + "translate": "Перекласти", + "custom": "Власне" + }, + "citations": "Цитати", + "segmented": { + "ollama": "Моделі Ollama", + "custom": "Власні моделі" + }, + "downloadCode": "Завантажити код", + "date": { + "pinned": "Прикріплено", + "today": "Сьогодні", + "yesterday": "Вчора", + "last7Days": "Останні 7 днів", + "older": "Старіше" + }, + "pin": "Прикріпити", + "unpin": "Відкріпити", + "generationInfo": "Інформація про генерацію" +} diff --git a/src/assets/locale/uk/knowledge.json b/src/assets/locale/uk/knowledge.json new file mode 100644 index 0000000..dd5dd9f --- /dev/null +++ b/src/assets/locale/uk/knowledge.json @@ -0,0 +1,40 @@ +{ + "addBtn": "Додати нове знання", + "columns": { + "title": "Назва", + "status": "Статус", + "embeddings": "Модель вкладень", + "createdAt": "Створено в", + "action": "Дії" + }, + "expandedColumns": { + "name": "Імʼя" + }, + "confirm": { + "delete": "Ви впевнені, що хочете видалити це знання?" + }, + "deleteSuccess": "Знання успішно видалено", + "status": { + "pending": "Очікування", + "finished": "Завершено", + "processing": "Обробка", + "failed": "Не вдалося" + }, + "addKnowledge": "Додати знання", + "form": { + "title": { + "label": "Назва знань", + "placeholder": "Введіть назву знань", + "required": "Назва знань обовʼязкова" + }, + "uploadFile": { + "label": "Завантажити файл", + "uploadText": "Перетягніть файл сюди або натисніть для завантаження", + "uploadHint": "Підтримуються типи файлів: .pdf, .csv, .txt, .md, .docx", + "required": "Файл обовʼязковий" + }, + "submit": "Надіслати", + "success": "Знання успішно додано" + }, + "noEmbeddingModel": "Будь ласка, додайте модель вкладень з сторінки налаштувань RAG спочатку" +} diff --git a/src/assets/locale/uk/openai.json b/src/assets/locale/uk/openai.json new file mode 100644 index 0000000..f714a97 --- /dev/null +++ b/src/assets/locale/uk/openai.json @@ -0,0 +1,90 @@ +{ + "settings": "Сумісний з OpenAI API", + "heading": "Сумісний з OpenAI API", + "subheading": "Тут керування та налаштування ваших постачальників OpenAI API.", + "addBtn": "Додати постачальника", + "table": { + "name": "Назва постачальника", + "baseUrl": "Базовий URL", + "actions": "Дії" + }, + "modal": { + "titleAdd": "Додати нового постачальника", + "name": { + "label": "Назва постачальника", + "required": "Назва постачальника обовʼязкова.", + "placeholder": "Введіть назву постачальника" + }, + "baseUrl": { + "label": "Базовий URL", + "help": "Базовий URL постачальника OpenAI API. Наприклад, (http://localhost:1234/v1)", + "required": "Базовий URL обовʼязковий.", + "placeholder": "Введіть базовий URL" + }, + "apiKey": { + "label": "Ключ API", + "required": "Ключ API обовʼязковий.", + "placeholder": "Введіть ключ API" + }, + "submit": "Зберегти", + "update": "Оновити", + "deleteConfirm": "Ви впевнені, що хочете видалити цього постачальника?", + "model": { + "title": "Список моделей", + "subheading": "Виберіть чат-моделі, які ви хочете використовувати з цим постачальником.", + "success": "Моделі успішно додано." + }, + "tipLMStudio": "Page Assist автоматично отримає моделі, завантажені в LM Studio. Вам не потрібно додавати їх вручну." + }, + "addSuccess": "Постачальника додано успішно.", + "deleteSuccess": "Постачальника видалено успішно.", + "updateSuccess": "Постачальника оновлено успішно.", + "delete": "Видалити", + "edit": "Редагувати", + "newModel": "Додати моделі до постачальника", + "noNewModel": "Для LMStudio, Ollama, Llamafile ми отримуємо моделі динамічно. Ручного додавання не потрібно.", + "searchModel": "Пошук моделі", + "selectAll": "Вибрати все", + "save": "Зберегти", + "saving": "Збереження...", + "manageModels": { + "columns": { + "name": "Назва моделі", + "model_type": "Тип моделі", + "model_id": "Ідентифікатор моделі", + "provider": "Назва постачальника", + "actions": "Дії" + }, + "tooltip": { + "delete": "Видалити" + }, + "confirm": { + "delete": "Ви впевнені, що хочете видалити цю модель?" + }, + "modal": { + "title": "Додати власну модель", + "form": { + "name": { + "label": "Ідентифікатор моделі", + "placeholder": "llama3.2", + "required": "Ідентифікатор моделі обовʼязковий." + }, + "provider": { + "label": "Постачальник", + "placeholder": "Виберіть постачальника", + "required": "Постачальник обовʼязковий." + }, + "type": { + "label": "Тип моделі" + } + } + } + }, + "noModelFound": "Не знайдено моделей. Переконайтеся, що ви додали правильного постачальника з базовим URL та ключем API.", + "radio": { + "chat": "Модель чату", + "embedding": "Модель вкладень", + "chatInfo": "використовується для завершення чату та генерації розмови", + "embeddingInfo": "використовується для RAG та інших повʼязаних завдань семантичного пошуку." + } +} diff --git a/src/assets/locale/uk/option.json b/src/assets/locale/uk/option.json new file mode 100644 index 0000000..22a76d4 --- /dev/null +++ b/src/assets/locale/uk/option.json @@ -0,0 +1,13 @@ +{ + "newChat": "Новий чат", + "selectAPrompt": "Виберіть запит", + "githubRepository": "Репозиторій GitHub", + "settings": "Налаштування", + "sidebarTitle": "Історія чату", + "error": "Збій", + "somethingWentWrong": "Щось пішло не так", + "validationSelectModel": "Будь ласка, виберіть модель для продовження", + "deleteHistoryConfirmation": "Ви впевнені, що хочете видалити цю історію?", + "editHistoryTitle": "Введіть нову назву", + "temporaryChat": "Тимчасовий чат" +} diff --git a/src/assets/locale/uk/playground.json b/src/assets/locale/uk/playground.json new file mode 100644 index 0000000..29e244d --- /dev/null +++ b/src/assets/locale/uk/playground.json @@ -0,0 +1,30 @@ +{ + "ollamaState": { + "searching": "Пошук вашого Ollama 🦙", + "running": "Ollama працює 🦙", + "notRunning": "Неможливо підключитися до Ollama 🦙", + "connectionError": "Здається, у вас виникла проблема з підключенням. Будь ласка, зверніться до цієї документації для усунення несправностей." + }, + "formError": { + "noModel": "Виберіть модель", + "noEmbeddingModel": "Налаштуйте модель вкладень на сторінці Налаштування > RAG" + }, + "form": { + "textarea": { + "placeholder": "Введіть повідомлення..." + }, + "webSearch": { + "on": "Увімкнено", + "off": "Вимкнено" + } + }, + "tooltip": { + "searchInternet": "Пошук в Інтернеті", + "speechToText": "Голос у текст", + "uploadImage": "Завантажити зображення", + "stopStreaming": "Зупинити трансляцію", + "knowledge": "Знання" + }, + "sendWhenEnter": "Надсилати при натисканні Enter", + "welcome": "Вітаю! Як я можу допомогти вам сьогодні?" +} \ No newline at end of file diff --git a/src/assets/locale/uk/settings.json b/src/assets/locale/uk/settings.json new file mode 100644 index 0000000..db0695b --- /dev/null +++ b/src/assets/locale/uk/settings.json @@ -0,0 +1,344 @@ +{ + "generalSettings": { + "title": "Загальні налаштування", + "settings": { + "heading": "Налаштування веб-інтерфейсу", + "speechRecognitionLang": { + "label": "Мова для розпізнавання голосу", + "placeholder": "Виберіть мову" + }, + "language": { + "label": "Мова інтерфейсу", + "placeholder": "Виберіть мову" + }, + "darkMode": { + "label": "Змінити тему", + "options": { + "light": "Світла", + "dark": "Темна" + } + }, + "copilotResumeLastChat": { + "label": "Поновити останню розмову при відкритті бічної панелі (Copilot)" + }, + "hideCurrentChatModelSettings": { + "label": "Приховати налаштування поточної моделі чату" + }, + "restoreLastChatModel": { + "label": "Відновити останню використану модель для попередніх чатів" + }, + "sendNotificationAfterIndexing": { + "label": "Надсилати сповіщення після завершення обробки бази знань" + }, + "generateTitle": { + "label": "Створювати заголовок за допомогою AI" + }, + "ollamaStatus": { + "label": "Увімкнути або вимкнути перевірку стану з'єднання Ollama" + } + }, + "sidepanelRag": { + "heading": "Чат з Copilot з налаштуваннями веб-сайту", + "ragEnabled": { + "label": "Чат з веб-сайтом за допомогою векторних вкладень" + }, + "maxWebsiteContext": { + "label": "Розмір вмісту нормального режиму", + "placeholder": "Розмір вмісту (типово 4028)" + } + }, + "webSearch": { + "heading": "Управління веб-пошуком", + "searchMode": { + "label": "Виконувати простий пошук в Інтернеті" + }, + "provider": { + "label": "Пошукова система", + "placeholder": "Виберіть пошукову систему" + }, + "totalSearchResults": { + "label": "Загальна кількість результатів пошуку", + "placeholder": "Введіть загальну кількість результатів пошуку" + }, + "visitSpecificWebsite": { + "label": "Відвідати веб-сайт, згаданий у повідомленні" + } + }, + "system": { + "heading": "Системні налаштування", + "deleteChatHistory": { + "label": "Видалити історію чату", + "button": "Видалити", + "confirm": "Ви впевнені, що хочете видалити історію чату? Ця дія не може бути відвернута." + }, + "export": { + "label": "Експорт історії чату, бази знань та запитів", + "button": "Експортувати дані", + "success": "Експорт успішний" + }, + "import": { + "label": "Імпорт історії чату, бази знань, та запитів", + "button": "Імпортувати дані", + "success": "Імпорт успішний", + "error": "Помилка імпорту" + } + }, + "tts": { + "heading": "Налаштування Текст-у-Голос", + "ttsEnabled": { + "label": "Увімкнути Текст-у-Голос" + }, + "ttsProvider": { + "label": "Поставник Текст-у-Голос", + "placeholder": "Виберіть постачальника" + }, + "ttsVoice": { + "label": "Голос Текст-у-Голос", + "placeholder": "Виберіть голос" + }, + "ssmlEnabled": { + "label": "Ввімкнути SSML (Мова Розмітки для Синтезу Голосу)" + } + } + }, + "manageModels": { + "title": "Управління моделями", + "addBtn": "Додати нову модель", + "columns": { + "name": "Назва", + "digest": "Хеш", + "modifiedAt": "Оновлено", + "size": "Розмір", + "actions": "Дії" + }, + "expandedColumns": { + "parentModel": "Батьківська модель", + "format": "Формат", + "family": "Сімʼя", + "parameterSize": "Розмір параметрів", + "quantizationLevel": "Рівень квантування" + }, + "tooltip": { + "delete": "Видалити модель", + "repull": "Повторно завантажити модель" + }, + "confirm": { + "delete": "Ви впевнені, що хочете видалити цю модель?", + "repull": "Ви впевнені, що хочете повторно завантажити цю модель?" + }, + "modal": { + "title": "Додати нову модель", + "placeholder": "Введіть назву моделі", + "pull": "Завантажити модель" + }, + "notification": { + "pullModel": "Завантаження моделі", + "pullModelDescription": "Завантажується модель {{modelName}}. Для отримання додаткової інформації перевірте іконку розширення.", + "success": "Успіх", + "error": "Помилка", + "successDescription": "Модель успішно завантажена", + "successDeleteDescription": "Модель успішно видалена", + "someError": "Щось пішло не так. Будь ласка, спробуйте пізніше." + } + }, + "managePrompts": { + "title": "Управління запитами", + "addBtn": "Додати новий запит", + "option1": "Нормальний", + "option2": "RAG", + "questionPrompt": "Питання-запит", + "segmented": { + "custom": "Власні запити", + "copilot": "Запити Copilot" + }, + "columns": { + "title": "Назва", + "prompt": "Запит", + "type": "Тип запиту", + "actions": "Дії" + }, + "systemPrompt": "Системний запит", + "quickPrompt": "Швидкий запит", + "tooltip": { + "delete": "Видалити запит", + "edit": "Редагувати запит" + }, + "confirm": { + "delete": "Ви впевнені, що хочете видалити цей запит? Його не вдасться відновити." + }, + "modal": { + "addTitle": "Додати новий запит", + "editTitle": "Редагувати запит" + }, + "form": { + "title": { + "label": "Назва", + "placeholder": "Мій чудовий запит", + "required": "Будь ласка, введіть назву" + }, + "prompt": { + "label": "Запит", + "placeholder": "Введіть запит", + "required": "Будь ласка, введіть запит", + "help": "Ви можете використовувати {key} як змінну у вашому запиті.", + "missingTextPlaceholder": "Змінна {text} відсутня в запиті. Додайте її, будь ласка." + }, + "isSystem": { + "label": "Це системний запит" + }, + "btnSave": { + "saving": "Додавання запиту...", + "save": "Додати запит" + }, + "btnEdit": { + "saving": "Оновлення запиту...", + "save": "Оновити запит" + } + }, + "notification": { + "addSuccess": "Запит додано", + "addSuccessDesc": "Запит успішно додано", + "error": "Збій", + "someError": "Щось пішло не так. Спробуйте знову пізніше", + "updatedSuccess": "Запит оновлено", + "updatedSuccessDesc": "Запит успішно оновлено", + "deletedSuccess": "Запит видалено", + "deletedSuccessDesc": "Запит успішно видалено" + } + }, + "manageShare": { + "title": "Управління спільним доступом", + "heading": "Налаштування URL спільного доступу до сторінки", + "form": { + "url": { + "label": "URL спільного доступу до сторінки", + "placeholder": "Введіть URL спільного доступу до сторінки", + "required": "Будь ласка, введіть ваш URL спільного доступу!", + "help": "З міркувань конфіденційності, ви можете самостійно обробляти спільний доступ до сторінки через цей URL. Дізнатися більше." + } + }, + "webshare": { + "heading": "Спільний доступ через веб", + "columns": { + "title": "Назва", + "url": "URL", + "actions": "Дії" + }, + "tooltip": { + "delete": "Видалити спільний доступ" + }, + "confirm": { + "delete": "Ви впевнені, що хочете видалити цей спільний доступ? Його не вдасться відновити." + }, + "label": "Управління спільним доступом до сторінки", + "description": "Включіть або вимкніть функцію спільного доступу до сторінки" + }, + "notification": { + "pageShareSuccess": "URL спільного доступу до сторінки оновлено успішно", + "someError": "Щось пішло не так. Будь ласка, спробуйте пізніше", + "webShareDeleteSuccess": "Спільний доступ видалено успішно" + } + }, + "ollamaSettings": { + "title": "Налаштування Ollama", + "heading": "Налаштуйте Ollama", + "settings": { + "ollamaUrl": { + "label": "URL до Ollama", + "placeholder": "Введіть URL до Ollama" + }, + "advanced": { + "label": "Розширене налаштування URL Ollama", + "urlRewriteEnabled": { + "label": "Увімкнути або вимкнути налаштування власного URL походження запиту" + }, + "rewriteUrl": { + "label": "Власний URL походження запиту", + "placeholder": "Введіть власний URL походження" + }, + "headers": { + "label": "Власні заголовки", + "add": "Додати заголовок", + "key": { + "label": "Ключ заголовка", + "placeholder": "Authorization" + }, + "value": { + "label": "Значення заголовка", + "placeholder": "Bearer token" + } + }, + "help": "Якщо у вас виникають проблеми з підключенням до Ollama на Page Assist, ви можете налаштувати власний URL походження запиту. Щоб дізнатися більше про це налаштування, натисніть тут." + } + } + }, + "manageSearch": { + "title": "Управління пошуком в Інтернеті", + "heading": "Налаштуйте пошук в Інтернеті" + }, + "about": { + "title": "Про додаток", + "heading": "Інформація про цей додаток", + "chromeVersion": "Версія Page Assist", + "ollamaVersion": "Версія Ollama", + "support": "Ви можете підтримати проект Page Assist, зробивши пожертву або ставши спонсором через наступні платформи:", + "koFi": "Підтримка на Ko-fi", + "githubSponsor": "Стати спонсором на GitHub", + "githubRepo": "Репозиторій GitHub" + }, + "manageKnowledge": { + "title": "Управління знаннями", + "heading": "Налаштування бази знань" + }, + "rag": { + "title": "Налаштування RAG", + "ragSettings": { + "label": "Налаштування RAG", + "model": { + "label": "Модель вбудованих даних", + "required": "Будь ласка, виберіть модель", + "help": "Рекомендується використовувати моделі вбудованих даних, такі як `nomic-embed-text`.", + "placeholder": "Вибрати модель" + }, + "chunkSize": { + "label": "Розмір шматка", + "placeholder": "Ввести розмір шматка", + "required": "Будь ласка, введіть розмір шматка" + }, + "chunkOverlap": { + "label": "Перекриття шматків", + "placeholder": "Ввести перекриття шматків", + "required": "Будь ласка, введіть перекриття шматків" + }, + "totalFilePerKB": { + "label": "Типовий ліміт кількості завантажень файлів до бази знань", + "placeholder": "Введіть типовий ліміт (напр. 10)", + "required": "Будь ласка, введіть типовий ліміт кількості файлів для завантаження" + }, + "noOfRetrievedDocs": { + "label": "Кількість отриманих документів", + "placeholder": "Ввести кількість отриманих документів", + "required": "Будь ласка, введіть кількість документів" + } + }, + "prompt": { + "label": "Налаштування запиту з RAG", + "option1": "Нормальний", + "option2": "З Веб-пошуком", + "alert": "Налаштування системного запиту тут застаріло. Використовуйте розділ «Управління запитами», щоб додавати або редагувати запити. Цей розділ буде видалено в майбутньому оновленні", + "systemPrompt": "Системний запит", + "systemPromptPlaceholder": "Ввести системний запит", + "webSearchPrompt": "Запит веб-пошуку", + "webSearchPromptHelp": "Не видаляйте `{search_results}` із запиту.", + "webSearchPromptError": "Будь ласка, введіть запит для веб-пошуку", + "webSearchPromptPlaceholder": "Ввести запит для веб-пошуку", + "webSearchFollowUpPrompt": "Запит для подальшого пошуку в мережі", + "webSearchFollowUpPromptHelp": "Не видаляйте `{chat_history}` і `{question}` із запиту.", + "webSearchFollowUpPromptError": "Будь ласка, введіть запит для подальшого пошуку в мережі!", + "webSearchFollowUpPromptPlaceholder": "Ваш запит для подальшого пошуку в мережі" + } + }, + "chromeAiSettings": { + "title": "Налаштування Chrome AI" + } +} diff --git a/src/assets/locale/uk/sidepanel.json b/src/assets/locale/uk/sidepanel.json new file mode 100644 index 0000000..ad8250a --- /dev/null +++ b/src/assets/locale/uk/sidepanel.json @@ -0,0 +1,7 @@ +{ + "tooltip": { + "embed": "Може знадобитися кілька хвилин для вкладення сторінки у базу. Будь ласка, зачекайте...", + "clear": "Стерти історію чату", + "history": "Історія чату" + } +} diff --git a/src/assets/locale/zh/common.json b/src/assets/locale/zh/common.json index cd58e05..080776a 100644 --- a/src/assets/locale/zh/common.json +++ b/src/assets/locale/zh/common.json @@ -70,6 +70,10 @@ "label": "上下文数量", "placeholder": "输入上下文数量(默认:2048)" }, + "numPredict": { + "label": "最大令牌数 (num_predict)", + "placeholder": "输入最大令牌数(例如:2048、4096)" + }, "seed": { "label": "随机种子", "placeholder": "输入随机种子值(例如:1234)", @@ -111,5 +115,6 @@ "older": "更早" }, "pin": "置顶", - "unpin": "取消置顶" + "unpin": "取消置顶", + "generationInfo": "生成信息" } \ No newline at end of file diff --git a/src/assets/locale/zh/openai.json b/src/assets/locale/zh/openai.json index 1b02184..00583f3 100644 --- a/src/assets/locale/zh/openai.json +++ b/src/assets/locale/zh/openai.json @@ -42,7 +42,7 @@ "delete": "删除", "edit": "编辑", "newModel": "向提供商添加模型", - "noNewModel": "对于 LMStudio,我们动态获取。无需手动添加。", + "noNewModel": "对于 LMStudio, Ollama, Llamafile,我们动态获取。无需手动添加。", "searchModel": "搜索模型", "selectAll": "全选", "save": "保存", diff --git a/src/assets/locale/zh/option.json b/src/assets/locale/zh/option.json index 095daca..cba6731 100644 --- a/src/assets/locale/zh/option.json +++ b/src/assets/locale/zh/option.json @@ -8,5 +8,6 @@ "somethingWentWrong": "出现了错误", "validationSelectModel": "请选择一个模型以继续", "deleteHistoryConfirmation": "你确定要删除这个历史记录吗?", - "editHistoryTitle": "输入一个新的标题" + "editHistoryTitle": "输入一个新的标题", + "temporaryChat": "临时聊天" } \ No newline at end of file diff --git a/src/assets/locale/zh/playground.json b/src/assets/locale/zh/playground.json index 8f7da46..2b99e39 100644 --- a/src/assets/locale/zh/playground.json +++ b/src/assets/locale/zh/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "停止流媒体", "knowledge": "知识" }, - "sendWhenEnter": "按Enter发送" + "sendWhenEnter": "按Enter发送", + "welcome": "你好!今天我能帮你什么?" } \ No newline at end of file diff --git a/src/assets/locale/zh/settings.json b/src/assets/locale/zh/settings.json index 4c86040..2f834e9 100644 --- a/src/assets/locale/zh/settings.json +++ b/src/assets/locale/zh/settings.json @@ -35,6 +35,9 @@ }, "generateTitle": { "label": "使用人工智能生成标题" + }, + "ollamaStatus": { + "label": "启用或禁用Ollama连接状态检查" } }, "sidepanelRag": { diff --git a/src/chain/chat-with-website.ts b/src/chain/chat-with-website.ts index 3b909d4..1c6b5d3 100644 --- a/src/chain/chat-with-website.ts +++ b/src/chain/chat-with-website.ts @@ -1,3 +1,4 @@ +//@ts-nocheck import { BaseLanguageModel } from "langchain/base_language"; import { Document } from "@langchain/core/documents"; import { @@ -28,8 +29,8 @@ export function groupMessagesByConversation(messages: ChatHistory) { const groupedMessages = []; for (let i = 0; i < messages.length; i += 2) { groupedMessages.push({ - human: messages[i].content, - ai: messages[i + 1].content, + human: messages[i]?.content, + ai: messages[i + 1]?.content, }); } @@ -38,7 +39,7 @@ export function groupMessagesByConversation(messages: ChatHistory) { const formatChatHistoryAsString = (history: BaseMessage[]) => { return history - .map((message) => `${message._getType()}: ${message.content}`) + .map((message) => `${message._getType()}: ${message?.content}`) .join("\n"); }; diff --git a/src/chain/chat-with-x.ts b/src/chain/chat-with-x.ts index 4a63829..296277f 100644 --- a/src/chain/chat-with-x.ts +++ b/src/chain/chat-with-x.ts @@ -1,3 +1,4 @@ +//@ts-nocheck import { BaseLanguageModel } from "@langchain/core/language_models/base" import { Document } from "@langchain/core/documents" import { diff --git a/src/components/Common/Playground/GenerationInfo.tsx b/src/components/Common/Playground/GenerationInfo.tsx new file mode 100644 index 0000000..4e34710 --- /dev/null +++ b/src/components/Common/Playground/GenerationInfo.tsx @@ -0,0 +1,65 @@ +type GenerationMetrics = { + total_duration?: number + load_duration?: number + prompt_eval_count?: number + prompt_eval_duration?: number + eval_count?: number + eval_duration?: number + context?: string + response?: string +} + +type Props = { + generationInfo: GenerationMetrics +} + +export const GenerationInfo = ({ generationInfo }: Props) => { + if (!generationInfo) return null + + const calculateTokensPerSecond = ( + evalCount?: number, + evalDuration?: number + ) => { + if (!evalCount || !evalDuration) return 0 + return (evalCount / evalDuration) * 1e9 + } + + const formatDuration = (nanoseconds?: number) => { + if (!nanoseconds) return "0ms" + const ms = nanoseconds / 1e6 + if (ms < 1) return `${ms.toFixed(3)}ms` + if (ms < 1000) return `${Math.round(ms)}ms` + return `${(ms / 1000).toFixed(2)}s` + } + + const metricsToDisplay = { + ...generationInfo, + ...(generationInfo?.eval_count && generationInfo?.eval_duration + ? { + tokens_per_second: calculateTokensPerSecond( + generationInfo.eval_count, + generationInfo.eval_duration + ).toFixed(2) + } + : {}) + } + + return ( +
+
+ {Object.entries(metricsToDisplay) + .filter(([key]) => key !== "model") + .map(([key, value]) => ( +
+
{key}
+
+ {key.includes("duration") + ? formatDuration(value as number) + : String(value)} +
+
+ ))} +
+
+ ) +} diff --git a/src/components/Common/Playground/Message.tsx b/src/components/Common/Playground/Message.tsx index 0c6299c..925fe4c 100644 --- a/src/components/Common/Playground/Message.tsx +++ b/src/components/Common/Playground/Message.tsx @@ -1,10 +1,11 @@ import Markdown from "../../Common/Markdown" import React from "react" -import { Tag, Image, Tooltip, Collapse } from "antd" +import { Tag, Image, Tooltip, Collapse, Popover } from "antd" import { WebSearch } from "./WebSearch" import { CheckIcon, ClipboardIcon, + InfoIcon, Pen, PlayIcon, RotateCcw, @@ -16,6 +17,7 @@ import { MessageSource } from "./MessageSource" import { useTTS } from "@/hooks/useTTS" import { tagColors } from "@/utils/color" import { removeModelSuffix } from "@/db/models" +import { GenerationInfo } from "./GenerationInfo" type Props = { message: string @@ -37,6 +39,7 @@ type Props = { hideEditAndRegenerate?: boolean onSourceClick?: (source: any) => void isTTSEnabled?: boolean + generationInfo?: any } export const PlaygroundMessage = (props: Props) => { @@ -206,6 +209,18 @@ export const PlaygroundMessage = (props: Props) => { )} + {props.generationInfo && ( + + } + title={t("generationInfo")}> + + + )} + {!props.hideEditAndRegenerate && props.currentMessageIndex === props.totalMessages - 1 && ( diff --git a/src/components/Common/Playground/MessageSource.tsx b/src/components/Common/Playground/MessageSource.tsx index d0a006a..b0d3ad9 100644 --- a/src/components/Common/Playground/MessageSource.tsx +++ b/src/components/Common/Playground/MessageSource.tsx @@ -13,7 +13,7 @@ type Props = { } export const MessageSource: React.FC = ({ source, onSourceClick }) => { - if (source?.mode === "rag") { + if (source?.mode === "rag" || source?.mode === "chat") { return ( -
- -
+ {"/"}
- setSearchTerm(e.target.value)} + placeholder="Search..." + className={`${defaultSearchClass} ${searchClassName}`} + disabled={isLoading} + aria-label="Search options" + /> +
+ + +
+ {isLoading ? ( +
+ + {loadingText} +
+ ) : filteredOptions.length === 0 ? ( +
+ +
+ ) : ( + filteredOptions.map((option, index) => ( +
{ + onChange(option) + setIsOpen(false) + setSearchTerm("") + }} + className={` + ${defaultOptionClass} + ${value === option.value ? "bg-blue-50 dark:bg-[#262627]" : "hover:bg-gray-100 dark:hover:bg-[#272728]"} + ${activeIndex === index ? "bg-gray-100 dark:bg-[#272728]" : ""} + ${optionClassName}`}> + {option.label} +
+ )) + )} +
+ + )} + + ) +} diff --git a/src/components/Sidepanel/Chat/body.tsx b/src/components/Sidepanel/Chat/body.tsx index 61d9071..f9f1407 100644 --- a/src/components/Sidepanel/Chat/body.tsx +++ b/src/components/Sidepanel/Chat/body.tsx @@ -47,6 +47,7 @@ export const SidePanelBody = () => { setIsSourceOpen(true) }} isTTSEnabled={ttsEnabled} + generationInfo={message?.generationInfo} /> ))}
diff --git a/src/components/Sidepanel/Chat/empty.tsx b/src/components/Sidepanel/Chat/empty.tsx index f94304b..cf38d1a 100644 --- a/src/components/Sidepanel/Chat/empty.tsx +++ b/src/components/Sidepanel/Chat/empty.tsx @@ -1,4 +1,5 @@ import { cleanUrl } from "@/libs/clean-url" +import { useStorage } from "@plasmohq/storage/hook" import { useQuery, useQueryClient } from "@tanstack/react-query" import { Select } from "antd" import { RotateCcw } from "lucide-react" @@ -17,13 +18,15 @@ export const EmptySidePanel = () => { const [ollamaURL, setOllamaURL] = useState("") const { t } = useTranslation(["playground", "common"]) const queryClient = useQueryClient() + const [checkOllamaStatus] = useStorage("checkOllamaStatus", true) + const { data: ollamaInfo, status: ollamaStatus, refetch, isRefetching } = useQuery({ - queryKey: ["ollamaStatus"], + queryKey: ["ollamaStatus", checkOllamaStatus], queryFn: async () => { const ollamaURL = await getOllamaURL() const isOk = await isOllamaRunning() @@ -32,7 +35,7 @@ export const EmptySidePanel = () => { queryKey: ["getAllModelsForSelect"] }) return { - isOk, + isOk: checkOllamaStatus ? isOk : true, models, ollamaURL } @@ -59,7 +62,7 @@ export const EmptySidePanel = () => {

)} - {!isRefetching && ollamaStatus === "success" ? ( + {!isRefetching && ollamaStatus === "success" && checkOllamaStatus ? ( ollamaInfo.isOk ? (
diff --git a/src/components/Sidepanel/Chat/form.tsx b/src/components/Sidepanel/Chat/form.tsx index e1cc3f0..a402680 100644 --- a/src/components/Sidepanel/Chat/form.tsx +++ b/src/components/Sidepanel/Chat/form.tsx @@ -7,7 +7,14 @@ import { toBase64 } from "~/libs/to-base64" import { Checkbox, Dropdown, Image, Switch, Tooltip } from "antd" import { useWebUI } from "~/store/webui" import { defaultEmbeddingModelForRag } from "~/services/ollama" -import { ImageIcon, MicIcon, StopCircleIcon, X } from "lucide-react" +import { + ImageIcon, + MicIcon, + StopCircleIcon, + X, + EyeIcon, + EyeOffIcon +} from "lucide-react" import { useTranslation } from "react-i18next" import { ModelSelect } from "@/components/Common/ModelSelect" import { useSpeechRecognition } from "@/hooks/useSpeechRecognition" @@ -36,7 +43,7 @@ export const SidepanelForm = ({ dropedFile }: Props) => { resetTranscript, start: startListening, stop: stopSpeechRecognition, - supported: browserSupportsSpeechRecognition, + supported: browserSupportsSpeechRecognition } = useSpeechRecognition() const stopListening = async () => { @@ -75,10 +82,10 @@ export const SidepanelForm = ({ dropedFile }: Props) => { ) { e.preventDefault() form.onSubmit(async (value) => { - await stopListening() - if (value.message.trim().length === 0) { + if (value.message.trim().length === 0 && value.image.length === 0) { return } + await stopListening() if (!selectedModel || selectedModel.length === 0) { form.setFieldError("message", t("formError.noModel")) return @@ -237,6 +244,12 @@ export const SidepanelForm = ({ dropedFile }: Props) => { } } await stopListening() + if ( + value.message.trim().length === 0 && + value.image.length === 0 + ) { + return + } form.reset() textAreaFocus() await sendMessage({ @@ -260,7 +273,6 @@ export const SidepanelForm = ({ dropedFile }: Props) => { onKeyDown={(e) => handleKeyDown(e)} ref={textareaRef} className="px-2 py-2 w-full resize-none bg-transparent focus-within:outline-none focus:ring-0 focus-visible:ring-0 ring-0 dark:ring-0 border-0 dark:text-gray-100" - required onPaste={handlePaste} rows={1} style={{ minHeight: "60px" }} @@ -279,20 +291,22 @@ export const SidepanelForm = ({ dropedFile }: Props) => { {...form.getInputProps("message")} />
- - - + {chatMode !== "vision" && ( + + + + )} {browserSupportsSpeechRecognition && ( @@ -321,13 +335,35 @@ export const SidepanelForm = ({ dropedFile }: Props) => { )} + + +