mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-12 04:15:25 +00:00
refac
This commit is contained in:
parent
2328dc284e
commit
488631db98
2 changed files with 69 additions and 62 deletions
|
|
@ -241,13 +241,13 @@ class SearchForm(BaseModel):
|
||||||
async def get_status(request: Request):
|
async def get_status(request: Request):
|
||||||
return {
|
return {
|
||||||
"status": True,
|
"status": True,
|
||||||
"chunk_size": request.app.state.config.CHUNK_SIZE,
|
"CHUNK_SIZE": request.app.state.config.CHUNK_SIZE,
|
||||||
"chunk_overlap": request.app.state.config.CHUNK_OVERLAP,
|
"CHUNK_OVERLAP": request.app.state.config.CHUNK_OVERLAP,
|
||||||
"template": request.app.state.config.RAG_TEMPLATE,
|
"RAG_TEMPLATE": request.app.state.config.RAG_TEMPLATE,
|
||||||
"embedding_engine": request.app.state.config.RAG_EMBEDDING_ENGINE,
|
"RAG_EMBEDDING_ENGINE": request.app.state.config.RAG_EMBEDDING_ENGINE,
|
||||||
"embedding_model": request.app.state.config.RAG_EMBEDDING_MODEL,
|
"RAG_EMBEDDING_MODEL": request.app.state.config.RAG_EMBEDDING_MODEL,
|
||||||
"reranking_model": request.app.state.config.RAG_RERANKING_MODEL,
|
"RAG_RERANKING_MODEL": request.app.state.config.RAG_RERANKING_MODEL,
|
||||||
"embedding_batch_size": request.app.state.config.RAG_EMBEDDING_BATCH_SIZE,
|
"RAG_EMBEDDING_BATCH_SIZE": request.app.state.config.RAG_EMBEDDING_BATCH_SIZE,
|
||||||
"ENABLE_ASYNC_EMBEDDING": request.app.state.config.ENABLE_ASYNC_EMBEDDING,
|
"ENABLE_ASYNC_EMBEDDING": request.app.state.config.ENABLE_ASYNC_EMBEDDING,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -256,9 +256,9 @@ async def get_status(request: Request):
|
||||||
async def get_embedding_config(request: Request, user=Depends(get_admin_user)):
|
async def get_embedding_config(request: Request, user=Depends(get_admin_user)):
|
||||||
return {
|
return {
|
||||||
"status": True,
|
"status": True,
|
||||||
"embedding_engine": request.app.state.config.RAG_EMBEDDING_ENGINE,
|
"RAG_EMBEDDING_ENGINE": request.app.state.config.RAG_EMBEDDING_ENGINE,
|
||||||
"embedding_model": request.app.state.config.RAG_EMBEDDING_MODEL,
|
"RAG_EMBEDDING_MODEL": request.app.state.config.RAG_EMBEDDING_MODEL,
|
||||||
"embedding_batch_size": request.app.state.config.RAG_EMBEDDING_BATCH_SIZE,
|
"RAG_EMBEDDING_BATCH_SIZE": request.app.state.config.RAG_EMBEDDING_BATCH_SIZE,
|
||||||
"ENABLE_ASYNC_EMBEDDING": request.app.state.config.ENABLE_ASYNC_EMBEDDING,
|
"ENABLE_ASYNC_EMBEDDING": request.app.state.config.ENABLE_ASYNC_EMBEDDING,
|
||||||
"openai_config": {
|
"openai_config": {
|
||||||
"url": request.app.state.config.RAG_OPENAI_API_BASE_URL,
|
"url": request.app.state.config.RAG_OPENAI_API_BASE_URL,
|
||||||
|
|
@ -296,19 +296,13 @@ class EmbeddingModelUpdateForm(BaseModel):
|
||||||
openai_config: Optional[OpenAIConfigForm] = None
|
openai_config: Optional[OpenAIConfigForm] = None
|
||||||
ollama_config: Optional[OllamaConfigForm] = None
|
ollama_config: Optional[OllamaConfigForm] = None
|
||||||
azure_openai_config: Optional[AzureOpenAIConfigForm] = None
|
azure_openai_config: Optional[AzureOpenAIConfigForm] = None
|
||||||
embedding_engine: str
|
RAG_EMBEDDING_ENGINE: str
|
||||||
embedding_model: str
|
RAG_EMBEDDING_MODEL: str
|
||||||
embedding_batch_size: Optional[int] = 1
|
RAG_EMBEDDING_BATCH_SIZE: Optional[int] = 1
|
||||||
ENABLE_ASYNC_EMBEDDING: Optional[bool] = True
|
ENABLE_ASYNC_EMBEDDING: Optional[bool] = True
|
||||||
|
|
||||||
|
|
||||||
@router.post("/embedding/update")
|
def unload_embedding_model(request: Request):
|
||||||
async def update_embedding_config(
|
|
||||||
request: Request, form_data: EmbeddingModelUpdateForm, user=Depends(get_admin_user)
|
|
||||||
):
|
|
||||||
log.info(
|
|
||||||
f"Updating embedding model: {request.app.state.config.RAG_EMBEDDING_MODEL} to {form_data.embedding_model}"
|
|
||||||
)
|
|
||||||
if request.app.state.config.RAG_EMBEDDING_ENGINE == "":
|
if request.app.state.config.RAG_EMBEDDING_ENGINE == "":
|
||||||
# unloads current internal embedding model and clears VRAM cache
|
# unloads current internal embedding model and clears VRAM cache
|
||||||
request.app.state.ef = None
|
request.app.state.ef = None
|
||||||
|
|
@ -321,9 +315,25 @@ async def update_embedding_config(
|
||||||
|
|
||||||
if torch.cuda.is_available():
|
if torch.cuda.is_available():
|
||||||
torch.cuda.empty_cache()
|
torch.cuda.empty_cache()
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/embedding/update")
|
||||||
|
async def update_embedding_config(
|
||||||
|
request: Request, form_data: EmbeddingModelUpdateForm, user=Depends(get_admin_user)
|
||||||
|
):
|
||||||
|
log.info(
|
||||||
|
f"Updating embedding model: {request.app.state.config.RAG_EMBEDDING_MODEL} to {form_data.RAG_EMBEDDING_MODEL}"
|
||||||
|
)
|
||||||
|
unload_embedding_model(request)
|
||||||
try:
|
try:
|
||||||
request.app.state.config.RAG_EMBEDDING_ENGINE = form_data.embedding_engine
|
request.app.state.config.RAG_EMBEDDING_ENGINE = form_data.RAG_EMBEDDING_ENGINE
|
||||||
request.app.state.config.RAG_EMBEDDING_MODEL = form_data.embedding_model
|
request.app.state.config.RAG_EMBEDDING_MODEL = form_data.RAG_EMBEDDING_MODEL
|
||||||
|
request.app.state.config.RAG_EMBEDDING_BATCH_SIZE = (
|
||||||
|
form_data.RAG_EMBEDDING_BATCH_SIZE
|
||||||
|
)
|
||||||
|
request.app.state.config.ENABLE_ASYNC_EMBEDDING = (
|
||||||
|
form_data.ENABLE_ASYNC_EMBEDDING
|
||||||
|
)
|
||||||
|
|
||||||
if request.app.state.config.RAG_EMBEDDING_ENGINE in [
|
if request.app.state.config.RAG_EMBEDDING_ENGINE in [
|
||||||
"ollama",
|
"ollama",
|
||||||
|
|
@ -357,14 +367,6 @@ async def update_embedding_config(
|
||||||
form_data.azure_openai_config.version
|
form_data.azure_openai_config.version
|
||||||
)
|
)
|
||||||
|
|
||||||
request.app.state.config.RAG_EMBEDDING_BATCH_SIZE = (
|
|
||||||
form_data.embedding_batch_size
|
|
||||||
)
|
|
||||||
|
|
||||||
request.app.state.config.ENABLE_ASYNC_EMBEDDING = (
|
|
||||||
form_data.enable_async_embedding
|
|
||||||
)
|
|
||||||
|
|
||||||
request.app.state.ef = get_ef(
|
request.app.state.ef = get_ef(
|
||||||
request.app.state.config.RAG_EMBEDDING_ENGINE,
|
request.app.state.config.RAG_EMBEDDING_ENGINE,
|
||||||
request.app.state.config.RAG_EMBEDDING_MODEL,
|
request.app.state.config.RAG_EMBEDDING_MODEL,
|
||||||
|
|
@ -403,9 +405,9 @@ async def update_embedding_config(
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"status": True,
|
"status": True,
|
||||||
"embedding_engine": request.app.state.config.RAG_EMBEDDING_ENGINE,
|
"RAG_EMBEDDING_ENGINE": request.app.state.config.RAG_EMBEDDING_ENGINE,
|
||||||
"embedding_model": request.app.state.config.RAG_EMBEDDING_MODEL,
|
"RAG_EMBEDDING_MODEL": request.app.state.config.RAG_EMBEDDING_MODEL,
|
||||||
"embedding_batch_size": request.app.state.config.RAG_EMBEDDING_BATCH_SIZE,
|
"RAG_EMBEDDING_BATCH_SIZE": request.app.state.config.RAG_EMBEDDING_BATCH_SIZE,
|
||||||
"ENABLE_ASYNC_EMBEDDING": request.app.state.config.ENABLE_ASYNC_EMBEDDING,
|
"ENABLE_ASYNC_EMBEDDING": request.app.state.config.ENABLE_ASYNC_EMBEDDING,
|
||||||
"openai_config": {
|
"openai_config": {
|
||||||
"url": request.app.state.config.RAG_OPENAI_API_BASE_URL,
|
"url": request.app.state.config.RAG_OPENAI_API_BASE_URL,
|
||||||
|
|
|
||||||
|
|
@ -38,9 +38,9 @@
|
||||||
let showResetUploadDirConfirm = false;
|
let showResetUploadDirConfirm = false;
|
||||||
let showReindexConfirm = false;
|
let showReindexConfirm = false;
|
||||||
|
|
||||||
let embeddingEngine = '';
|
let RAG_EMBEDDING_ENGINE = '';
|
||||||
let embeddingModel = '';
|
let RAG_EMBEDDING_MODEL = '';
|
||||||
let embeddingBatchSize = 1;
|
let RAG_EMBEDDING_BATCH_SIZE = 1;
|
||||||
let ENABLE_ASYNC_EMBEDDING = true;
|
let ENABLE_ASYNC_EMBEDDING = true;
|
||||||
|
|
||||||
let rerankingModel = '';
|
let rerankingModel = '';
|
||||||
|
|
@ -66,7 +66,7 @@
|
||||||
let RAGConfig = null;
|
let RAGConfig = null;
|
||||||
|
|
||||||
const embeddingModelUpdateHandler = async () => {
|
const embeddingModelUpdateHandler = async () => {
|
||||||
if (embeddingEngine === '' && embeddingModel.split('/').length - 1 > 1) {
|
if (RAG_EMBEDDING_ENGINE === '' && RAG_EMBEDDING_MODEL.split('/').length - 1 > 1) {
|
||||||
toast.error(
|
toast.error(
|
||||||
$i18n.t(
|
$i18n.t(
|
||||||
'Model filesystem path detected. Model shortname is required for update, cannot continue.'
|
'Model filesystem path detected. Model shortname is required for update, cannot continue.'
|
||||||
|
|
@ -74,7 +74,7 @@
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (embeddingEngine === 'ollama' && embeddingModel === '') {
|
if (RAG_EMBEDDING_ENGINE === 'ollama' && RAG_EMBEDDING_MODEL === '') {
|
||||||
toast.error(
|
toast.error(
|
||||||
$i18n.t(
|
$i18n.t(
|
||||||
'Model filesystem path detected. Model shortname is required for update, cannot continue.'
|
'Model filesystem path detected. Model shortname is required for update, cannot continue.'
|
||||||
|
|
@ -83,7 +83,7 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (embeddingEngine === 'openai' && embeddingModel === '') {
|
if (RAG_EMBEDDING_ENGINE === 'openai' && RAG_EMBEDDING_MODEL === '') {
|
||||||
toast.error(
|
toast.error(
|
||||||
$i18n.t(
|
$i18n.t(
|
||||||
'Model filesystem path detected. Model shortname is required for update, cannot continue.'
|
'Model filesystem path detected. Model shortname is required for update, cannot continue.'
|
||||||
|
|
@ -93,20 +93,25 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
embeddingEngine === 'azure_openai' &&
|
RAG_EMBEDDING_ENGINE === 'azure_openai' &&
|
||||||
(AzureOpenAIKey === '' || AzureOpenAIUrl === '' || AzureOpenAIVersion === '')
|
(AzureOpenAIKey === '' || AzureOpenAIUrl === '' || AzureOpenAIVersion === '')
|
||||||
) {
|
) {
|
||||||
toast.error($i18n.t('OpenAI URL/Key required.'));
|
toast.error($i18n.t('OpenAI URL/Key required.'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.debug('Update embedding model attempt:', embeddingModel);
|
console.debug('Update embedding model attempt:', {
|
||||||
|
RAG_EMBEDDING_ENGINE,
|
||||||
|
RAG_EMBEDDING_MODEL,
|
||||||
|
RAG_EMBEDDING_BATCH_SIZE,
|
||||||
|
ENABLE_ASYNC_EMBEDDING
|
||||||
|
});
|
||||||
|
|
||||||
updateEmbeddingModelLoading = true;
|
updateEmbeddingModelLoading = true;
|
||||||
const res = await updateEmbeddingConfig(localStorage.token, {
|
const res = await updateEmbeddingConfig(localStorage.token, {
|
||||||
embedding_engine: embeddingEngine,
|
RAG_EMBEDDING_ENGINE: RAG_EMBEDDING_ENGINE,
|
||||||
embedding_model: embeddingModel,
|
RAG_EMBEDDING_MODEL: RAG_EMBEDDING_MODEL,
|
||||||
embedding_batch_size: embeddingBatchSize,
|
RAG_EMBEDDING_BATCH_SIZE: RAG_EMBEDDING_BATCH_SIZE,
|
||||||
ENABLE_ASYNC_EMBEDDING: ENABLE_ASYNC_EMBEDDING,
|
ENABLE_ASYNC_EMBEDDING: ENABLE_ASYNC_EMBEDDING,
|
||||||
ollama_config: {
|
ollama_config: {
|
||||||
key: OllamaKey,
|
key: OllamaKey,
|
||||||
|
|
@ -237,9 +242,9 @@
|
||||||
const embeddingConfig = await getEmbeddingConfig(localStorage.token);
|
const embeddingConfig = await getEmbeddingConfig(localStorage.token);
|
||||||
|
|
||||||
if (embeddingConfig) {
|
if (embeddingConfig) {
|
||||||
embeddingEngine = embeddingConfig.embedding_engine;
|
RAG_EMBEDDING_ENGINE = embeddingConfig.RAG_EMBEDDING_ENGINE;
|
||||||
embeddingModel = embeddingConfig.embedding_model;
|
RAG_EMBEDDING_MODEL = embeddingConfig.RAG_EMBEDDING_MODEL;
|
||||||
embeddingBatchSize = embeddingConfig.embedding_batch_size ?? 1;
|
RAG_EMBEDDING_BATCH_SIZE = embeddingConfig.RAG_EMBEDDING_BATCH_SIZE ?? 1;
|
||||||
ENABLE_ASYNC_EMBEDDING = embeddingConfig.ENABLE_ASYNC_EMBEDDING ?? true;
|
ENABLE_ASYNC_EMBEDDING = embeddingConfig.ENABLE_ASYNC_EMBEDDING ?? true;
|
||||||
|
|
||||||
OpenAIKey = embeddingConfig.openai_config.key;
|
OpenAIKey = embeddingConfig.openai_config.key;
|
||||||
|
|
@ -772,17 +777,17 @@
|
||||||
<div class="flex items-center relative">
|
<div class="flex items-center relative">
|
||||||
<select
|
<select
|
||||||
class="dark:bg-gray-900 w-fit pr-8 rounded-sm px-2 p-1 text-xs bg-transparent outline-hidden text-right"
|
class="dark:bg-gray-900 w-fit pr-8 rounded-sm px-2 p-1 text-xs bg-transparent outline-hidden text-right"
|
||||||
bind:value={embeddingEngine}
|
bind:value={RAG_EMBEDDING_ENGINE}
|
||||||
placeholder={$i18n.t('Select an embedding model engine')}
|
placeholder={$i18n.t('Select an embedding model engine')}
|
||||||
on:change={(e) => {
|
on:change={(e) => {
|
||||||
if (e.target.value === 'ollama') {
|
if (e.target.value === 'ollama') {
|
||||||
embeddingModel = '';
|
RAG_EMBEDDING_MODEL = '';
|
||||||
} else if (e.target.value === 'openai') {
|
} else if (e.target.value === 'openai') {
|
||||||
embeddingModel = 'text-embedding-3-small';
|
RAG_EMBEDDING_MODEL = 'text-embedding-3-small';
|
||||||
} else if (e.target.value === 'azure_openai') {
|
} else if (e.target.value === 'azure_openai') {
|
||||||
embeddingModel = 'text-embedding-3-small';
|
RAG_EMBEDDING_MODEL = 'text-embedding-3-small';
|
||||||
} else if (e.target.value === '') {
|
} else if (e.target.value === '') {
|
||||||
embeddingModel = 'sentence-transformers/all-MiniLM-L6-v2';
|
RAG_EMBEDDING_MODEL = 'sentence-transformers/all-MiniLM-L6-v2';
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|
@ -794,7 +799,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{#if embeddingEngine === 'openai'}
|
{#if RAG_EMBEDDING_ENGINE === 'openai'}
|
||||||
<div class="my-0.5 flex gap-2 pr-2">
|
<div class="my-0.5 flex gap-2 pr-2">
|
||||||
<input
|
<input
|
||||||
class="flex-1 w-full text-sm bg-transparent outline-hidden"
|
class="flex-1 w-full text-sm bg-transparent outline-hidden"
|
||||||
|
|
@ -809,7 +814,7 @@
|
||||||
required={false}
|
required={false}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
{:else if embeddingEngine === 'ollama'}
|
{:else if RAG_EMBEDDING_ENGINE === 'ollama'}
|
||||||
<div class="my-0.5 flex gap-2 pr-2">
|
<div class="my-0.5 flex gap-2 pr-2">
|
||||||
<input
|
<input
|
||||||
class="flex-1 w-full text-sm bg-transparent outline-hidden"
|
class="flex-1 w-full text-sm bg-transparent outline-hidden"
|
||||||
|
|
@ -824,7 +829,7 @@
|
||||||
required={false}
|
required={false}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
{:else if embeddingEngine === 'azure_openai'}
|
{:else if RAG_EMBEDDING_ENGINE === 'azure_openai'}
|
||||||
<div class="my-0.5 flex flex-col gap-2 pr-2 w-full">
|
<div class="my-0.5 flex flex-col gap-2 pr-2 w-full">
|
||||||
<div class="flex gap-2">
|
<div class="flex gap-2">
|
||||||
<input
|
<input
|
||||||
|
|
@ -851,12 +856,12 @@
|
||||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Embedding Model')}</div>
|
<div class=" mb-1 text-xs font-medium">{$i18n.t('Embedding Model')}</div>
|
||||||
|
|
||||||
<div class="">
|
<div class="">
|
||||||
{#if embeddingEngine === 'ollama'}
|
{#if RAG_EMBEDDING_ENGINE === 'ollama'}
|
||||||
<div class="flex w-full">
|
<div class="flex w-full">
|
||||||
<div class="flex-1 mr-2">
|
<div class="flex-1 mr-2">
|
||||||
<input
|
<input
|
||||||
class="flex-1 w-full text-sm bg-transparent outline-hidden"
|
class="flex-1 w-full text-sm bg-transparent outline-hidden"
|
||||||
bind:value={embeddingModel}
|
bind:value={RAG_EMBEDDING_MODEL}
|
||||||
placeholder={$i18n.t('Set embedding model')}
|
placeholder={$i18n.t('Set embedding model')}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
|
|
@ -868,13 +873,13 @@
|
||||||
<input
|
<input
|
||||||
class="flex-1 w-full text-sm bg-transparent outline-hidden"
|
class="flex-1 w-full text-sm bg-transparent outline-hidden"
|
||||||
placeholder={$i18n.t('Set embedding model (e.g. {{model}})', {
|
placeholder={$i18n.t('Set embedding model (e.g. {{model}})', {
|
||||||
model: embeddingModel.slice(-40)
|
model: RAG_EMBEDDING_MODEL.slice(-40)
|
||||||
})}
|
})}
|
||||||
bind:value={embeddingModel}
|
bind:value={RAG_EMBEDDING_MODEL}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{#if embeddingEngine === ''}
|
{#if RAG_EMBEDDING_ENGINE === ''}
|
||||||
<button
|
<button
|
||||||
class="px-2.5 bg-transparent text-gray-800 dark:bg-transparent dark:text-gray-100 rounded-lg transition"
|
class="px-2.5 bg-transparent text-gray-800 dark:bg-transparent dark:text-gray-100 rounded-lg transition"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
|
|
@ -914,7 +919,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{#if embeddingEngine === 'ollama' || embeddingEngine === 'openai' || embeddingEngine === 'azure_openai'}
|
{#if RAG_EMBEDDING_ENGINE === 'ollama' || RAG_EMBEDDING_ENGINE === 'openai' || RAG_EMBEDDING_ENGINE === 'azure_openai'}
|
||||||
<div class=" mb-2.5 flex w-full justify-between">
|
<div class=" mb-2.5 flex w-full justify-between">
|
||||||
<div class=" self-center text-xs font-medium">
|
<div class=" self-center text-xs font-medium">
|
||||||
{$i18n.t('Embedding Batch Size')}
|
{$i18n.t('Embedding Batch Size')}
|
||||||
|
|
@ -922,7 +927,7 @@
|
||||||
|
|
||||||
<div class="">
|
<div class="">
|
||||||
<input
|
<input
|
||||||
bind:value={embeddingBatchSize}
|
bind:value={RAG_EMBEDDING_BATCH_SIZE}
|
||||||
type="number"
|
type="number"
|
||||||
class=" bg-transparent text-center w-14 outline-none"
|
class=" bg-transparent text-center w-14 outline-none"
|
||||||
min="-2"
|
min="-2"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue