diff --git a/src/assets/locale/en/settings.json b/src/assets/locale/en/settings.json index 9d38d57..c4405fe 100644 --- a/src/assets/locale/en/settings.json +++ b/src/assets/locale/en/settings.json @@ -31,6 +31,16 @@ "label": "Send Notification After Finishing Processing the Knowledge Base" } }, + "sidepanelRag": { + "heading": "Copilot Chat With Website Settings", + "ragEnabled": { + "label": "Chat with website using vector embeddings" + }, + "maxWebsiteContext": { + "label": "Normal mode website content size", + "placeholder": "Content size (default 4028)" + } + }, "webSearch": { "heading": "Manage Web Search", "searchMode": { @@ -288,6 +298,11 @@ "label": "Chunk Overlap", "placeholder": "Enter Chunk Overlap", "required": "Please enter a chunk overlap" + }, + "totalFilePerKB": { + "label": "Knowledge Base Default File Limit", + "placeholder": "Enter default file limit (e.g., 10)", + "required": "Please enter the default file limit" } }, "prompt": { diff --git a/src/assets/locale/es/settings.json b/src/assets/locale/es/settings.json index e4df0e0..7884f46 100644 --- a/src/assets/locale/es/settings.json +++ b/src/assets/locale/es/settings.json @@ -31,6 +31,16 @@ "label": "Enviar notificación después de terminar el procesamiento de la base de conocimientos" } }, + "sidepanelRag": { + "heading": "Configuración del Chat Copilot con Sitio Web", + "ragEnabled": { + "label": "Chatear con el sitio web usando incrustaciones vectoriales" + }, + "maxWebsiteContext": { + "label": "Tamaño del contenido del sitio web en modo normal", + "placeholder": "Tamaño del contenido (predeterminado 4028)" + } + }, "webSearch": { "heading": "Manejo de la busqueda Web", "searchMode": { @@ -288,6 +298,11 @@ "label": "Solapamiento del Chunk", "placeholder": "Ingrese el solapamiento del chunk", "required": "Por favor, ingresar el solapamiento del chunk" + }, + "totalFilePerKB": { + "label": "Límite predeterminado de archivos de la base de conocimientos", + "placeholder": "Ingrese el límite predeterminado de archivos (ej. 10)", + "required": "Por favor, ingrese el límite predeterminado de archivos" } }, "prompt": { diff --git a/src/assets/locale/fr/settings.json b/src/assets/locale/fr/settings.json index 6af2a68..eaf89af 100644 --- a/src/assets/locale/fr/settings.json +++ b/src/assets/locale/fr/settings.json @@ -31,6 +31,16 @@ "label": "Envoyer une notification après avoir terminé le traitement de la base de connaissances" } }, + "sidepanelRag": { + "heading": "Paramètres du Chat Copilot avec le Site Web", + "ragEnabled": { + "label": "Discuter avec le site web en utilisant des embeddings vectoriels" + }, + "maxWebsiteContext": { + "label": "Taille du contenu du site web en mode normal", + "placeholder": "Taille du contenu (par défaut 4028)" + } + }, "webSearch": { "heading": "Gérer la recherche Web", "searchMode": { @@ -288,6 +298,11 @@ "label": "Chevauchement", "placeholder": "Entrez le chevauchement des morceaux", "required": "Veuillez saisir un chevauchement" + }, + "totalFilePerKB": { + "label": "Limite par défaut de fichiers de la base de connaissances", + "placeholder": "Entrez la limite par défaut de fichiers (ex. 10)", + "required": "Veuillez entrer la limite par défaut de fichiers" } }, "prompt": { diff --git a/src/assets/locale/it/settings.json b/src/assets/locale/it/settings.json index 31aed04..07f236f 100644 --- a/src/assets/locale/it/settings.json +++ b/src/assets/locale/it/settings.json @@ -31,6 +31,16 @@ "label": "Inviare notifica dopo aver terminato l'elaborazione della base di conoscenza" } }, + "sidepanelRag": { + "heading": "Impostazioni Chat Copilot con Sito Web", + "ragEnabled": { + "label": "Chatta con il sito web utilizzando embedding vettoriali" + }, + "maxWebsiteContext": { + "label": "Dimensione del contenuto del sito web in modalità normale", + "placeholder": "Dimensione del contenuto (predefinito 4028)" + } + }, "webSearch": { "heading": "Gestione ricerca Web", "searchMode": { @@ -288,6 +298,11 @@ "label": "Sovrapposizione del Blocco (Chunk Overlap)", "placeholder": "Inserisci la Sovrapposizione del Blocco (Chunk Overlap)", "required": "Inserisci la Sovrapposizione del Blocco" + }, + "totalFilePerKB": { + "label": "Limite predefinito di file della base di conoscenza", + "placeholder": "Inserisci il limite predefinito di file (es. 10)", + "required": "Inserisci il limite predefinito di file" } }, "prompt": { diff --git a/src/assets/locale/ja-JP/settings.json b/src/assets/locale/ja-JP/settings.json index f11105b..546f5fd 100644 --- a/src/assets/locale/ja-JP/settings.json +++ b/src/assets/locale/ja-JP/settings.json @@ -34,6 +34,16 @@ "label": "ナレッジベースの処理完了後に通知を送信" } }, + "sidepanelRag": { + "heading": "ウェブサイトとのCopilotチャット設定", + "ragEnabled": { + "label": "ベクトル埋め込みを使用してウェブサイトとチャットする" + }, + "maxWebsiteContext": { + "label": "通常モードのウェブサイトコンテンツサイズ", + "placeholder": "コンテンツサイズ(デフォルト4028)" + } + }, "webSearch": { "heading": "ウェブ検索を管理する", "searchMode": { @@ -291,6 +301,11 @@ "label": "チャンクオーバーラップ", "placeholder": "チャンクオーバーラップを入力", "required": "チャンクオーバーラップを入力してください" + }, + "totalFilePerKB": { + "label": "ナレッジベースのデフォルトファイル制限", + "placeholder": "デフォルトのファイル制限を入力してください(例:10)", + "required": "デフォルトのファイル制限を入力してください" } }, "prompt": { diff --git a/src/assets/locale/ml/settings.json b/src/assets/locale/ml/settings.json index d46f628..9578064 100644 --- a/src/assets/locale/ml/settings.json +++ b/src/assets/locale/ml/settings.json @@ -34,6 +34,16 @@ "label": "അറിവ് ശേഖരം പ്രോസസ്സ് ചെയ്ത് കഴിഞ്ഞതിന് ശേഷം അറിയിപ്പ് അയയ്ക്കുക" } }, + "sidepanelRag": { + "heading": "വെബ്‌സൈറ്റുമായുള്ള കോപൈലറ്റ് ചാറ്റ് ക്രമീകരണങ്ങൾ", + "ragEnabled": { + "label": "വെക്ടർ എംബെഡിംഗുകൾ ഉപയോഗിച്ച് വെബ്‌സൈറ്റുമായി ചാറ്റ് ചെയ്യുക" + }, + "maxWebsiteContext": { + "label": "സാധാരണ മോഡിലെ വെബ്‌സൈറ്റ് ഉള്ളടക്ക വലുപ്പം", + "placeholder": "ഉള്ളടക്ക വലുപ്പം (സ്ഥിരസ്ഥിതി 4028)" + } + }, "webSearch": { "heading": "വെബ്ബ് തിരച്ചിൽ നിയന്ത്രിക്കുക", "searchMode": { @@ -291,6 +301,11 @@ "label": "ചങ്ക് ഓവര്‍ലാപ്പ്", "placeholder": "ചങ്ക് ഓവര്‍ലാപ്പ് നല്കുക", "required": "ദയവായി ചങ്ക് ഓവര്‍ലാപ്പ് നല്കുക" + }, + "totalFilePerKB": { + "label": "Limite padrão de arquivos da base de conhecimento", + "placeholder": "Digite o limite padrão de arquivos (ex. 10)", + "required": "Por favor, digite o limite padrão de arquivos" } }, "prompt": { diff --git a/src/assets/locale/pt-BR/settings.json b/src/assets/locale/pt-BR/settings.json index f396d0a..5de4779 100644 --- a/src/assets/locale/pt-BR/settings.json +++ b/src/assets/locale/pt-BR/settings.json @@ -31,6 +31,16 @@ "label": "Enviar notificação após concluir o processamento da base de conhecimento" } }, + "sidepanelRag": { + "heading": "Configurações de Chat Copilot com o Site", + "ragEnabled": { + "label": "Conversar com o site usando embeddings vetoriais" + }, + "maxWebsiteContext": { + "label": "Tamanho do conteúdo do site no modo normal", + "placeholder": "Tamanho do conteúdo (padrão 4028)" + } + }, "webSearch": { "heading": "Gerenciar Pesquisa na Web", "searchMode": { @@ -288,6 +298,11 @@ "label": "Sobreposição do Pedaço", "placeholder": "Digite a Sobreposição do Pedaço", "required": "Por favor, insira uma sobreposição de pedaço" + }, + "totalFilePerKB": { + "label": "Limite padrão de arquivos da base de conhecimento", + "placeholder": "Digite o limite padrão de arquivos (ex. 10)", + "required": "Por favor, digite o limite padrão de arquivos" } }, "prompt": { diff --git a/src/assets/locale/ru/settings.json b/src/assets/locale/ru/settings.json index bf85524..f2f4619 100644 --- a/src/assets/locale/ru/settings.json +++ b/src/assets/locale/ru/settings.json @@ -31,6 +31,17 @@ "label": "Отправить уведомление после завершения обработки базы знаний" } }, + "sidepanelRag": { + "heading": "Настройки чата Copilot с веб-сайтом", + "ragEnabled": { + "label": "Общаться с веб-сайтом, используя векторные вложения" + }, + "maxWebsiteContext": { + "label": "Размер содержимого веб-сайта в обычном режиме", + "placeholder": "Размер содержимого (по умолчанию 4028)" + } + }, + "webSearch": { "heading": "Управление веб-поиском", "searchMode": { @@ -289,6 +300,11 @@ "label": "Перекрытие фрагментов", "placeholder": "Введите перекрытие фрагментов", "required": "Пожалуйста, введите перекрытие фрагментов" + }, + "totalFilePerKB": { + "label": "Стандартный лимит файлов базы знаний", + "placeholder": "Введите стандартный лимит файлов (напр. 10)", + "required": "Пожалуйста, введите стандартный лимит файлов" } }, "prompt": { diff --git a/src/assets/locale/zh/settings.json b/src/assets/locale/zh/settings.json index 7b93060..6cfbad2 100644 --- a/src/assets/locale/zh/settings.json +++ b/src/assets/locale/zh/settings.json @@ -34,6 +34,16 @@ "label": "完成知识库处理后发送通知" } }, + "sidepanelRag": { + "heading": "与网站对话的Copilot聊天设置", + "ragEnabled": { + "label": "使用向量嵌入与网站聊天" + }, + "maxWebsiteContext": { + "label": "普通模式下的网站内容大小", + "placeholder": "内容大小(默认4028)" + } + }, "webSearch": { "heading": "管理网络搜索", "searchMode": { @@ -293,6 +303,11 @@ "label": "嵌入重叠", "placeholder": "256-∞", "required": "请输入嵌入重叠" + }, + "totalFilePerKB": { + "label": "知识库默认文件限制", + "placeholder": "输入默认文件限制(例如:10)", + "required": "请输入默认文件限制" } }, "prompt": { diff --git a/src/components/Option/Knowledge/AddKnowledge.tsx b/src/components/Option/Knowledge/AddKnowledge.tsx index 2c1ffd9..a06f35e 100644 --- a/src/components/Option/Knowledge/AddKnowledge.tsx +++ b/src/components/Option/Knowledge/AddKnowledge.tsx @@ -7,6 +7,7 @@ import { InboxIcon } from "lucide-react" import { useTranslation } from "react-i18next" import PubSub from "pubsub-js" import { KNOWLEDGE_QUEUE } from "@/queue" +import { useStorage } from "@plasmohq/storage/hook" type Props = { open: boolean @@ -16,6 +17,7 @@ type Props = { export const AddKnowledge = ({ open, setOpen }: Props) => { const { t } = useTranslation(["knowledge", "common"]) const [form] = Form.useForm() + const [totalFilePerKB] = useStorage("totalFilePerKB", 10) const onUploadHandler = async (data: { title: string @@ -92,7 +94,7 @@ export const AddKnowledge = ({ open, setOpen }: Props) => { { const allowedTypes = [ "application/pdf", diff --git a/src/components/Option/Knowledge/SelectedKnwledge.tsx b/src/components/Option/Knowledge/SelectedKnwledge.tsx index 066c91f..1443ef9 100644 --- a/src/components/Option/Knowledge/SelectedKnwledge.tsx +++ b/src/components/Option/Knowledge/SelectedKnwledge.tsx @@ -17,9 +17,9 @@ export const SelectedKnowledge = () => { -
- - +
+ + {knowledge.title}
@@ -34,4 +34,4 @@ export const SelectedKnowledge = () => {
) -} +} \ No newline at end of file diff --git a/src/components/Option/Prompt/index.tsx b/src/components/Option/Prompt/index.tsx index a862fc2..141bdf6 100644 --- a/src/components/Option/Prompt/index.tsx +++ b/src/components/Option/Prompt/index.tsx @@ -126,30 +126,31 @@ export const PromptBody = () => { { title: t("managePrompts.columns.title"), dataIndex: "title", - key: "title" + key: "title", + render: (content) => ({content}) }, { title: t("managePrompts.columns.prompt"), dataIndex: "content", - key: "content" + key: "content", + render: (content) => ({content}) }, { title: t("managePrompts.columns.type"), dataIndex: "is_system", key: "is_system", render: (is_system) => - is_system ? ( - - - {t("managePrompts.systemPrompt")} - - ) : ( - - - {t("managePrompts.quickPrompt")} - - ) - }, + + {is_system ? ( + <> + {t("managePrompts.systemPrompt")} + + ) : ( + <> + {t("managePrompts.quickPrompt")} + + )} + }, { title: t("managePrompts.columns.actions"), render: (_, record) => ( @@ -164,7 +165,7 @@ export const PromptBody = () => { } }} className="text-red-500 dark:text-red-400"> - +
@@ -175,7 +176,7 @@ export const PromptBody = () => { setOpenEdit(true) }} className="text-gray-500 dark:text-gray-400"> - + diff --git a/src/components/Option/Settings.tsx b/src/components/Option/Settings.tsx deleted file mode 100644 index 4468b70..0000000 --- a/src/components/Option/Settings.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { Tabs } from "antd" -import { SettingsOllama } from "./Settings/ollama" -import { SettingPrompt } from "./Settings/prompt" -import { SettingOther } from "./Settings/general-settings" - -type Props = { - setClose: (close: boolean) => void -} - -export const Settings = ({ setClose }: Props) => { - return ( -
- - }, - { - id: "2", - key: "2", - label: "Web UI Settings", - children: - }, - { - id: "3", - key: "3", - label: "Ollama Settings", - children: - } - ]} - /> -
- ) -} diff --git a/src/components/Option/Settings/rag.tsx b/src/components/Option/Settings/rag.tsx index 95ab7c9..12d7d97 100644 --- a/src/components/Option/Settings/rag.tsx +++ b/src/components/Option/Settings/rag.tsx @@ -10,6 +10,8 @@ import { } from "~/services/ollama" import { SettingPrompt } from "./prompt" import { useTranslation } from "react-i18next" +import { getTotalFilePerKB } from "@/services/app" +import { SidepanelRag } from "./sidepanel-rag" export const RagSettings = () => { const { t } = useTranslation("settings") @@ -19,19 +21,20 @@ export const RagSettings = () => { const { data: ollamaInfo, status } = useQuery({ queryKey: ["fetchRAGSettings"], queryFn: async () => { - const [allModels, chunkOverlap, chunkSize, defaultEM] = await Promise.all( - [ + const [allModels, chunkOverlap, chunkSize, defaultEM, totalFilePerKB] = + await Promise.all([ getAllModels({ returnEmpty: true }), defaultEmbeddingChunkOverlap(), defaultEmbeddingChunkSize(), - defaultEmbeddingModelForRag() - ] - ) + defaultEmbeddingModelForRag(), + getTotalFilePerKB() + ]) return { models: allModels, chunkOverlap, chunkSize, - defaultEM + defaultEM, + totalFilePerKB } } }) @@ -41,8 +44,9 @@ export const RagSettings = () => { model: string chunkSize: number overlap: number + totalFilePerKB: number }) => { - await saveForRag(data.model, data.chunkSize, data.overlap) + await saveForRag(data.model, data.chunkSize, data.overlap, data.totalFilePerKB) return true }, onSuccess: () => { @@ -70,13 +74,15 @@ export const RagSettings = () => { saveRAG({ model: data.defaultEM, chunkSize: data.chunkSize, - overlap: data.chunkOverlap + overlap: data.chunkOverlap, + totalFilePerKB: data.totalFilePerKB }) }} initialValues={{ chunkSize: ollamaInfo?.chunkSize, chunkOverlap: ollamaInfo?.chunkOverlap, - defaultEM: ollamaInfo?.defaultEM + defaultEM: ollamaInfo?.defaultEM, + totalFilePerKB: ollamaInfo?.totalFilePerKB }}> { rules={[ { required: true, - message: t( - "rag.ragSettings.model.required" - ) + message: t("rag.ragSettings.model.required") } ]}>