[GH-ISSUE #16307] issue: __tools__ in pipe returns owui parameters (__user__, __event_emitter__) in 'callable' when method is async #104853

Closed
opened 2026-05-18 02:38:57 -05:00 by GiteaMirror · 3 comments
Owner

Originally created by @Podden on GitHub (Aug 5, 2025).
Original GitHub issue: https://github.com/open-webui/open-webui/issues/16307

Check Existing Issues

  • I have searched the existing issues and discussions.
  • I am using the latest version of Open WebUI.

Installation Method

Docker

Open WebUI Version

0.6.18

Ollama Version (if applicable)

No response

Operating System

Alpine

Browser (if applicable)

Firefox

Confirmation

  • I have read and followed all instructions in README.md.
  • I am using the latest version of both Open WebUI and Ollama.
  • I have included the browser console logs.
  • I have included the Docker container logs.
  • I have provided every relevant configuration, setting, and environment variable used in my setup.
  • I have clearly listed every relevant configuration, custom setting, environment variable, and command-line option that influences my setup (such as Docker Compose overrides, .env values, browser settings, authentication configurations, etc).
  • I have documented step-by-step reproduction instructions that are precise, sequential, and leave nothing to interpretation. My steps:
  • Start with the initial platform/version/OS and dependencies used,
  • Specify exact install/launch/configure commands,
  • List URLs visited, user input (incl. example values/emails/passwords if needed),
  • Describe all options and toggles enabled or changed,
  • Include any files or environmental changes,
  • Identify the expected and actual result at each stage,
  • Ensure any reasonably skilled user can follow and hit the same issue.

Expected Behavior

I have noticed an inconsistent behaviour when using tools with async methods and using the Optional Arguments of openwebui within a custom pipe:

This is my little mock tool:

class Tools:
    def __init__(self):
        pass

    def get_temperature(self, location: str = "Berlin", __event_emitter__: Callable[[dict], Any] = None, __user__: dict = None) -> str: # type: ignore
        """
        Get current temperature for a location (mock data).
        
        :param location: City name
        :return: Temperature info
        """
        temps = {
            "berlin": "22°C",
            "paris": "25°C", 
            "london": "18°C",
            "tokyo": "28°C"
        }
        temp = temps.get(location.lower(), "20°C")
        return f"Temperature in {location}: {temp}"
This is the __tools___ dict I get when the method in the tool is not async { 'get_temperature': { 'tool_id': 'test_mock_tool', 'callable': < function Tools.get_temperature at 0x7f2fbb1ac860 > , 'spec': { 'name': 'get_temperature', 'description': '\n Get current temperature for a location (mock data).\n\n ', 'parameters': { 'properties': { 'location': { 'default': 'Berlin', 'description': 'City name', 'type': 'string' } }, 'type': 'object' } }, 'metadata': { 'file_handler': False, 'citation': False } } }
This is the __tools___ dict I get when the method in the tool is async { 'get_temperature': { 'tool_id': 'test_mock_tool', 'callable': functools.partial( < bound method Tools.get_temperature of < tool_test_mock_tool.Tools object at 0x7f2fb9324ad0 >> , __event_emitter__ = < function get_event_emitter. < locals > .__event_emitter__ at 0x7f2fbb1747c0 > , __user__ = { 'id': 'xxxxxxxxxxxxxxxxxxxxxxxxx', 'name': 'xxxxx', 'email': 'xxxxxxxxxxxxxx', 'role': 'admin', 'profile_image_url': 'data:image/jpeg;base64,xxxxxxx................', 'last_active_at': xxxxx, 'updated_at': xxxxx, 'created_at': xxxxx, 'api_key': 'sk-xxxxxxxx', 'settings': { 'ui': { 'version': '0.6.18', 'memory': False, 'models': ['xxxxxxxxxxx'], 'notificationEnabled': True, 'notifications': { 'webhook_url': '' }, 'landingPageMode': '', 'imageCompression': True, 'webSearch': None, 'imageCompressionSize': { 'width': '', 'height': '' }, 'widescreenMode': False, 'detectArtifacts': True, 'largeTextAsFile': False, 'userLocation': False, 'ctrlEnterToSend': False, 'voiceInterruption': True, 'showEmojiInCall': False, 'chatBubble': True, 'richTextInput': True, 'copyFormatted': True, 'collapseCodeBlocks': False, 'expandDetails': False, 'autoFollowUps': False, 'insertPromptAsRichText': True, 'hapticFeedback': True, 'params': {}, 'pinnedModels': ['xxxxxxxxxxxxxxxxxxxx'] }, 'functions': { 'valves': { 'add_to_memories_action_button': { 'show_status': True }, 'auto_memory': { 'show_status': True, 'openai_api_url': None, 'model': None, 'api_key': None, 'use_legacy_mode': False, 'messages_to_consider': 4 } } }, 'tools': { 'valves': { 'email_tools': { 'FROM_EMAIL': 'xxxxxxxxxxxxxx', 'PASSWORD': 'xxxxxxxxxxxxxx' }, 'xxxxxxxxxxx': { .................................................a lot of problematic stuff here! } } } }, 'info': { 'location': 'xxxxx, xxxxx (lat, long)' }, 'oauth_sub': None }), 'spec': { 'name': 'get_temperature', 'description': '\n Get current temperature for a location (mock data).\n\n ', 'parameters': { 'properties': { 'location': { 'default': 'Berlin', 'description': 'City name', 'type': 'string' } }, 'type': 'object' } }, 'metadata': { 'file_handler': False, 'citation': False } } }

Why is the callable so blown up when the method is async? Is this a bug?

Actual Behavior

tools dict in my pipe contains event_emitter and user dict when tool methods use these parameters and method is async

Steps to Reproduce

Create a Pipe, use tools in outlet or inlet and print it out.
Use the Pipe together with a tool which has a async method which uses user
Inspect the log, 'callable' contains functools.partial with the complete content of the user dict!

Logs & Screenshots

With Async:

2025-08-05 21:40:59.677 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.221:0 - "GET / HTTP/1.1" 200 - {}
2025-08-05 21:41:05.107 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "POST /api/v1/chats/new HTTP/1.1" 200 - {}
2025-08-05 21:41:05.190 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 - {}
2025-08-05 21:41:05.877 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/folders/ HTTP/1.1" 200 - {}
2025-08-05 21:41:05.893 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "POST /api/v1/chats/e56eb1d3-db34-4cf7-a97d-2e84f737208e HTTP/1.1" 200 - {}
2025-08-05 21:41:05.908 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 - {}
tools: {'echo': {'tool_id': 'test_mock_tool', 'callable': <function Tools.echo at 0x7f2fc6ad8180>, 'spec': {'name': 'echo', 'description': '\n Echo back a message.\n\n ', 'parameters': {'properties': {'message': {'description': 'Message to echo', 'type': 'string'}}, 'required': ['message'], 'type': 'object'}}, 'metadata': {'file_handler': False, 'citation': False}}, 'get_temperature': {'tool_id': 'test_mock_tool', 'callable': functools.partial(<bound method Tools.get_temperature of <tool_test_mock_tool.Tools object at 0x7f2fc608f4d0>>, event_emitter=<function get_event_emitter..event_emitter at 0x7f2fbaf55e40>), 'spec': {'name': 'get_temperature', 'description': '\n Get current temperature for a location (mock data).\n\n ', 'parameters': {'properties': {'location': {'default': 'Berlin', 'description': 'City name', 'type': 'string'}}, 'type': 'object'}}, 'metadata': {'file_handler': False, 'citation': False}}, 'get_time': {'tool_id': 'test_mock_tool', 'callable': <function Tools.get_time at 0x7f2fbafa76a0>, 'spec': {'name': 'get_time', 'description': '\n Get current time (mock).\n\n ', 'parameters': {'properties': {}, 'type': 'object'}}, 'metadata': {'file_handler': False, 'citation': False}}}
body['tools']: [{'type': 'function', 'function': {'name': 'echo', 'description': '\n Echo back a message.\n\n ', 'parameters': {'properties': {'message': {'description': 'Message to echo', 'type': 'string'}}, 'required': ['message'], 'type': 'object'}}}, {'type': 'function', 'function': {'name': 'get_temperature', 'description': '\n Get current temperature for a location (mock data).\n\n ', 'parameters': {'properties': {'location': {'default': 'Berlin', 'description': 'City name', 'type': 'string'}}, 'type': 'object'}}}, {'type': 'function', 'function': {'name': 'get_time', 'description': '\n Get current time (mock).\n\n ', 'parameters': {'properties': {}, 'type': 'object'}}}]

Without:

2025-08-05 21:42:08.715 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/users/user/settings HTTP/1.1" 200 - {}
2025-08-05 21:42:16.584 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "POST /api/v1/chats/new HTTP/1.1" 200 - {}
2025-08-05 21:42:16.670 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 - {}
2025-08-05 21:42:17.379 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/folders/ HTTP/1.1" 200 - {}
2025-08-05 21:42:17.416 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "POST /api/v1/chats/69650e19-d78b-4273-858a-3abd60b28da8 HTTP/1.1" 200 - {}
2025-08-05 21:42:17.432 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 - {}
2025-08-05 21:42:18.106 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/folders/ HTTP/1.1" 200 - {}
tools: {'echo': {'tool_id': 'test_mock_tool', 'callable': <function Tools.echo at 0x7f2fbbd54860>, 'spec': {'name': 'echo', 'description': '\n Echo back a message.\n\n ', 'parameters': {'properties': {'message': {'description': 'Message to echo', 'type': 'string'}}, 'required': ['message'], 'type': 'object'}}, 'metadata': {'file_handler': False, 'citation': False}}, 'get_temperature': {'tool_id': 'test_mock_tool', 'callable': <function Tools.get_temperature at 0x7f2fbbd55d00>, 'spec': {'name': 'get_temperature', 'description': '\n Get current temperature for a location (mock data).\n\n ', 'parameters': {'properties': {'location': {'default': 'Berlin', 'description': 'City name', 'type': 'string'}}, 'type': 'object'}}, 'metadata': {'file_handler': False, 'citation': False}}, 'get_time': {'tool_id': 'test_mock_tool', 'callable': <function Tools.get_time at 0x7f2fbbd565c0>, 'spec': {'name': 'get_time', 'description': '\n Get current time (mock).\n\n ', 'parameters': {'properties': {}, 'type': 'object'}}, 'metadata': {'file_handler': False, 'citation': False}}}
body['tools']: [{'type': 'function', 'function': {'name': 'echo', 'description': '\n Echo back a message.\n\n ', 'parameters': {'properties': {'message': {'description': 'Message to echo', 'type': 'string'}}, 'required': ['message'], 'type': 'object'}}}, {'type': 'function', 'function': {'name': 'get_temperature', 'description': '\n Get current temperature for a location (mock data).\n\n ', 'parameters': {'properties': {'location': {'default': 'Berlin', 'description': 'City name', 'type': 'string'}}, 'type': 'object'}}}, {'type': 'function', 'function': {'name': 'get_time', 'description': '\n Get current time (mock).\n\n ', 'parameters': {'properties': {}, 'type': 'object'}}}]

Additional Information

No response

Originally created by @Podden on GitHub (Aug 5, 2025). Original GitHub issue: https://github.com/open-webui/open-webui/issues/16307 ### Check Existing Issues - [x] I have searched the existing issues and discussions. - [x] I am using the latest version of Open WebUI. ### Installation Method Docker ### Open WebUI Version 0.6.18 ### Ollama Version (if applicable) _No response_ ### Operating System Alpine ### Browser (if applicable) Firefox ### Confirmation - [x] I have read and followed all instructions in `README.md`. - [x] I am using the latest version of **both** Open WebUI and Ollama. - [x] I have included the browser console logs. - [x] I have included the Docker container logs. - [x] I have **provided every relevant configuration, setting, and environment variable used in my setup.** - [x] I have clearly **listed every relevant configuration, custom setting, environment variable, and command-line option that influences my setup** (such as Docker Compose overrides, .env values, browser settings, authentication configurations, etc). - [x] I have documented **step-by-step reproduction instructions that are precise, sequential, and leave nothing to interpretation**. My steps: - Start with the initial platform/version/OS and dependencies used, - Specify exact install/launch/configure commands, - List URLs visited, user input (incl. example values/emails/passwords if needed), - Describe all options and toggles enabled or changed, - Include any files or environmental changes, - Identify the expected and actual result at each stage, - Ensure any reasonably skilled user can follow and hit the same issue. ### Expected Behavior I have noticed an inconsistent behaviour when using tools with async methods and using the Optional Arguments of openwebui within a custom pipe: This is my little mock tool: ``` class Tools: def __init__(self): pass def get_temperature(self, location: str = "Berlin", __event_emitter__: Callable[[dict], Any] = None, __user__: dict = None) -> str: # type: ignore """ Get current temperature for a location (mock data). :param location: City name :return: Temperature info """ temps = { "berlin": "22°C", "paris": "25°C", "london": "18°C", "tokyo": "28°C" } temp = temps.get(location.lower(), "20°C") return f"Temperature in {location}: {temp}" ``` <details> <summary>This is the __tools___ dict I get when the method in the tool is not async</summary> { 'get_temperature': { 'tool_id': 'test_mock_tool', 'callable': < function Tools.get_temperature at 0x7f2fbb1ac860 > , 'spec': { 'name': 'get_temperature', 'description': '\n Get current temperature for a location (mock data).\n\n ', 'parameters': { 'properties': { 'location': { 'default': 'Berlin', 'description': 'City name', 'type': 'string' } }, 'type': 'object' } }, 'metadata': { 'file_handler': False, 'citation': False } } } </details> <details> <summary>This is the __tools___ dict I get when the method in the tool is async</summary> { 'get_temperature': { 'tool_id': 'test_mock_tool', 'callable': functools.partial( < bound method Tools.get_temperature of < tool_test_mock_tool.Tools object at 0x7f2fb9324ad0 >> , __event_emitter__ = < function get_event_emitter. < locals > .__event_emitter__ at 0x7f2fbb1747c0 > , __user__ = { 'id': 'xxxxxxxxxxxxxxxxxxxxxxxxx', 'name': 'xxxxx', 'email': 'xxxxxxxxxxxxxx', 'role': 'admin', 'profile_image_url': 'data:image/jpeg;base64,xxxxxxx................', 'last_active_at': xxxxx, 'updated_at': xxxxx, 'created_at': xxxxx, 'api_key': 'sk-xxxxxxxx', 'settings': { 'ui': { 'version': '0.6.18', 'memory': False, 'models': ['xxxxxxxxxxx'], 'notificationEnabled': True, 'notifications': { 'webhook_url': '' }, 'landingPageMode': '', 'imageCompression': True, 'webSearch': None, 'imageCompressionSize': { 'width': '', 'height': '' }, 'widescreenMode': False, 'detectArtifacts': True, 'largeTextAsFile': False, 'userLocation': False, 'ctrlEnterToSend': False, 'voiceInterruption': True, 'showEmojiInCall': False, 'chatBubble': True, 'richTextInput': True, 'copyFormatted': True, 'collapseCodeBlocks': False, 'expandDetails': False, 'autoFollowUps': False, 'insertPromptAsRichText': True, 'hapticFeedback': True, 'params': {}, 'pinnedModels': ['xxxxxxxxxxxxxxxxxxxx'] }, 'functions': { 'valves': { 'add_to_memories_action_button': { 'show_status': True }, 'auto_memory': { 'show_status': True, 'openai_api_url': None, 'model': None, 'api_key': None, 'use_legacy_mode': False, 'messages_to_consider': 4 } } }, 'tools': { 'valves': { 'email_tools': { 'FROM_EMAIL': 'xxxxxxxxxxxxxx', 'PASSWORD': 'xxxxxxxxxxxxxx' }, 'xxxxxxxxxxx': { .................................................a lot of problematic stuff here! } } } }, 'info': { 'location': 'xxxxx, xxxxx (lat, long)' }, 'oauth_sub': None }), 'spec': { 'name': 'get_temperature', 'description': '\n Get current temperature for a location (mock data).\n\n ', 'parameters': { 'properties': { 'location': { 'default': 'Berlin', 'description': 'City name', 'type': 'string' } }, 'type': 'object' } }, 'metadata': { 'file_handler': False, 'citation': False } } } </details> Why is the callable so blown up when the method is async? Is this a bug? ### Actual Behavior __tools__ dict in my pipe contains __event_emitter__ and __user__ dict when tool methods use these parameters and method is async ### Steps to Reproduce Create a Pipe, use __tools__ in outlet or inlet and print it out. Use the Pipe together with a tool which has a async method which uses __user__ Inspect the log, 'callable' contains functools.partial with the complete content of the __user__ dict! ### Logs & Screenshots With Async: 2025-08-05 21:40:59.677 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.221:0 - "GET / HTTP/1.1" 200 - {} 2025-08-05 21:41:05.107 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "POST /api/v1/chats/new HTTP/1.1" 200 - {} 2025-08-05 21:41:05.190 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 - {} 2025-08-05 21:41:05.877 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/folders/ HTTP/1.1" 200 - {} 2025-08-05 21:41:05.893 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "POST /api/v1/chats/e56eb1d3-db34-4cf7-a97d-2e84f737208e HTTP/1.1" 200 - {} 2025-08-05 21:41:05.908 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 - {} __tools__: {'echo': {'tool_id': 'test_mock_tool', 'callable': <function Tools.echo at 0x7f2fc6ad8180>, 'spec': {'name': 'echo', 'description': '\n Echo back a message.\n\n ', 'parameters': {'properties': {'message': {'description': 'Message to echo', 'type': 'string'}}, 'required': ['message'], 'type': 'object'}}, 'metadata': {'file_handler': False, 'citation': False}}, 'get_temperature': {'tool_id': 'test_mock_tool', **'callable': functools.partial(<bound method Tools.get_temperature of <tool_test_mock_tool.Tools object at 0x7f2fc608f4d0>>, __event_emitter__=<function get_event_emitter.<locals>.__event_emitter__ at 0x7f2fbaf55e40>),** 'spec': {'name': 'get_temperature', 'description': '\n Get current temperature for a location (mock data).\n\n ', 'parameters': {'properties': {'location': {'default': 'Berlin', 'description': 'City name', 'type': 'string'}}, 'type': 'object'}}, 'metadata': {'file_handler': False, 'citation': False}}, 'get_time': {'tool_id': 'test_mock_tool', 'callable': <function Tools.get_time at 0x7f2fbafa76a0>, 'spec': {'name': 'get_time', 'description': '\n Get current time (mock).\n\n ', 'parameters': {'properties': {}, 'type': 'object'}}, 'metadata': {'file_handler': False, 'citation': False}}} body['tools']: [{'type': 'function', 'function': {'name': 'echo', 'description': '\n Echo back a message.\n\n ', 'parameters': {'properties': {'message': {'description': 'Message to echo', 'type': 'string'}}, 'required': ['message'], 'type': 'object'}}}, {'type': 'function', 'function': {'name': 'get_temperature', 'description': '\n Get current temperature for a location (mock data).\n\n ', 'parameters': {'properties': {'location': {'default': 'Berlin', 'description': 'City name', 'type': 'string'}}, 'type': 'object'}}}, {'type': 'function', 'function': {'name': 'get_time', 'description': '\n Get current time (mock).\n\n ', 'parameters': {'properties': {}, 'type': 'object'}}}] Without: 2025-08-05 21:42:08.715 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/users/user/settings HTTP/1.1" 200 - {} 2025-08-05 21:42:16.584 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "POST /api/v1/chats/new HTTP/1.1" 200 - {} 2025-08-05 21:42:16.670 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 - {} 2025-08-05 21:42:17.379 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/folders/ HTTP/1.1" 200 - {} 2025-08-05 21:42:17.416 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "POST /api/v1/chats/69650e19-d78b-4273-858a-3abd60b28da8 HTTP/1.1" 200 - {} 2025-08-05 21:42:17.432 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 - {} 2025-08-05 21:42:18.106 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.105.123:0 - "GET /api/v1/folders/ HTTP/1.1" 200 - {} __tools__: {'echo': {'tool_id': 'test_mock_tool', 'callable': <function Tools.echo at 0x7f2fbbd54860>, 'spec': {'name': 'echo', 'description': '\n Echo back a message.\n\n ', 'parameters': {'properties': {'message': {'description': 'Message to echo', 'type': 'string'}}, 'required': ['message'], 'type': 'object'}}, 'metadata': {'file_handler': False, 'citation': False}}, 'get_temperature': {'tool_id': 'test_mock_tool', **'callable': <function Tools.get_temperature at 0x7f2fbbd55d00>**, 'spec': {'name': 'get_temperature', 'description': '\n Get current temperature for a location (mock data).\n\n ', 'parameters': {'properties': {'location': {'default': 'Berlin', 'description': 'City name', 'type': 'string'}}, 'type': 'object'}}, 'metadata': {'file_handler': False, 'citation': False}}, 'get_time': {'tool_id': 'test_mock_tool', 'callable': <function Tools.get_time at 0x7f2fbbd565c0>, 'spec': {'name': 'get_time', 'description': '\n Get current time (mock).\n\n ', 'parameters': {'properties': {}, 'type': 'object'}}, 'metadata': {'file_handler': False, 'citation': False}}} body['tools']: [{'type': 'function', 'function': {'name': 'echo', 'description': '\n Echo back a message.\n\n ', 'parameters': {'properties': {'message': {'description': 'Message to echo', 'type': 'string'}}, 'required': ['message'], 'type': 'object'}}}, {'type': 'function', 'function': {'name': 'get_temperature', 'description': '\n Get current temperature for a location (mock data).\n\n ', 'parameters': {'properties': {'location': {'default': 'Berlin', 'description': 'City name', 'type': 'string'}}, 'type': 'object'}}}, {'type': 'function', 'function': {'name': 'get_time', 'description': '\n Get current time (mock).\n\n ', 'parameters': {'properties': {}, 'type': 'object'}}}] ### Additional Information _No response_
GiteaMirror added the bug label 2026-05-18 02:38:57 -05:00
Author
Owner

@tjbck commented on GitHub (Aug 6, 2025):

Intended behaviour, these are just how async and sync functions are displayed in python.

<!-- gh-comment-id:3158326816 --> @tjbck commented on GitHub (Aug 6, 2025): Intended behaviour, these are just how async and sync functions are displayed in python.
Author
Owner

@ctwardy commented on GitHub (Aug 19, 2025):

@tjbck Re-check? According to folded items, the async version (only) returns:

  • the entire user object, including profile picture and api_key
  • the functions dict
  • the tools dict including valves, email, password

Pasting a part of that:

, user = { 'id': 'xxxxxxxxxxxxxxxxxxxxxxxxx', 'name': 'xxxxx', 'email': 'xxxxxxxxxxxxxx', 'role': 'admin', 'profile_image_url': 'data:image/jpeg;base64,xxxxxxx................', 'last_active_at': xxxxx, 'updated_at': xxxxx, 'created_at': xxxxx, 'api_key': 'sk-xxxxxxxx', 'settings': { 'ui': { 'version': '0.6.18', 'memory': False, 'models': ['xxxxxxxxxxx'], 'notificationEnabled': True, 'notifications': { 'webhook_url': '' }, 'landingPageMode': '', 'imageCompression': True, 'webSearch': None, 'imageCompressionSize': { 'width': '', 'height': '' }, 'widescreenMode': False, 'detectArtifacts': True, 'largeTextAsFile': False, 'userLocation': False, 'ctrlEnterToSend': False, 'voiceInterruption': True, 'showEmojiInCall': False, 'chatBubble': True, 'richTextInput': True, 'copyFormatted': True, 'collapseCodeBlocks': False, 'expandDetails': False, 'autoFollowUps': False, 'insertPromptAsRichText': True, 'hapticFeedback': True, 'params': {}, 'pinnedModels': ['xxxxxxxxxxxxxxxxxxxx'] }, 'functions': { 'valves': { 'add_to_memories_action_button': { 'show_status': True }, 'auto_memory': { 'show_status': True, 'openai_api_url': None, 'model': None, 'api_key': None, 'use_legacy_mode': False, 'messages_to_consider': 4 } } }, 'tools': { 'valves': { 'email_tools': { 'FROM_EMAIL': 'xxxxxxxxxxxxxx', 'PASSWORD': 'xxxxxxxxxxxxxx' }, 'xxxxxxxxxxx': { .................................................a lot of problematic stuff here! } } }

<!-- gh-comment-id:3202362148 --> @ctwardy commented on GitHub (Aug 19, 2025): @tjbck Re-check? According to folded items, the async version (only) returns: - the entire __user__ object, including profile picture and api_key - the functions dict - the tools dict including valves, email, password Pasting a part of that: > , __user__ = { 'id': 'xxxxxxxxxxxxxxxxxxxxxxxxx', 'name': 'xxxxx', 'email': 'xxxxxxxxxxxxxx', 'role': 'admin', 'profile_image_url': '**data:image/jpeg;base64,xxxxxxx................**', 'last_active_at': xxxxx, 'updated_at': xxxxx, 'created_at': xxxxx, '**api_key': 'sk-xxxxxxxx'**, 'settings': { 'ui': { 'version': '0.6.18', 'memory': False, 'models': ['xxxxxxxxxxx'], 'notificationEnabled': True, 'notifications': { 'webhook_url': '' }, 'landingPageMode': '', 'imageCompression': True, 'webSearch': None, 'imageCompressionSize': { 'width': '', 'height': '' }, 'widescreenMode': False, 'detectArtifacts': True, 'largeTextAsFile': False, 'userLocation': False, 'ctrlEnterToSend': False, 'voiceInterruption': True, 'showEmojiInCall': False, 'chatBubble': True, 'richTextInput': True, 'copyFormatted': True, 'collapseCodeBlocks': False, 'expandDetails': False, 'autoFollowUps': False, 'insertPromptAsRichText': True, 'hapticFeedback': True, 'params': {}, 'pinnedModels': ['xxxxxxxxxxxxxxxxxxxx'] }, '**functions**': { 'valves': { 'add_to_memories_action_button': { 'show_status': True }, 'auto_memory': { 'show_status': True, 'openai_api_url': None, 'model': None, 'api_key': None, 'use_legacy_mode': False, 'messages_to_consider': 4 } } }, '**tools**': { 'valves': { 'email_tools': { **'FROM_EMAIL': 'xxxxxxxxxxxxxx', 'PASSWORD': 'xxxxxxxxxxxxxx'** }, 'xxxxxxxxxxx': { ................................................._a lot of problematic stuff here!_ } } }
Author
Owner

@Podden commented on GitHub (Sep 10, 2025):

As far as I understood, this is just what the pipe gets and IT has to decide which data is send to a potential llm provider. So you get the complete infos in your pipe and need to do some kind or processing before sending a request to a llm provider (obviously, because openwebui format differs from llm provider tool format of course.

<!-- gh-comment-id:3276428110 --> @Podden commented on GitHub (Sep 10, 2025): As far as I understood, this is just what the pipe gets and IT has to decide which data is send to a potential llm provider. So you get the complete infos in your pipe and need to do some kind or processing before sending a request to a llm provider (obviously, because openwebui format differs from llm provider tool format of course.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#104853