mirror of
https://github.com/open-webui/open-webui.git
synced 2026-05-06 19:08:59 -05:00
[GH-ISSUE #15225] issue: Tool Calls do not re-trigger inlet functions of Filter-Functions #33031
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Moicky on GitHub (Jun 22, 2025).
Original GitHub issue: https://github.com/open-webui/open-webui/issues/15225
Originally assigned to: @jackthgu on GitHub.
Check Existing Issues
Installation Method
Docker
Open WebUI Version
0.6.15
Ollama Version (if applicable)
0.6.8
Operating System
Debian GNU/Linux 12 (bookworm)
Browser (if applicable)
Brave Browser v1.78.94
Confirmation
README.md.Expected Behavior
Tool-Calls which under-the-hood result in multiple OpenAI calls, should trigger the
inletfunction on each request.This currently is not the case, which messes up my usage-tracking Function
Actual Behavior
External API Calls after
tool_callsshould re-trigger eachinletfunction on custom Filter Functions.Steps to Reproduce
open_router.pyfunction from here: https://github.com/Moicky/open-webui-functions)This results in OpenWebUI calling the
inletfunction on the custom Filter Function only once, but still results in 3 API Calls to OpenRouter for Chat Completions / Tool CallsLogs & Screenshots
Logs from the docker-container for the Inlet/Outlet/Stream functions of the Filter:
openwebui_1 | 2025-06-22 23:35:28.876 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 2a02:8389:24c0:3500:a869:1dc9:6dc9:ab2b:0 - "GET /ollama/api/version HTTP/1.1" 200 - {}
openwebui_1 | 2025-06-22 23:35:28.921 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 2a02:8389:24c0:3500:a869:1dc9:6dc9:ab2b:0 - "GET /api/v1/users/user/settings HTTP/1.1" 200 - {}
openwebui_1 | 2025-06-22 23:35:39.086 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 2a02:8389:24c0:3500:a869:1dc9:6dc9:ab2b:0 - "POST /api/v1/chats/new HTTP/1.1" 200 - {}
openwebui_1 | 2025-06-22 23:35:39.179 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 2a02:8389:24c0:3500:a869:1dc9:6dc9:ab2b:0 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 - {}
openwebui_1 | 2025-06-22 23:35:39.309 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 2a02:8389:24c0:3500:a869:1dc9:6dc9:ab2b:0 - "POST /api/v1/chats/423635ae-5d9e-40db-892f-e9344a9dd593 HTTP/1.1" 200 - {}
openwebui_1 | 2025-06-22 23:35:39.398 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 2a02:8389:24c0:3500:a869:1dc9:6dc9:ab2b:0 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 - {}
openwebui_1 | 2025-06-22 23:35:39.503 | INFO | open_webui.utils.plugin:install_frontmatter_requirements:241 - No requirements found in frontmatter. - {}
openwebui_1 | 2025-06-22 23:35:39.538 | INFO | open_webui.utils.plugin:load_function_module_by_id:147 - Loaded module: function_open_router - {}
openwebui_1 | CALLING INLET
openwebui_1 | 2025-06-22 23:35:40.031 | INFO | open_webui.routers.openai:get_all_models:391 - get_all_models() - {}
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | 2025-06-22 23:35:41.072 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 2a02:8389:24c0:3500:a869:1dc9:6dc9:ab2b:0 - "POST /api/chat/completions HTTP/1.1" 200 - {}
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | 2025-06-22 23:35:41.188 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 2a02:8389:24c0:3500:a869:1dc9:6dc9:ab2b:0 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 - {}
openwebui_1 | CALLING STREAM
openwebui_1 | Executing tool function tool_resolve_library_id_post with params
openwebui_1 | 2025-06-22 23:35:41.652 | INFO | open_webui.routers.openai:get_all_models:391 - get_all_models() - {}
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | Executing tool function tool_get_library_docs_post with params
openwebui_1 | 2025-06-22 23:35:43.410 | INFO | open_webui.routers.openai:get_all_models:391 - get_all_models() - {}
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | CALLING STREAM
openwebui_1 | 2025-06-22 23:35:51.087 | INFO | open_webui.routers.openai:get_all_models:391 - get_all_models() - {}
openwebui_1 | CALLING OUTLET
openwebui_1 | {'prompt_tokens': 14518, 'completion_tokens': 204, 'total_tokens': 14722, 'prompt_tokens_details'
openwebui_1 | Setting cost: 0.0
openwebui_1 | 2025-06-22 23:35:51.586 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 2a02:8389:24c0:3500:a869:1dc9:6dc9:ab2b:0 - "POST /api/chat/completed HTTP/1.1" 200 - {}
openwebui_1 | 2025-06-22 23:35:51.761 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 2a02:8389:24c0:3500:a869:1dc9:6dc9:ab2b:0 - "POST /api/v1/chats/423635ae-5d9e-40db-892f-e9344a9dd593 HTTP/1.1" 200 - {}
Additional Information
No response
@tjbck commented on GitHub (Jun 24, 2025):
Intended behaviour here, filter inlet will only be invoked when the chat is initiated. I'd suggest you utilise the
streamhook that's been introduced withf4b92868c4.@Moicky commented on GitHub (Jun 24, 2025):
Hey there,
is it possible to modify the payload which is being sent to the OpenAI endpoint (e.g. the /chat/completion) using the stream function? I didn't see a way to do that as it is only called on incoming packages and I need to modify the request that is being sent.