diff --git a/src/lib/apis/knowledge/index.ts b/src/lib/apis/knowledge/index.ts
index 888c90c6b..843a2d9a6 100644
--- a/src/lib/apis/knowledge/index.ts
+++ b/src/lib/apis/knowledge/index.ts
@@ -375,3 +375,31 @@ export const reindexKnowledgeFiles = async (token: string) => {
return res;
};
+
+export const reindexSpecificKnowledgeFiles = async (token: string, id: string) => {
+ let error = null;
+
+ const res = await fetch(`${WEBUI_API_BASE_URL}/knowledge/reindex/${id}`, {
+ method: 'POST',
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
+ authorization: `Bearer ${token}`
+ }
+ })
+ .then(async (res) => {
+ if (!res.ok) throw await res.json();
+ return res.json();
+ })
+ .catch((err) => {
+ error = err.detail;
+ console.error(err);
+ return null;
+ });
+
+ if (error) {
+ throw error;
+ }
+
+ return res;
+};
\ No newline at end of file
diff --git a/src/lib/components/workspace/common/RagConfigModal.svelte b/src/lib/components/workspace/common/RagConfigModal.svelte
index afc5b9358..1fe225884 100644
--- a/src/lib/components/workspace/common/RagConfigModal.svelte
+++ b/src/lib/components/workspace/common/RagConfigModal.svelte
@@ -8,7 +8,7 @@
import Tooltip from '$lib/components/common/Tooltip.svelte';
import Textarea from '$lib/components/common/Textarea.svelte';
- import { createNewKnowledge, getKnowledgeBases } from '$lib/apis/knowledge';
+ import { createNewKnowledge, getKnowledgeBases, reindexSpecificKnowledgeFiles} from '$lib/apis/knowledge';
import { knowledge, user } from '$lib/stores';
import {
@@ -48,6 +48,8 @@
let OllamaUrl = RAGConfig.ollama_config?.url || "";
let OllamaKey = RAGConfig.ollama_config?.key || "";
+ let needsReindex = false;
+
function resetLocalState() {
if (!RAGConfig) return;
@@ -61,6 +63,7 @@
OllamaUrl = RAGConfig.ollama_config?.url || "";
OllamaKey = RAGConfig.ollama_config?.key || "";
+ needsReindex = false;
}
// Automatically reset on modal open
@@ -227,6 +230,18 @@
localRAGConfig.openai_config = {"key": OpenAIKey, "url": OpenAIUrl}
localRAGConfig.ollama_config = {"key": OllamaKey, "url": OllamaUrl}
+ if (needsReindex) {
+ // Reindex knowledge files if reranking model changed
+ const reindexResponse = await reindexSpecificKnowledgeFiles(localStorage.token, knowledgeId,
+ );
+
+ if (reindexResponse.status === true) {
+ toast.success($i18n.t('Knowledge files reindexed successfully.'));
+ } else {
+ toast.error($i18n.t('Failed to reindex knowledge files.'));
+ }
+ }
+
dispatch('update', localRAGConfig)
loading = false;
};
@@ -494,6 +509,14 @@
required
on:input={() => {
}}
+ on:change={() => {
+ if (
+ embeddingModel !== "" &&
+ embeddingModel !== localRAGConfig.RAG_EMBEDDING_MODEL
+ ) {
+ needsReindex = true;
+ }
+ }}
/>
@@ -577,13 +600,22 @@
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden p-2 border border-gray-300"
bind:value={embeddingModel}
required
+ on:change={() => {
+ if (
+ embeddingModel !== "" &&
+ embeddingModel !== localRAGConfig.RAG_EMBEDDING_MODEL
+ ) {
+ needsReindex = true;
+ console.log('needsReindex set to', needsReindex);
+ }
+ }}
>
{#if embeddingModel && embeddingModel.trim() !== ''}