[GH-ISSUE #24471] issue: How to properly display Tool Calls / Tasks in Open Webui when using Pipelines #74913

Closed
opened 2026-05-13 07:46:53 -05:00 by GiteaMirror · 1 comment
Owner

Originally created by @jayteaftw on GitHub (May 8, 2026).
Original GitHub issue: https://github.com/open-webui/open-webui/issues/24471

Check Existing Issues

  • I have searched for any existing and/or related issues.
  • I have searched for any existing and/or related discussions.
  • I have also searched in the CLOSED issues AND CLOSED discussions and found no related items (your issue might already be addressed on the development branch!).
  • I am using the latest version of Open WebUI.

Installation Method

Docker

Open WebUI Version

v0.9.2

Ollama Version (if applicable)

No response

Operating System

Mac OS

Browser (if applicable)

No response

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

When returning a request like this

def pipe(self, user_message, model_id, messages, body):
        yield {"choices": [{"delta": {"role": "assistant", "content": "The weather is 22°C. "}, "finish_reason": None}]}

        # Render tool execution WITHOUT using delta.tool_calls
        call_id = "call_123"
        name = "get_weather_test_v2"
        arguments = {"location": "SF"}
        result = {"temp_c": "22"}

        details_block = (
            f'\n<details type="tool_calls" done="false" '
            f'id="{call_id}" name="{name}" '
            f'arguments="{html.escape(json.dumps(arguments))}">\n'
            f'<summary>Tool Executed</summary>\n'
            f'\n{html.escape(json.dumps(result))}\n'
            f'</details>\n'
        )
        
        yield {"choices": [{"delta": {"content": details_block}, "finish_reason": None}]}
        sleep(2)
        details_block = (
            f'\n<details type="tool_calls" done="true" '
            f'id="{call_id}" name="{name}" '
            f'arguments="{html.escape(json.dumps(arguments))}">\n'
            f'<summary>Tool Executed</summary>\n'
            f'\n{html.escape(json.dumps(result))}\n'
            f'</details>\n'
        )
        yield {"choices": [{"delta": {"content": details_block}, "finish_reason": None}]}
        yield {"choices": [{"delta": {"content": "Done."}, "finish_reason": None}]}
        yield {"choices": [{"delta": {}, "finish_reason": "stop"}]}

I expect the tool call to run for 2 seconds then complete. I also expect the output to be present

Actual Behavior

Creates two tool calls that dont have any output in them

Image

Steps to Reproduce

Create a pipeline

"""
title: Replay Pipeline
author: open-webui
date: 2024-05-30
version: 1.0
license: MIT
description: A pipeline for retrieving relevant information from a NIWC knowledge base.
"""

from typing import List, Union, Generator, Iterator
from pydantic import BaseModel
from starlette.requests import Request
import json
import html
from time import sleep

class Pipeline:
    class Valves(BaseModel):
        pass

    def __init__(self):
        self.valves = self.Valves()


    def pipe(self, user_message, model_id, messages, body):
        yield {"choices": [{"delta": {"role": "assistant", "content": "The weather is 22°C. "}, "finish_reason": None}]}

        # Render tool execution WITHOUT using delta.tool_calls
        call_id = "call_123"
        name = "get_weather_test_v2"
        arguments = {"location": "SF"}
        result = {"temp_c": "22"}

        details_block = (
            f'\n<details type="tool_calls" done="false" '
            f'id="{call_id}" name="{name}" '
            f'arguments="{html.escape(json.dumps(arguments))}">\n'
            f'<summary>Tool Executed</summary>\n'
            f'\n{html.escape(json.dumps(result))}\n'
            f'</details>\n'
        )
        
        yield {"choices": [{"delta": {"content": details_block}, "finish_reason": None}]}
        sleep(2)
        details_block = (
            f'\n<details type="tool_calls" done="true" '
            f'id="{call_id}" name="{name}" '
            f'arguments="{html.escape(json.dumps(arguments))}">\n'
            f'<summary>Tool Executed</summary>\n'
            f'\n{html.escape(json.dumps(result))}\n'
            f'</details>\n'
        )
        yield {"choices": [{"delta": {"content": details_block}, "finish_reason": None}]}
        yield {"choices": [{"delta": {"content": "Done."}, "finish_reason": None}]}
        yield {"choices": [{"delta": {}, "finish_reason": "stop"}]}

Logs & Screenshots

No error message but I would mostly just want to know where in documentation I can find how to properly send tool call / tasks using Pipeline classes. Also are pipelines second class citizen now inside of Open Webui as I feel like there is a lack of support for them now. And if so, what is the recommend way to incorporate 3rd partyAgents / Rag applications into open webui?

Additional Information

No response

Originally created by @jayteaftw on GitHub (May 8, 2026). Original GitHub issue: https://github.com/open-webui/open-webui/issues/24471 ### Check Existing Issues - [x] I have searched for any existing and/or related issues. - [x] I have searched for any existing and/or related discussions. - [x] I have also searched in the CLOSED issues AND CLOSED discussions and found no related items (your issue might already be addressed on the development branch!). - [x] I am using the latest version of Open WebUI. ### Installation Method Docker ### Open WebUI Version v0.9.2 ### Ollama Version (if applicable) _No response_ ### Operating System Mac OS ### Browser (if applicable) _No response_ ### 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 When returning a request like this ``` def pipe(self, user_message, model_id, messages, body): yield {"choices": [{"delta": {"role": "assistant", "content": "The weather is 22°C. "}, "finish_reason": None}]} # Render tool execution WITHOUT using delta.tool_calls call_id = "call_123" name = "get_weather_test_v2" arguments = {"location": "SF"} result = {"temp_c": "22"} details_block = ( f'\n<details type="tool_calls" done="false" ' f'id="{call_id}" name="{name}" ' f'arguments="{html.escape(json.dumps(arguments))}">\n' f'<summary>Tool Executed</summary>\n' f'\n{html.escape(json.dumps(result))}\n' f'</details>\n' ) yield {"choices": [{"delta": {"content": details_block}, "finish_reason": None}]} sleep(2) details_block = ( f'\n<details type="tool_calls" done="true" ' f'id="{call_id}" name="{name}" ' f'arguments="{html.escape(json.dumps(arguments))}">\n' f'<summary>Tool Executed</summary>\n' f'\n{html.escape(json.dumps(result))}\n' f'</details>\n' ) yield {"choices": [{"delta": {"content": details_block}, "finish_reason": None}]} yield {"choices": [{"delta": {"content": "Done."}, "finish_reason": None}]} yield {"choices": [{"delta": {}, "finish_reason": "stop"}]} ``` I expect the tool call to run for 2 seconds then complete. I also expect the output to be present ### Actual Behavior Creates two tool calls that dont have any output in them <img width="666" height="514" alt="Image" src="https://github.com/user-attachments/assets/1652641b-e2b7-4dbd-9068-410d63a1420e" /> ### Steps to Reproduce Create a pipeline ``` """ title: Replay Pipeline author: open-webui date: 2024-05-30 version: 1.0 license: MIT description: A pipeline for retrieving relevant information from a NIWC knowledge base. """ from typing import List, Union, Generator, Iterator from pydantic import BaseModel from starlette.requests import Request import json import html from time import sleep class Pipeline: class Valves(BaseModel): pass def __init__(self): self.valves = self.Valves() def pipe(self, user_message, model_id, messages, body): yield {"choices": [{"delta": {"role": "assistant", "content": "The weather is 22°C. "}, "finish_reason": None}]} # Render tool execution WITHOUT using delta.tool_calls call_id = "call_123" name = "get_weather_test_v2" arguments = {"location": "SF"} result = {"temp_c": "22"} details_block = ( f'\n<details type="tool_calls" done="false" ' f'id="{call_id}" name="{name}" ' f'arguments="{html.escape(json.dumps(arguments))}">\n' f'<summary>Tool Executed</summary>\n' f'\n{html.escape(json.dumps(result))}\n' f'</details>\n' ) yield {"choices": [{"delta": {"content": details_block}, "finish_reason": None}]} sleep(2) details_block = ( f'\n<details type="tool_calls" done="true" ' f'id="{call_id}" name="{name}" ' f'arguments="{html.escape(json.dumps(arguments))}">\n' f'<summary>Tool Executed</summary>\n' f'\n{html.escape(json.dumps(result))}\n' f'</details>\n' ) yield {"choices": [{"delta": {"content": details_block}, "finish_reason": None}]} yield {"choices": [{"delta": {"content": "Done."}, "finish_reason": None}]} yield {"choices": [{"delta": {}, "finish_reason": "stop"}]} ``` ### Logs & Screenshots No error message but I would mostly just want to know where in documentation I can find how to properly send tool call / tasks using Pipeline classes. Also are pipelines second class citizen now inside of Open Webui as I feel like there is a lack of support for them now. And if so, what is the recommend way to incorporate 3rd partyAgents / Rag applications into open webui? ### Additional Information _No response_
GiteaMirror added the bug label 2026-05-13 07:46:53 -05:00
Author
Owner

@owui-terminator[bot] commented on GitHub (May 8, 2026):

🔍 Related Issues Found

I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions:

  1. 🟣 #23957 issue: Tool calling causing a repeat in messages when using pipeline
    This issue is directly about tool calling in pipelines and shows related incorrect UI behavior after emitting tool calls. The reproduction also uses a pipeline generator streaming assistant content plus tool-related output, making it the closest match to the reported pipeline/tool-call rendering problem.
    by jayteaftw · bug

  2. 🟣 #18743 issue: Tool call results intermittently fail to display in UI when result data is large
    This issue reports that tool call results can appear empty or missing in the UI even though the backend executed the tool and sent a result. That matches the current report’s symptom of tool-call blocks appearing without output, especially in the collapsible details view.
    by kjpoccia · bug

  3. 🟣 #21178 bug: Pipes: Broken RAG Access & Inconsistent Task Payloads for Custom Agents Pipe for GPT 5.2
    This issue covers custom pipeline/pipe behavior around task payloads and RAG/tool access in Pipes. While broader than the current report, it is related to pipeline integration quirks and missing/incorrect tool-related behavior in the same subsystem.
    by Soliver84 · bug


💡 If your issue is a duplicate, please close it and add any additional details to the existing issue instead.

This comment was generated automatically. React with 👍 if helpful, 👎 if not.

<!-- gh-comment-id:4409957567 --> @owui-terminator[bot] commented on GitHub (May 8, 2026): <!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#23957](https://github.com/open-webui/open-webui/issues/23957) **issue: Tool calling causing a repeat in messages when using pipeline** *This issue is directly about tool calling in pipelines and shows related incorrect UI behavior after emitting tool calls. The reproduction also uses a pipeline generator streaming assistant content plus tool-related output, making it the closest match to the reported pipeline/tool-call rendering problem.* *by jayteaftw · `bug`* 2. 🟣 [#18743](https://github.com/open-webui/open-webui/issues/18743) **issue: Tool call results intermittently fail to display in UI when result data is large** *This issue reports that tool call results can appear empty or missing in the UI even though the backend executed the tool and sent a result. That matches the current report’s symptom of tool-call blocks appearing without output, especially in the collapsible details view.* *by kjpoccia · `bug`* 3. 🟣 [#21178](https://github.com/open-webui/open-webui/issues/21178) **bug: Pipes: Broken RAG Access & Inconsistent Task Payloads for Custom Agents Pipe for GPT 5.2** *This issue covers custom pipeline/pipe behavior around task payloads and RAG/tool access in Pipes. While broader than the current report, it is related to pipeline integration quirks and missing/incorrect tool-related behavior in the same subsystem.* *by Soliver84 · `bug`* --- 💡 If your issue is a duplicate, please close it and add any additional details to the existing issue instead. *This comment was generated automatically.* React with 👍 if helpful, 👎 if not.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#74913