enh: code interpreter toggle

This commit is contained in:
Timothy Jaeryang Baek
2025-02-03 01:14:38 -08:00
parent ca4b839e6d
commit 95c6d0e78c
8 changed files with 79 additions and 2 deletions

View File

@@ -57,6 +57,7 @@ from open_webui.utils.task import (
from open_webui.utils.misc import (
get_message_list,
add_or_update_system_message,
add_or_update_user_message,
get_last_user_message,
get_last_assistant_message,
prepend_to_first_user_message_content,
@@ -67,7 +68,10 @@ from open_webui.utils.plugin import load_function_module_by_id
from open_webui.tasks import create_task
from open_webui.config import DEFAULT_TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE
from open_webui.config import (
DEFAULT_TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE,
DEFAULT_CODE_INTERPRETER_PROMPT,
)
from open_webui.env import (
SRC_LOG_LEVELS,
GLOBAL_LOG_LEVEL,
@@ -776,6 +780,11 @@ async def process_chat_payload(request, form_data, metadata, user, model):
request, form_data, extra_params, user
)
if "code_interpreter" in features and features["code_interpreter"]:
form_data["messages"] = add_or_update_user_message(
DEFAULT_CODE_INTERPRETER_PROMPT, form_data["messages"]
)
try:
form_data, flags = await chat_completion_filter_functions_handler(
request, form_data, model, extra_params
@@ -1359,7 +1368,7 @@ async def process_chat_response(
and retries < MAX_RETRIES
):
retries += 1
log.debug(f"Retrying code interpreter block: {retries}")
log.debug(f"Attempt count: {retries}")
try:
if content_blocks[-1]["attributes"].get("type") == "code":

View File

@@ -131,6 +131,25 @@ def add_or_update_system_message(content: str, messages: list[dict]):
return messages
def add_or_update_user_message(content: str, messages: list[dict]):
"""
Adds a new user message at the end of the messages list
or updates the existing user message at the end.
:param msg: The message to be added or appended.
:param messages: The list of message dictionaries.
:return: The updated list of message dictionaries.
"""
if messages and messages[-1].get("role") == "user":
messages[-1]["content"] = f"{messages[-1]['content']}\n{content}"
else:
# Insert at the end
messages.append({"role": "user", "content": content})
return messages
def append_or_update_assistant_message(content: str, messages: list[dict]):
"""
Adds a new assistant message at the end of the messages list