[PR #1401] [MERGED] docs: correct the pipe and action pages against functions.py and actions.py #1366

Closed
opened 2026-10-18 14:19:10 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/open-webui/docs/pull/1401
Author: @silentoplayz
Created: 9/18/2026
Status: ✅ Merged
Merged: 9/18/2026
Merged by: @Classic298

Base: main ← Head: docs/pipe-action-functions


📝 Commits (1)

  • 2dc9575 docs: correct the pipe and action pages against functions.py and actions.py

📊 Changes

2 files changed (+48 additions, -35 deletions)

View changed files

📝 docs/features/extensibility/plugin/functions/action.mdx (+35 -28)
📝 docs/features/extensibility/plugin/functions/pipe.mdx (+13 -7)

📄 Description

Summary

I compared the Pipe and Action pages with functions.py, utils/actions.py, utils/plugin.py and utils/models.py on dev.

Action page:

  • The multi-action example declared actions and action() at module level. The loader only reads actions off the Action instance, so the example is now a class with actions as a class attribute, and the page says a module-level list is never read.
  • Buttons appear in the toolbar beneath the message, not above it.
  • The page said actions can integrate with the task system and process uploaded files. An action runs inline inside the button's HTTP request with no task hook, and the payload carries no attachments, so both sections now say so.
  • __id__ is the sub-action id alone for a sub-action, __user__ is a plain dict with valves when UserValves exists, body.messages entries also carry info and sources, an escaping exception becomes an HTTP 400 with a toast, and actions are gated on is_active, model access, chat ownership and ENABLE_PLUGINS.

Pipe page:

  • pipe() now lists every reserved argument it can declare, notes that the two event callables are None for plain API calls, and documents what each return type does on the streaming and non-streaming paths.
  • Manifold rules the page omitted: pipes may be a list or an async function, the model id is <function id>.<sub id> split on the first dot, a class name attribute prefixes every sub-model name, a raising pipes() contributes no models, a malformed entry skips the function, and the function id must be a Python identifier and is lowercased.
  • UserValves and the per-request reload of admin valves were missing. The FAQ now says what an escaping exception renders as, and that requirements: frontmatter is installed unless ENABLE_PIP_INSTALL_FRONTMATTER_REQUIREMENTS is off or OFFLINE_MODE is on.
  • "model name" corrected to "model id" where body["model"] is meant.

None.

Checklist

  • I have reviewed the relevant documentation and matched the existing style.
  • This PR meets Open WebUI's contribution standards: it is accurate, relevant to users, narrowly scoped, maintainable, and not promotional content, advertising, lead generation, SEO placement, or a request to list a product, service, provider, integration, gateway, tool, or company primarily for visibility.
  • I understand that PRs that do not meet these standards may be closed without review and will not be merged. Repeated, low-quality, off-topic, promotional, or intentionally misleading submissions may result in the contributor being blocked from future participation in Open WebUI repositories.

Notes for reviewers

Every claim maps to a line on dev: return handling in functions.py (stream and non-stream branches), manifold id construction in get_function_models, get_function_params for the signature filter and UserValves, utils/actions.py for __id__, gating and the exception path, utils/models.py for sub-action names and icons, and routers/functions.py for the id rule.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/open-webui/docs/pull/1401 **Author:** [@silentoplayz](https://github.com/silentoplayz) **Created:** 9/18/2026 **Status:** ✅ Merged **Merged:** 9/18/2026 **Merged by:** [@Classic298](https://github.com/Classic298) **Base:** `main` ← **Head:** `docs/pipe-action-functions` --- ### 📝 Commits (1) - [`2dc9575`](https://github.com/open-webui/docs/commit/2dc9575eff82b978ca62d5442a8c4437b437c076) docs: correct the pipe and action pages against functions.py and actions.py ### 📊 Changes **2 files changed** (+48 additions, -35 deletions) <details> <summary>View changed files</summary> 📝 `docs/features/extensibility/plugin/functions/action.mdx` (+35 -28) 📝 `docs/features/extensibility/plugin/functions/pipe.mdx` (+13 -7) </details> ### 📄 Description ## Summary I compared the Pipe and Action pages with `functions.py`, `utils/actions.py`, `utils/plugin.py` and `utils/models.py` on `dev`. Action page: - The multi-action example declared `actions` and `action()` at module level. The loader only reads `actions` off the `Action` instance, so the example is now a class with `actions` as a class attribute, and the page says a module-level list is never read. - Buttons appear in the toolbar beneath the message, not above it. - The page said actions can integrate with the task system and process uploaded files. An action runs inline inside the button's HTTP request with no task hook, and the payload carries no attachments, so both sections now say so. - `__id__` is the sub-action id alone for a sub-action, `__user__` is a plain dict with `valves` when `UserValves` exists, `body.messages` entries also carry `info` and `sources`, an escaping exception becomes an HTTP 400 with a toast, and actions are gated on `is_active`, model access, chat ownership and `ENABLE_PLUGINS`. Pipe page: - `pipe()` now lists every reserved argument it can declare, notes that the two event callables are `None` for plain API calls, and documents what each return type does on the streaming and non-streaming paths. - Manifold rules the page omitted: `pipes` may be a list or an async function, the model id is `<function id>.<sub id>` split on the first dot, a class `name` attribute prefixes every sub-model name, a raising `pipes()` contributes no models, a malformed entry skips the function, and the function id must be a Python identifier and is lowercased. - `UserValves` and the per-request reload of admin valves were missing. The FAQ now says what an escaping exception renders as, and that `requirements:` frontmatter is installed unless `ENABLE_PIP_INSTALL_FRONTMATTER_REQUIREMENTS` is off or `OFFLINE_MODE` is on. - "model name" corrected to "model id" where `body["model"]` is meant. ## Related issue or discussion None. ## Checklist - [x] I have reviewed the relevant documentation and matched the existing style. - [x] This PR meets Open WebUI's contribution standards: it is accurate, relevant to users, narrowly scoped, maintainable, and not promotional content, advertising, lead generation, SEO placement, or a request to list a product, service, provider, integration, gateway, tool, or company primarily for visibility. - [x] I understand that PRs that do not meet these standards may be closed without review and will not be merged. Repeated, low-quality, off-topic, promotional, or intentionally misleading submissions may result in the contributor being blocked from future participation in Open WebUI repositories. ## Notes for reviewers Every claim maps to a line on `dev`: return handling in `functions.py` (stream and non-stream branches), manifold id construction in `get_function_models`, `get_function_params` for the signature filter and `UserValves`, `utils/actions.py` for `__id__`, gating and the exception path, `utils/models.py` for sub-action names and icons, and `routers/functions.py` for the id rule. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-18 14:19:10 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
open-webui/docs#1366
No description provided.