mirror of
https://github.com/open-webui/open-webui
synced 2025-06-26 18:26:48 +00:00
Feat: Added reindixing functions for individual rag config
This commit is contained in:
parent
8b434bfabe
commit
14103a43fd
@ -375,3 +375,31 @@ export const reindexKnowledgeFiles = async (token: string) => {
|
|||||||
|
|
||||||
return res;
|
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;
|
||||||
|
};
|
@ -8,7 +8,7 @@
|
|||||||
import Tooltip from '$lib/components/common/Tooltip.svelte';
|
import Tooltip from '$lib/components/common/Tooltip.svelte';
|
||||||
import Textarea from '$lib/components/common/Textarea.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 { knowledge, user } from '$lib/stores';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@ -48,6 +48,8 @@
|
|||||||
let OllamaUrl = RAGConfig.ollama_config?.url || "";
|
let OllamaUrl = RAGConfig.ollama_config?.url || "";
|
||||||
let OllamaKey = RAGConfig.ollama_config?.key || "";
|
let OllamaKey = RAGConfig.ollama_config?.key || "";
|
||||||
|
|
||||||
|
let needsReindex = false;
|
||||||
|
|
||||||
function resetLocalState() {
|
function resetLocalState() {
|
||||||
if (!RAGConfig) return;
|
if (!RAGConfig) return;
|
||||||
|
|
||||||
@ -61,6 +63,7 @@
|
|||||||
|
|
||||||
OllamaUrl = RAGConfig.ollama_config?.url || "";
|
OllamaUrl = RAGConfig.ollama_config?.url || "";
|
||||||
OllamaKey = RAGConfig.ollama_config?.key || "";
|
OllamaKey = RAGConfig.ollama_config?.key || "";
|
||||||
|
needsReindex = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Automatically reset on modal open
|
// Automatically reset on modal open
|
||||||
@ -227,6 +230,18 @@
|
|||||||
localRAGConfig.openai_config = {"key": OpenAIKey, "url": OpenAIUrl}
|
localRAGConfig.openai_config = {"key": OpenAIKey, "url": OpenAIUrl}
|
||||||
localRAGConfig.ollama_config = {"key": OllamaKey, "url": OllamaUrl}
|
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)
|
dispatch('update', localRAGConfig)
|
||||||
loading = false;
|
loading = false;
|
||||||
};
|
};
|
||||||
@ -494,6 +509,14 @@
|
|||||||
required
|
required
|
||||||
on:input={() => {
|
on:input={() => {
|
||||||
}}
|
}}
|
||||||
|
on:change={() => {
|
||||||
|
if (
|
||||||
|
embeddingModel !== "" &&
|
||||||
|
embeddingModel !== localRAGConfig.RAG_EMBEDDING_MODEL
|
||||||
|
) {
|
||||||
|
needsReindex = true;
|
||||||
|
}
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -577,13 +600,22 @@
|
|||||||
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden p-2 border border-gray-300"
|
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden p-2 border border-gray-300"
|
||||||
bind:value={embeddingModel}
|
bind:value={embeddingModel}
|
||||||
required
|
required
|
||||||
|
on:change={() => {
|
||||||
|
if (
|
||||||
|
embeddingModel !== "" &&
|
||||||
|
embeddingModel !== localRAGConfig.RAG_EMBEDDING_MODEL
|
||||||
|
) {
|
||||||
|
needsReindex = true;
|
||||||
|
console.log('needsReindex set to', needsReindex);
|
||||||
|
}
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<option value="" disabled selected>{$i18n.t('Select embedding model')}</option>
|
<option value="" disabled selected>{$i18n.t('Select embedding model')}</option>
|
||||||
<!-- Always show the current value first if it's not empty -->
|
<!-- Always show the current value first if it's not empty -->
|
||||||
{#if embeddingModel && embeddingModel.trim() !== ''}
|
{#if embeddingModel && embeddingModel.trim() !== ''}
|
||||||
<option value={embeddingModel} class="py-1 font-semibold">
|
<option value={embeddingModel} class="py-1 font-semibold">
|
||||||
{embeddingModel}
|
{embeddingModel}
|
||||||
{#if embeddingEngine &&
|
{#if embeddingEngine !== undefined &&
|
||||||
localRAGConfig.DOWNLOADED_EMBEDDING_MODELS[embeddingEngine] &&
|
localRAGConfig.DOWNLOADED_EMBEDDING_MODELS[embeddingEngine] &&
|
||||||
!localRAGConfig.DOWNLOADED_EMBEDDING_MODELS[embeddingEngine]?.includes(embeddingModel)}
|
!localRAGConfig.DOWNLOADED_EMBEDDING_MODELS[embeddingEngine]?.includes(embeddingModel)}
|
||||||
(custom)
|
(custom)
|
||||||
@ -592,7 +624,7 @@
|
|||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<!-- Then show all downloaded models from the selected engine -->
|
<!-- Then show all downloaded models from the selected engine -->
|
||||||
{#if embeddingEngine && localRAGConfig.DOWNLOADED_EMBEDDING_MODELS[embeddingEngine]}
|
{#if embeddingEngine !== undefined && localRAGConfig.DOWNLOADED_EMBEDDING_MODELS[embeddingEngine]}
|
||||||
{#each localRAGConfig.DOWNLOADED_EMBEDDING_MODELS[embeddingEngine] as model}
|
{#each localRAGConfig.DOWNLOADED_EMBEDDING_MODELS[embeddingEngine] as model}
|
||||||
{#if model !== embeddingModel} <!-- Skip the current model as it's already shown -->
|
{#if model !== embeddingModel} <!-- Skip the current model as it's already shown -->
|
||||||
<option value={model} class="py-1">{model}</option>
|
<option value={model} class="py-1">{model}</option>
|
||||||
|
Loading…
Reference in New Issue
Block a user