You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: plugin system with hook-based architecture and two built-in plugins
Add a modular plugin system that extends the pipe via lifecycle hooks,
priority-based dispatch, and plugin-exported valves. Seven hooks cover the
full request lifecycle: on_init, on_models, on_request, on_request_transform,
on_emitter_wrap, on_response_transform, and on_shutdown.
Built-in plugins (real use cases, not toy examples):
- Pipe Stats Dashboard: virtual model exposing a live SSE-powered admin
diagnostics dashboard with tiered data collection, multi-worker Redis
aggregation, tabbed UI, and an extensible command system (stats, health,
config, help). Demonstrates on_models + on_request hooks.
- Think Streaming: live reasoning and tool execution display via
SSE-backed iframe embeds. Wraps the stream emitter to copy thinking
tokens and tool events into a per-session queue, served to the browser
through a dynamically-registered FastAPI endpoint on OWUI's own app.
Demonstrates the on_emitter_wrap + on_response_transform hooks.
Both plugins use the same SSE transport pattern: dynamically registering
API routes on OWUI's FastAPI app with ephemeral key authentication, giving
pipe plugins a real-time data channel to the browser without any external
infrastructure.
Also includes: Nagle-style delta coalescing, context budget guards,
tool executor improvements, streaming pipeline hardening, and test
coverage expansion (3536 tests).
Tests (`tests/`) are **not** linted — patterns like mid-file imports, fixture redefinitions, and assign-to-verify are intentional and would trigger false positives.
155
+
156
+
> **Warning:** Do not use `ruff --fix`. It cannot detect re-exports and will silently remove imports that other modules depend on. Fix issues manually.
Encryption, retention policies, request attribution, and operational hooks your governance program can build on.
72
72
73
+
🔌 **Plugin System**
74
+
Extend the pipe with custom plugins — inject virtual models, intercept requests, transform payloads before OpenRouter, and post-process responses before delivery. Ships with the Pipe Stats Dashboard plugin as a reference implementation. Disabled by default; enable via valves. See [Plugin System Guide](docs/plugin_system.md).
75
+
73
76
---
74
77
75
78
## Quick Start
@@ -133,7 +136,7 @@ That's it. Start talking.
133
136
134
137
## Requirements
135
138
136
-
- Open WebUI 0.7.0+
139
+
- Open WebUI 0.8.0+
137
140
- An [OpenRouter](https://openrouter.ai/) account
138
141
-`WEBUI_SECRET_KEY` configured (required for encrypted credential storage)
Copy file name to clipboardExpand all lines: docs/developer_guide_and_architecture.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -63,7 +63,7 @@ At a high level, a request follows this shape:
63
63
64
64
4.**Tool-call loop (between Responses calls)**
65
65
- When a Responses run completes, the pipe inspects the returned `output` items.
66
-
-`function_call` items are executed locally against the Open WebUI tool registry, converted into `function_call_output` items, appended to the next request’s `input[]`, and the loop continues until no further tool calls are produced or `MAX_FUNCTION_CALL_LOOPS` is reached.
66
+
-`function_call` items are executed locally against the Open WebUI tool registry, converted into `function_call_output` items, appended to the next request’s `input[]`, and the loop continues until no further tool calls are produced or `MAX_FUNCTION_CALL_LOOPS` is reached (at which point the model gets a synthesis turn). Applies only when `TOOL_EXECUTION_MODE="Pipeline"`.
67
67
68
68
5.**Persistence (optional)**
69
69
- Depending on valves, artifacts (reasoning/tool outputs) are persisted to SQL storage (optionally encrypted and/or compressed) and may be cached in Redis in multi-worker configurations.
Copy file name to clipboardExpand all lines: docs/model_catalog_and_routing_intelligence.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -68,7 +68,7 @@ Behavior:
68
68
-`meta.profile_image_url` (model icon as a PNG data URL), and
69
69
-`meta.description` (model description text).
70
70
This behavior is controlled by `UPDATE_MODEL_CAPABILITIES`, `UPDATE_MODEL_IMAGES`, and `UPDATE_MODEL_DESCRIPTIONS`. See: [OpenRouter Integrations & Telemetry](openrouter_integrations_and_telemetry.md).
71
-
- New model access control defaults are set **on insert only**: `NEW_MODEL_ACCESS_CONTROL` determines whether newly inserted OpenRouter overlays are public (`access_control=None`) or private (`access_control={}`), with the `admins` option relying on Open WebUI’s `BYPASS_ADMIN_ACCESS_CONTROL` for admin access.
71
+
- New model access control defaults are set **on insert only**: `NEW_MODEL_ACCESS_CONTROL` determines whether newly inserted OpenRouter overlays are public (wildcard read grant) or private (no access grants), with the `admins` option relying on Open WebUI's `BYPASS_ADMIN_ACCESS_CONTROL` for admin access.
0 commit comments