From c186b71bf52d53ea79abaf0a12a767312d63a102 Mon Sep 17 00:00:00 2001 From: Adriano Amalfi Date: Sun, 26 May 2024 00:55:17 +0200 Subject: [PATCH 01/19] =?UTF-8?q?feat=20=E2=9C=A8:=20Add=20Italian=20Langu?= =?UTF-8?q?age?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/locale/it/common.json | 88 +++++++++ src/assets/locale/it/knowledge.json | 42 ++++ src/assets/locale/it/option.json | 12 ++ src/assets/locale/it/playground.json | 29 +++ src/assets/locale/it/settings.json | 286 +++++++++++++++++++++++++++ src/assets/locale/it/sidepanel.json | 7 + src/i18n/index.ts | 2 + src/i18n/lang/it.ts | 15 ++ src/i18n/support-language.ts | 4 + 9 files changed, 485 insertions(+) create mode 100644 src/assets/locale/it/common.json create mode 100644 src/assets/locale/it/knowledge.json create mode 100644 src/assets/locale/it/option.json create mode 100644 src/assets/locale/it/playground.json create mode 100644 src/assets/locale/it/settings.json create mode 100644 src/assets/locale/it/sidepanel.json create mode 100644 src/i18n/lang/it.ts diff --git a/src/assets/locale/it/common.json b/src/assets/locale/it/common.json new file mode 100644 index 0000000..df4f4c3 --- /dev/null +++ b/src/assets/locale/it/common.json @@ -0,0 +1,88 @@ +{ + "pageAssist": "Page Assist", + "selectAModel": "Seleziona un Modello", + "save": "Salva", + "saved": "Salvato", + "cancel": "Annulla", + "retry": "Riprova", + "share": { + "tooltip": { + "share": "Condividi" + }, + "modal": { + "title": "Condividi Collegamento alla Chat" + }, + "form": { + "defaultValue": { + "name": "Anonimo", + "title": "Chat Senza Titolo" + }, + "title": { + "label": "Titolo della Chat", + "placeholder": "Inserisci il Titolo della Chat", + "required": "Titolo della Chat obbligatorio" + }, + "name": { + "label": "Il tuo Nome", + "placeholder": "Inserisci il tuo Nome", + "required": "Nome obbligatorio" + }, + "btn": { + "save": "Genera Link", + "saving": "Sto generando il Link..." + } + }, + "notification": { + "successGenerate": "Link copiato negli appunti", + "failGenerate": "Impossibile generare il link" + } + }, + "copyToClipboard": "Copia negli Appunti", + "webSearch": "Ricerca nel Web", + "regenerate": "Rigenera", + "edit": "Modifica", + "saveAndSubmit": "Salva e Invia", + "editMessage": { + "placeholder": "Scrivi un messaggio..." + }, + "submit": "Invia", + "noData": "Nessun Dato", + "noHistory": "Nessuna Cronologia Chat", + "chatWithCurrentPage": "Chatta con la Pagina Corrente", + "beta": "Beta", + "tts": "Leggi ad Alta Voce", + "currentChatModelSettings": "Impostazioni del Modello Corrente", + "modelSettings": { + "label": "Impostazioni del Modello", + "description": "Imposta le opzioni del modello globalmente per tutte le chat", + "form": { + "keepAlive": { + "label": "Keep Alive", + "help": "Imposta il tempo per cui il modello deve rimanere caricato in memoria (default: 5m)", + "placeholder": "Inserisci la durata del Keep Alive (e.g. 5m, 10m, 1h)" + }, + "temperature": { + "label": "Temperatura", + "placeholder": "Inserisci la Temperatura (e.g. 0.7, 1.0)" + }, + "numCtx": { + "label": "Dimensione del Contesto", + "placeholder": "Inserisci la Dimensione del Contesto (default: 2048)" + }, + "seed": { + "label": "Seed", + "placeholder": "Inserisci il Valore Seed (e.g. 1234)", + "help": "Riproducibilità dell'output del modello" + }, + "topK": { + "label": "Top K", + "placeholder": "Inserisci il Valore Top K (e.g. 40, 100)" + }, + "topP": { + "label": "Top P", + "placeholder": "Inserisci il Valore Top P (e.g. 0.9, 0.95)" + } + }, + "advanced": "Altre Impostazioni del Modello" + } +} diff --git a/src/assets/locale/it/knowledge.json b/src/assets/locale/it/knowledge.json new file mode 100644 index 0000000..867cd84 --- /dev/null +++ b/src/assets/locale/it/knowledge.json @@ -0,0 +1,42 @@ +{ + "addBtn": "Aggiungi nuova Knowledge Base", + "columns": { + "title": "Titolo", + "status": "Stato", + "embeddings": "Modello di Embedding", + "createdAt": "Creato da", + "action": "Azioni" + }, + "expandedColumns": { + "name": "Nome" + }, + "tooltip": { + "delete": "Elimina" + }, + "confirm": { + "delete": "Sei sicuro di voler eliminare questa Knowledge Base?" + }, + "deleteSuccess": "Knowledge Base eliminata correttamente", + "status": { + "pending": "In attesa", + "finished": "Completato", + "processing": "In corso" + }, + "addKnowledge": "Aggiungi Knowledge Base", + "form": { + "title": { + "label": "Titolo Knowledge Base", + "placeholder": "Inserisci il titolo della Knowledge Base", + "required": "Il Titolo è obbligatorio" + }, + "uploadFile": { + "label": "Carica File", + "uploadText": "Trascina un file qui or scegli upload", + "uploadHint": "Tipi di file supportati: .pdf, .csv, .txt, .md, .docx", + "required": "File è obbligatorio" + }, + "submit": "Invia", + "success": "Knowledge Base aggiunta correttamente" + }, + "noEmbeddingModel": "Aggiungi prima un modello dalla pagina di impostazione di Ollama" +} \ No newline at end of file diff --git a/src/assets/locale/it/option.json b/src/assets/locale/it/option.json new file mode 100644 index 0000000..6fcd098 --- /dev/null +++ b/src/assets/locale/it/option.json @@ -0,0 +1,12 @@ +{ + "newChat": "Nuova Chat", + "selectAPrompt": "Scegli un Prompt", + "githubRepository": "GitHub Repository", + "settings": "Impsotazioni", + "sidebarTitle": "Cronologia Chat", + "error": "Errore", + "somethingWentWrong": "Qualcosa è andato storto", + "validationSelectModel": "Scegliere un modello per continuare", + "deleteHistoryConfirmation": "Sei sicuro che vuoi eliminare la cronologia?", + "editHistoryTitle": "Inserisci un nuovo titolo" +} \ No newline at end of file diff --git a/src/assets/locale/it/playground.json b/src/assets/locale/it/playground.json new file mode 100644 index 0000000..44972eb --- /dev/null +++ b/src/assets/locale/it/playground.json @@ -0,0 +1,29 @@ +{ + "ollamaState": { + "searching": "Sto cercando Ollama 🦙", + "running": "Ollama è attivo 🦙", + "notRunning": "Impossibile connettersi a Ollama 🦙", + "connectionError": "C'è stato un problema di connessione. Controlla la documentazione per investigare." + }, + "formError": { + "noModel": "Seleziona un modello", + "noEmbeddingModel": "Imposta un modello di embedding da Impostazioni > Ollama" + }, + "form": { + "textarea": { + "placeholder": "Scrivi un messaggio..." + }, + "webSearch": { + "on": "Attivo", + "off": "Disattivato" + } + }, + "tooltip": { + "searchInternet": "Cerca su Internet", + "speechToText": "Speech to Text", + "uploadImage": "Carica immagine", + "stopStreaming": "Ferma lo Streaming", + "knowledge": "Conoscenza" + }, + "sendWhenEnter": "Invia subito dopo Enter" +} \ No newline at end of file diff --git a/src/assets/locale/it/settings.json b/src/assets/locale/it/settings.json new file mode 100644 index 0000000..7ab29d8 --- /dev/null +++ b/src/assets/locale/it/settings.json @@ -0,0 +1,286 @@ +{ + "generalSettings": { + "title": "Impostazioni Generali", + "settings": { + "heading": "Impostazioni Web UI", + "speechRecognitionLang": { + "label": "Lingua per il riconoscimento vocale", + "placeholder": "Scegli una lingua" + }, + "language": { + "label": "Lingua", + "placeholder": "Scegli una lingua" + }, + "darkMode": { + "label": "Cambia il Tema", + "options": { + "light": "Chiaro", + "dark": "Scuro" + } + }, + "copilotResumeLastChat": { + "label": "Riprendi l'ultima chat quando apri il Pannello Laterale (Copilot)" + }, + "hideCurrentChatModelSettings": { + "label": "Nascondi le impostazioni correnti del modello Chat" + } + }, + "webSearch": { + "heading": "Gestione ricerca Web", + "searchMode": { + "label": "Effettua ricerca web Internet semplice" + }, + "provider": { + "label": "Motori di ricerca", + "placeholder": "Scegli un motore di ricerca" + }, + "totalSearchResults": { + "label": "Risultati della ricerca", + "placeholder": "Inserisci il totale delle ricerche" + } + }, + "system": { + "heading": "Impostazioni di Sistema", + "deleteChatHistory": { + "label": "Elimina cronologia Chat", + "button": "Elimina", + "confirm": "Sei sicuro che vuoi eliminare la tua cronologia delle chat? Questa azione non può essere annullata." + }, + "export": { + "label": "Esporta la cronologia Chat, Base di Conoscenza, e Prompts", + "button": "Esporta Dati", + "success": "Esportato con Successo" + }, + "import": { + "label": "Imposta la cronologia Chat, Base di Conoscenza, e Prompts", + "button": "Importa Dati", + "success": "Importato con Successo", + "error": "Errore Importazione" + } + }, + "tts": { + "heading": "Impostazioni Text-to-Speech", + "ttsEnabled": { + "label": "Abilita Text-to-Speech" + }, + "ttsProvider": { + "label": "Text-to-Speech Provider", + "placeholder": "Seleziona un provider" + }, + "ttsVoice": { + "label": "Text-to-Speech Voce", + "placeholder": "Seleziona una voce" + }, + "ssmlEnabled": { + "label": "Abilita SSML (Speech Synthesis Markup Language)" + } + } + }, + "manageModels": { + "title": "Gestione Modelli", + "addBtn": "Aggiungi un nuovo Modello", + "columns": { + "name": "Nome", + "digest": "Digest", + "modifiedAt": "Modificato il", + "size": "Dimensioni", + "actions": "Azioni" + }, + "expandedColumns": { + "parentModel": "Modello Padre", + "format": "Formato", + "family": "Famiglia", + "parameterSize": "Numero di Parametri", + "quantizationLevel": "Livello di Quantizzazione" + }, + "tooltip": { + "delete": "Elimina Modello", + "repull": "Ri-Scarica Modello" + }, + "confirm": { + "delete": "Sei sicuro di voler eliminare questo modello?", + "repull": "Se sicuro che vuoi ri-scaricare questo modello?" + }, + "modal": { + "title": "Aggiungi Nuovo Modello", + "placeholder": "Inserisci il Nome Modello", + "pull": "Scarico del Modello" + }, + "notification": { + "pullModel": "Scarico del Modello", + "pullModelDescription": "Scaricando il modello {{modelName}}. Per ulteriori dettagli visualizza l'icona dell'estensione.", + "success": "Completato", + "error": "Errore", + "successDescription": "Scarico del modello completato", + "successDeleteDescription": "Eliminazione del modello completato", + "someError": "Qualcosa è andato storto. Riprova più tardi" + } + }, + "managePrompts": { + "title": "Gestisci Prompts", + "addBtn": "Aggiungi nuovo Prompt", + "option1": "Normale", + "option2": "RAG", + "questionPrompt": "Question Prompt", + "columns": { + "title": "Titolo", + "prompt": "Prompt", + "type": "Tipo di Prompt", + "actions": "Azioni" + }, + "systemPrompt": "Prompt di Sistema", + "quickPrompt": "Prompt Veloce", + "tooltip": { + "delete": "Elimina Prompt", + "edit": "Modifica Prompt" + }, + "confirm": { + "delete": "Sei sicuro di voler eliminare questo prompt? L'azione non può essere annullata." + }, + "modal": { + "addTitle": "Aggiungi Nuovo Prompt", + "editTitle": "Modifica Prompt" + }, + "form": { + "title": { + "label": "Titolo", + "placeholder": "I Miei Prompt", + "required": "Inserisci il Titolo" + }, + "prompt": { + "label": "Prompt", + "placeholder": "Inserisci Prompt", + "required": "Scrivi il prompt", + "help": "Puoi usare {key} come variabile nel tuo prompt." + }, + "isSystem": { + "label": "Prompt di Sistema" + }, + "btnSave": { + "saving": "Aggiungendo Prompt...", + "save": "Aggiungi Prompt" + }, + "btnEdit": { + "saving": "Aggiornando Prompt...", + "save": "Aggiorna Prompt" + } + }, + "notification": { + "addSuccess": "Prompt Aggiunto", + "addSuccessDesc": "Il Prompt è stato aggiunto correttamente", + "error": "Errore", + "someError": "Qualcosa è andato storto. Riprova più tardi", + "updatedSuccess": "Prompt Aggiornato", + "updatedSuccessDesc": "Il Prompt è stato aggiornato correttmante", + "deletedSuccess": "Prompt Eliminato", + "deletedSuccessDesc": "Il Prompt è stato eliminato correttamente" + } + }, + "manageShare": { + "title": "Gestione Condivisioni", + "heading": "Configura l'URL della Pagina di Condivisione", + "form": { + "url": { + "label": "URL Pagina di Condivisione", + "placeholder": "Inserisci URL Pagina di Condivisione", + "required": "Inserisci l'url della pagina di condivisione!", + "help": "Per ragioni di privacy, tu puoi ospitare in self-host la paginacon il seguente URL. Leggi altro." + } + }, + "webshare": { + "heading": "Condivisioni Web", + "columns": { + "title": "Titolo", + "url": "URL", + "actions": "Azioni" + }, + "tooltip": { + "delete": "Elimina Condivisione" + }, + "confirm": { + "delete": "Sei sicuro che vuoi eliminare questa condivisione? L'azione non può essere annullata." + }, + "label": "Gestione Condivisioni", + "description": "Abilita o Disattiva la funzionalità di condivisione" + }, + "notification": { + "pageShareSuccess": " URL di condivisione aggiornato correttamente", + "someError": "Qualcosa è andato storto. Riprova più tardi", + "webShareDeleteSuccess": "Condivisione eliminata correttamente" + } + }, + "ollamaSettings": { + "title": "Impostazioni Ollama", + "heading": "Configura Ollama", + "settings": { + "ollamaUrl": { + "label": "Ollama URL", + "placeholder": "Inserici l'URL di Ollama" + }, + "ragSettings": { + "label": "Impostazioni RAG", + "model": { + "label": "Modello di Embedding", + "required": "Scegliere il modello", + "help": "E' raccomandato l'uso di modelli come `nomic-embed-text`.", + "placeholder": "Seleziona un modello" + }, + "chunkSize": { + "label": "Dimensione del Blocco (Chunk Size)", + "placeholder": "Inserisci la Dimensione del Blocco (Chunk Size)", + "required": "Inserisci la Dimensione del Blocco (chunk size)" + }, + "chunkOverlap": { + "label": "Sovrapposizione del Blocco (Chunk Overlap)", + "placeholder": "Inserisci la Sovrapposizione del Blocco (Chunk Overlap)", + "required": "Inserisci la Sovrapposizione del Blocco" + } + }, + "prompt": { + "label": "Configura il Prompt RAG", + "option1": "Normale", + "option2": "Web", + "alert": "La configurazione del prompt di sistema qui è deprecato. Usa la sezione Gestione Prompt per aggiungere o modificare i prompts.Questa sezione sarà eliminata nelle prossime release", + "systemPrompt": "Prompt di Sistema", + "systemPromptPlaceholder": "Inserisci il Prompt di Sistema", + "webSearchPrompt": "Prompt per la Ricerca Web", + "webSearchPromptHelp": "Non rimuovere `{search_results}` dal prompt.", + "webSearchPromptError": "Inserisci il prompt per la ricerca web", + "webSearchPromptPlaceholder": "Imserosco il Prompt per la Ricerca Web", + "webSearchFollowUpPrompt": "Prompt di Follow Up sulla Ricerca Web", + "webSearchFollowUpPromptHelp": "Non rimuovere `{chat_history}` e `{question}` dal prompt.", + "webSearchFollowUpPromptError": "Inserisci il Prompt di Follow Up della Ricerca Web!", + "webSearchFollowUpPromptPlaceholder": "I tuoi Prompt di Follow Up delle Ricerche Web" + }, + "advanced": { + "label": "Configurazione Avanzata Ollama URL", + "urlRewriteEnabled": { + "label": "Abilita o Disabilita l'URL di Origine Personalizzato" + }, + "rewriteUrl": { + "label": "URL di Origine Personalizzato", + "placeholder": "Inserisci URL di Origine Personalizzato" + }, + "help": "Se hai problemi di connessione con Ollama su Page Assist, puoi configurare un URL di origine personalizzato. Per saperne di più sulla configurazione, clicca qui." + } + } + }, + "manageSearch": { + "title": "Gestisci Ricerca Web", + "heading": "Configura Ricerca Web" + }, + "about": { + "title": "Informazioni", + "heading": "Informazioni", + "chromeVersion": "Versione di Page Assist", + "ollamaVersion": "Versione di Ollama", + "support": "Puoi supportare il progetto Page Assist donando o sponsorizzando attraverso le seguenti piattaforme:", + "koFi": "Supporta su Ko-fi", + "githubSponsor": "Sponsorizza su GitHub", + "githubRepo": "Repository GitHub" + }, + "manageKnowledge": { + "title": "Gestisci Conoscenza", + "heading": "Configura Base di Conoscenza" + } +} diff --git a/src/assets/locale/it/sidepanel.json b/src/assets/locale/it/sidepanel.json new file mode 100644 index 0000000..89c9ac2 --- /dev/null +++ b/src/assets/locale/it/sidepanel.json @@ -0,0 +1,7 @@ +{ + "tooltip": { + "embed": "L'inserimento della pagina potrebbe richiedere alcuni minuti. Attendere prego...", + "clear": "Cancella la cronologia della chat", + "history": "Cronologia della chat" + } +} \ No newline at end of file diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 3a28a6e..d0b7317 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -5,6 +5,7 @@ import { ru } from "./lang/ru"; import { ml } from "./lang/ml"; import { zh } from "./lang/zh"; import { ja } from "./lang/ja"; +import { it } from "./lang/it"; import LanguageDetector from 'i18next-browser-languagedetector'; i18n @@ -13,6 +14,7 @@ i18n .init({ resources: { en: en, + "it": it, ml: ml, "zh-CN": zh, ru: ru, diff --git a/src/i18n/lang/it.ts b/src/i18n/lang/it.ts new file mode 100644 index 0000000..6be87df --- /dev/null +++ b/src/i18n/lang/it.ts @@ -0,0 +1,15 @@ +import option from "@/assets/locale/it/option.json"; +import playground from "@/assets/locale/it/playground.json"; +import common from "@/assets/locale/it/common.json"; +import sidepanel from "@/assets/locale/it/sidepanel.json"; +import settings from "@/assets/locale/it/settings.json"; +import knowledge from "@/assets/locale/it/knowledge.json"; + +export const it = { + option, + playground, + common, + sidepanel, + settings, + knowledge +} \ No newline at end of file diff --git a/src/i18n/support-language.ts b/src/i18n/support-language.ts index af7db40..a6e3f87 100644 --- a/src/i18n/support-language.ts +++ b/src/i18n/support-language.ts @@ -4,6 +4,10 @@ export const supportLanguage = [ label: "English", value: "en" }, + { + label: "Italiano", + value: "it" + }, { label: "Russian", value: "ru" From 533e38c287a866a7b8713a89f0629b491020675b Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Mon, 27 May 2024 21:09:16 +0530 Subject: [PATCH 02/19] chore: Update Layout component to truncate long model names --- src/components/Layouts/Layout.tsx | 4 ++-- src/libs/process-knowledge.ts | 16 +++++----------- wxt.config.ts | 2 +- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/components/Layouts/Layout.tsx b/src/components/Layouts/Layout.tsx index 0fe494f..2a4f5e4 100644 --- a/src/components/Layouts/Layout.tsx +++ b/src/components/Layouts/Layout.tsx @@ -141,9 +141,9 @@ export default function OptionLayout({ label: ( + className="flex flex-row gap-3 items-center truncate"> - {model.name} + {model.name} ), value: model.model diff --git a/src/libs/process-knowledge.ts b/src/libs/process-knowledge.ts index e44bfa0..f933d85 100644 --- a/src/libs/process-knowledge.ts +++ b/src/libs/process-knowledge.ts @@ -2,7 +2,8 @@ import { getKnowledgeById, updateKnowledgeStatus } from "@/db/knowledge" import { PageAssistPDFUrlLoader } from "@/loader/pdf-url" import { defaultEmbeddingChunkOverlap, - defaultEmbeddingChunkSize + defaultEmbeddingChunkSize, + getOllamaURL } from "@/services/ollama" import { OllamaEmbeddings } from "@langchain/community/embeddings/ollama" import { RecursiveCharacterTextSplitter } from "langchain/text_splitter" @@ -10,22 +11,14 @@ import { PageAssistVectorStore } from "./PageAssistVectorStore" import { PageAssisCSVUrlLoader } from "@/loader/csv" import { PageAssisTXTUrlLoader } from "@/loader/txt" import { PageAssistDocxLoader } from "@/loader/docx" +import { cleanUrl } from "./clean-url" -const readAsArrayBuffer = (file: File): Promise => { - return new Promise((resolve, reject) => { - const reader = new FileReader() - reader.onload = () => { - resolve(reader.result as ArrayBuffer) - } - reader.onerror = reject - reader.readAsArrayBuffer(file) - }) -} export const processKnowledge = async (msg: any, id: string): Promise => { console.log(`Processing knowledge with id: ${id}`) try { const knowledge = await getKnowledgeById(id) + const ollamaUrl = await getOllamaURL() if (!knowledge) { console.error(`Knowledge with id ${id} not found`) @@ -35,6 +28,7 @@ export const processKnowledge = async (msg: any, id: string): Promise => { await updateKnowledgeStatus(id, "processing") const ollamaEmbedding = new OllamaEmbeddings({ + baseUrl: cleanUrl(ollamaUrl), model: knowledge.embedding_model }) const chunkSize = await defaultEmbeddingChunkSize() diff --git a/wxt.config.ts b/wxt.config.ts index 105c324..0e89e7a 100644 --- a/wxt.config.ts +++ b/wxt.config.ts @@ -48,7 +48,7 @@ export default defineConfig({ outDir: "build", manifest: { - version: "1.1.10", + version: "1.1.11", name: process.env.TARGET === "firefox" ? "Page Assist - A Web UI for Local AI Models" From 620b2b88f596317baf852e9d2b5eeb8fe139d694 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Wed, 29 May 2024 00:13:12 +0530 Subject: [PATCH 03/19] chore: Update package.json build command for Firefox --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e7caa79..e3f67ca 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "dev": "cross-env TARGET=chrome wxt", "dev:firefox": "cross-env TARGET=firefox wxt -b firefox", "build": "cross-env TARGET=chrome wxt build", - "build:firefox": "cross-env TARGET=chrome cross-env TARGET=firefox wxt build -b firefox", + "build:firefox": "cross-env TARGET=firefox wxt build -b firefox", "zip": "cross-env TARGET=chrome wxt zip", "zip:firefox": "cross-env TARGET=firefox wxt zip -b firefox", "compile": "tsc --noEmit", From 721fad18c25f5b8526a9ee986d85eb1659af59f8 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Wed, 29 May 2024 00:13:20 +0530 Subject: [PATCH 04/19] chore: Update Layout component to adjust width for model selection --- src/components/Layouts/Layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Layouts/Layout.tsx b/src/components/Layouts/Layout.tsx index 2a4f5e4..eeb8e5b 100644 --- a/src/components/Layouts/Layout.tsx +++ b/src/components/Layouts/Layout.tsx @@ -136,7 +136,7 @@ export default function OptionLayout({ } showSearch placeholder={t("common:selectAModel")} - className="w-64 " + className="w-72" options={models?.map((model) => ({ label: ( Date: Wed, 29 May 2024 00:13:25 +0530 Subject: [PATCH 05/19] feat: Add Italian language translation --- src/public/_locales/it/messages.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/public/_locales/it/messages.json diff --git a/src/public/_locales/it/messages.json b/src/public/_locales/it/messages.json new file mode 100644 index 0000000..eb773d3 --- /dev/null +++ b/src/public/_locales/it/messages.json @@ -0,0 +1,11 @@ +{ + "extName": { + "message": "Page Assist - Un'interfaccia web per modelli AI locali" + }, + "extDescription": { + "message": "Usa i tuoi modelli AI in esecuzione locale per assisterti nella navigazione web." + }, + "openSidePanelToChat": { + "message": "Apri Copilot per chattare" + } +} From f5b0cc24aca8078db1b7bb8db11dc9293e08fcfc Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Wed, 29 May 2024 00:21:56 +0530 Subject: [PATCH 06/19] chore: Update save button styling in EditMessageForm --- src/components/Common/Playground/EditMessageForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Common/Playground/EditMessageForm.tsx b/src/components/Common/Playground/EditMessageForm.tsx index 00cc8d7..e864e1c 100644 --- a/src/components/Common/Playground/EditMessageForm.tsx +++ b/src/components/Common/Playground/EditMessageForm.tsx @@ -49,7 +49,7 @@ export const EditMessageForm = (props: Props) => {
+ +
+ + + {value} + + + + ) +}) diff --git a/src/components/Common/Markdown.tsx b/src/components/Common/Markdown.tsx index fa534ee..44adbf3 100644 --- a/src/components/Common/Markdown.tsx +++ b/src/components/Common/Markdown.tsx @@ -1,68 +1,38 @@ -import { Prism as SyntaxHighlighter } from "react-syntax-highlighter" import remarkGfm from "remark-gfm" -import { nightOwl } from "react-syntax-highlighter/dist/cjs/styles/prism" import remarkMath from "remark-math" -import ReactMarkdown from "react-markdown" +import ReactMarkdown, { Options } from "react-markdown" + import "property-information" import React from "react" import { Tooltip } from "antd" import { CheckIcon, ClipboardIcon } from "lucide-react" import { useTranslation } from "react-i18next" +import { FC, memo } from "react" +import { CodeBlock } from "./CodeBlock" + +export const MemoizedReactMarkdown: FC = memo( + ReactMarkdown, + (prevProps, nextProps) => + prevProps.children === nextProps.children && + prevProps.className === nextProps.className +) + export default function Markdown({ message }: { message: string }) { - const [isBtnPressed, setIsBtnPressed] = React.useState(false) - const { t } = useTranslation("common") + return ( - -
- - {className && className.replace("language-", "")} - - -
- - - -
-
- - + ) : ( {children} @@ -85,7 +55,7 @@ export default function Markdown({ message }: { message: string }) { } }}> {message} -
+
) } From f12523d3f0ab42864cee5f645e01f3118e1a610e Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Thu, 30 May 2024 23:49:28 +0530 Subject: [PATCH 11/19] feat: Add useScrollAnchor hook for scrolling functionality --- src/hooks/useScrollAnchor.tsx | 87 +++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/hooks/useScrollAnchor.tsx diff --git a/src/hooks/useScrollAnchor.tsx b/src/hooks/useScrollAnchor.tsx new file mode 100644 index 0000000..a8ec2ad --- /dev/null +++ b/src/hooks/useScrollAnchor.tsx @@ -0,0 +1,87 @@ +import { useCallback, useEffect, useRef, useState } from "react" + +export const useScrollAnchor = () => { + const messagesRef = useRef(null) + const scrollRef = useRef(null) + const visibilityRef = useRef(null) + + const [isAtBottom, setIsAtBottom] = useState(true) + const [isVisible, setIsVisible] = useState(false) + + const scrollToBottom = useCallback(() => { + if (messagesRef.current) { + messagesRef.current.scrollIntoView({ + block: "end", + behavior: "smooth" + }) + } + }, []) + + useEffect(() => { + if (messagesRef.current) { + if (isAtBottom && !isVisible) { + messagesRef.current.scrollIntoView({ + block: "end" + }) + } + } + }, [isAtBottom, isVisible]) + + useEffect(() => { + const { current } = scrollRef + + if (current) { + const handleScroll = (event: Event) => { + const target = event.target as HTMLDivElement + const offset = 25 + const isAtBottom = + target.scrollTop + target.clientHeight >= target.scrollHeight - offset + console.log(target.scrollTop, target.clientHeight, target.scrollHeight) + setIsAtBottom(isAtBottom) + } + + current.addEventListener("scroll", handleScroll, { + passive: true + }) + + return () => { + current.removeEventListener("scroll", handleScroll) + } + } + }, []) + + useEffect(() => { + if (visibilityRef.current) { + let observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + console.log(entry.isIntersecting) + if (entry.isIntersecting) { + setIsVisible(true) + } else { + setIsVisible(false) + } + }) + }, + { + rootMargin: "0px 0px -100px 0px" + } + ) + + observer.observe(visibilityRef.current) + + return () => { + observer.disconnect() + } + } + }) + + return { + messagesRef, + scrollRef, + visibilityRef, + scrollToBottom, + isAtBottom, + isVisible + } +} From b6bc617e5e24c0ae973416d0b343c05843f594c9 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Fri, 31 May 2024 13:50:05 +0530 Subject: [PATCH 12/19] refactor header --- src/components/Layouts/Header.tsx | 221 ++++++++++++++++++++++++++++ src/components/Layouts/Layout.tsx | 230 ++---------------------------- 2 files changed, 233 insertions(+), 218 deletions(-) create mode 100644 src/components/Layouts/Header.tsx diff --git a/src/components/Layouts/Header.tsx b/src/components/Layouts/Header.tsx new file mode 100644 index 0000000..af180c9 --- /dev/null +++ b/src/components/Layouts/Header.tsx @@ -0,0 +1,221 @@ +import { useStorage } from "@plasmohq/storage/hook" +import { + BrainCog, + ChevronLeft, + CogIcon, + ComputerIcon, + GithubIcon, + PanelLeftIcon, + SquarePen, + ZapIcon +} from "lucide-react" +import { useTranslation } from "react-i18next" +import { useLocation, NavLink } from "react-router-dom" +import { OllamaIcon } from "../Icons/Ollama" +import { SelectedKnowledge } from "../Option/Knowledge/SelectedKnwledge" +import { ModelSelect } from "../Common/ModelSelect" +import { PromptSelect } from "../Common/PromptSelect" +import { useQuery } from "@tanstack/react-query" +import { fetchChatModels } from "~/services/ollama" +import { useMessageOption } from "~/hooks/useMessageOption" +import { Select, Tooltip } from "antd" +import { getAllPrompts } from "@/db" +import { ShareBtn } from "~/components/Common/ShareBtn" +type Props = { + setSidebarOpen: (open: boolean) => void + setOpenModelSettings: (open: boolean) => void +} + +export const Header: React.FC = ({ + setOpenModelSettings, + setSidebarOpen +}) => { + const { t } = useTranslation(["option", "common"]) + const [shareModeEnabled] = useStorage("shareMode", false) + const [hideCurrentChatModelSettings] = useStorage( + "hideCurrentChatModelSettings", + false + ) + const { + selectedModel, + setSelectedModel, + clearChat, + selectedSystemPrompt, + setSelectedQuickPrompt, + setSelectedSystemPrompt, + messages, + streaming + } = useMessageOption() + const { + data: models, + isLoading: isModelsLoading, + isFetching: isModelsFetching + } = useQuery({ + queryKey: ["fetchModel"], + queryFn: () => fetchChatModels({ returnEmpty: true }), + refetchInterval: 15000 + }) + + const { data: prompts, isLoading: isPromptLoading } = useQuery({ + queryKey: ["fetchAllPromptsLayout"], + queryFn: getAllPrompts + }) + + const { pathname } = useLocation() + + const getPromptInfoById = (id: string) => { + return prompts?.find((prompt) => prompt.id === id) + } + + const handlePromptChange = (value?: string) => { + if (!value) { + setSelectedSystemPrompt(undefined) + setSelectedQuickPrompt(undefined) + return + } + const prompt = getPromptInfoById(value) + if (prompt?.is_system) { + setSelectedSystemPrompt(prompt.id) + } else { + setSelectedSystemPrompt(undefined) + setSelectedQuickPrompt(prompt!.content) + } + } + + return ( +
+
+ {pathname !== "/" && ( +
+ + + +
+ )} +
+ +
+
+ +
+ + {"/"} + +
+ + //@ts-ignore + option.label.key.toLowerCase().indexOf(input.toLowerCase()) >= 0 + } + options={prompts?.map((prompt) => ({ + label: ( + + {prompt.is_system ? ( + + ) : ( + + )} + {prompt.title} + + ), + value: prompt.id + }))} + /> +
+
+ +
+ +
+
+
+
+ {!hideCurrentChatModelSettings && ( + + + + )} + {pathname === "/" && + messages.length > 0 && + !streaming && + shareModeEnabled && } + + + + + + + + + + +
+
+
+
+ ) +} diff --git a/src/components/Layouts/Layout.tsx b/src/components/Layouts/Layout.tsx index eeb8e5b..699fce0 100644 --- a/src/components/Layouts/Layout.tsx +++ b/src/components/Layouts/Layout.tsx @@ -1,30 +1,12 @@ import React, { useState } from "react" -import { useLocation, NavLink } from "react-router-dom" import { Sidebar } from "../Option/Sidebar" -import { Drawer, Select, Tooltip } from "antd" -import { useQuery } from "@tanstack/react-query" -import { fetchChatModels, getAllModels } from "~/services/ollama" -import { useMessageOption } from "~/hooks/useMessageOption" -import { - BrainCog, - ChevronLeft, - CogIcon, - ComputerIcon, - GithubIcon, - PanelLeftIcon, - SquarePen, - ZapIcon -} from "lucide-react" -import { getAllPrompts } from "@/db" -import { ShareBtn } from "~/components/Common/ShareBtn" +import { Drawer } from "antd" + import { useTranslation } from "react-i18next" -import { OllamaIcon } from "../Icons/Ollama" -import { SelectedKnowledge } from "../Option/Knowledge/SelectedKnwledge" -import { useStorage } from "@plasmohq/storage/hook" -import { ModelSelect } from "../Common/ModelSelect" -import { PromptSelect } from "../Common/PromptSelect" + import { CurrentChatModelSettings } from "../Common/Settings/CurrentChatModelSettings" +import { Header } from "./Header" export default function OptionLayout({ children @@ -33,204 +15,16 @@ export default function OptionLayout({ }) { const [sidebarOpen, setSidebarOpen] = useState(false) const { t } = useTranslation(["option", "common"]) - const [shareModeEnabled] = useStorage("shareMode", false) const [openModelSettings, setOpenModelSettings] = useState(false) - const [hideCurrentChatModelSettings] = useStorage( - "hideCurrentChatModelSettings", - false - ) - - const { - selectedModel, - setSelectedModel, - clearChat, - selectedSystemPrompt, - setSelectedQuickPrompt, - setSelectedSystemPrompt, - messages, - streaming - } = useMessageOption() - - const { - data: models, - isLoading: isModelsLoading, - isFetching: isModelsFetching - } = useQuery({ - queryKey: ["fetchModel"], - queryFn: () => fetchChatModels({ returnEmpty: true }), - refetchInterval: 15000 - }) - - const { data: prompts, isLoading: isPromptLoading } = useQuery({ - queryKey: ["fetchAllPromptsLayout"], - queryFn: getAllPrompts - }) - - const { pathname } = useLocation() - - const getPromptInfoById = (id: string) => { - return prompts?.find((prompt) => prompt.id === id) - } - - const handlePromptChange = (value?: string) => { - if (!value) { - setSelectedSystemPrompt(undefined) - setSelectedQuickPrompt(undefined) - return - } - const prompt = getPromptInfoById(value) - if (prompt?.is_system) { - setSelectedSystemPrompt(prompt.id) - } else { - setSelectedSystemPrompt(undefined) - setSelectedQuickPrompt(prompt!.content) - } - } return ( -
-
-
-
-
- {pathname !== "/" && ( -
- - - -
- )} -
- -
-
- -
- - {"/"} - -
- - //@ts-ignore - option.label.key - .toLowerCase() - .indexOf(input.toLowerCase()) >= 0 - } - options={prompts?.map((prompt) => ({ - label: ( - - {prompt.is_system ? ( - - ) : ( - - )} - {prompt.title} - - ), - value: prompt.id - }))} - /> -
-
- -
- -
-
-
-
- {!hideCurrentChatModelSettings && ( - - - - )} - {pathname === "/" && - messages.length > 0 && - !streaming && - shareModeEnabled && } - - - - - - - - - - -
-
-
-
-
{children}
-
+ <> +
+
+
{children}
-
+ ) } From 7fa44e6fd3d233cd4f8d4e36099e0733ee50a2a4 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Fri, 31 May 2024 22:05:43 +0530 Subject: [PATCH 13/19] refactor: Remove unnecessary flex classes from main element in Layout component --- src/components/Layouts/Layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Layouts/Layout.tsx b/src/components/Layouts/Layout.tsx index 699fce0..0da5433 100644 --- a/src/components/Layouts/Layout.tsx +++ b/src/components/Layouts/Layout.tsx @@ -24,7 +24,7 @@ export default function OptionLayout({ setSidebarOpen={setSidebarOpen} setOpenModelSettings={setOpenModelSettings} /> -
{children}
+
{children}
Date: Sat, 1 Jun 2024 05:37:40 -0300 Subject: [PATCH 14/19] feat: Add Brazilian Portuguese language support Introduces Brazilian Portuguese (pt-BR) as a new supported language. --- src/assets/locale/pt-BR/common.json | 88 ++++++++ src/assets/locale/pt-BR/knowledge.json | 42 ++++ src/assets/locale/pt-BR/option.json | 12 + src/assets/locale/pt-BR/playground.json | 29 +++ src/assets/locale/pt-BR/settings.json | 286 ++++++++++++++++++++++++ src/assets/locale/pt-BR/sidepanel.json | 7 + src/i18n/index.ts | 2 + src/i18n/lang/pt.ts | 15 ++ src/i18n/support-language.ts | 4 + 9 files changed, 485 insertions(+) create mode 100644 src/assets/locale/pt-BR/common.json create mode 100644 src/assets/locale/pt-BR/knowledge.json create mode 100644 src/assets/locale/pt-BR/option.json create mode 100644 src/assets/locale/pt-BR/playground.json create mode 100644 src/assets/locale/pt-BR/settings.json create mode 100644 src/assets/locale/pt-BR/sidepanel.json create mode 100644 src/i18n/lang/pt.ts diff --git a/src/assets/locale/pt-BR/common.json b/src/assets/locale/pt-BR/common.json new file mode 100644 index 0000000..f2af56a --- /dev/null +++ b/src/assets/locale/pt-BR/common.json @@ -0,0 +1,88 @@ +{ + "pageAssist": "Page Assist", + "selectAModel": "Selecione um Modelo", + "save": "Salvar", + "saved": "Salvo", + "cancel": "Cancelar", + "retry": "Tentar Novamente", + "share": { + "tooltip": { + "share": "Compartilhar" + }, + "modal": { + "title": "Compartilhar link para o Chat" + }, + "form": { + "defaultValue": { + "name": "Anônimo", + "title": "Chat sem título" + }, + "title": { + "label": "Título do Chat", + "placeholder": "Digite o título do Chat", + "required": "O título do Chat é obrigatório" + }, + "name": { + "label": "Seu nome", + "placeholder": "Digite seu nome", + "required": "Seu nome é obrigatório" + }, + "btn": { + "save": "Gerar Link", + "saving": "Gerando Link..." + } + }, + "notification": { + "successGenerate": "Link copiado para a área de transferência", + "failGenerate": "Falha ao gerar link" + } + }, + "copyToClipboard": "Copiar para a área de transferência", + "webSearch": "Pesquisando na web", + "regenerate": "Regenerar", + "edit": "Editar", + "saveAndSubmit": "Salvar e Enviar", + "editMessage": { + "placeholder": "Digite uma mensagem..." + }, + "submit": "Enviar", + "noData": "Sem dados", + "noHistory": "Sem histórico de chat", + "chatWithCurrentPage": "Conversar com a página atual", + "beta": "Beta", + "tts": "Ler em voz alta", + "currentChatModelSettings": "Configurações do Modelo de Chat Atual", + "modelSettings": { + "label": "Configurações do Modelo", + "description": "Defina as opções do modelo globalmente para todos os chats", + "form": { + "keepAlive": { + "label": "Manter Vivo", + "help": "controla quanto tempo o modelo permanecerá carregado na memória após a solicitação (padrão: 5m)", + "placeholder": "Digite a duração do Manter Vivo (ex: 5m, 10m, 1h)" + }, + "temperature": { + "label": "Temperatura", + "placeholder": "Digite o valor da Temperatura (ex: 0.7, 1.0)" + }, + "numCtx": { + "label": "Janela de contexto", + "placeholder": "Digite o valor do tamanho da janela de contexto (padrão: 2048)" + }, + "seed": { + "label": "Semente", + "placeholder": "Digite o valor da Semente (ex: 1234)", + "help": "Reprodutibilidade da saída do modelo" + }, + "topK": { + "label": "Top K", + "placeholder": "Digite o valor do Top K (ex: 40, 100)" + }, + "topP": { + "label": "Top P", + "placeholder": "Digite o valor do Top P (ex: 0.9, 0.95)" + } + }, + "advanced": "Mais Configurações do Modelo" + } +} \ No newline at end of file diff --git a/src/assets/locale/pt-BR/knowledge.json b/src/assets/locale/pt-BR/knowledge.json new file mode 100644 index 0000000..3ac43e6 --- /dev/null +++ b/src/assets/locale/pt-BR/knowledge.json @@ -0,0 +1,42 @@ +{ + "addBtn": "Adicionar Novo Conhecimento", + "columns": { + "title": "Título", + "status": "Status", + "embeddings": "Modelo de Embedding", + "createdAt": "Criado Em", + "action": "Ações" + }, + "expandedColumns": { + "name": "Nome" + }, + "tooltip": { + "delete": "Excluir" + }, + "confirm": { + "delete": "Você tem certeza que deseja excluir este conhecimento?" + }, + "deleteSuccess": "Conhecimento excluído com sucesso", + "status": { + "pending": "Pendente", + "finished": "Concluído", + "processing": "Processando" + }, + "addKnowledge": "Adicionar Conhecimento", + "form": { + "title": { + "label": "Título do Conhecimento", + "placeholder": "Insira o título do conhecimento", + "required": "Título do conhecimento é obrigatório" + }, + "uploadFile": { + "label": "Upload de Arquivo", + "uploadText": "Arraste e solte um arquivo aqui ou clique para upload", + "uploadHint": "Tipos de arquivo suportados: .pdf, .csv, .txt, .md, .docx", + "required": "Arquivo é obrigatório" + }, + "submit": "Enviar", + "success": "Conhecimento adicionado com sucesso" + }, + "noEmbeddingModel": "Por favor, adicione um modelo de embedding primeiro na página de configurações do Ollama" +} \ No newline at end of file diff --git a/src/assets/locale/pt-BR/option.json b/src/assets/locale/pt-BR/option.json new file mode 100644 index 0000000..9fab1b3 --- /dev/null +++ b/src/assets/locale/pt-BR/option.json @@ -0,0 +1,12 @@ +{ + "newChat": "Novo Chat", + "selectAPrompt": "Selecione um Prompt", + "githubRepository": "Repositório do GitHub", + "settings": "Configurações", + "sidebarTitle": "Histórico de Chat", + "error": "Erro", + "somethingWentWrong": "Algo deu errado", + "validationSelectModel": "Selecione um modelo para continuar", + "deleteHistoryConfirmation": "Você tem certeza de que deseja excluir este histórico?", + "editHistoryTitle": "Insira um novo título" +} diff --git a/src/assets/locale/pt-BR/playground.json b/src/assets/locale/pt-BR/playground.json new file mode 100644 index 0000000..f0cdfe3 --- /dev/null +++ b/src/assets/locale/pt-BR/playground.json @@ -0,0 +1,29 @@ +{ + "ollamaState": { + "searching": "Buscando seu Ollama 🦙", + "running": "O Ollama está rodando 🦙", + "notRunning": "Não foi possível conectar ao Ollama 🦙", + "connectionError": "Parece que você está tendo um erro de conexão. Por favor, consulte a documentação para solucionar o problema." + }, + "formError": { + "noModel": "Por favor, selecione um modelo", + "noEmbeddingModel": "Por favor, defina um modelo de embedding na página de configurações > Ollama" + }, + "form": { + "textarea": { + "placeholder": "Insira um mensagem..." + }, + "webSearch": { + "on": "On", + "off": "Off" + } + }, + "tooltip": { + "searchInternet": "Pesquisar Internet", + "speechToText": "Fala para Texto", + "uploadImage": "Carregar Imagem", + "stopStreaming": "Parar Transmissão", + "knowledge": "Conhecimento" + }, + "sendWhenEnter": "Enviar quando pressionar Enter" +} diff --git a/src/assets/locale/pt-BR/settings.json b/src/assets/locale/pt-BR/settings.json new file mode 100644 index 0000000..1c2aae9 --- /dev/null +++ b/src/assets/locale/pt-BR/settings.json @@ -0,0 +1,286 @@ +{ + "generalSettings": { + "title": "Configurações Gerais", + "settings": { + "heading": "Configurações da Interface Web", + "speechRecognitionLang": { + "label": "Linguagem de Reconhecimento de Fala", + "placeholder": "Selecione uma linguagem" + }, + "language": { + "label": "Linguagem", + "placeholder": "Selecione uma linguagem" + }, + "darkMode": { + "label": "Alterar Tema", + "options": { + "light": "Claro", + "dark": "Escuro" + } + }, + "copilotResumeLastChat": { + "label": "Retomar o último chat ao abrir o Painel Lateral (Copilot)" + }, + "hideCurrentChatModelSettings": { + "label": "Ocultar Configurações do Modelo de Chat Atual" + } + }, + "webSearch": { + "heading": "Gerenciar Pesquisa na Web", + "searchMode": { + "label": "Realizar Pesquisa Simples na Internet" + }, + "provider": { + "label": "Motor de Busca", + "placeholder": "Selecione um motor de busca" + }, + "totalSearchResults": { + "label": "Resultados de Pesquisa Totais", + "placeholder": "Insira Resultados de Pesquisa Totais" + } + }, + "system": { + "heading": "Configurações do Sistema", + "deleteChatHistory": { + "label": "Excluir Histórico de Chat", + "button": "Excluir", + "confirm": "Você tem certeza de que deseja excluir seu histórico de chat? Esta ação não pode ser desfeita." + }, + "export": { + "label": "Exportar Histórico de Chat, Base de Conhecimento e Prompts", + "button": "Exportar Dados", + "success": "Exportação Bem-Sucedida" + }, + "import": { + "label": "Importar Histórico de Chat, Base de Conhecimento e Prompts", + "button": "Importar Dados", + "success": "Importação Bem-Sucedida", + "error": "Erro de Importação" + } + }, + "tts": { + "heading": "Configurações de Fala", + "ttsEnabled": { + "label": "Habilitar Fala" + }, + "ttsProvider": { + "label": "Fornecedor de Fala", + "placeholder": "Selecione um fornecedor" + }, + "ttsVoice": { + "label": "Voz de Fala", + "placeholder": "Selecione uma voz" + }, + "ssmlEnabled": { + "label": "Habilitar SSML (Linguagem de Marcação de Sintese de Fala)" + } + } + }, + "manageModels": { + "title": "Gerenciar Modelos", + "addBtn": "Adicionar Novo Modelo", + "columns": { + "name": "Nome", + "digest": "Resumo", + "modifiedAt": "Modificado Em", + "size": "Tamanho", + "actions": "Ações" + }, + "expandedColumns": { + "parentModel": "Modelo Pai", + "format": "Formato", + "family": "Família", + "parameterSize": "Tamanho de Parâmetro", + "quantizationLevel": "Nível de Quantização" + }, + "tooltip": { + "delete": "Excluir Modelo", + "repull": "Re-Puxar Modelo" + }, + "confirm": { + "delete": "Você tem certeza de que deseja excluir este modelo?", + "repull": "Você tem certeza de que deseja re-puxar este modelo?" + }, + "modal": { + "title": "Adicionar Novo Modelo", + "placeholder": "Insira o nome do modelo", + "pull": "Puxar Modelo" + }, + "notification": { + "pullModel": "Puxando Modelo", + "pullModelDescription": "Puxando modelo {{modelName}}. Para mais detalhes, verifique o ícone da extensão.", + "success": "Sucesso", + "error": "Erro", + "successDescription": "Modelo puxado com sucesso", + "successDeleteDescription": "Modelo excluído com sucesso", + "someError": "Algo deu errado. Tente novamente mais tarde" + } + }, + "managePrompts": { + "title": "Gerenciar Prompts", + "addBtn": "Adicionar Novo Prompt", + "option1": "Normal", + "option2": "RAG", + "questionPrompt": "Prompt de Pergunta", + "columns": { + "title": "Título", + "prompt": "Prompt", + "type": "Tipo de Prompt", + "actions": "Ações" + }, + "systemPrompt": "Prompt do Sistema", + "quickPrompt": "Prompt Rápido", + "tooltip": { + "delete": "Excluir Prompt", + "edit": "Editar Prompt" + }, + "confirm": { + "delete": "Você tem certeza de que deseja excluir este prompt? Esta ação não pode ser desfeita." + }, + "modal": { + "addTitle": "Adicionar Novo Prompt", + "editTitle": "Editar Prompt" + }, + "form": { + "title": { + "label": "Título", + "placeholder": "Meu Prompt Incrível", + "required": "Por favor, insira um título" + }, + "prompt": { + "label": "Prompt", + "placeholder": "Insira o prompt", + "required": "Por favor, insira um prompt", + "help": "Você pode usar {key} como variável em seu prompt." + }, + "isSystem": { + "label": "É um Prompt do Sistema" + }, + "btnSave": { + "saving": "Adicionando Prompt...", + "save": "Adicionar Prompt" + }, + "btnEdit": { + "saving": "Atualizando Prompt...", + "save": "Atualizar Prompt" + } + }, + "notification": { + "addSuccess": "Prompt Adicionado", + "addSuccessDesc": "Prompt adicionado com sucesso", + "error": "Erro", + "someError": "Algo deu errado. Tente novamente mais tarde", + "updatedSuccess": "Prompt Atualizado", + "updatedSuccessDesc": "Prompt atualizado com sucesso", + "deletedSuccess": "Prompt Excluído", + "deletedSuccessDesc": "Prompt excluído com sucesso" + } + }, + "manageShare": { + "title": "Gerenciar Compartilhamento", + "heading": "Configurar URL de Compartilhamento de Página", + "form": { + "url": { + "label": "URL de Compartilhamento de Página", + "placeholder": "Insira a URL de Compartilhamento de Página", + "required": "Por favor, insira a URL de Compartilhamento de Página!", + "help": "Por motivos de privacidade, você pode hospedar a página de compartilhamento e fornecer a URL aqui. Saiba mais." + } + }, + "webshare": { + "heading": "Compartilhamento na Web", + "columns": { + "title": "Título", + "url": "URL", + "actions": "Ações" + }, + "tooltip": { + "delete": "Excluir Compartilhamento" + }, + "confirm": { + "delete": "Você tem certeza de que deseja excluir este compartilhamento? Esta ação não pode ser desfeita." + }, + "label": "Gerenciar Compartilhamento de Página", + "description": "Habilitar ou desabilitar o recurso de compartilhamento de página" + }, + "notification": { + "pageShareSuccess": "URL de Compartilhamento de Página atualizada com sucesso", + "someError": "Algo deu errado. Tente novamente mais tarde", + "webShareDeleteSuccess": "Compartilhamento na Web excluído com sucesso" + } + }, + "ollamaSettings": { + "title": "Configurações do Ollama", + "heading": "Configurar Ollama", + "settings": { + "ollamaUrl": { + "label": "URL do Ollama", + "placeholder": "Insira a URL do Ollama" + }, + "ragSettings": { + "label": "Configurações do RAG", + "model": { + "label": "Modelo de Incorporação", + "required": "Por favor, selecione um modelo", + "help": "É altamente recomendável usar modelos de incorporação como `nomic-embed-text`.", + "placeholder": "Selecione um modelo" + }, + "chunkSize": { + "label": "Tamanho do Chunk", + "placeholder": "Insira o tamanho do chunk", + "required": "Por favor, insira o tamanho do chunk" + }, + "chunkOverlap": { + "label": "Sobreposição do Chunk", + "placeholder": "Insira a sobreposição do chunk", + "required": "Por favor, insira a sobreposição do chunk" + } + }, + "prompt": { + "label": "Configurar Prompt do RAG", + "option1": "Normal", + "option2": "Web", + "alert": "Configurar o prompt do sistema aqui está depreciado. Por favor, use a seção Gerenciar Prompts para adicionar ou editar prompts. Esta seção será removida em uma versão futura", + "systemPrompt": "Prompt do Sistema", + "systemPromptPlaceholder": "Insira o prompt do sistema", + "webSearchPrompt": "Prompt de Pesquisa na Web", + "webSearchPromptHelp": "Não remova `{search_results}` do prompt.", + "webSearchPromptError": "Por favor, insira um prompt de pesquisa na web", + "webSearchPromptPlaceholder": "Insira o prompt de pesquisa na web", + "webSearchFollowUpPrompt": "Prompt de Seguimento de Pesquisa na Web", + "webSearchFollowUpPromptHelp": "Não remova `{chat_history}` e `{question}` do prompt.", + "webSearchFollowUpPromptError": "Por favor, insira o prompt de seguimento de pesquisa na web", + "webSearchFollowUpPromptPlaceholder": "Seu prompt de seguimento de pesquisa na web" + }, + "advanced": { + "label": "Configuração Avançada da URL do Ollama", + "urlRewriteEnabled": { + "label": "Habilitar ou Desabilitar URL de Origem Personalizada" + }, + "rewriteUrl": { + "label": "URL de Origem Personalizada", + "placeholder": "Insira a URL de Origem Personalizada" + }, + "help": "Se você tiver problemas de conexão com o Ollama no Page Assist, você pode configurar uma URL de origem personalizada. Para saber mais sobre a configuração, clique aqui." + } + } + }, + "manageSearch": { + "title": "Gerenciar Pesquisa na Web", + "heading": "Configurar Pesquisa na Web" + }, + "about": { + "title": "Sobre", + "heading": "Sobre", + "chromeVersion": "Versão do Page Assist", + "ollamaVersion": "Versão do Ollama", + "support": "Você pode apoiar o projeto Page Assist fazendo doações ou patrocínios através das seguintes plataformas:", + "koFi": "Apoiador no Ko-fi", + "githubSponsor": "Patrocinador no GitHub", + "githubRepo": "Repositório do GitHub" + }, + "manageKnowledge": { + "title": "Gerenciar Conhecimento", + "heading": "Configurar Base de Conhecimento" + } +} diff --git a/src/assets/locale/pt-BR/sidepanel.json b/src/assets/locale/pt-BR/sidepanel.json new file mode 100644 index 0000000..5da0b1f --- /dev/null +++ b/src/assets/locale/pt-BR/sidepanel.json @@ -0,0 +1,7 @@ +{ + "tooltip": { + "embed": "Pode demorar alguns minutos para embedear a página. Por favor, aguarde...", + "clear": "Excluir histórico de conversa", + "history": "Histórico de conversa" + } +} \ No newline at end of file diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 3a28a6e..057be7b 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -1,6 +1,7 @@ import i18n from "i18next"; import { initReactI18next } from "react-i18next"; import { en } from "./lang/en"; +import { pt } from "./lang/pt"; import { ru } from "./lang/ru"; import { ml } from "./lang/ml"; import { zh } from "./lang/zh"; @@ -14,6 +15,7 @@ i18n resources: { en: en, ml: ml, + "pt-BR": pt, "zh-CN": zh, ru: ru, "ru-RU": ru, diff --git a/src/i18n/lang/pt.ts b/src/i18n/lang/pt.ts new file mode 100644 index 0000000..c29f8f9 --- /dev/null +++ b/src/i18n/lang/pt.ts @@ -0,0 +1,15 @@ +import option from "@/assets/locale/pt-BR/option.json"; +import playground from "@/assets/locale/pt-BR/playground.json"; +import common from "@/assets/locale/pt-BR/common.json"; +import sidepanel from "@/assets/locale/pt-BR/sidepanel.json"; +import settings from "@/assets/locale/pt-BR/settings.json"; +import knowledge from "@/assets/locale/pt-BR/knowledge.json"; + +export const pt = { + option, + playground, + common, + sidepanel, + settings, + knowledge +} \ No newline at end of file diff --git a/src/i18n/support-language.ts b/src/i18n/support-language.ts index af7db40..2fd8948 100644 --- a/src/i18n/support-language.ts +++ b/src/i18n/support-language.ts @@ -7,6 +7,10 @@ export const supportLanguage = [ { label: "Russian", value: "ru" + }, + { + label: "Português", + value: "pt-BR" }, { label: "മലയാളം", From 692c0887ccd8e034e2e36a90529f7469eb2e512a Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Mon, 3 Jun 2024 00:30:10 +0530 Subject: [PATCH 15/19] new settings for rag --- src/assets/locale/en/settings.json | 73 ++++---- src/assets/locale/fr/settings.json | 73 ++++---- src/assets/locale/it/settings.json | 75 ++++---- src/assets/locale/ja-JP/settings.json | 73 ++++---- src/assets/locale/ml/settings.json | 73 ++++---- src/assets/locale/pt-BR/settings.json | 75 ++++---- src/assets/locale/ru/settings.json | 74 ++++---- src/assets/locale/zh/settings.json | 74 ++++---- .../Common/Settings/AdvanceOllamaSettings.tsx | 4 +- src/components/Layouts/Header.tsx | 2 +- .../Layouts/SettingsOptionLayout.tsx | 27 ++- src/components/Option/Models/index.tsx | 2 +- src/components/Option/Settings.tsx | 2 +- src/components/Option/Settings/about.tsx | 2 +- .../{other.tsx => general-settings.tsx} | 18 +- .../Option/Settings/model-settings.tsx | 2 +- src/components/Option/Settings/ollama.tsx | 156 +--------------- src/components/Option/Settings/prompt.tsx | 38 ++-- src/components/Option/Settings/rag.tsx | 172 ++++++++++++++++++ .../Option/Settings/search-mode.tsx | 6 +- src/components/Option/Settings/tts-mode.tsx | 8 +- src/components/Option/Share/index.tsx | 2 +- src/components/Sidepanel/Chat/empty.tsx | 2 +- src/i18n/support-language.ts | 2 +- src/routes/chrome.tsx | 2 + src/routes/firefox.tsx | 4 +- src/routes/option-rag.tsx | 15 ++ src/routes/option-settings.tsx | 4 +- 28 files changed, 565 insertions(+), 495 deletions(-) rename src/components/Option/Settings/{other.tsx => general-settings.tsx} (92%) create mode 100644 src/components/Option/Settings/rag.tsx create mode 100644 src/routes/option-rag.tsx diff --git a/src/assets/locale/en/settings.json b/src/assets/locale/en/settings.json index ec24553..0396fda 100644 --- a/src/assets/locale/en/settings.json +++ b/src/assets/locale/en/settings.json @@ -217,41 +217,6 @@ "label": "Ollama URL", "placeholder": "Enter Ollama URL" }, - "ragSettings": { - "label": "RAG Settings", - "model": { - "label": "Embedding Model", - "required": "Please select a model", - "help": "Highly recommended to use embedding models like `nomic-embed-text`.", - "placeholder": "Select a model" - }, - "chunkSize": { - "label": "Chunk Size", - "placeholder": "Enter Chunk Size", - "required": "Please enter a chunk size" - }, - "chunkOverlap": { - "label": "Chunk Overlap", - "placeholder": "Enter Chunk Overlap", - "required": "Please enter a chunk overlap" - } - }, - "prompt": { - "label": "Configure RAG Prompt", - "option1": "Normal", - "option2": "Web", - "alert": "Configuring the system prompt here is deprecated. Please use the Manage Prompts section to add or edit prompts. This section will be removed in a future release", - "systemPrompt": "System Prompt", - "systemPromptPlaceholder": "Enter System Prompt", - "webSearchPrompt": "Web Search Prompt", - "webSearchPromptHelp": "Do not remove `{search_results}` from the prompt.", - "webSearchPromptError": "Please enter a web search prompt", - "webSearchPromptPlaceholder": "Enter Web Search Prompt", - "webSearchFollowUpPrompt": "Web Search Follow Up Prompt", - "webSearchFollowUpPromptHelp": "Do not remove `{chat_history}` and `{question}` from the prompt.", - "webSearchFollowUpPromptError": "Please input your Web Search Follow Up Prompt!", - "webSearchFollowUpPromptPlaceholder": "Your Web Search Follow Up Prompt" - }, "advanced": { "label": "Advance Ollama URL Configuration", "urlRewriteEnabled": { @@ -282,5 +247,43 @@ "manageKnowledge": { "title": "Manage Knowledge", "heading": "Configure Knowledge Base" + }, + "rag": { + "title": "RAG Settings", + "ragSettings": { + "label": "RAG Settings", + "model": { + "label": "Embedding Model", + "required": "Please select a model", + "help": "Highly recommended to use embedding models like `nomic-embed-text`.", + "placeholder": "Select a model" + }, + "chunkSize": { + "label": "Chunk Size", + "placeholder": "Enter Chunk Size", + "required": "Please enter a chunk size" + }, + "chunkOverlap": { + "label": "Chunk Overlap", + "placeholder": "Enter Chunk Overlap", + "required": "Please enter a chunk overlap" + } + }, + "prompt": { + "label": "Configure RAG Prompt", + "option1": "Normal", + "option2": "Web", + "alert": "Configuring the system prompt here is deprecated. Please use the Manage Prompts section to add or edit prompts. This section will be removed in a future release", + "systemPrompt": "System Prompt", + "systemPromptPlaceholder": "Enter System Prompt", + "webSearchPrompt": "Web Search Prompt", + "webSearchPromptHelp": "Do not remove `{search_results}` from the prompt.", + "webSearchPromptError": "Please enter a web search prompt", + "webSearchPromptPlaceholder": "Enter Web Search Prompt", + "webSearchFollowUpPrompt": "Web Search Follow Up Prompt", + "webSearchFollowUpPromptHelp": "Do not remove `{chat_history}` and `{question}` from the prompt.", + "webSearchFollowUpPromptError": "Please input your Web Search Follow Up Prompt!", + "webSearchFollowUpPromptPlaceholder": "Your Web Search Follow Up Prompt" + } } } \ No newline at end of file diff --git a/src/assets/locale/fr/settings.json b/src/assets/locale/fr/settings.json index adf90c9..e06e7ed 100644 --- a/src/assets/locale/fr/settings.json +++ b/src/assets/locale/fr/settings.json @@ -217,41 +217,6 @@ "label": "Url de Ollama", "placeholder": "Entrer l'url de Ollama" }, - "ragSettings": { - "label": "Paramètres de RAG", - "model": { - "label": "Modèle d'embedding", - "required": "Veuillez sélectionner un modèle", - "help": "Fortement recommandé d'utiliser des modèles d'embedding comme «momic-embed-text».", - "placeholder": "Sélectionnez un modèle" - }, - "chunkSize": { - "label": "Taille", - "placeholder": "Entrez la taille du morceau", - "required": "Veuillez saisir une taille" - }, - "chunkOverlap": { - "label": "Chevauchement", - "placeholder": "Entrez le chevauchement des morceaux", - "required": "Veuillez saisir un chevauchement" - } - }, - "prompt": { - "label": "Configure RAG Prompt", - "option1": "Normal", - "option2": "Web", - "alert": "La configuration du prompt système ici est déconseillée. Veuillez utiliser la section Gérer les prompts pour ajouter...", - "systemPrompt": "Prompt système", - "systemPromptPlaceholder": "Entrez le prompt système", - "webSearchPrompt": "Prompt de recherche Web", - "webSearchPromptHelp": "Ne supprimez pas `{search_results}` du prompt.", - "webSearchPromptError": "Veuillez saisir un prompt de recherche Web", - "webSearchPromptPlaceholder": "Entrez le prompt de recherche Web", - "webSearchFollowUpPrompt": "Prompt de suivi de recherche Web", - "webSearchFollowUpPromptHelp": "Ne supprimez pas `{chat_history}` et `{question}` du prompt.", - "webSearchFollowUpPromptError": "Veuillez saisir votre prompt de suivi de recherche Web!", - "webSearchFollowUpPromptPlaceholder": "Votre prompt de suivi de recherche Web" - }, "advanced": { "label": "Configuration avancée de l'URL de Ollama", "urlRewriteEnabled": { @@ -282,5 +247,43 @@ "manageKnowledge": { "title": "Gérer les connaissances", "heading": "Configurer la base de connaissances" + }, + "rag": { + "title": "Paramètres de RAG", + "ragSettings": { + "label": "Paramètres de RAG", + "model": { + "label": "Modèle d'embedding", + "required": "Veuillez sélectionner un modèle", + "help": "Fortement recommandé d'utiliser des modèles d'embedding comme «momic-embed-text».", + "placeholder": "Sélectionnez un modèle" + }, + "chunkSize": { + "label": "Taille", + "placeholder": "Entrez la taille du morceau", + "required": "Veuillez saisir une taille" + }, + "chunkOverlap": { + "label": "Chevauchement", + "placeholder": "Entrez le chevauchement des morceaux", + "required": "Veuillez saisir un chevauchement" + } + }, + "prompt": { + "label": "Configure RAG Prompt", + "option1": "Normal", + "option2": "Web", + "alert": "La configuration du prompt système ici est déconseillée. Veuillez utiliser la section Gérer les prompts pour ajouter...", + "systemPrompt": "Prompt système", + "systemPromptPlaceholder": "Entrez le prompt système", + "webSearchPrompt": "Prompt de recherche Web", + "webSearchPromptHelp": "Ne supprimez pas `{search_results}` du prompt.", + "webSearchPromptError": "Veuillez saisir un prompt de recherche Web", + "webSearchPromptPlaceholder": "Entrez le prompt de recherche Web", + "webSearchFollowUpPrompt": "Prompt de suivi de recherche Web", + "webSearchFollowUpPromptHelp": "Ne supprimez pas `{chat_history}` et `{question}` du prompt.", + "webSearchFollowUpPromptError": "Veuillez saisir votre prompt de suivi de recherche Web!", + "webSearchFollowUpPromptPlaceholder": "Votre prompt de suivi de recherche Web" + } } } \ No newline at end of file diff --git a/src/assets/locale/it/settings.json b/src/assets/locale/it/settings.json index 7ab29d8..c083e5f 100644 --- a/src/assets/locale/it/settings.json +++ b/src/assets/locale/it/settings.json @@ -217,41 +217,6 @@ "label": "Ollama URL", "placeholder": "Inserici l'URL di Ollama" }, - "ragSettings": { - "label": "Impostazioni RAG", - "model": { - "label": "Modello di Embedding", - "required": "Scegliere il modello", - "help": "E' raccomandato l'uso di modelli come `nomic-embed-text`.", - "placeholder": "Seleziona un modello" - }, - "chunkSize": { - "label": "Dimensione del Blocco (Chunk Size)", - "placeholder": "Inserisci la Dimensione del Blocco (Chunk Size)", - "required": "Inserisci la Dimensione del Blocco (chunk size)" - }, - "chunkOverlap": { - "label": "Sovrapposizione del Blocco (Chunk Overlap)", - "placeholder": "Inserisci la Sovrapposizione del Blocco (Chunk Overlap)", - "required": "Inserisci la Sovrapposizione del Blocco" - } - }, - "prompt": { - "label": "Configura il Prompt RAG", - "option1": "Normale", - "option2": "Web", - "alert": "La configurazione del prompt di sistema qui è deprecato. Usa la sezione Gestione Prompt per aggiungere o modificare i prompts.Questa sezione sarà eliminata nelle prossime release", - "systemPrompt": "Prompt di Sistema", - "systemPromptPlaceholder": "Inserisci il Prompt di Sistema", - "webSearchPrompt": "Prompt per la Ricerca Web", - "webSearchPromptHelp": "Non rimuovere `{search_results}` dal prompt.", - "webSearchPromptError": "Inserisci il prompt per la ricerca web", - "webSearchPromptPlaceholder": "Imserosco il Prompt per la Ricerca Web", - "webSearchFollowUpPrompt": "Prompt di Follow Up sulla Ricerca Web", - "webSearchFollowUpPromptHelp": "Non rimuovere `{chat_history}` e `{question}` dal prompt.", - "webSearchFollowUpPromptError": "Inserisci il Prompt di Follow Up della Ricerca Web!", - "webSearchFollowUpPromptPlaceholder": "I tuoi Prompt di Follow Up delle Ricerche Web" - }, "advanced": { "label": "Configurazione Avanzata Ollama URL", "urlRewriteEnabled": { @@ -282,5 +247,43 @@ "manageKnowledge": { "title": "Gestisci Conoscenza", "heading": "Configura Base di Conoscenza" + }, + "rag": { + "title": "Impostazioni RAG", + "ragSettings": { + "label": "Impostazioni RAG", + "model": { + "label": "Modello di Embedding", + "required": "Scegliere il modello", + "help": "E' raccomandato l'uso di modelli come `nomic-embed-text`.", + "placeholder": "Seleziona un modello" + }, + "chunkSize": { + "label": "Dimensione del Blocco (Chunk Size)", + "placeholder": "Inserisci la Dimensione del Blocco (Chunk Size)", + "required": "Inserisci la Dimensione del Blocco (chunk size)" + }, + "chunkOverlap": { + "label": "Sovrapposizione del Blocco (Chunk Overlap)", + "placeholder": "Inserisci la Sovrapposizione del Blocco (Chunk Overlap)", + "required": "Inserisci la Sovrapposizione del Blocco" + } + }, + "prompt": { + "label": "Configura il Prompt RAG", + "option1": "Normale", + "option2": "Web", + "alert": "La configurazione del prompt di sistema qui è deprecato. Usa la sezione Gestione Prompt per aggiungere o modificare i prompts.Questa sezione sarà eliminata nelle prossime release", + "systemPrompt": "Prompt di Sistema", + "systemPromptPlaceholder": "Inserisci il Prompt di Sistema", + "webSearchPrompt": "Prompt per la Ricerca Web", + "webSearchPromptHelp": "Non rimuovere `{search_results}` dal prompt.", + "webSearchPromptError": "Inserisci il prompt per la ricerca web", + "webSearchPromptPlaceholder": "Imserosco il Prompt per la Ricerca Web", + "webSearchFollowUpPrompt": "Prompt di Follow Up sulla Ricerca Web", + "webSearchFollowUpPromptHelp": "Non rimuovere `{chat_history}` e `{question}` dal prompt.", + "webSearchFollowUpPromptError": "Inserisci il Prompt di Follow Up della Ricerca Web!", + "webSearchFollowUpPromptPlaceholder": "I tuoi Prompt di Follow Up delle Ricerche Web" + } } -} +} \ No newline at end of file diff --git a/src/assets/locale/ja-JP/settings.json b/src/assets/locale/ja-JP/settings.json index 5f6e25d..cef567f 100644 --- a/src/assets/locale/ja-JP/settings.json +++ b/src/assets/locale/ja-JP/settings.json @@ -220,41 +220,6 @@ "label": "OllamaのURL", "placeholder": "OllamaのURLを入力" }, - "ragSettings": { - "label": "RAGの設定", - "model": { - "label": "エンベディングモデル", - "required": "モデルを選択してください", - "help": "`nomic-embed-text`などのエンベディングモデルの使用を強くおすすめします。", - "placeholder": "モデルを選択" - }, - "chunkSize": { - "label": "チャンクサイズ", - "placeholder": "チャンクサイズを入力", - "required": "チャンクサイズを入力してください" - }, - "chunkOverlap": { - "label": "チャンクオーバーラップ", - "placeholder": "チャンクオーバーラップを入力", - "required": "チャンクオーバーラップを入力してください" - } - }, - "prompt": { - "label": "RAGプロンプトを設定", - "option1": "通常", - "option2": "Web", - "alert": "ここでシステムプロンプトを設定することは非推奨となりました。プロンプトの追加や編集には「プロンプトを管理」セクションをご利用ください。このセクションは今後のリリースで削除される予定です。", - "systemPrompt": "システムプロンプト", - "systemPromptPlaceholder": "システムプロンプトを入力", - "webSearchPrompt": "Web検索プロンプト", - "webSearchPromptHelp": "プロンプトから`{search_results}`を削除しないでください。", - "webSearchPromptError": "Web検索プロンプトを入力してください", - "webSearchPromptPlaceholder": "Web検索プロンプトを入力", - "webSearchFollowUpPrompt": "Web検索フォローアッププロンプト", - "webSearchFollowUpPromptHelp": "プロンプトから`{chat_history}`と`{question}`を削除しないでください。", - "webSearchFollowUpPromptError": "Web検索フォローアッププロンプトを入力してください!", - "webSearchFollowUpPromptPlaceholder": "Web検索フォローアッププロンプト" - }, "advanced": { "label": "Ollama URL の高度な設定", "urlRewriteEnabled": { @@ -285,5 +250,43 @@ "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": "チャンクオーバーラップを入力してください" + } + }, + "prompt": { + "label": "RAGプロンプトを設定", + "option1": "通常", + "option2": "Web", + "alert": "ここでシステムプロンプトを設定することは非推奨となりました。プロンプトの追加や編集には「プロンプトを管理」セクションをご利用ください。このセクションは今後のリリースで削除される予定です。", + "systemPrompt": "システムプロンプト", + "systemPromptPlaceholder": "システムプロンプトを入力", + "webSearchPrompt": "Web検索プロンプト", + "webSearchPromptHelp": "プロンプトから`{search_results}`を削除しないでください。", + "webSearchPromptError": "Web検索プロンプトを入力してください", + "webSearchPromptPlaceholder": "Web検索プロンプトを入力", + "webSearchFollowUpPrompt": "Web検索フォローアッププロンプト", + "webSearchFollowUpPromptHelp": "プロンプトから`{chat_history}`と`{question}`を削除しないでください。", + "webSearchFollowUpPromptError": "Web検索フォローアッププロンプトを入力してください!", + "webSearchFollowUpPromptPlaceholder": "Web検索フォローアッププロンプト" + } } } \ No newline at end of file diff --git a/src/assets/locale/ml/settings.json b/src/assets/locale/ml/settings.json index 5c3c8e4..b83a07e 100644 --- a/src/assets/locale/ml/settings.json +++ b/src/assets/locale/ml/settings.json @@ -220,41 +220,6 @@ "label": "Ollama URL", "placeholder": "Ollama URL നല്കുക" }, - "ragSettings": { - "label": "RAG സെറ്റിംഗുകൾ", - "model": { - "label": "എംബെഡിംഗ് മോഡല്‍", - "required": "ദയവായി ഒരു മോഡല്‍ തിരഞ്ഞെടുക്കുക", - "help": "`nomic-embed-text` പോലുള്ള എംബെഡിംഗ് മോഡലുകള്‍ ഉപയോഗിക്കുന്നത് വളരെ നന്നായിരിക്കും.", - "placeholder": "ഒരു മോഡല്‍ തിരഞ്ഞെടുക്കുക" - }, - "chunkSize": { - "label": "ചങ്ക് വലുപ്പം", - "placeholder": "ചങ്ക് വലുപ്പം നല്കുക", - "required": "ദയവായി ചങ്ക് വലുപ്പം നല്കുക" - }, - "chunkOverlap": { - "label": "ചങ്ക് ഓവര്‍ലാപ്പ്", - "placeholder": "ചങ്ക് ഓവര്‍ലാപ്പ് നല്കുക", - "required": "ദയവായി ചങ്ക് ഓവര്‍ലാപ്പ് നല്കുക" - } - }, - "prompt": { - "label": "RAG പ്രോംപ്റ്റ് കോൺഫിഗർ ചെയ്യുക", - "option1": "സാധാരണ", - "option2": "വെബ്", - "alert": "സിസ്റ്റം പ്രോംപ്റ്റ് ഇവിടെ കോൺഫിഗർ ചെയ്യുന്നത് പഴയൗഖികമായി. ദയവായി പ്രോംപ്റ്റുകള്‍ ചേര്‍ക്കാനോ എഡിറ്റുചെയ്യാനോ മാനേജ് പ്രോംപ്റ്റ്‌സ് സെക്ഷന്‍ ഉപയോഗിക്കുക. ഈ സെക്ഷന്‍ ഭാവിയില്‍ നീക്കം ചെയ്യപ്പെടും.", - "systemPrompt": "സിസ്റ്റം പ്രോംപ്റ്റ്", - "systemPromptPlaceholder": "സിസ്റ്റം പ്രോംപ്റ്റ് നല്കുക", - "webSearchPrompt": "വെബ് തിരയല്‍ പ്രോംപ്റ്റ്", - "webSearchPromptHelp": "പ്രോംപ്റ്റില്‍ നിന്ന് `{search_results}` നീക്കം ചെയ്യരുത്.", - "webSearchPromptError": "ദയവായി ഒരു വെബ് തിരയല്‍ പ്രോംപ്റ്റ് നല്കുക", - "webSearchPromptPlaceholder": "വെബ് തിരയല്‍ പ്രോംപ്റ്റ് നല്കുക", - "webSearchFollowUpPrompt": "വെബ് തിരയല്‍ തുടര്‍പ്രോംപ്റ്റ്", - "webSearchFollowUpPromptHelp": "പ്രോംപ്റ്റില്‍ നിന്ന് `{chat_history}` യും `{question}` യും നീക്കം ചെയ്യരുത്.", - "webSearchFollowUpPromptError": "ദയവായി നിങ്ങളുടെ വെബ് തിരയല്‍ തുടര്‍പ്രോംപ്റ്റ് നല്കുക!", - "webSearchFollowUpPromptPlaceholder": "നിങ്ങളുടെ വെബ് തിരയല്‍ തുടര്‍പ്രോംപ്റ്റ്" - }, "advanced": { "label": "Advance Ollama URL Configuration", "urlRewriteEnabled": { @@ -285,5 +250,43 @@ "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": "ദയവായി ചങ്ക് ഓവര്‍ലാപ്പ് നല്കുക" + } + }, + "prompt": { + "label": "RAG പ്രോംപ്റ്റ് കോൺഫിഗർ ചെയ്യുക", + "option1": "സാധാരണ", + "option2": "വെബ്", + "alert": "സിസ്റ്റം പ്രോംപ്റ്റ് ഇവിടെ കോൺഫിഗർ ചെയ്യുന്നത് പഴയൗഖികമായി. ദയവായി പ്രോംപ്റ്റുകള്‍ ചേര്‍ക്കാനോ എഡിറ്റുചെയ്യാനോ മാനേജ് പ്രോംപ്റ്റ്‌സ് സെക്ഷന്‍ ഉപയോഗിക്കുക. ഈ സെക്ഷന്‍ ഭാവിയില്‍ നീക്കം ചെയ്യപ്പെടും.", + "systemPrompt": "സിസ്റ്റം പ്രോംപ്റ്റ്", + "systemPromptPlaceholder": "സിസ്റ്റം പ്രോംപ്റ്റ് നല്കുക", + "webSearchPrompt": "വെബ് തിരയല്‍ പ്രോംപ്റ്റ്", + "webSearchPromptHelp": "പ്രോംപ്റ്റില്‍ നിന്ന് `{search_results}` നീക്കം ചെയ്യരുത്.", + "webSearchPromptError": "ദയവായി ഒരു വെബ് തിരയല്‍ പ്രോംപ്റ്റ് നല്കുക", + "webSearchPromptPlaceholder": "വെബ് തിരയല്‍ പ്രോംപ്റ്റ് നല്കുക", + "webSearchFollowUpPrompt": "വെബ് തിരയല്‍ തുടര്‍പ്രോംപ്റ്റ്", + "webSearchFollowUpPromptHelp": "പ്രോംപ്റ്റില്‍ നിന്ന് `{chat_history}` യും `{question}` യും നീക്കം ചെയ്യരുത്.", + "webSearchFollowUpPromptError": "ദയവായി നിങ്ങളുടെ വെബ് തിരയല്‍ തുടര്‍പ്രോംപ്റ്റ് നല്കുക!", + "webSearchFollowUpPromptPlaceholder": "നിങ്ങളുടെ വെബ് തിരയല്‍ തുടര്‍പ്രോംപ്റ്റ്" + } } } \ No newline at end of file diff --git a/src/assets/locale/pt-BR/settings.json b/src/assets/locale/pt-BR/settings.json index 1c2aae9..fb22698 100644 --- a/src/assets/locale/pt-BR/settings.json +++ b/src/assets/locale/pt-BR/settings.json @@ -217,41 +217,6 @@ "label": "URL do Ollama", "placeholder": "Insira a URL do Ollama" }, - "ragSettings": { - "label": "Configurações do RAG", - "model": { - "label": "Modelo de Incorporação", - "required": "Por favor, selecione um modelo", - "help": "É altamente recomendável usar modelos de incorporação como `nomic-embed-text`.", - "placeholder": "Selecione um modelo" - }, - "chunkSize": { - "label": "Tamanho do Chunk", - "placeholder": "Insira o tamanho do chunk", - "required": "Por favor, insira o tamanho do chunk" - }, - "chunkOverlap": { - "label": "Sobreposição do Chunk", - "placeholder": "Insira a sobreposição do chunk", - "required": "Por favor, insira a sobreposição do chunk" - } - }, - "prompt": { - "label": "Configurar Prompt do RAG", - "option1": "Normal", - "option2": "Web", - "alert": "Configurar o prompt do sistema aqui está depreciado. Por favor, use a seção Gerenciar Prompts para adicionar ou editar prompts. Esta seção será removida em uma versão futura", - "systemPrompt": "Prompt do Sistema", - "systemPromptPlaceholder": "Insira o prompt do sistema", - "webSearchPrompt": "Prompt de Pesquisa na Web", - "webSearchPromptHelp": "Não remova `{search_results}` do prompt.", - "webSearchPromptError": "Por favor, insira um prompt de pesquisa na web", - "webSearchPromptPlaceholder": "Insira o prompt de pesquisa na web", - "webSearchFollowUpPrompt": "Prompt de Seguimento de Pesquisa na Web", - "webSearchFollowUpPromptHelp": "Não remova `{chat_history}` e `{question}` do prompt.", - "webSearchFollowUpPromptError": "Por favor, insira o prompt de seguimento de pesquisa na web", - "webSearchFollowUpPromptPlaceholder": "Seu prompt de seguimento de pesquisa na web" - }, "advanced": { "label": "Configuração Avançada da URL do Ollama", "urlRewriteEnabled": { @@ -282,5 +247,43 @@ "manageKnowledge": { "title": "Gerenciar Conhecimento", "heading": "Configurar Base de Conhecimento" + }, + "rag": { + "title": "Configurações do RAG", + "ragSettings": { + "label": "Configurações do RAG", + "model": { + "label": "Modelo de Incorporação", + "required": "Por favor, selecione um modelo", + "help": "É altamente recomendável usar modelos de incorporação como `nomic-embed-text`.", + "placeholder": "Selecione um modelo" + }, + "chunkSize": { + "label": "Tamanho do Chunk", + "placeholder": "Insira o tamanho do chunk", + "required": "Por favor, insira o tamanho do chunk" + }, + "chunkOverlap": { + "label": "Sobreposição do Chunk", + "placeholder": "Insira a sobreposição do chunk", + "required": "Por favor, insira a sobreposição do chunk" + } + }, + "prompt": { + "label": "Configurar Prompt do RAG", + "option1": "Normal", + "option2": "Web", + "alert": "Configurar o prompt do sistema aqui está depreciado. Por favor, use a seção Gerenciar Prompts para adicionar ou editar prompts. Esta seção será removida em uma versão futura", + "systemPrompt": "Prompt do Sistema", + "systemPromptPlaceholder": "Insira o prompt do sistema", + "webSearchPrompt": "Prompt de Pesquisa na Web", + "webSearchPromptHelp": "Não remova `{search_results}` do prompt.", + "webSearchPromptError": "Por favor, insira um prompt de pesquisa na web", + "webSearchPromptPlaceholder": "Insira o prompt de pesquisa na web", + "webSearchFollowUpPrompt": "Prompt de Seguimento de Pesquisa na Web", + "webSearchFollowUpPromptHelp": "Não remova `{chat_history}` e `{question}` do prompt.", + "webSearchFollowUpPromptError": "Por favor, insira o prompt de seguimento de pesquisa na web", + "webSearchFollowUpPromptPlaceholder": "Seu prompt de seguimento de pesquisa na web" + } } -} +} \ No newline at end of file diff --git a/src/assets/locale/ru/settings.json b/src/assets/locale/ru/settings.json index 2a48c43..d745db8 100644 --- a/src/assets/locale/ru/settings.json +++ b/src/assets/locale/ru/settings.json @@ -217,41 +217,7 @@ "label": "URL Ollama", "placeholder": "Введите URL Ollama" }, - "ragSettings": { - "label": "Настройки RAG", - "model": { - "label": "Модель вложения", - "required": "Пожалуйста, выберите модель", - "help": "Настоятельно рекомендуется использовать модели вложения, например, `nomic-embed-text`.", - "placeholder": "Выберите модель" - }, - "chunkSize": { - "label": "Размер фрагмента", - "placeholder": "Введите размер фрагмента", - "required": "Пожалуйста, введите размер фрагмента" - }, - "chunkOverlap": { - "label": "Перекрытие фрагментов", - "placeholder": "Введите перекрытие фрагментов", - "required": "Пожалуйста, введите перекрытие фрагментов" - } - }, - "prompt": { - "label": "Настройка системной подсказки RAG", - "option1": "Обычная", - "option2": "Веб", - "alert": "Настройка системной подсказки здесь устарела. Используйте раздел Управление подсказками для добавления или редактирования подсказок. Этот раздел будет удален в будущем выпуске", - "systemPrompt": "Системная подсказка", - "systemPromptPlaceholder": "Введите системную подсказку", - "webSearchPrompt": "Подсказка для веб-поиска", - "webSearchPromptHelp": "Не удаляйте `{search_results}` из подсказки.", - "webSearchPromptError": "Пожалуйста, введите подсказку для веб-поиска", - "webSearchPromptPlaceholder": "Введите подсказку для веб-поиска", - "webSearchFollowUpPrompt": "Последующая подсказка для веб-поиска", - "webSearchFollowUpPromptHelp": "Не удаляйте `{chat_history}` и `{question}` из подсказки.", - "webSearchFollowUpPromptError": "Введите подсказку для последующего веб-поиска!", - "webSearchFollowUpPromptPlaceholder": "Ваша подсказка для последующего веб-поиска" - }, + "advanced": { "label": "Расширенная конфигурация URL Ollama", "urlRewriteEnabled": { @@ -282,5 +248,43 @@ "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": "Пожалуйста, введите перекрытие фрагментов" + } + }, + "prompt": { + "label": "Настройка системной подсказки RAG", + "option1": "Обычная", + "option2": "Веб", + "alert": "Настройка системной подсказки здесь устарела. Используйте раздел Управление подсказками для добавления или редактирования подсказок. Этот раздел будет удален в будущем выпуске", + "systemPrompt": "Системная подсказка", + "systemPromptPlaceholder": "Введите системную подсказку", + "webSearchPrompt": "Подсказка для веб-поиска", + "webSearchPromptHelp": "Не удаляйте `{search_results}` из подсказки.", + "webSearchPromptError": "Пожалуйста, введите подсказку для веб-поиска", + "webSearchPromptPlaceholder": "Введите подсказку для веб-поиска", + "webSearchFollowUpPrompt": "Последующая подсказка для веб-поиска", + "webSearchFollowUpPromptHelp": "Не удаляйте `{chat_history}` и `{question}` из подсказки.", + "webSearchFollowUpPromptError": "Введите подсказку для последующего веб-поиска!", + "webSearchFollowUpPromptPlaceholder": "Ваша подсказка для последующего веб-поиска" + } } } \ No newline at end of file diff --git a/src/assets/locale/zh/settings.json b/src/assets/locale/zh/settings.json index cdb116c..9b27993 100644 --- a/src/assets/locale/zh/settings.json +++ b/src/assets/locale/zh/settings.json @@ -221,41 +221,7 @@ "label": "Ollama URL", "placeholder": "输入 Ollama URL" }, - "ragSettings": { - "label": "RAG 设置", - "model": { - "label": "文本嵌入模型", - "required": "请选择一个模型", - "help": "建议使用文本嵌入模型,如 `nomic-embed-text`。", - "placeholder": "选择一个模型" - }, - "chunkSize": { - "label": "嵌入大小", - "placeholder": "1024-∞", - "required": "请输入块大小" - }, - "chunkOverlap": { - "label": "嵌入重叠", - "placeholder": "256-∞", - "required": "请输入嵌入重叠" - } - }, - "prompt": { - "label": "配置 RAG 提示词", - "option1": "普通", - "option2": "搜索", - "alert": "在此配置系统提示词已过时。请使用管理提示词部分添加或编辑提示词。此部分将在未来版本中删除", - "systemPrompt": "系统提示词", - "systemPromptPlaceholder": "输入系统提示词", - "webSearchPrompt": "网页搜索提示词", - "webSearchPromptHelp": "请勿从提示词中删除 `{search_results}`。", - "webSearchPromptError": "请输入一个网页搜索提示词", - "webSearchPromptPlaceholder": "输入网页搜索提示词", - "webSearchFollowUpPrompt": "网页搜索追问提示词", - "webSearchFollowUpPromptHelp": "请勿从提示词中删除 `{chat_history}` 和 `{question}`。", - "webSearchFollowUpPromptError": "请输入您的网页搜索追问提示词!", - "webSearchFollowUpPromptPlaceholder": "您的网页搜索追问提示词" - }, + "advanced": { "label": "Ollama URL 高级配置", "urlRewriteEnabled": { @@ -286,5 +252,43 @@ "manageKnowledge": { "title": "管理知识", "heading": "配置知识库" + }, + "rag": { + "title": "RAG 设置", + "ragSettings": { + "label": "RAG 设置", + "model": { + "label": "文本嵌入模型", + "required": "请选择一个模型", + "help": "建议使用文本嵌入模型,如 `nomic-embed-text`。", + "placeholder": "选择一个模型" + }, + "chunkSize": { + "label": "嵌入大小", + "placeholder": "1024-∞", + "required": "请输入块大小" + }, + "chunkOverlap": { + "label": "嵌入重叠", + "placeholder": "256-∞", + "required": "请输入嵌入重叠" + } + }, + "prompt": { + "label": "配置 RAG 提示词", + "option1": "普通", + "option2": "搜索", + "alert": "在此配置系统提示词已过时。请使用管理提示词部分添加或编辑提示词。此部分将在未来版本中删除", + "systemPrompt": "系统提示词", + "systemPromptPlaceholder": "输入系统提示词", + "webSearchPrompt": "网页搜索提示词", + "webSearchPromptHelp": "请勿从提示词中删除 `{search_results}`。", + "webSearchPromptError": "请输入一个网页搜索提示词", + "webSearchPromptPlaceholder": "输入网页搜索提示词", + "webSearchFollowUpPrompt": "网页搜索追问提示词", + "webSearchFollowUpPromptHelp": "请勿从提示词中删除 `{chat_history}` 和 `{question}`。", + "webSearchFollowUpPromptError": "请输入您的网页搜索追问提示词!", + "webSearchFollowUpPromptPlaceholder": "您的网页搜索追问提示词" + } } } \ No newline at end of file diff --git a/src/components/Common/Settings/AdvanceOllamaSettings.tsx b/src/components/Common/Settings/AdvanceOllamaSettings.tsx index 0027fb2..258b491 100644 --- a/src/components/Common/Settings/AdvanceOllamaSettings.tsx +++ b/src/components/Common/Settings/AdvanceOllamaSettings.tsx @@ -17,7 +17,7 @@ export const AdvanceOllamaSettings = () => { return (
- + {t("ollamaSettings.settings.advanced.urlRewriteEnabled.label")}
@@ -29,7 +29,7 @@ export const AdvanceOllamaSettings = () => {
- + {t("ollamaSettings.settings.advanced.rewriteUrl.label")}
diff --git a/src/components/Layouts/Header.tsx b/src/components/Layouts/Header.tsx index af180c9..1d6099a 100644 --- a/src/components/Layouts/Header.tsx +++ b/src/components/Layouts/Header.tsx @@ -90,7 +90,7 @@ export const Header: React.FC = ({ - +
)} diff --git a/src/components/Layouts/SettingsOptionLayout.tsx b/src/components/Layouts/SettingsOptionLayout.tsx index e014c80..9a76c34 100644 --- a/src/components/Layouts/SettingsOptionLayout.tsx +++ b/src/components/Layouts/SettingsOptionLayout.tsx @@ -1,10 +1,11 @@ import { - Book, - BrainCircuit, - Orbit, - Share, + BookIcon, + BrainCircuitIcon, + OrbitIcon, + ShareIcon, BlocksIcon, - InfoIcon + InfoIcon, + CombineIcon, } from "lucide-react" import { useTranslation } from "react-i18next" import { Link, useLocation } from "react-router-dom" @@ -35,7 +36,7 @@ const LinkComponent = (item: { className={classNames( item.current === item.href ? "text-gray-600 dark:text-white" - : "text-gray-400 group-hover:text-gray-600 dark:text-gray-200 dark:group-hover:text-white", + : "text-gray-500 group-hover:text-gray-600 dark:text-gray-200 dark:group-hover:text-white", "h-6 w-6 shrink-0" )} aria-hidden="true" @@ -61,7 +62,13 @@ export const SettingsLayout = ({ children }: { children: React.ReactNode }) => { + { href="/settings/model" name={t("manageModels.title")} current={location.pathname} - icon={BrainCircuit} + icon={BrainCircuitIcon} /> { { pullOllamaModel(record.model) } }} - className="text-gray-500 dark:text-gray-400"> + className="text-gray-700 dark:text-gray-400"> diff --git a/src/components/Option/Settings.tsx b/src/components/Option/Settings.tsx index 412708f..4468b70 100644 --- a/src/components/Option/Settings.tsx +++ b/src/components/Option/Settings.tsx @@ -1,7 +1,7 @@ import { Tabs } from "antd" import { SettingsOllama } from "./Settings/ollama" import { SettingPrompt } from "./Settings/prompt" -import { SettingOther } from "./Settings/other" +import { SettingOther } from "./Settings/general-settings" type Props = { setClose: (close: boolean) => void diff --git a/src/components/Option/Settings/about.tsx b/src/components/Option/Settings/about.tsx index 6250ab1..3101ad8 100644 --- a/src/components/Option/Settings/about.tsx +++ b/src/components/Option/Settings/about.tsx @@ -60,7 +60,7 @@ export const AboutApp = () => { ]} />
-

+

{t("about.support")}

diff --git a/src/components/Option/Settings/other.tsx b/src/components/Option/Settings/general-settings.tsx similarity index 92% rename from src/components/Option/Settings/other.tsx rename to src/components/Option/Settings/general-settings.tsx index ad5dc0f..d5d1c27 100644 --- a/src/components/Option/Settings/other.tsx +++ b/src/components/Option/Settings/general-settings.tsx @@ -16,7 +16,7 @@ import { import { BetaTag } from "@/components/Common/Beta" import { useStorage } from "@plasmohq/storage/hook" -export const SettingOther = () => { +export const GeneralSettings = () => { const { clearChat, speechToTextLanguage, setSpeechToTextLanguage } = useMessageOption() @@ -43,7 +43,7 @@ export const SettingOther = () => {
- + {t("generalSettings.settings.speechRecognitionLang.label")} @@ -65,7 +65,7 @@ export const SettingOther = () => { />
- + {t("generalSettings.settings.language.label")} @@ -88,7 +88,7 @@ export const SettingOther = () => {
- + {t("generalSettings.settings.copilotResumeLastChat.label")}
@@ -100,7 +100,7 @@ export const SettingOther = () => {
- + {t("generalSettings.settings.hideCurrentChatModelSettings.label")}
@@ -111,7 +111,7 @@ export const SettingOther = () => { />
- + {t("generalSettings.settings.darkMode.label")} @@ -138,7 +138,7 @@ export const SettingOther = () => {
- + {t("generalSettings.system.deleteChatHistory.label")} @@ -162,7 +162,7 @@ export const SettingOther = () => {
- + {t("generalSettings.system.export.label")}
- + {t("generalSettings.system.import.label")}
-

+

{t("modelSettings.description")}

diff --git a/src/components/Option/Settings/ollama.tsx b/src/components/Option/Settings/ollama.tsx index 3315a1f..e5fefce 100644 --- a/src/components/Option/Settings/ollama.tsx +++ b/src/components/Option/Settings/ollama.tsx @@ -1,19 +1,9 @@ -import { useMutation, useQuery } from "@tanstack/react-query" -import { Collapse, Form, InputNumber, Select, Skeleton } from "antd" +import { useQuery } from "@tanstack/react-query" +import { Collapse, Skeleton } from "antd" import { useState } from "react" import { SaveButton } from "~/components/Common/SaveButton" -import { - defaultEmbeddingChunkOverlap, - defaultEmbeddingChunkSize, - defaultEmbeddingModelForRag, - getAllModels, - getOllamaURL, - saveForRag, - setOllamaURL as saveOllamaURL -} from "~/services/ollama" -import { SettingPrompt } from "./prompt" +import { getOllamaURL, setOllamaURL as saveOllamaURL } from "~/services/ollama" import { Trans, useTranslation } from "react-i18next" -import { useStorage } from "@plasmohq/storage/hook" import { AdvanceOllamaSettings } from "@/components/Common/Settings/AdvanceOllamaSettings" import { ModelSettings } from "./model-settings" @@ -22,34 +12,12 @@ export const SettingsOllama = () => { const { t } = useTranslation("settings") - const { data: ollamaInfo, status } = useQuery({ + const { status } = useQuery({ queryKey: ["fetchOllamURL"], queryFn: async () => { - const [ollamaURL, allModels, chunkOverlap, chunkSize, defaultEM] = - await Promise.all([ - getOllamaURL(), - getAllModels({ returnEmpty: true }), - defaultEmbeddingChunkOverlap(), - defaultEmbeddingChunkSize(), - defaultEmbeddingModelForRag() - ]) + const [ollamaURL] = await Promise.all([getOllamaURL()]) setOllamaURL(ollamaURL) - return { - models: allModels, - chunkOverlap, - chunkSize, - defaultEM - } - } - }) - - const { mutate: saveRAG, isPending: isSaveRAGPending } = useMutation({ - mutationFn: async (data: { - model: string - chunkSize: number - overlap: number - }) => { - await saveForRag(data.model, data.chunkSize, data.overlap) + return {} } }) @@ -92,7 +60,7 @@ export const SettingsOllama = () => {

{t("ollamaSettings.settings.advanced.label")}

-

+

{

-
-
-

- {t("ollamaSettings.settings.ragSettings.label")} -

-
-
-
{ - saveRAG({ - model: data.defaultEM, - chunkSize: data.chunkSize, - overlap: data.chunkOverlap - }) - }} - initialValues={{ - chunkSize: ollamaInfo?.chunkSize, - chunkOverlap: ollamaInfo?.chunkOverlap, - defaultEM: ollamaInfo?.defaultEM - }}> - - + option!.label.toLowerCase().indexOf(input.toLowerCase()) >= + 0 || + option!.value.toLowerCase().indexOf(input.toLowerCase()) >= + 0 + } + showSearch + placeholder={t( + "rag.ragSettings.model.placeholder" + )} + style={{ width: "100%" }} + className="mt-4" + options={ollamaInfo.models?.map((model) => ({ + label: model.name, + value: model.model + }))} + /> + + + + + + + + + +
+ +
+
+
+ +
+
+

+ {t("rag.prompt.label")} +

+
+
+ +
+
+ )} +
+ ) +} diff --git a/src/components/Option/Settings/search-mode.tsx b/src/components/Option/Settings/search-mode.tsx index 8973ec0..e7cc04d 100644 --- a/src/components/Option/Settings/search-mode.tsx +++ b/src/components/Option/Settings/search-mode.tsx @@ -44,7 +44,7 @@ export const SearchModeSettings = () => { })} className="space-y-4">
- + {t("generalSettings.webSearch.provider.label")}
@@ -62,7 +62,7 @@ export const SearchModeSettings = () => {
- + {t("generalSettings.webSearch.searchMode.label")}
@@ -75,7 +75,7 @@ export const SearchModeSettings = () => {
- + {t("generalSettings.webSearch.totalSearchResults.label")}
diff --git a/src/components/Option/Settings/tts-mode.tsx b/src/components/Option/Settings/tts-mode.tsx index bf5ad36..d46dddb 100644 --- a/src/components/Option/Settings/tts-mode.tsx +++ b/src/components/Option/Settings/tts-mode.tsx @@ -49,7 +49,7 @@ export const TTSModeSettings = ({ hideBorder }: { hideBorder?: boolean }) => { })} className="space-y-4">
- + {t("generalSettings.tts.ttsEnabled.label")}
@@ -62,7 +62,7 @@ export const TTSModeSettings = ({ hideBorder }: { hideBorder?: boolean }) => {
- + {t("generalSettings.tts.ttsProvider.label")}
@@ -75,7 +75,7 @@ export const TTSModeSettings = ({ hideBorder }: { hideBorder?: boolean }) => {
- + {t("generalSettings.tts.ttsVoice.label")}
@@ -94,7 +94,7 @@ export const TTSModeSettings = ({ hideBorder }: { hideBorder?: boolean }) => {
- + {t("generalSettings.tts.ssmlEnabled.label")}
diff --git a/src/components/Option/Share/index.tsx b/src/components/Option/Share/index.tsx index cd46f72..f0db8a6 100644 --- a/src/components/Option/Share/index.tsx +++ b/src/components/Option/Share/index.tsx @@ -146,7 +146,7 @@ export const OptionShareBody = () => { -

+

{t("manageShare.webshare.description")}

diff --git a/src/components/Sidepanel/Chat/empty.tsx b/src/components/Sidepanel/Chat/empty.tsx index 000d4e3..f94304b 100644 --- a/src/components/Sidepanel/Chat/empty.tsx +++ b/src/components/Sidepanel/Chat/empty.tsx @@ -94,7 +94,7 @@ export const EmptySidePanel = () => { {ollamaURL && cleanUrl(ollamaURL) !== "http://127.0.0.1:11434" && ( -

+

{ return ( @@ -20,6 +21,7 @@ export const OptionRoutingChrome = () => { } /> } /> } /> + } /> } /> ) diff --git a/src/routes/firefox.tsx b/src/routes/firefox.tsx index 1281a72..40264f4 100644 --- a/src/routes/firefox.tsx +++ b/src/routes/firefox.tsx @@ -1,7 +1,7 @@ // this is a temp fix for firefox // because chunks getting 4mb+ and it's not working on firefox addon store import { lazy } from "react" -import { Route , Routes} from "react-router-dom" +import { Route, Routes } from "react-router-dom" const SidepanelChat = lazy(() => import("./sidepanel-chat")) const SidepanelSettings = lazy(() => import("./sidepanel-settings")) @@ -13,6 +13,7 @@ const OptionSettings = lazy(() => import("./option-settings")) const OptionShare = lazy(() => import("./option-settings-share")) const OptionKnowledgeBase = lazy(() => import("./option-settings-knowledge")) const OptionAbout = lazy(() => import("./option-settings-about")) +const OptionRagSettings = lazy(() => import("./option-rag")) export const OptionRoutingFirefox = () => { return ( @@ -25,6 +26,7 @@ export const OptionRoutingFirefox = () => { } /> } /> } /> + } /> ) } diff --git a/src/routes/option-rag.tsx b/src/routes/option-rag.tsx new file mode 100644 index 0000000..5f07e82 --- /dev/null +++ b/src/routes/option-rag.tsx @@ -0,0 +1,15 @@ +import { SettingsLayout } from "~/components/Layouts/SettingsOptionLayout" +import OptionLayout from "~/components/Layouts/Layout" +import { RagSettings } from "@/components/Option/Settings/rag" + +const OptionRagSettings = () => { + return ( + + + + + + ) +} + +export default OptionRagSettings diff --git a/src/routes/option-settings.tsx b/src/routes/option-settings.tsx index 3bb60c0..7430b4c 100644 --- a/src/routes/option-settings.tsx +++ b/src/routes/option-settings.tsx @@ -1,12 +1,12 @@ import { SettingsLayout } from "~/components/Layouts/SettingsOptionLayout" import OptionLayout from "~/components/Layouts/Layout" -import { SettingOther } from "~/components/Option/Settings/other" +import { GeneralSettings } from "~/components/Option/Settings/general-settings" const OptionSettings = () => { return ( - + ) From bd9e19865aac49e9c3161cc1ce6bad6f83d0cea8 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Mon, 3 Jun 2024 00:33:38 +0530 Subject: [PATCH 16/19] feat: Add Discord and Twitter links to AboutApp component --- src/components/Option/Settings/about.tsx | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/components/Option/Settings/about.tsx b/src/components/Option/Settings/about.tsx index 3101ad8..d1853cc 100644 --- a/src/components/Option/Settings/about.tsx +++ b/src/components/Option/Settings/about.tsx @@ -56,6 +56,32 @@ export const AboutApp = () => { key: 1, label: t("about.ollamaVersion"), children: data.ollama + }, + { + key: 2, + label: "Community", + children: ( + + Discord Server + + ) + }, + { + key: 3, + label: "X (formerly Twitter)", + children: ( + + @n4ze3m + + ) } ]} /> From c701e2f99a53e2bcb12f898882e9cab02b6e58ab Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Mon, 3 Jun 2024 12:50:14 +0530 Subject: [PATCH 17/19] refactor: Update embedding model settings page references in locale files --- src/assets/locale/en/knowledge.json | 2 +- src/assets/locale/en/playground.json | 2 +- src/assets/locale/fr/knowledge.json | 2 +- src/assets/locale/fr/playground.json | 2 +- src/assets/locale/it/knowledge.json | 2 +- src/assets/locale/it/playground.json | 2 +- src/assets/locale/ja-JP/knowledge.json | 2 +- src/assets/locale/ja-JP/playground.json | 2 +- src/assets/locale/ml/knowledge.json | 2 +- src/assets/locale/ml/playground.json | 2 +- src/assets/locale/pt-BR/knowledge.json | 2 +- src/assets/locale/pt-BR/playground.json | 2 +- src/assets/locale/ru/knowledge.json | 2 +- src/assets/locale/ru/playground.json | 2 +- src/assets/locale/zh/knowledge.json | 2 +- src/assets/locale/zh/playground.json | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/assets/locale/en/knowledge.json b/src/assets/locale/en/knowledge.json index 60111b2..7e66f13 100644 --- a/src/assets/locale/en/knowledge.json +++ b/src/assets/locale/en/knowledge.json @@ -38,5 +38,5 @@ "submit": "Submit", "success": "Knowledge added successfully" }, - "noEmbeddingModel": "Please add an embedding model first from the Ollama settings page" + "noEmbeddingModel": "Please add an embedding model from the RAG settings page first" } \ No newline at end of file diff --git a/src/assets/locale/en/playground.json b/src/assets/locale/en/playground.json index 5df01bb..05da9ad 100644 --- a/src/assets/locale/en/playground.json +++ b/src/assets/locale/en/playground.json @@ -7,7 +7,7 @@ }, "formError": { "noModel": "Please select a model", - "noEmbeddingModel": "Please set an embedding model on the Settings > Ollama page" + "noEmbeddingModel": "Please set an embedding model on the Settings > RAG page" }, "form": { "textarea": { diff --git a/src/assets/locale/fr/knowledge.json b/src/assets/locale/fr/knowledge.json index 80b4834..ada9861 100644 --- a/src/assets/locale/fr/knowledge.json +++ b/src/assets/locale/fr/knowledge.json @@ -38,5 +38,5 @@ "submit": "Soumettre", "success": "Les connaissances ont ajouté avec succès" }, - "noEmbeddingModel": "Veuillez d'abord ajouter un modèle d'embedding depuis la page des paramètres de Ollama" + "noEmbeddingModel": "Veuillez d'abord ajouter un modèle d'embedding depuis la page des paramètres de RAG" } \ No newline at end of file diff --git a/src/assets/locale/fr/playground.json b/src/assets/locale/fr/playground.json index 78d9bc8..fddf9c0 100644 --- a/src/assets/locale/fr/playground.json +++ b/src/assets/locale/fr/playground.json @@ -7,7 +7,7 @@ }, "formError": { "noModel": "Please select a model", - "noEmbeddingModel": "Please set an embedding model on the Settings > Ollama page" + "noEmbeddingModel": "Please set an embedding model on the Settings > RAG page" }, "form": { "textarea": { diff --git a/src/assets/locale/it/knowledge.json b/src/assets/locale/it/knowledge.json index 867cd84..69fabc1 100644 --- a/src/assets/locale/it/knowledge.json +++ b/src/assets/locale/it/knowledge.json @@ -38,5 +38,5 @@ "submit": "Invia", "success": "Knowledge Base aggiunta correttamente" }, - "noEmbeddingModel": "Aggiungi prima un modello dalla pagina di impostazione di Ollama" + "noEmbeddingModel": "Aggiungi prima un modello dalla pagina di impostazione di RAG" } \ No newline at end of file diff --git a/src/assets/locale/it/playground.json b/src/assets/locale/it/playground.json index 44972eb..766fe20 100644 --- a/src/assets/locale/it/playground.json +++ b/src/assets/locale/it/playground.json @@ -7,7 +7,7 @@ }, "formError": { "noModel": "Seleziona un modello", - "noEmbeddingModel": "Imposta un modello di embedding da Impostazioni > Ollama" + "noEmbeddingModel": "Imposta un modello di embedding da Impostazioni > RAG" }, "form": { "textarea": { diff --git a/src/assets/locale/ja-JP/knowledge.json b/src/assets/locale/ja-JP/knowledge.json index c4d658c..1efe898 100644 --- a/src/assets/locale/ja-JP/knowledge.json +++ b/src/assets/locale/ja-JP/knowledge.json @@ -38,5 +38,5 @@ "submit": "送信", "success": "知識が正常に追加されました" }, - "noEmbeddingModel": "最初にOllamaの設定ページから埋め込みモデルを追加してください" + "noEmbeddingModel": "最初にRAGの設定ページから埋め込みモデルを追加してください" } \ No newline at end of file diff --git a/src/assets/locale/ja-JP/playground.json b/src/assets/locale/ja-JP/playground.json index b5ebedf..96c4d1a 100644 --- a/src/assets/locale/ja-JP/playground.json +++ b/src/assets/locale/ja-JP/playground.json @@ -7,7 +7,7 @@ }, "formError": { "noModel": "モデルを選択してください", - "noEmbeddingModel": "設定 > Ollamaページでembeddingモデルを設定してください" + "noEmbeddingModel": "設定 > RAGページでembeddingモデルを設定してください" }, "form": { "textarea": { diff --git a/src/assets/locale/ml/knowledge.json b/src/assets/locale/ml/knowledge.json index 96d580d..fc92e27 100644 --- a/src/assets/locale/ml/knowledge.json +++ b/src/assets/locale/ml/knowledge.json @@ -38,5 +38,5 @@ "submit": "സമര്‍പ്പിക്കുക", "success": "വിജ്ഞാനം വിജയകരമായി ചേര്‍ത്തു" }, - "noEmbeddingModel": "ദയവായി ആദ്യം Ollama ക്രമീകരണ പേജില്‍ നിന്ന് ഒരു എംബെഡിംഗ് മോഡല്‍ ചേര്‍ക്കുക" + "noEmbeddingModel": "ദയവായി ആദ്യം RAG ക്രമീകരണ പേജില്‍ നിന്ന് ഒരു എംബെഡിംഗ് മോഡല്‍ ചേര്‍ക്കുക" } \ No newline at end of file diff --git a/src/assets/locale/ml/playground.json b/src/assets/locale/ml/playground.json index 708782c..8297aa4 100644 --- a/src/assets/locale/ml/playground.json +++ b/src/assets/locale/ml/playground.json @@ -7,7 +7,7 @@ }, "formError": { "noModel": "ദയവായി ഒരു മോഡല്‍ തിരഞ്ഞെടുക്കുക", - "noEmbeddingModel": "സെറ്റിംഗുകൾ > ഒല്ലാമ പേജിലുള്ള എംബെഡിംഗ് മോഡല്‍ സജ്ജീകരിക്കുക" + "noEmbeddingModel": "സെറ്റിംഗുകൾ > RAG പേജിലുള്ള എംബെഡിംഗ് മോഡല്‍ സജ്ജീകരിക്കുക" }, "form": { "textarea": { diff --git a/src/assets/locale/pt-BR/knowledge.json b/src/assets/locale/pt-BR/knowledge.json index 3ac43e6..2df32bd 100644 --- a/src/assets/locale/pt-BR/knowledge.json +++ b/src/assets/locale/pt-BR/knowledge.json @@ -38,5 +38,5 @@ "submit": "Enviar", "success": "Conhecimento adicionado com sucesso" }, - "noEmbeddingModel": "Por favor, adicione um modelo de embedding primeiro na página de configurações do Ollama" + "noEmbeddingModel": "Por favor, adicione um modelo de embedding primeiro na página de configurações do RAG" } \ No newline at end of file diff --git a/src/assets/locale/pt-BR/playground.json b/src/assets/locale/pt-BR/playground.json index f0cdfe3..2870827 100644 --- a/src/assets/locale/pt-BR/playground.json +++ b/src/assets/locale/pt-BR/playground.json @@ -7,7 +7,7 @@ }, "formError": { "noModel": "Por favor, selecione um modelo", - "noEmbeddingModel": "Por favor, defina um modelo de embedding na página de configurações > Ollama" + "noEmbeddingModel": "Por favor, defina um modelo de embedding na página de configurações > RAG" }, "form": { "textarea": { diff --git a/src/assets/locale/ru/knowledge.json b/src/assets/locale/ru/knowledge.json index c509209..0a8c740 100644 --- a/src/assets/locale/ru/knowledge.json +++ b/src/assets/locale/ru/knowledge.json @@ -38,5 +38,5 @@ "submit": "Отправить", "success": "Знание успешно добавлено" }, - "noEmbeddingModel": "Пожалуйста, сначала добавьте модель вложения на странице настроек Ollama" + "noEmbeddingModel": "Пожалуйста, сначала добавьте модель вложения на странице настроек RAG" } diff --git a/src/assets/locale/ru/playground.json b/src/assets/locale/ru/playground.json index 433c67d..fdc2933 100644 --- a/src/assets/locale/ru/playground.json +++ b/src/assets/locale/ru/playground.json @@ -7,7 +7,7 @@ }, "formError": { "noModel": "Пожалуйста, выберите модель", - "noEmbeddingModel": "Пожалуйста, установите модель вложения на странице Настройки > Ollama" + "noEmbeddingModel": "Пожалуйста, установите модель вложения на странице Настройки > RAG" }, "form": { "textarea": { diff --git a/src/assets/locale/zh/knowledge.json b/src/assets/locale/zh/knowledge.json index 7e56a15..14061f4 100644 --- a/src/assets/locale/zh/knowledge.json +++ b/src/assets/locale/zh/knowledge.json @@ -38,5 +38,5 @@ "submit": "提交", "success": "知识添加成功" }, - "noEmbeddingModel": "请先从Ollama设置页面添加一个嵌入模型" + "noEmbeddingModel": "请先从RAG设置页面添加一个嵌入模型" } \ No newline at end of file diff --git a/src/assets/locale/zh/playground.json b/src/assets/locale/zh/playground.json index bb74e7a..8f7da46 100644 --- a/src/assets/locale/zh/playground.json +++ b/src/assets/locale/zh/playground.json @@ -7,7 +7,7 @@ }, "formError": { "noModel": "请选择一个模型", - "noEmbeddingModel": "请在设置>Ollama页面设置一个文本嵌入模型" + "noEmbeddingModel": "请在设置>RAG页面设置一个文本嵌入模型" }, "form": { "textarea": { From 56b712192231ec3bfa82550cd913fa4d20d5adb8 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Mon, 3 Jun 2024 13:55:47 +0530 Subject: [PATCH 18/19] refactor: Update RAG settings labels and help messages --- src/components/Sidepanel/Settings/body.tsx | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/components/Sidepanel/Settings/body.tsx b/src/components/Sidepanel/Settings/body.tsx index e892401..c383e8a 100644 --- a/src/components/Sidepanel/Settings/body.tsx +++ b/src/components/Sidepanel/Settings/body.tsx @@ -250,7 +250,7 @@ export const SettingsBody = () => {

- {t("ollamaSettings.settings.ragSettings.label")} + {t("rag.ragSettings.label")}

{ @@ -267,12 +267,12 @@ export const SettingsBody = () => { }}>