mirror of
				https://github.com/open-webui/open-webui
				synced 2025-06-26 18:26:48 +00:00 
			
		
		
		
	refac: autocomplete settings
This commit is contained in:
		
							parent
							
								
									dbf6ec71fe
								
							
						
					
					
						commit
						81a8ad2762
					
				@ -1004,6 +1004,17 @@ Strictly return in JSON format:
 | 
			
		||||
</chat_history>
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
ENABLE_AUTOCOMPLETE_GENERATION = PersistentConfig(
 | 
			
		||||
    "ENABLE_AUTOCOMPLETE_GENERATION",
 | 
			
		||||
    "task.autocomplete.enable",
 | 
			
		||||
    os.environ.get("ENABLE_AUTOCOMPLETE_GENERATION", "True").lower() == "true",
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH = PersistentConfig(
 | 
			
		||||
    "AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH",
 | 
			
		||||
    "task.autocomplete.input_max_length",
 | 
			
		||||
    int(os.environ.get("AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH", "-1")),
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
AUTOCOMPLETE_GENERATION_PROMPT_TEMPLATE = PersistentConfig(
 | 
			
		||||
    "AUTOCOMPLETE_GENERATION_PROMPT_TEMPLATE",
 | 
			
		||||
 | 
			
		||||
@ -89,6 +89,8 @@ from open_webui.config import (
 | 
			
		||||
    DEFAULT_QUERY_GENERATION_PROMPT_TEMPLATE,
 | 
			
		||||
    TITLE_GENERATION_PROMPT_TEMPLATE,
 | 
			
		||||
    TAGS_GENERATION_PROMPT_TEMPLATE,
 | 
			
		||||
    ENABLE_AUTOCOMPLETE_GENERATION,
 | 
			
		||||
    AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH,
 | 
			
		||||
    AUTOCOMPLETE_GENERATION_PROMPT_TEMPLATE,
 | 
			
		||||
    DEFAULT_AUTOCOMPLETE_GENERATION_PROMPT_TEMPLATE,
 | 
			
		||||
    TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE,
 | 
			
		||||
@ -210,6 +212,11 @@ app.state.config.TASK_MODEL_EXTERNAL = TASK_MODEL_EXTERNAL
 | 
			
		||||
 | 
			
		||||
app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE = TITLE_GENERATION_PROMPT_TEMPLATE
 | 
			
		||||
 | 
			
		||||
app.state.config.ENABLE_AUTOCOMPLETE_GENERATION = ENABLE_AUTOCOMPLETE_GENERATION
 | 
			
		||||
app.state.config.AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH = (
 | 
			
		||||
    AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
app.state.config.ENABLE_TAGS_GENERATION = ENABLE_TAGS_GENERATION
 | 
			
		||||
app.state.config.TAGS_GENERATION_PROMPT_TEMPLATE = TAGS_GENERATION_PROMPT_TEMPLATE
 | 
			
		||||
 | 
			
		||||
@ -1672,6 +1679,8 @@ async def get_task_config(user=Depends(get_verified_user)):
 | 
			
		||||
        "TASK_MODEL": app.state.config.TASK_MODEL,
 | 
			
		||||
        "TASK_MODEL_EXTERNAL": app.state.config.TASK_MODEL_EXTERNAL,
 | 
			
		||||
        "TITLE_GENERATION_PROMPT_TEMPLATE": app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE,
 | 
			
		||||
        "ENABLE_AUTOCOMPLETE_GENERATION": app.state.config.ENABLE_AUTOCOMPLETE_GENERATION,
 | 
			
		||||
        "AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH": app.state.config.AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH,
 | 
			
		||||
        "TAGS_GENERATION_PROMPT_TEMPLATE": app.state.config.TAGS_GENERATION_PROMPT_TEMPLATE,
 | 
			
		||||
        "ENABLE_TAGS_GENERATION": app.state.config.ENABLE_TAGS_GENERATION,
 | 
			
		||||
        "ENABLE_SEARCH_QUERY_GENERATION": app.state.config.ENABLE_SEARCH_QUERY_GENERATION,
 | 
			
		||||
@ -1685,6 +1694,8 @@ class TaskConfigForm(BaseModel):
 | 
			
		||||
    TASK_MODEL: Optional[str]
 | 
			
		||||
    TASK_MODEL_EXTERNAL: Optional[str]
 | 
			
		||||
    TITLE_GENERATION_PROMPT_TEMPLATE: str
 | 
			
		||||
    ENABLE_AUTOCOMPLETE_GENERATION: bool
 | 
			
		||||
    AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH: int
 | 
			
		||||
    TAGS_GENERATION_PROMPT_TEMPLATE: str
 | 
			
		||||
    ENABLE_TAGS_GENERATION: bool
 | 
			
		||||
    ENABLE_SEARCH_QUERY_GENERATION: bool
 | 
			
		||||
@ -1700,6 +1711,14 @@ async def update_task_config(form_data: TaskConfigForm, user=Depends(get_admin_u
 | 
			
		||||
    app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE = (
 | 
			
		||||
        form_data.TITLE_GENERATION_PROMPT_TEMPLATE
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    app.state.config.ENABLE_AUTOCOMPLETE_GENERATION = (
 | 
			
		||||
        form_data.ENABLE_AUTOCOMPLETE_GENERATION
 | 
			
		||||
    )
 | 
			
		||||
    app.state.config.AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH = (
 | 
			
		||||
        form_data.AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    app.state.config.TAGS_GENERATION_PROMPT_TEMPLATE = (
 | 
			
		||||
        form_data.TAGS_GENERATION_PROMPT_TEMPLATE
 | 
			
		||||
    )
 | 
			
		||||
@ -1722,6 +1741,8 @@ async def update_task_config(form_data: TaskConfigForm, user=Depends(get_admin_u
 | 
			
		||||
        "TASK_MODEL": app.state.config.TASK_MODEL,
 | 
			
		||||
        "TASK_MODEL_EXTERNAL": app.state.config.TASK_MODEL_EXTERNAL,
 | 
			
		||||
        "TITLE_GENERATION_PROMPT_TEMPLATE": app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE,
 | 
			
		||||
        "ENABLE_AUTOCOMPLETE_GENERATION": app.state.config.ENABLE_AUTOCOMPLETE_GENERATION,
 | 
			
		||||
        "AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH": app.state.config.AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH,
 | 
			
		||||
        "TAGS_GENERATION_PROMPT_TEMPLATE": app.state.config.TAGS_GENERATION_PROMPT_TEMPLATE,
 | 
			
		||||
        "ENABLE_TAGS_GENERATION": app.state.config.ENABLE_TAGS_GENERATION,
 | 
			
		||||
        "ENABLE_SEARCH_QUERY_GENERATION": app.state.config.ENABLE_SEARCH_QUERY_GENERATION,
 | 
			
		||||
@ -1991,6 +2012,23 @@ async def generate_queries(form_data: dict, user=Depends(get_verified_user)):
 | 
			
		||||
 | 
			
		||||
@app.post("/api/task/auto/completions")
 | 
			
		||||
async def generate_autocompletion(form_data: dict, user=Depends(get_verified_user)):
 | 
			
		||||
    if not app.state.config.ENABLE_AUTOCOMPLETE_GENERATION:
 | 
			
		||||
        raise HTTPException(
 | 
			
		||||
            status_code=status.HTTP_400_BAD_REQUEST,
 | 
			
		||||
            detail=f"Autocompletion generation is disabled",
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    type = form_data.get("type")
 | 
			
		||||
    prompt = form_data.get("prompt")
 | 
			
		||||
    messages = form_data.get("messages")
 | 
			
		||||
 | 
			
		||||
    if app.state.config.AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH > 0:
 | 
			
		||||
        if len(prompt) > app.state.config.AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH:
 | 
			
		||||
            raise HTTPException(
 | 
			
		||||
                status_code=status.HTTP_400_BAD_REQUEST,
 | 
			
		||||
                detail=f"Input prompt exceeds maximum length of {app.state.config.AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH}",
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
    model_list = await get_all_models()
 | 
			
		||||
    models = {model["id"]: model for model in model_list}
 | 
			
		||||
 | 
			
		||||
@ -2019,10 +2057,6 @@ async def generate_autocompletion(form_data: dict, user=Depends(get_verified_use
 | 
			
		||||
    else:
 | 
			
		||||
        template = DEFAULT_AUTOCOMPLETE_GENERATION_PROMPT_TEMPLATE
 | 
			
		||||
 | 
			
		||||
    type = form_data.get("type")
 | 
			
		||||
    prompt = form_data.get("prompt")
 | 
			
		||||
    messages = form_data.get("messages")
 | 
			
		||||
 | 
			
		||||
    content = autocomplete_generation_template(
 | 
			
		||||
        template, prompt, messages, type, {"name": user.name}
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
@ -24,6 +24,8 @@
 | 
			
		||||
		TASK_MODEL: '',
 | 
			
		||||
		TASK_MODEL_EXTERNAL: '',
 | 
			
		||||
		TITLE_GENERATION_PROMPT_TEMPLATE: '',
 | 
			
		||||
		ENABLE_AUTOCOMPLETE_GENERATION: true,
 | 
			
		||||
		AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH: -1,
 | 
			
		||||
		TAGS_GENERATION_PROMPT_TEMPLATE: '',
 | 
			
		||||
		ENABLE_TAGS_GENERATION: true,
 | 
			
		||||
		ENABLE_SEARCH_QUERY_GENERATION: true,
 | 
			
		||||
@ -138,11 +140,42 @@
 | 
			
		||||
					</Tooltip>
 | 
			
		||||
				</div>
 | 
			
		||||
 | 
			
		||||
				<hr class=" dark:border-gray-850 my-3" />
 | 
			
		||||
				<hr class=" border-gray-50 dark:border-gray-850 my-3" />
 | 
			
		||||
 | 
			
		||||
				<div class="my-3 flex w-full items-center justify-between">
 | 
			
		||||
					<div class=" self-center text-xs font-medium">
 | 
			
		||||
						{$i18n.t('Enable Tags Generation')}
 | 
			
		||||
						{$i18n.t('Autocomplete Generation')}
 | 
			
		||||
					</div>
 | 
			
		||||
 | 
			
		||||
					<Tooltip content={$i18n.t('Enable autocomplete generation for chat messages')}>
 | 
			
		||||
						<Switch bind:state={taskConfig.ENABLE_AUTOCOMPLETE_GENERATION} />
 | 
			
		||||
					</Tooltip>
 | 
			
		||||
				</div>
 | 
			
		||||
 | 
			
		||||
				{#if taskConfig.ENABLE_AUTOCOMPLETE_GENERATION}
 | 
			
		||||
					<div class="mt-3">
 | 
			
		||||
						<div class=" mb-2.5 text-xs font-medium">
 | 
			
		||||
							{$i18n.t('Autocomplete Generation Input Max Length')}
 | 
			
		||||
						</div>
 | 
			
		||||
 | 
			
		||||
						<Tooltip
 | 
			
		||||
							content={$i18n.t('Character limit for autocomplete generation input')}
 | 
			
		||||
							placement="top-start"
 | 
			
		||||
						>
 | 
			
		||||
							<input
 | 
			
		||||
								class="w-full outline-none"
 | 
			
		||||
								bind:value={taskConfig.AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH}
 | 
			
		||||
								placeholder={$i18n.t('-1 for no limit, or a positive integer for a specific limit')}
 | 
			
		||||
							/>
 | 
			
		||||
						</Tooltip>
 | 
			
		||||
					</div>
 | 
			
		||||
				{/if}
 | 
			
		||||
 | 
			
		||||
				<hr class=" border-gray-50 dark:border-gray-850 my-3" />
 | 
			
		||||
 | 
			
		||||
				<div class="my-3 flex w-full items-center justify-between">
 | 
			
		||||
					<div class=" self-center text-xs font-medium">
 | 
			
		||||
						{$i18n.t('Tags Generation')}
 | 
			
		||||
					</div>
 | 
			
		||||
 | 
			
		||||
					<Switch bind:state={taskConfig.ENABLE_TAGS_GENERATION} />
 | 
			
		||||
@ -166,11 +199,11 @@
 | 
			
		||||
					</div>
 | 
			
		||||
				{/if}
 | 
			
		||||
 | 
			
		||||
				<hr class=" dark:border-gray-850 my-3" />
 | 
			
		||||
				<hr class=" border-gray-50 dark:border-gray-850 my-3" />
 | 
			
		||||
 | 
			
		||||
				<div class="my-3 flex w-full items-center justify-between">
 | 
			
		||||
					<div class=" self-center text-xs font-medium">
 | 
			
		||||
						{$i18n.t('Enable Retrieval Query Generation')}
 | 
			
		||||
						{$i18n.t('Retrieval Query Generation')}
 | 
			
		||||
					</div>
 | 
			
		||||
 | 
			
		||||
					<Switch bind:state={taskConfig.ENABLE_RETRIEVAL_QUERY_GENERATION} />
 | 
			
		||||
@ -178,7 +211,7 @@
 | 
			
		||||
 | 
			
		||||
				<div class="my-3 flex w-full items-center justify-between">
 | 
			
		||||
					<div class=" self-center text-xs font-medium">
 | 
			
		||||
						{$i18n.t('Enable Web Search Query Generation')}
 | 
			
		||||
						{$i18n.t('Web Search Query Generation')}
 | 
			
		||||
					</div>
 | 
			
		||||
 | 
			
		||||
					<Switch bind:state={taskConfig.ENABLE_SEARCH_QUERY_GENERATION} />
 | 
			
		||||
@ -201,7 +234,7 @@
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
 | 
			
		||||
			<hr class=" dark:border-gray-850 my-3" />
 | 
			
		||||
			<hr class=" border-gray-50 dark:border-gray-850 my-3" />
 | 
			
		||||
 | 
			
		||||
			<div class=" space-y-3 {banners.length > 0 ? ' mb-3' : ''}">
 | 
			
		||||
				<div class="flex w-full justify-between">
 | 
			
		||||
 | 
			
		||||
@ -612,12 +612,11 @@
 | 
			
		||||
															: null
 | 
			
		||||
													).catch((error) => {
 | 
			
		||||
														console.log(error);
 | 
			
		||||
														toast.error(error);
 | 
			
		||||
 | 
			
		||||
														return null;
 | 
			
		||||
													});
 | 
			
		||||
 | 
			
		||||
													console.log(res);
 | 
			
		||||
 | 
			
		||||
													return res;
 | 
			
		||||
												}}
 | 
			
		||||
												on:keydown={async (e) => {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user