|
@@ -63,8 +63,8 @@ from open_webui.config import (
|
|
|
MODEL_FILTER_LIST,
|
|
|
OAUTH_MERGE_ACCOUNTS_BY_EMAIL,
|
|
|
OAUTH_PROVIDERS,
|
|
|
+ ENABLE_SEARCH_QUERY,
|
|
|
SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE,
|
|
|
- SEARCH_QUERY_PROMPT_LENGTH_THRESHOLD,
|
|
|
STATIC_DIR,
|
|
|
TASK_MODEL,
|
|
|
TASK_MODEL_EXTERNAL,
|
|
@@ -199,9 +199,7 @@ app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE = TITLE_GENERATION_PROMPT_TEMP
|
|
|
app.state.config.SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE = (
|
|
|
SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE
|
|
|
)
|
|
|
-app.state.config.SEARCH_QUERY_PROMPT_LENGTH_THRESHOLD = (
|
|
|
- SEARCH_QUERY_PROMPT_LENGTH_THRESHOLD
|
|
|
-)
|
|
|
+app.state.config.ENABLE_SEARCH_QUERY = ENABLE_SEARCH_QUERY
|
|
|
app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE = (
|
|
|
TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE
|
|
|
)
|
|
@@ -397,8 +395,13 @@ async def chat_completion_tools_handler(
|
|
|
specs = [tool["spec"] for tool in tools.values()]
|
|
|
tools_specs = json.dumps(specs)
|
|
|
|
|
|
+ if app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE != "":
|
|
|
+ template = app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE
|
|
|
+ else:
|
|
|
+ template = """Available Tools: {{TOOLS}}\nReturn an empty string if no tools match the query. If a function tool matches, construct and return a JSON object in the format {\"name\": \"functionName\", \"parameters\": {\"requiredFunctionParamKey\": \"requiredFunctionParamValue\"}} using the appropriate tool and its parameters. Only return the object and limit the response to the JSON object without additional text."""
|
|
|
+
|
|
|
tools_function_calling_prompt = tools_function_calling_generation_template(
|
|
|
- app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE, tools_specs
|
|
|
+ template, tools_specs
|
|
|
)
|
|
|
log.info(f"{tools_function_calling_prompt=}")
|
|
|
payload = get_tools_function_calling_payload(
|
|
@@ -1312,8 +1315,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_SEARCH_QUERY": app.state.config.ENABLE_SEARCH_QUERY,
|
|
|
"SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE": app.state.config.SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE,
|
|
|
- "SEARCH_QUERY_PROMPT_LENGTH_THRESHOLD": app.state.config.SEARCH_QUERY_PROMPT_LENGTH_THRESHOLD,
|
|
|
"TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE": app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE,
|
|
|
}
|
|
|
|
|
@@ -1323,7 +1326,7 @@ class TaskConfigForm(BaseModel):
|
|
|
TASK_MODEL_EXTERNAL: Optional[str]
|
|
|
TITLE_GENERATION_PROMPT_TEMPLATE: str
|
|
|
SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE: str
|
|
|
- SEARCH_QUERY_PROMPT_LENGTH_THRESHOLD: int
|
|
|
+ ENABLE_SEARCH_QUERY: bool
|
|
|
TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE: str
|
|
|
|
|
|
|
|
@@ -1337,9 +1340,7 @@ async def update_task_config(form_data: TaskConfigForm, user=Depends(get_admin_u
|
|
|
app.state.config.SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE = (
|
|
|
form_data.SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE
|
|
|
)
|
|
|
- app.state.config.SEARCH_QUERY_PROMPT_LENGTH_THRESHOLD = (
|
|
|
- form_data.SEARCH_QUERY_PROMPT_LENGTH_THRESHOLD
|
|
|
- )
|
|
|
+ app.state.config.ENABLE_SEARCH_QUERY = form_data.ENABLE_SEARCH_QUERY
|
|
|
app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE = (
|
|
|
form_data.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE
|
|
|
)
|
|
@@ -1349,7 +1350,7 @@ async def update_task_config(form_data: TaskConfigForm, user=Depends(get_admin_u
|
|
|
"TASK_MODEL_EXTERNAL": app.state.config.TASK_MODEL_EXTERNAL,
|
|
|
"TITLE_GENERATION_PROMPT_TEMPLATE": app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE,
|
|
|
"SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE": app.state.config.SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE,
|
|
|
- "SEARCH_QUERY_PROMPT_LENGTH_THRESHOLD": app.state.config.SEARCH_QUERY_PROMPT_LENGTH_THRESHOLD,
|
|
|
+ "ENABLE_SEARCH_QUERY": app.state.config.ENABLE_SEARCH_QUERY,
|
|
|
"TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE": app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE,
|
|
|
}
|
|
|
|
|
@@ -1371,7 +1372,20 @@ async def generate_title(form_data: dict, user=Depends(get_verified_user)):
|
|
|
|
|
|
print(model_id)
|
|
|
|
|
|
- template = app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE
|
|
|
+ if app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE != "":
|
|
|
+ template = app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE
|
|
|
+ else:
|
|
|
+ template = """Create a concise, 3-5 word title with an emoji as a title for the prompt in the given language. Suitable Emojis for the summary can be used to enhance understanding but avoid quotation marks or special formatting. RESPOND ONLY WITH THE TITLE TEXT.
|
|
|
+
|
|
|
+Examples of titles:
|
|
|
+📉 Stock Market Trends
|
|
|
+🍪 Perfect Chocolate Chip Recipe
|
|
|
+Evolution of Music Streaming
|
|
|
+Remote Work Productivity Tips
|
|
|
+Artificial Intelligence in Healthcare
|
|
|
+🎮 Video Game Development Insights
|
|
|
+
|
|
|
+Prompt: {{prompt:middletruncate:8000}}"""
|
|
|
|
|
|
content = title_generation_template(
|
|
|
template,
|
|
@@ -1416,11 +1430,10 @@ async def generate_title(form_data: dict, user=Depends(get_verified_user)):
|
|
|
@app.post("/api/task/query/completions")
|
|
|
async def generate_search_query(form_data: dict, user=Depends(get_verified_user)):
|
|
|
print("generate_search_query")
|
|
|
-
|
|
|
- if len(form_data["prompt"]) < app.state.config.SEARCH_QUERY_PROMPT_LENGTH_THRESHOLD:
|
|
|
+ if not app.state.config.ENABLE_SEARCH_QUERY:
|
|
|
raise HTTPException(
|
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
|
- detail=f"Skip search query generation for short prompts (< {app.state.config.SEARCH_QUERY_PROMPT_LENGTH_THRESHOLD} characters)",
|
|
|
+ detail=f"Search query generation is disabled",
|
|
|
)
|
|
|
|
|
|
model_id = form_data["model"]
|
|
@@ -1436,12 +1449,22 @@ async def generate_search_query(form_data: dict, user=Depends(get_verified_user)
|
|
|
|
|
|
print(model_id)
|
|
|
|
|
|
- template = app.state.config.SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE
|
|
|
+ if app.state.config.SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE != "":
|
|
|
+ template = app.state.config.SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE
|
|
|
+ else:
|
|
|
+ template = """You are tasked with assessing the need for a web search based on the current question and the context provided by the previous interactions. If the question requires a web search, generate an appropriate query for a Google search and respond with only the query. If the question can be answered without a web search or does not require further information, return an empty string. Today's date is {{CURRENT_DATE}}.
|
|
|
+
|
|
|
+Interaction History:
|
|
|
+{{MESSAGES:END:6}}
|
|
|
+Current Question:
|
|
|
+{{prompt:end:4000}}"""
|
|
|
|
|
|
content = search_query_generation_template(
|
|
|
- template, form_data["prompt"], {"name": user.name}
|
|
|
+ template, form_data["messages"], {"name": user.name}
|
|
|
)
|
|
|
|
|
|
+ print("content", content)
|
|
|
+
|
|
|
payload = {
|
|
|
"model": model_id,
|
|
|
"messages": [{"role": "user", "content": content}],
|