diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index 94f3cefe8..e5b0cfcc5 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -1342,6 +1342,12 @@ CODE_INTERPRETER_ENGINE = PersistentConfig( os.environ.get("CODE_INTERPRETER_ENGINE", "pyodide"), ) +CODE_INTERPRETER_PROMPT_TEMPLATE = PersistentConfig( + "CODE_INTERPRETER_PROMPT_TEMPLATE", + "code_interpreter.prompt_template", + os.environ.get("CODE_INTERPRETER_PROMPT_TEMPLATE", ""), +) + CODE_INTERPRETER_JUPYTER_URL = PersistentConfig( "CODE_INTERPRETER_JUPYTER_URL", "code_interpreter.jupyter.url", diff --git a/backend/open_webui/main.py b/backend/open_webui/main.py index f1449c27f..f8f6bf95c 100644 --- a/backend/open_webui/main.py +++ b/backend/open_webui/main.py @@ -100,6 +100,7 @@ from open_webui.config import ( # Code Interpreter ENABLE_CODE_INTERPRETER, CODE_INTERPRETER_ENGINE, + CODE_INTERPRETER_PROMPT_TEMPLATE, CODE_INTERPRETER_JUPYTER_URL, CODE_INTERPRETER_JUPYTER_AUTH, CODE_INTERPRETER_JUPYTER_AUTH_TOKEN, @@ -591,6 +592,7 @@ app.state.EMBEDDING_FUNCTION = get_embedding_function( app.state.config.ENABLE_CODE_INTERPRETER = ENABLE_CODE_INTERPRETER app.state.config.CODE_INTERPRETER_ENGINE = CODE_INTERPRETER_ENGINE +app.state.config.CODE_INTERPRETER_PROMPT_TEMPLATE = CODE_INTERPRETER_PROMPT_TEMPLATE app.state.config.CODE_INTERPRETER_JUPYTER_URL = CODE_INTERPRETER_JUPYTER_URL app.state.config.CODE_INTERPRETER_JUPYTER_AUTH = CODE_INTERPRETER_JUPYTER_AUTH diff --git a/backend/open_webui/routers/configs.py b/backend/open_webui/routers/configs.py index 4fe7dbf4d..2700a941e 100644 --- a/backend/open_webui/routers/configs.py +++ b/backend/open_webui/routers/configs.py @@ -42,6 +42,7 @@ async def export_config(user=Depends(get_admin_user)): class CodeInterpreterConfigForm(BaseModel): ENABLE_CODE_INTERPRETER: bool CODE_INTERPRETER_ENGINE: str + CODE_INTERPRETER_PROMPT_TEMPLATE: Optional[str] CODE_INTERPRETER_JUPYTER_URL: Optional[str] CODE_INTERPRETER_JUPYTER_AUTH: Optional[str] CODE_INTERPRETER_JUPYTER_AUTH_TOKEN: Optional[str] @@ -53,6 +54,7 @@ async def get_code_interpreter_config(request: Request, user=Depends(get_admin_u return { "ENABLE_CODE_INTERPRETER": request.app.state.config.ENABLE_CODE_INTERPRETER, "CODE_INTERPRETER_ENGINE": request.app.state.config.CODE_INTERPRETER_ENGINE, + "CODE_INTERPRETER_PROMPT_TEMPLATE": request.app.state.config.CODE_INTERPRETER_PROMPT_TEMPLATE, "CODE_INTERPRETER_JUPYTER_URL": request.app.state.config.CODE_INTERPRETER_JUPYTER_URL, "CODE_INTERPRETER_JUPYTER_AUTH": request.app.state.config.CODE_INTERPRETER_JUPYTER_AUTH, "CODE_INTERPRETER_JUPYTER_AUTH_TOKEN": request.app.state.config.CODE_INTERPRETER_JUPYTER_AUTH_TOKEN, @@ -66,6 +68,10 @@ async def set_code_interpreter_config( ): request.app.state.config.ENABLE_CODE_INTERPRETER = form_data.ENABLE_CODE_INTERPRETER request.app.state.config.CODE_INTERPRETER_ENGINE = form_data.CODE_INTERPRETER_ENGINE + request.app.state.config.CODE_INTERPRETER_PROMPT_TEMPLATE = ( + form_data.CODE_INTERPRETER_PROMPT_TEMPLATE + ) + request.app.state.config.CODE_INTERPRETER_JUPYTER_URL = ( form_data.CODE_INTERPRETER_JUPYTER_URL ) @@ -84,6 +90,7 @@ async def set_code_interpreter_config( return { "ENABLE_CODE_INTERPRETER": request.app.state.config.ENABLE_CODE_INTERPRETER, "CODE_INTERPRETER_ENGINE": request.app.state.config.CODE_INTERPRETER_ENGINE, + "CODE_INTERPRETER_PROMPT_TEMPLATE": request.app.state.config.CODE_INTERPRETER_PROMPT_TEMPLATE, "CODE_INTERPRETER_JUPYTER_URL": request.app.state.config.CODE_INTERPRETER_JUPYTER_URL, "CODE_INTERPRETER_JUPYTER_AUTH": request.app.state.config.CODE_INTERPRETER_JUPYTER_AUTH, "CODE_INTERPRETER_JUPYTER_AUTH_TOKEN": request.app.state.config.CODE_INTERPRETER_JUPYTER_AUTH_TOKEN, diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index dddf5235f..5de8f8193 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -690,7 +690,12 @@ async def process_chat_payload(request, form_data, metadata, user, model): if "code_interpreter" in features and features["code_interpreter"]: form_data["messages"] = add_or_update_user_message( - DEFAULT_CODE_INTERPRETER_PROMPT, form_data["messages"] + ( + request.app.state.config.CODE_INTERPRETER_PROMPT_TEMPLATE + if request.app.state.config.CODE_INTERPRETER_PROMPT_TEMPLATE != "" + else DEFAULT_CODE_INTERPRETER_PROMPT + ), + form_data["messages"], ) try: diff --git a/src/lib/components/admin/Settings/CodeInterpreter.svelte b/src/lib/components/admin/Settings/CodeInterpreter.svelte index 22ba2ae06..d05e6ef07 100644 --- a/src/lib/components/admin/Settings/CodeInterpreter.svelte +++ b/src/lib/components/admin/Settings/CodeInterpreter.svelte @@ -1,13 +1,14 @@