Merge branch 'main' of https://github.com/Abubakar115e/page-assist
This commit is contained in:
commit
9b14710cab
@ -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"
|
||||
}
|
@ -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",
|
||||
|
@ -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"
|
||||
}
|
@ -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?"
|
||||
}
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Generer titel med AI"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Aktivér eller deaktivér Ollama forbindelsesstatus kontrol"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -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"
|
||||
}
|
@ -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",
|
||||
|
@ -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"
|
||||
}
|
@ -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?"
|
||||
}
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Titel mit KI generieren"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Ollama-Verbindungsstatus-Überprüfung aktivieren oder deaktivieren"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -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"
|
||||
}
|
||||
|
@ -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",
|
||||
|
@ -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"
|
||||
}
|
@ -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?"
|
||||
}
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Generate Title using AI"
|
||||
},
|
||||
"ollamaStatus" :{
|
||||
"label":"Enable or disable Ollama connection status check"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -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"
|
||||
}
|
@ -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",
|
||||
|
@ -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"
|
||||
}
|
||||
|
@ -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?"
|
||||
}
|
||||
|
@ -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": {
|
||||
|
@ -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": "اطلاعات تولید"
|
||||
}
|
@ -42,7 +42,7 @@
|
||||
"delete": "حذف",
|
||||
"edit": "ویرایش",
|
||||
"newModel": "افزودن مدلها به ارائهدهنده",
|
||||
"noNewModel": "برای LMStudio، ما به صورت پویا دریافت میکنیم. نیازی به افزودن دستی نیست.",
|
||||
"noNewModel": "برای LMStudio, Ollama, Llamafile, ما به صورت پویا دریافت میکنیم. نیازی به افزودن دستی نیست.",
|
||||
"searchModel": "جستجوی مدل",
|
||||
"selectAll": "انتخاب همه",
|
||||
"save": "ذخیره",
|
||||
|
@ -8,5 +8,6 @@
|
||||
"somethingWentWrong": "مشکلی پیش آمد",
|
||||
"validationSelectModel": "لطفا یک مدل را برای ادامه انتخاب کنید",
|
||||
"deleteHistoryConfirmation": "آیا مطمئن هستید که می خواهید این تاریخچه را حذف کنید؟",
|
||||
"editHistoryTitle": "یک عنوان جدید وارد کنید"
|
||||
"editHistoryTitle": "یک عنوان جدید وارد کنید",
|
||||
"temporaryChat": "گپ موقت"
|
||||
}
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "توقف Streaming",
|
||||
"knowledge": "دانش"
|
||||
},
|
||||
"sendWhenEnter": "با فشار دادن Enter ارسال شود"
|
||||
"sendWhenEnter": "با فشار دادن Enter ارسال شود",
|
||||
"welcome": "سلام! امروز چطور میتوانم به شما کمک کنم؟"
|
||||
}
|
||||
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "تولید عنوان با استفاده از هوش مصنوعی"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "فعال یا غیرفعال کردن بررسی وضعیت اتصال Ollama"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -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"
|
||||
}
|
@ -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",
|
||||
|
@ -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"
|
||||
}
|
@ -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 ?"
|
||||
}
|
@ -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": {
|
||||
|
@ -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"
|
||||
}
|
@ -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",
|
||||
|
@ -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"
|
||||
}
|
@ -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?"
|
||||
}
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Genera titolo utilizzando l'IA"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Abilita o disabilita il controllo dello stato della connessione Ollama"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -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": "生成情報"
|
||||
}
|
@ -42,7 +42,7 @@
|
||||
"delete": "削除",
|
||||
"edit": "編集",
|
||||
"newModel": "プロバイダーにモデルを追加",
|
||||
"noNewModel": "LMStudioの場合、動的に取得します。手動での追加は不要です。",
|
||||
"noNewModel": "LMStudio, Ollama, Llamafile,の場合、動的に取得します。手動での追加は不要です。",
|
||||
"searchModel": "モデルを検索",
|
||||
"selectAll": "すべて選択",
|
||||
"save": "保存",
|
||||
|
@ -8,5 +8,6 @@
|
||||
"somethingWentWrong": "何かが間違っています",
|
||||
"validationSelectModel": "続行するにはモデルを選択してください",
|
||||
"deleteHistoryConfirmation": "この履歴を削除しますか?",
|
||||
"editHistoryTitle": "新しいタイトルを入力"
|
||||
"editHistoryTitle": "新しいタイトルを入力",
|
||||
"temporaryChat": "一時的なチャット"
|
||||
}
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "ストリーミングを停止",
|
||||
"knowledge": "知識"
|
||||
},
|
||||
"sendWhenEnter": "Enterキーを押すと送信"
|
||||
"sendWhenEnter": "Enterキーを押すと送信",
|
||||
"welcome": "こんにちは!本日はどのようなお手伝いができますか?"
|
||||
}
|
@ -35,6 +35,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "AIを使用してタイトルを生成"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Ollamaの接続状態チェックを有効または無効にする"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
13
src/assets/locale/ko/chrome.json
Normal file
13
src/assets/locale/ko/chrome.json
Normal file
@ -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를 반복하고 브라우저를 재시작해 주세요."
|
||||
}
|
119
src/assets/locale/ko/common.json
Normal file
119
src/assets/locale/ko/common.json
Normal file
@ -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": "생성 정보"
|
||||
}
|
40
src/assets/locale/ko/knowledge.json
Normal file
40
src/assets/locale/ko/knowledge.json
Normal file
@ -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 설정 페이지에서 임베딩 모델을 추가해 주세요"
|
||||
}
|
90
src/assets/locale/ko/openai.json
Normal file
90
src/assets/locale/ko/openai.json
Normal file
@ -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 및 기타 의미 검색 관련 작업에 사용됩니다."
|
||||
}
|
||||
}
|
13
src/assets/locale/ko/option.json
Normal file
13
src/assets/locale/ko/option.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"newChat": "새 채팅",
|
||||
"selectAPrompt": "프롬프트 선택",
|
||||
"githubRepository": "GitHub 리포지토리",
|
||||
"settings": "설정",
|
||||
"sidebarTitle": "채팅 기록",
|
||||
"error": "오류",
|
||||
"somethingWentWrong": "문제가 발생했습니다",
|
||||
"validationSelectModel": "계속하려면 모델을 선택하세요",
|
||||
"deleteHistoryConfirmation": "이 기록을 삭제하시겠습니까?",
|
||||
"editHistoryTitle": "새 제목 입력",
|
||||
"temporaryChat": "임시 채팅"
|
||||
}
|
30
src/assets/locale/ko/playground.json
Normal file
30
src/assets/locale/ko/playground.json
Normal file
@ -0,0 +1,30 @@
|
||||
{
|
||||
"ollamaState": {
|
||||
"searching": "Ollama 검색 중 🦙",
|
||||
"running": "Ollama 실행 중 🦙",
|
||||
"notRunning": "Ollama에 연결할 수 없습니다 🦙",
|
||||
"connectionError": "연결 오류가 발생한 것 같습니다. 문제 해결에 대한 자세한 내용은 <anchor>문서</anchor>를 참조하세요."
|
||||
},
|
||||
"formError": {
|
||||
"noModel": "모델을 선택하세요",
|
||||
"noEmbeddingModel": "설정 > RAG 페이지에서 임베딩 모델을 설정하세요"
|
||||
},
|
||||
"form": {
|
||||
"textarea": {
|
||||
"placeholder": "메시지를 입력하세요..."
|
||||
},
|
||||
"webSearch": {
|
||||
"on": "켜짐",
|
||||
"off": "꺼짐"
|
||||
}
|
||||
},
|
||||
"tooltip": {
|
||||
"searchInternet": "인터넷 검색",
|
||||
"speechToText": "음성 입력",
|
||||
"uploadImage": "이미지 업로드",
|
||||
"stopStreaming": "스트리밍 중지",
|
||||
"knowledge": "지식"
|
||||
},
|
||||
"sendWhenEnter": "Enter 키를 누르면 전송",
|
||||
"welcome": "안녕하세요! 오늘 어떻게 도와드릴까요?"
|
||||
}
|
347
src/assets/locale/ko/settings.json
Normal file
347
src/assets/locale/ko/settings.json
Normal file
@ -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을 여기에 입력할 수 있습니다. <anchor>자세히 보기</anchor>"
|
||||
}
|
||||
},
|
||||
"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을 설정할 수 있습니다. 설정에 대한 자세한 내용은 <anchor>여기를 클릭</anchor>하세요."
|
||||
}
|
||||
}
|
||||
},
|
||||
"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 설정"
|
||||
}
|
||||
}
|
5
src/assets/locale/ko/sidepanel.json
Normal file
5
src/assets/locale/ko/sidepanel.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"tooltip": {
|
||||
"embed": "페이지를 임베드하는 데 몇 분이 걸릴 수 있습니다. 잠시만 기다려 주세요..."
|
||||
}
|
||||
}
|
@ -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": "ജനറേഷൻ വിവരങ്ങൾ"
|
||||
|
||||
}
|
@ -42,7 +42,7 @@
|
||||
"delete": "ഇല്ലാതാക്കുക",
|
||||
"edit": "തിരുത്തുക",
|
||||
"newModel": "ദാതാവിലേക്ക് മോഡലുകൾ ചേർക്കുക",
|
||||
"noNewModel": "LMStudio-യ്ക്കായി, ഞങ്ങൾ ഡൈനാമിക്കായി ലഭ്യമാക്കുന്നു. മാനുവലായി ചേർക്കേണ്ടതില്ല.",
|
||||
"noNewModel": "LMStudio, Ollama, Llamafile-യ്ക്കായി, ഞങ്ങൾ ഡൈനാമിക്കായി ലഭ്യമാക്കുന്നു. മാനുവലായി ചേർക്കേണ്ടതില്ല.",
|
||||
"searchModel": "മോഡൽ തിരയുക",
|
||||
"selectAll": "എല്ലാം തിരഞ്ഞെടുക്കുക",
|
||||
"save": "സംരക്ഷിക്കുക",
|
||||
|
@ -8,5 +8,6 @@
|
||||
"somethingWentWrong": "എന്തോ തെറ്റായി",
|
||||
"deleteHistoryConfirmation": "നിങ്ങളുടെ ചാറ്റ് ചരിത്രം ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ?",
|
||||
"editHistoryTitle": "ചാറ്റ് title എഡിറ്റുചെയ്യുക",
|
||||
"validationSelectModel": "തുടരുന്നതിന് ഒരു മോഡല് തിരഞ്ഞെടുക്കുക"
|
||||
"validationSelectModel": "തുടരുന്നതിന് ഒരു മോഡല് തിരഞ്ഞെടുക്കുക",
|
||||
"temporaryChat": "താൽക്കാലിക ചാറ്റ്"
|
||||
}
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "സ്ട്രീമിംഗ് നിർത്തുക",
|
||||
"knowledge": "അറിവ്"
|
||||
},
|
||||
"sendWhenEnter": "എന്റര് അമര്ത്തുമ്പോള് അയയ്ക്കുക"
|
||||
"sendWhenEnter": "എന്റര് അമര്ത്തുമ്പോള് അയയ്ക്കുക",
|
||||
"welcome": "നമസ്കാരം! ഇന്ന് എനിക്ക് നിങ്ങളെ എങ്ങനെ സഹായിക്കാൻ കഴിയും?"
|
||||
}
|
@ -35,6 +35,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "എഐ ഉപയോഗിച്ച് ശീർഷകം സൃഷ്ടിക്കുക"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "ഒല്ലാമ കണക്ഷൻ സ്റ്റാറ്റസ് പരിശോധന പ്രവർത്തനക്ഷമമാക്കുകയോ പ്രവർത്തനരഹിതമാക്കുകയോ ചെയ്യുക"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -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"
|
||||
}
|
@ -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",
|
||||
|
@ -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"
|
||||
}
|
||||
|
@ -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?"
|
||||
}
|
||||
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Generer tittel med AI"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Aktiver eller deaktiver Ollama tilkoblingsstatussjekk"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -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"
|
||||
}
|
@ -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"
|
||||
}
|
@ -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?"
|
||||
}
|
@ -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": {
|
||||
|
@ -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": "Информация о генерации"
|
||||
}
|
@ -42,7 +42,7 @@
|
||||
"delete": "Удалить",
|
||||
"edit": "Редактировать",
|
||||
"newModel": "Добавить модели к провайдеру",
|
||||
"noNewModel": "Для LMStudio мы загружаем динамически. Ручное добавление не требуется.",
|
||||
"noNewModel": "Для LMStudio, Ollama, Llamafile, мы загружаем динамически. Ручное добавление не требуется.",
|
||||
"searchModel": "Поиск модели",
|
||||
"selectAll": "Выбрать все",
|
||||
"save": "Сохранить",
|
||||
|
@ -8,5 +8,6 @@
|
||||
"somethingWentWrong": "Что-то пошло не так",
|
||||
"validationSelectModel": "Пожалуйста, выберите модель, чтобы продолжить",
|
||||
"deleteHistoryConfirmation": "Вы уверены, что хотите удалить эту историю?",
|
||||
"editHistoryTitle": "Введите новое название"
|
||||
"editHistoryTitle": "Введите новое название",
|
||||
"temporaryChat": "Временный чат"
|
||||
}
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "Остановить поток",
|
||||
"knowledge": "Знание"
|
||||
},
|
||||
"sendWhenEnter": "Отправить при нажатии клавиши Enter"
|
||||
"sendWhenEnter": "Отправить при нажатии клавиши Enter",
|
||||
"welcome": "Здравствуйте! Как я могу помочь вам сегодня?"
|
||||
}
|
||||
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Сгенерировать заголовок с помощью ИИ"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Включить или отключить проверку состояния подключения Ollama"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -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"
|
||||
}
|
||||
|
@ -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"
|
||||
}
|
||||
|
@ -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?"
|
||||
}
|
||||
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Generera titel med AI"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Aktivera eller inaktivera Ollama anslutningsstatuskontroll"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
13
src/assets/locale/uk/chrome.json
Normal file
13
src/assets/locale/uk/chrome.json
Normal file
@ -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 та перезапустіть переглядач."
|
||||
}
|
125
src/assets/locale/uk/common.json
Normal file
125
src/assets/locale/uk/common.json
Normal file
@ -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": "Інформація про генерацію"
|
||||
}
|
40
src/assets/locale/uk/knowledge.json
Normal file
40
src/assets/locale/uk/knowledge.json
Normal file
@ -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 спочатку"
|
||||
}
|
90
src/assets/locale/uk/openai.json
Normal file
90
src/assets/locale/uk/openai.json
Normal file
@ -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 та інших повʼязаних завдань семантичного пошуку."
|
||||
}
|
||||
}
|
13
src/assets/locale/uk/option.json
Normal file
13
src/assets/locale/uk/option.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"newChat": "Новий чат",
|
||||
"selectAPrompt": "Виберіть запит",
|
||||
"githubRepository": "Репозиторій GitHub",
|
||||
"settings": "Налаштування",
|
||||
"sidebarTitle": "Історія чату",
|
||||
"error": "Збій",
|
||||
"somethingWentWrong": "Щось пішло не так",
|
||||
"validationSelectModel": "Будь ласка, виберіть модель для продовження",
|
||||
"deleteHistoryConfirmation": "Ви впевнені, що хочете видалити цю історію?",
|
||||
"editHistoryTitle": "Введіть нову назву",
|
||||
"temporaryChat": "Тимчасовий чат"
|
||||
}
|
30
src/assets/locale/uk/playground.json
Normal file
30
src/assets/locale/uk/playground.json
Normal file
@ -0,0 +1,30 @@
|
||||
{
|
||||
"ollamaState": {
|
||||
"searching": "Пошук вашого Ollama 🦙",
|
||||
"running": "Ollama працює 🦙",
|
||||
"notRunning": "Неможливо підключитися до Ollama 🦙",
|
||||
"connectionError": "Здається, у вас виникла проблема з підключенням. Будь ласка, зверніться до цієї документації<anchor> для усунення несправностей.</anchor>"
|
||||
},
|
||||
"formError": {
|
||||
"noModel": "Виберіть модель",
|
||||
"noEmbeddingModel": "Налаштуйте модель вкладень на сторінці Налаштування > RAG"
|
||||
},
|
||||
"form": {
|
||||
"textarea": {
|
||||
"placeholder": "Введіть повідомлення..."
|
||||
},
|
||||
"webSearch": {
|
||||
"on": "Увімкнено",
|
||||
"off": "Вимкнено"
|
||||
}
|
||||
},
|
||||
"tooltip": {
|
||||
"searchInternet": "Пошук в Інтернеті",
|
||||
"speechToText": "Голос у текст",
|
||||
"uploadImage": "Завантажити зображення",
|
||||
"stopStreaming": "Зупинити трансляцію",
|
||||
"knowledge": "Знання"
|
||||
},
|
||||
"sendWhenEnter": "Надсилати при натисканні Enter",
|
||||
"welcome": "Вітаю! Як я можу допомогти вам сьогодні?"
|
||||
}
|
344
src/assets/locale/uk/settings.json
Normal file
344
src/assets/locale/uk/settings.json
Normal file
@ -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. <anchor>Дізнатися більше</anchor>."
|
||||
}
|
||||
},
|
||||
"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 походження запиту. Щоб дізнатися більше про це налаштування, <anchor>натисніть тут</anchor>."
|
||||
}
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
7
src/assets/locale/uk/sidepanel.json
Normal file
7
src/assets/locale/uk/sidepanel.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"tooltip": {
|
||||
"embed": "Може знадобитися кілька хвилин для вкладення сторінки у базу. Будь ласка, зачекайте...",
|
||||
"clear": "Стерти історію чату",
|
||||
"history": "Історія чату"
|
||||
}
|
||||
}
|
@ -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": "生成信息"
|
||||
}
|
@ -42,7 +42,7 @@
|
||||
"delete": "删除",
|
||||
"edit": "编辑",
|
||||
"newModel": "向提供商添加模型",
|
||||
"noNewModel": "对于 LMStudio,我们动态获取。无需手动添加。",
|
||||
"noNewModel": "对于 LMStudio, Ollama, Llamafile,我们动态获取。无需手动添加。",
|
||||
"searchModel": "搜索模型",
|
||||
"selectAll": "全选",
|
||||
"save": "保存",
|
||||
|
@ -8,5 +8,6 @@
|
||||
"somethingWentWrong": "出现了错误",
|
||||
"validationSelectModel": "请选择一个模型以继续",
|
||||
"deleteHistoryConfirmation": "你确定要删除这个历史记录吗?",
|
||||
"editHistoryTitle": "输入一个新的标题"
|
||||
"editHistoryTitle": "输入一个新的标题",
|
||||
"temporaryChat": "临时聊天"
|
||||
}
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "停止流媒体",
|
||||
"knowledge": "知识"
|
||||
},
|
||||
"sendWhenEnter": "按Enter发送"
|
||||
"sendWhenEnter": "按Enter发送",
|
||||
"welcome": "你好!今天我能帮你什么?"
|
||||
}
|
@ -35,6 +35,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "使用人工智能生成标题"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "启用或禁用Ollama连接状态检查"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -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");
|
||||
};
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
//@ts-nocheck
|
||||
import { BaseLanguageModel } from "@langchain/core/language_models/base"
|
||||
import { Document } from "@langchain/core/documents"
|
||||
import {
|
||||
|
65
src/components/Common/Playground/GenerationInfo.tsx
Normal file
65
src/components/Common/Playground/GenerationInfo.tsx
Normal file
@ -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 (
|
||||
<div className="p-2 w-full">
|
||||
<div className="flex flex-col gap-2">
|
||||
{Object.entries(metricsToDisplay)
|
||||
.filter(([key]) => key !== "model")
|
||||
.map(([key, value]) => (
|
||||
<div key={key} className="flex flex-wrap justify-between">
|
||||
<div className="font-medium text-xs">{key}</div>
|
||||
<div className="font-medium text-xs break-all">
|
||||
{key.includes("duration")
|
||||
? formatDuration(value as number)
|
||||
: String(value)}
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
@ -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) => {
|
||||
</Tooltip>
|
||||
)}
|
||||
|
||||
{props.generationInfo && (
|
||||
<Popover
|
||||
content={
|
||||
<GenerationInfo generationInfo={props.generationInfo} />
|
||||
}
|
||||
title={t("generationInfo")}>
|
||||
<button className="flex items-center justify-center w-6 h-6 rounded-full bg-gray-100 dark:bg-gray-800 hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500">
|
||||
<InfoIcon className="w-3 h-3 text-gray-400 group-hover:text-gray-500" />
|
||||
</button>
|
||||
</Popover>
|
||||
)}
|
||||
|
||||
{!props.hideEditAndRegenerate &&
|
||||
props.currentMessageIndex === props.totalMessages - 1 && (
|
||||
<Tooltip title={t("regenerate")}>
|
||||
|
@ -13,7 +13,7 @@ type Props = {
|
||||
}
|
||||
|
||||
export const MessageSource: React.FC<Props> = ({ source, onSourceClick }) => {
|
||||
if (source?.mode === "rag") {
|
||||
if (source?.mode === "rag" || source?.mode === "chat") {
|
||||
return (
|
||||
<button
|
||||
onClick={() => {
|
||||
|
@ -6,6 +6,7 @@ import { LMStudioIcon } from "../Icons/LMStudio"
|
||||
import { OpenAiIcon } from "../Icons/OpenAI"
|
||||
import { TogtherMonoIcon } from "../Icons/Togther"
|
||||
import { OpenRouterIcon } from "../Icons/OpenRouter"
|
||||
import { LLamaFile } from "../Icons/Llamafile"
|
||||
|
||||
export const ProviderIcons = ({
|
||||
provider,
|
||||
@ -31,6 +32,8 @@ export const ProviderIcons = ({
|
||||
return <TogtherMonoIcon className={className} />
|
||||
case "openrouter":
|
||||
return <OpenRouterIcon className={className} />
|
||||
case "llamafile":
|
||||
return <LLamaFile className={className} />
|
||||
default:
|
||||
return <OllamaIcon className={className} />
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
import { getPromptById } from "@/db"
|
||||
import { useMessageOption } from "@/hooks/useMessageOption"
|
||||
import { getAllModelSettings } from "@/services/model-settings"
|
||||
import { useStoreChatModelSettings } from "@/store/model"
|
||||
import { useQuery } from "@tanstack/react-query"
|
||||
@ -27,10 +29,20 @@ export const CurrentChatModelSettings = ({
|
||||
const { t } = useTranslation("common")
|
||||
const [form] = Form.useForm()
|
||||
const cUserSettings = useStoreChatModelSettings()
|
||||
const { selectedSystemPrompt } = useMessageOption()
|
||||
const { isPending: isLoading } = useQuery({
|
||||
queryKey: ["fetchModelConfig2", open],
|
||||
queryFn: async () => {
|
||||
const data = await getAllModelSettings()
|
||||
|
||||
let tempSystemPrompt = "";
|
||||
|
||||
// i hate this method but i need this feature so badly that i need to do this
|
||||
if (selectedSystemPrompt) {
|
||||
const prompt = await getPromptById(selectedSystemPrompt)
|
||||
tempSystemPrompt = prompt?.content ?? ""
|
||||
}
|
||||
|
||||
form.setFieldsValue({
|
||||
temperature: cUserSettings.temperature ?? data.temperature,
|
||||
topK: cUserSettings.topK ?? data.topK,
|
||||
@ -39,14 +51,17 @@ export const CurrentChatModelSettings = ({
|
||||
numCtx: cUserSettings.numCtx ?? data.numCtx,
|
||||
seed: cUserSettings.seed,
|
||||
numGpu: cUserSettings.numGpu ?? data.numGpu,
|
||||
systemPrompt: cUserSettings.systemPrompt ?? ""
|
||||
numPredict: cUserSettings.numPredict ?? data.numPredict,
|
||||
systemPrompt: cUserSettings.systemPrompt ?? tempSystemPrompt
|
||||
})
|
||||
return data
|
||||
},
|
||||
enabled: open,
|
||||
refetchOnMount: true
|
||||
refetchOnMount: false,
|
||||
refetchOnWindowFocus: false
|
||||
})
|
||||
|
||||
|
||||
const renderBody = () => {
|
||||
return (
|
||||
<>
|
||||
@ -115,6 +130,15 @@ export const CurrentChatModelSettings = ({
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item
|
||||
name="numPredict"
|
||||
label={t("modelSettings.form.numPredict.label")}>
|
||||
<InputNumber
|
||||
style={{ width: "100%" }}
|
||||
placeholder={t("modelSettings.form.numPredict.placeholder")}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
<Collapse
|
||||
ghost
|
||||
className="border-none bg-transparent"
|
||||
|
24
src/components/Icons/Llamafile.tsx
Normal file
24
src/components/Icons/Llamafile.tsx
Normal file
@ -0,0 +1,24 @@
|
||||
// copied logo from Hugging Face webiste
|
||||
import React from "react"
|
||||
|
||||
export const LLamaFile = React.forwardRef<
|
||||
SVGSVGElement,
|
||||
React.SVGProps<SVGSVGElement>
|
||||
>((props, ref) => {
|
||||
return (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="1em"
|
||||
height="1em"
|
||||
className="text-black inline-block text-sm"
|
||||
viewBox="0 0 16 16"
|
||||
ref={ref}
|
||||
{...props}>
|
||||
<path
|
||||
fill="currentColor"
|
||||
fillRule="evenodd"
|
||||
d="M7.66 5.82H4.72a.31.31 0 0 1-.32-.32c0-.64-.52-1.16-1.16-1.16H1.6a.7.7 0 0 0-.7.7v8.3c0 .52.43.95.96.95h9.4c.4 0 .75-.3.82-.7l.65-3.84.74-.07a2.08 2.08 0 0 0 .28-4.1l-.94-.22-.11-.2a2.3 2.3 0 0 0-.54-.64v-.05a5.6 5.6 0 0 1 .1-1.02l.07-.45c.01-.1.02-.21.01-.32a.6.6 0 0 0-.1-.27.5.5 0 0 0-.54-.21c-.12.03-.2.1-.24.14a1 1 0 0 0-.12.13A4.8 4.8 0 0 0 10.76 4h-.33l.05-.49.04-.28.06-.53c.01-.1.02-.26 0-.42a1 1 0 0 0-.15-.43.87.87 0 0 0-.93-.35.96.96 0 0 0-.4.22c-.08.06-.14.13-.18.19a5.5 5.5 0 0 0-.55 1.25c-.15.52-.28 1.2-.24 1.85-.2.24-.36.51-.47.8Zm.66.8c.06-.52.3-.98.67-1.3l.02-.01c-.15-.72.05-1.65.28-2.28.15-.41.31-.7.41-.72.05-.01.06.07.06.22l-.07.56v.06a11 11 0 0 0-.1 1.28c.01.21.05.39.14.49a2 2 0 0 1 .57-.08h.42c.52 0 1 .28 1.25.73l.2.36c.06.1.16.18.28.21l1.11.26a1.24 1.24 0 0 1-.17 2.45l-1.38.12-.76 4.48h-4.2L8.33 6.6Z"
|
||||
clipRule="evenodd"></path>
|
||||
</svg>
|
||||
)
|
||||
})
|
@ -21,6 +21,8 @@ import { Select, Tooltip } from "antd"
|
||||
import { getAllPrompts } from "@/db"
|
||||
import { ShareBtn } from "~/components/Common/ShareBtn"
|
||||
import { ProviderIcons } from "../Common/ProviderIcon"
|
||||
import { NewChat } from "./NewChat"
|
||||
import { PageAssistSelect } from "../Select"
|
||||
type Props = {
|
||||
setSidebarOpen: (open: boolean) => void
|
||||
setOpenModelSettings: (open: boolean) => void
|
||||
@ -45,17 +47,13 @@ export const Header: React.FC<Props> = ({
|
||||
setSelectedSystemPrompt,
|
||||
messages,
|
||||
streaming,
|
||||
historyId
|
||||
historyId,
|
||||
temporaryChat
|
||||
} = useMessageOption()
|
||||
const {
|
||||
data: models,
|
||||
isLoading: isModelsLoading,
|
||||
isFetching: isModelsFetching
|
||||
} = useQuery({
|
||||
const { data: models, isLoading: isModelsLoading, refetch } = useQuery({
|
||||
queryKey: ["fetchModel"],
|
||||
queryFn: () => fetchChatModels({ returnEmpty: true }),
|
||||
refetchInterval: 15_000,
|
||||
refetchIntervalInBackground: true,
|
||||
refetchIntervalInBackground: false,
|
||||
placeholderData: (prev) => prev
|
||||
})
|
||||
|
||||
@ -86,7 +84,10 @@ export const Header: React.FC<Props> = ({
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="sticky top-0 z-[999] flex h-16 p-3 bg-gray-50 border-b dark:bg-[#171717] dark:border-gray-600">
|
||||
<div
|
||||
className={`sticky top-0 z-[999] flex h-16 p-3 bg-gray-50 border-b dark:bg-[#171717] dark:border-gray-600 ${
|
||||
temporaryChat && "!bg-gray-200 dark:!bg-black"
|
||||
}`}>
|
||||
<div className="flex gap-2 items-center">
|
||||
{pathname !== "/" && (
|
||||
<div>
|
||||
@ -104,46 +105,39 @@ export const Header: React.FC<Props> = ({
|
||||
<PanelLeftIcon className="w-6 h-6" />
|
||||
</button>
|
||||
</div>
|
||||
<div>
|
||||
<button
|
||||
onClick={clearChat}
|
||||
className="inline-flex dark:bg-transparent bg-white items-center rounded-lg border dark:border-gray-700 bg-transparent px-3 py-2.5 text-xs lg:text-sm font-medium leading-4 text-gray-800 dark:text-white disabled:opacity-50 ease-in-out transition-colors duration-200 hover:bg-gray-100 dark:hover:bg-gray-800 dark:hover:text-white">
|
||||
<SquarePen className="h-5 w-5 " />
|
||||
<span className=" truncate ml-3">{t("newChat")}</span>
|
||||
</button>
|
||||
</div>
|
||||
<NewChat clearChat={clearChat} />
|
||||
<span className="text-lg font-thin text-zinc-300 dark:text-zinc-600">
|
||||
{"/"}
|
||||
</span>
|
||||
<div className="hidden lg:block">
|
||||
<Select
|
||||
<PageAssistSelect
|
||||
className="w-80"
|
||||
placeholder={t("common:selectAModel")}
|
||||
loadingText={t("common:selectAModel")}
|
||||
value={selectedModel}
|
||||
onChange={(e) => {
|
||||
setSelectedModel(e)
|
||||
localStorage.setItem("selectedModel", e)
|
||||
setSelectedModel(e.value)
|
||||
localStorage.setItem("selectedModel", e.value)
|
||||
}}
|
||||
size="large"
|
||||
loading={isModelsLoading}
|
||||
filterOption={(input, option) =>
|
||||
option.label.key.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
||||
}
|
||||
showSearch
|
||||
placeholder={t("common:selectAModel")}
|
||||
className="w-72"
|
||||
isLoading={isModelsLoading}
|
||||
options={models?.map((model) => ({
|
||||
label: (
|
||||
<span
|
||||
key={model.model}
|
||||
className="flex flex-row gap-3 items-center truncate">
|
||||
className="flex flex-row gap-3 items-center ">
|
||||
<ProviderIcons
|
||||
provider={model?.provider}
|
||||
className="w-5 h-5"
|
||||
/>
|
||||
<span className="truncate">{model.name}</span>
|
||||
<span className="line-clamp-2">{model.name}</span>
|
||||
</span>
|
||||
),
|
||||
value: model.model
|
||||
}))}
|
||||
|
||||
onRefresh={() => {
|
||||
refetch()
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div className="lg:hidden">
|
||||
|
57
src/components/Layouts/NewChat.tsx
Normal file
57
src/components/Layouts/NewChat.tsx
Normal file
@ -0,0 +1,57 @@
|
||||
import { SquarePen, MoreHorizontal, TimerReset } from "lucide-react"
|
||||
import { useTranslation } from "react-i18next"
|
||||
import { Dropdown, Switch } from "antd"
|
||||
import type { MenuProps } from "antd"
|
||||
import { useMessageOption } from "@/hooks/useMessageOption"
|
||||
|
||||
type Props = {
|
||||
clearChat: () => void
|
||||
}
|
||||
|
||||
export const NewChat: React.FC<Props> = ({ clearChat }) => {
|
||||
const { t } = useTranslation(["option", "common"])
|
||||
|
||||
const { temporaryChat, setTemporaryChat, messages } = useMessageOption()
|
||||
|
||||
const items: MenuProps["items"] = [
|
||||
{
|
||||
key: "1",
|
||||
label: (
|
||||
<label className="flex items-center gap-6 justify-between px-1 py-0.5 cursor-pointer w-full">
|
||||
<div className="flex items-center gap-2">
|
||||
<TimerReset className="h-4 w-4 text-gray-600" />
|
||||
<span>
|
||||
{t("temporaryChat")}
|
||||
</span>
|
||||
</div>
|
||||
<Switch
|
||||
checked={temporaryChat}
|
||||
onChange={(checked) => {
|
||||
setTemporaryChat(checked)
|
||||
// just like chatgpt
|
||||
if (messages.length > 0) {
|
||||
clearChat()
|
||||
}
|
||||
}}
|
||||
size="small"
|
||||
/>
|
||||
</label>
|
||||
)
|
||||
}
|
||||
]
|
||||
return (
|
||||
<div className="flex items-center justify-between">
|
||||
<button
|
||||
onClick={clearChat}
|
||||
className="inline-flex dark:bg-transparent bg-white items-center rounded-s-lg rounded-e-none border dark:border-gray-700 bg-transparent px-3 py-2.5 pe-6 text-xs lg:text-sm font-medium leading-4 text-gray-800 dark:text-white disabled:opacity-50 ease-in-out transition-colors duration-200 hover:bg-gray-100 dark:hover:bg-gray-800 dark:hover:text-white">
|
||||
<SquarePen className="h-5 w-5" />
|
||||
<span className="truncate ms-3">{t("newChat")}</span>
|
||||
</button>
|
||||
<Dropdown menu={{ items }} trigger={["click"]}>
|
||||
<button className="inline-flex dark:bg-transparent bg-white items-center rounded-lg border-s-0 rounded-s-none border dark:border-gray-700 bg-transparent px-3 py-2.5 text-xs lg:text-sm font-medium leading-4 text-gray-800 dark:text-white disabled:opacity-50 ease-in-out transition-colors duration-200 hover:bg-gray-100 dark:hover:bg-gray-800 dark:hover:text-white">
|
||||
<MoreHorizontal className="h-5 w-5 text-gray-600 dark:text-gray-400" />
|
||||
</button>
|
||||
</Dropdown>
|
||||
</div>
|
||||
)
|
||||
}
|
@ -54,6 +54,7 @@ export const PlaygroundChat = () => {
|
||||
setIsSourceOpen(true)
|
||||
}}
|
||||
isTTSEnabled={ttsEnabled}
|
||||
generationInfo={message?.generationInfo}
|
||||
/>
|
||||
))}
|
||||
{messages.length > 0 && (
|
||||
|
@ -1,4 +1,5 @@
|
||||
import { cleanUrl } from "@/libs/clean-url"
|
||||
import { useStorage } from "@plasmohq/storage/hook"
|
||||
import { useQuery } from "@tanstack/react-query"
|
||||
import { RotateCcw } from "lucide-react"
|
||||
import { useEffect, useState } from "react"
|
||||
@ -12,6 +13,9 @@ import {
|
||||
export const PlaygroundEmpty = () => {
|
||||
const [ollamaURL, setOllamaURL] = useState<string>("")
|
||||
const { t } = useTranslation(["playground", "common"])
|
||||
|
||||
const [checkOllamaStatus] = useStorage("checkOllamaStatus", true)
|
||||
|
||||
const {
|
||||
data: ollamaInfo,
|
||||
status: ollamaStatus,
|
||||
@ -23,19 +27,32 @@ export const PlaygroundEmpty = () => {
|
||||
const ollamaURL = await getOllamaURL()
|
||||
const isOk = await isOllamaRunning()
|
||||
|
||||
if (ollamaURL) {
|
||||
saveOllamaURL(ollamaURL)
|
||||
}
|
||||
|
||||
return {
|
||||
isOk,
|
||||
ollamaURL
|
||||
}
|
||||
}
|
||||
},
|
||||
enabled: checkOllamaStatus
|
||||
})
|
||||
|
||||
useEffect(() => {
|
||||
if (ollamaInfo?.ollamaURL) {
|
||||
setOllamaURL(ollamaInfo.ollamaURL)
|
||||
if (!checkOllamaStatus) {
|
||||
return (
|
||||
<div className="mx-auto sm:max-w-xl px-4 mt-10">
|
||||
<div className="rounded-lg justify-center items-center flex flex-col border p-8 bg-gray-50 dark:bg-[#262626] dark:border-gray-600">
|
||||
<h1 className="text-sm font-medium text-center text-gray-500 dark:text-gray-400 flex gap-3 items-center justify-center">
|
||||
<span >👋</span>
|
||||
<span className="text-gray-700 dark:text-gray-300">
|
||||
{t("welcome")}
|
||||
</span>
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}, [ollamaInfo])
|
||||
|
||||
return (
|
||||
<div className="mx-auto sm:max-w-xl px-4 mt-10">
|
||||
<div className="rounded-lg justify-center items-center flex flex-col border p-8 bg-gray-50 dark:bg-[#262626] dark:border-gray-600">
|
||||
|
@ -36,7 +36,8 @@ export const PlaygroundForm = ({ dropedFile }: Props) => {
|
||||
selectedQuickPrompt,
|
||||
textareaRef,
|
||||
setSelectedQuickPrompt,
|
||||
selectedKnowledge
|
||||
selectedKnowledge,
|
||||
temporaryChat
|
||||
} = useMessageOption()
|
||||
|
||||
const isMobile = () => {
|
||||
@ -159,7 +160,7 @@ export const PlaygroundForm = ({ dropedFile }: Props) => {
|
||||
e.preventDefault()
|
||||
stopListening()
|
||||
form.onSubmit(async (value) => {
|
||||
if (value.message.trim().length === 0) {
|
||||
if (value.message.trim().length === 0 && value.image.length === 0) {
|
||||
return
|
||||
}
|
||||
if (!selectedModel || selectedModel.length === 0) {
|
||||
@ -190,7 +191,10 @@ export const PlaygroundForm = ({ dropedFile }: Props) => {
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="px-3 pt-3 md:px-4 md:pt-4 bg-gray-100 dark:bg-[#262626] border rounded-t-xl dark:border-gray-600">
|
||||
<div
|
||||
className={`px-3 pt-3 md:px-4 md:pt-4 bg-gray-100 dark:bg-[#262626] border rounded-t-xl dark:border-gray-600
|
||||
${temporaryChat && "!bg-gray-300 dark:!bg-black "}
|
||||
`}>
|
||||
<div
|
||||
className={`h-full rounded-md shadow relative ${
|
||||
form.values.image.length === 0 ? "hidden" : "block"
|
||||
@ -213,7 +217,9 @@ export const PlaygroundForm = ({ dropedFile }: Props) => {
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div className="flex rounded-t-xl bg-white dark:bg-transparent">
|
||||
<div className={`flex rounded-t-xl bg-white dark:bg-transparent ${
|
||||
temporaryChat && "!bg-gray-300 dark:!bg-black"
|
||||
}`}>
|
||||
<form
|
||||
onSubmit={form.onSubmit(async (value) => {
|
||||
stopListening()
|
||||
@ -228,6 +234,12 @@ export const PlaygroundForm = ({ dropedFile }: Props) => {
|
||||
return
|
||||
}
|
||||
}
|
||||
if (
|
||||
value.message.trim().length === 0 &&
|
||||
value.image.length === 0
|
||||
) {
|
||||
return
|
||||
}
|
||||
form.reset()
|
||||
textAreaFocus()
|
||||
await sendMessage({
|
||||
@ -261,7 +273,6 @@ export const PlaygroundForm = ({ 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: "40px" }}
|
||||
@ -286,8 +297,6 @@ export const PlaygroundForm = ({ dropedFile }: Props) => {
|
||||
)}
|
||||
</div>
|
||||
<div className="flex !justify-end gap-3">
|
||||
|
||||
|
||||
{!selectedKnowledge && (
|
||||
<Tooltip title={t("tooltip.uploadImage")}>
|
||||
<button
|
||||
|
@ -16,10 +16,9 @@ import {
|
||||
import { useStorage } from "@plasmohq/storage/hook"
|
||||
|
||||
export const GeneralSettings = () => {
|
||||
const { clearChat } =
|
||||
useMessageOption()
|
||||
const { clearChat } = useMessageOption()
|
||||
|
||||
const [ speechToTextLanguage, setSpeechToTextLanguage ] = useStorage(
|
||||
const [speechToTextLanguage, setSpeechToTextLanguage] = useStorage(
|
||||
"speechToTextLanguage",
|
||||
"en-US"
|
||||
)
|
||||
@ -41,6 +40,11 @@ export const GeneralSettings = () => {
|
||||
const [sendNotificationAfterIndexing, setSendNotificationAfterIndexing] =
|
||||
useStorage("sendNotificationAfterIndexing", false)
|
||||
|
||||
const [checkOllamaStatus, setCheckOllamaStatus] = useStorage(
|
||||
"checkOllamaStatus",
|
||||
true
|
||||
)
|
||||
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
const { mode, toggleDarkMode } = useDarkMode()
|
||||
@ -160,6 +164,19 @@ export const GeneralSettings = () => {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-row justify-between">
|
||||
<div className="inline-flex items-center gap-2">
|
||||
<span className="text-gray-700 dark:text-neutral-50">
|
||||
{t("generalSettings.settings.ollamaStatus.label")}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<Switch
|
||||
checked={checkOllamaStatus}
|
||||
onChange={(checked) => setCheckOllamaStatus(checked)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-row justify-between">
|
||||
<span className="text-gray-700 dark:text-neutral-50 ">
|
||||
{t("generalSettings.settings.darkMode.label")}
|
||||
|
@ -77,7 +77,14 @@ export const ModelSettings = () => {
|
||||
size="large"
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item
|
||||
name="numPredict"
|
||||
label={t("modelSettings.form.numPredict.label")}>
|
||||
<InputNumber
|
||||
style={{ width: "100%" }}
|
||||
placeholder={t("modelSettings.form.numPredict.placeholder")}
|
||||
/>
|
||||
</Form.Item>
|
||||
<Collapse
|
||||
ghost
|
||||
className="border-none bg-transparent"
|
||||
|
@ -23,6 +23,7 @@ import {
|
||||
} from "lucide-react"
|
||||
import { OpenAIFetchModel } from "./openai-fetch-model"
|
||||
import { OAI_API_PROVIDERS } from "@/utils/oai-api-providers"
|
||||
const noPopupProvider = ["lmstudio", "llamafile", "ollama2"]
|
||||
|
||||
export const OpenAIApp = () => {
|
||||
const { t } = useTranslation("openai")
|
||||
@ -47,7 +48,7 @@ export const OpenAIApp = () => {
|
||||
})
|
||||
setOpen(false)
|
||||
message.success(t("addSuccess"))
|
||||
if (provider !== "lmstudio") {
|
||||
if (!noPopupProvider.includes(provider)) {
|
||||
setOpenaiId(data)
|
||||
setOpenModelModal(true)
|
||||
}
|
||||
@ -157,7 +158,7 @@ export const OpenAIApp = () => {
|
||||
|
||||
<Tooltip
|
||||
title={
|
||||
record.provider !== "lmstudio"
|
||||
!noPopupProvider.includes(record.provider)
|
||||
? t("newModel")
|
||||
: t("noNewModel")
|
||||
}>
|
||||
@ -167,7 +168,9 @@ export const OpenAIApp = () => {
|
||||
setOpenModelModal(true)
|
||||
setOpenaiId(record.id)
|
||||
}}
|
||||
disabled={!record.id || record.provider === "lmstudio"}>
|
||||
disabled={
|
||||
!record.id || noPopupProvider.includes(record.provider)
|
||||
}>
|
||||
<DownloadIcon className="size-4" />
|
||||
</button>
|
||||
</Tooltip>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user