Add MkDocs documentation portal with Material theme and CI/CD workflow

Co-authored-by: Fu-Jie <33599649+Fu-Jie@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-12-29 10:03:23 +00:00
parent 487bb21d46
commit 3950846fa9
26 changed files with 3254 additions and 0 deletions

73
.github/workflows/deploy.yml vendored Normal file
View File

@@ -0,0 +1,73 @@
# GitHub Actions Workflow for MkDocs Deployment
# This workflow builds and deploys the documentation to GitHub Pages
name: Deploy MkDocs to GitHub Pages
on:
# Trigger on push to main branch
push:
branches:
- main
paths:
- 'docs/**'
- 'mkdocs.yml'
- 'requirements.txt'
- '.github/workflows/deploy.yml'
# Allow manual trigger
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
# Build job
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for git-revision-date plugin
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Build MkDocs site
run: mkdocs build --strict
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: site
# Deployment job
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

186
docs/contributing.md Normal file
View File

@@ -0,0 +1,186 @@
# Contributing Guide
Thank you for your interest in contributing to **OpenWebUI Extras**! We welcome contributions of plugins, prompts, documentation, and more.
---
## 🤝 How to Contribute
### 1. Share Prompts
If you have a useful prompt to share:
1. Browse the `prompts/` directory and find an appropriate category
2. If no suitable category exists, you can create a new folder
3. Create a new `.md` file with your prompt
4. Submit a Pull Request
#### Prompt Format
```markdown
# Prompt Name
Brief description of what this prompt does.
## Use Case
When to use this prompt.
## The Prompt
\```text
Your prompt content here...
\```
## Tips
Any tips for using this prompt effectively.
```
---
### 2. Develop Plugins
If you've developed an OpenWebUI plugin:
#### Plugin Metadata
Ensure your plugin includes complete metadata:
```python
"""
title: Plugin Name
author: Your Name
version: 0.1.0
description: Brief description of what the plugin does
"""
```
#### Directory Structure
Place your plugin in the appropriate directory:
- `plugins/actions/` - Action plugins (buttons below messages)
- `plugins/filters/` - Filter plugins (message processing)
- `plugins/pipes/` - Pipe plugins (custom models)
- `plugins/pipelines/` - Pipeline plugins (complex workflows)
#### Documentation
Please provide documentation for your plugin:
- `README.md` - English documentation
- `README_CN.md` - Chinese documentation (optional but appreciated)
Include:
- Feature description
- Installation steps
- Configuration options
- Usage examples
- Troubleshooting guide
---
### 3. Improve Documentation
Found an error or want to improve the docs?
1. Fork the repository
2. Make your changes in the `docs/` directory
3. Submit a Pull Request
---
## 🛠️ Development Standards
### Code Style
- **Python**: Follow [PEP 8](https://peps.python.org/pep-0008/) guidelines
- **Comments**: Add comments for complex logic
- **Naming**: Use clear, descriptive names
### Testing
Before submitting:
1. Test your plugin locally in OpenWebUI
2. Verify all features work as documented
3. Check for edge cases and error handling
### Commit Messages
Use clear, descriptive commit messages:
```
Add: Smart Mind Map action plugin
Fix: Context compression token counting
Update: Plugin development guide with new examples
```
---
## 📝 Submitting a Pull Request
### Step-by-Step
1. **Fork** the repository
2. **Clone** your fork locally
3. **Create** a new branch:
```bash
git checkout -b feature/amazing-feature
```
4. **Make** your changes
5. **Commit** your changes:
```bash
git commit -m 'Add: Amazing feature'
```
6. **Push** to your branch:
```bash
git push origin feature/amazing-feature
```
7. **Open** a Pull Request
### PR Checklist
- [ ] Code follows project style guidelines
- [ ] Documentation is included/updated
- [ ] Plugin has been tested locally
- [ ] Commit messages are clear
- [ ] PR description explains the changes
---
## 🐛 Reporting Issues
Found a bug? Please open an issue with:
1. **Description**: Clear description of the problem
2. **Steps to Reproduce**: How to trigger the issue
3. **Expected Behavior**: What should happen
4. **Actual Behavior**: What actually happens
5. **Environment**: OpenWebUI version, browser, OS
---
## 💡 Feature Requests
Have an idea? We'd love to hear it!
1. Check existing issues to avoid duplicates
2. Open a new issue with the "enhancement" label
3. Describe your idea and its use case
---
## 📄 License
By contributing, you agree that your contributions will be licensed under the same license as the project.
---
## 🙏 Thank You!
Every contribution, no matter how small, helps make OpenWebUI Extras better for everyone. Thank you for being part of our community!
[:fontawesome-brands-github: View on GitHub](https://github.com/Fu-Jie/awesome-openwebui){ .md-button .md-button--primary }

160
docs/development/index.md Normal file
View File

@@ -0,0 +1,160 @@
# Development
Learn how to develop plugins and contribute to OpenWebUI Extras.
---
## Getting Started
<div class="grid cards" markdown>
- :material-book-open-page-variant:{ .lg .middle } **Plugin Development Guide**
---
The comprehensive guide covering everything from getting started to advanced patterns and best practices.
[:octicons-arrow-right-24: Read the Guide](plugin-guide.md)
- :material-github:{ .lg .middle } **Contributing**
---
Learn how to contribute plugins, prompts, and documentation to the project.
[:octicons-arrow-right-24: Contribution Guide](../contributing.md)
</div>
---
## Plugin Types Overview
OpenWebUI supports three main plugin types:
| Type | Purpose | Entry Method |
|------|---------|--------------|
| **Action** | Add buttons to messages | `action()` |
| **Filter** | Process messages | `inlet()` / `outlet()` |
| **Pipe** | Custom model integration | `pipe()` |
---
## Quick Start Templates
### Action Plugin
```python
"""
title: My Action
author: Your Name
version: 1.0.0
"""
class Action:
async def action(self, body: dict, __event_emitter__=None):
await __event_emitter__({"type": "notification", "data": {"content": "Hello!"}})
return body
```
### Filter Plugin
```python
"""
title: My Filter
author: Your Name
version: 1.0.0
"""
class Filter:
async def inlet(self, body: dict, __metadata__: dict) -> dict:
# Process before LLM
return body
async def outlet(self, body: dict, __metadata__: dict) -> dict:
# Process after LLM
return body
```
### Pipe Plugin
```python
"""
title: My Pipe
author: Your Name
version: 1.0.0
"""
class Pipe:
def pipes(self):
return [{"id": "my-model", "name": "My Model"}]
def pipe(self, body: dict):
return "Response from custom pipe"
```
---
## Core Concepts
### Valves Configuration
Valves allow users to configure plugins through the UI:
```python
from pydantic import BaseModel, Field
class Action:
class Valves(BaseModel):
api_key: str = Field(default="", description="API Key")
enabled: bool = Field(default=True, description="Enable plugin")
def __init__(self):
self.valves = self.Valves()
```
### Event Emitter
Send notifications and status updates:
```python
# Notification
await __event_emitter__({
"type": "notification",
"data": {"type": "success", "content": "Done!"}
})
# Status update
await __event_emitter__({
"type": "status",
"data": {"description": "Processing...", "done": False}
})
```
### User Context
Access user information:
```python
user_name = __user__.get("name", "User")
user_id = __user__.get("id")
user_language = __user__.get("language", "en-US")
```
---
## Best Practices
1. **Async Operations**: Always use `async/await` for I/O operations
2. **Error Handling**: Catch exceptions and notify users
3. **Status Updates**: Provide feedback during long operations
4. **Configuration**: Use Valves for customizable options
5. **Documentation**: Include clear docstrings and README files
---
## Resources
- [Full Development Guide](plugin-guide.md)
- [Plugin Examples](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins)
- [OpenWebUI Documentation](https://docs.openwebui.com/)

View File

@@ -0,0 +1,293 @@
# OpenWebUI Plugin Development Guide
> This guide consolidates official documentation, SDK details, and best practices to provide a systematic tutorial for developers, from beginner to expert.
---
## 📚 Table of Contents
1. [Quick Start](#1-quick-start)
2. [Core Concepts & SDK Details](#2-core-concepts--sdk-details)
3. [Deep Dive into Plugin Types](#3-deep-dive-into-plugin-types)
4. [Advanced Development Patterns](#4-advanced-development-patterns)
5. [Best Practices & Design Principles](#5-best-practices--design-principles)
6. [Troubleshooting](#6-troubleshooting)
---
## 1. Quick Start
### 1.1 What are OpenWebUI Plugins?
OpenWebUI Plugins (officially called "Functions") are the primary way to extend the platform's capabilities. Running in a backend Python environment, they allow you to:
- :material-power-plug: **Integrate New Models**: Connect to Claude, Gemini, or custom RAGs via Pipes
- :material-palette: **Enhance Interaction**: Add buttons (e.g., "Export", "Generate Chart") next to messages via Actions
- :material-cog: **Intervene in Processes**: Modify data before requests or after responses via Filters
### 1.2 Your First Plugin (Hello World)
Save the following code as `hello.py` and upload it to the **Functions** panel in OpenWebUI:
```python
"""
title: Hello World Action
author: Demo
version: 1.0.0
"""
from pydantic import BaseModel, Field
from typing import Optional
class Action:
class Valves(BaseModel):
greeting: str = Field(default="Hello", description="Greeting message")
def __init__(self):
self.valves = self.Valves()
async def action(
self,
body: dict,
__event_emitter__=None,
__user__=None
) -> Optional[dict]:
user_name = __user__.get("name", "Friend") if __user__ else "Friend"
if __event_emitter__:
await __event_emitter__({
"type": "notification",
"data": {"type": "success", "content": f"{self.valves.greeting}, {user_name}!"}
})
return body
```
---
## 2. Core Concepts & SDK Details
### 2.1 ⚠️ Important: Sync vs Async
OpenWebUI plugins run within an `asyncio` event loop.
!!! warning "Critical"
- **Principle**: All I/O operations (database, file, network) must be non-blocking
- **Pitfall**: Calling synchronous methods directly (e.g., `time.sleep`, `requests.get`) will freeze the entire server
- **Solution**: Wrap synchronous calls using `await asyncio.to_thread(sync_func, ...)`
### 2.2 Core Parameters
All plugin methods (`inlet`, `outlet`, `pipe`, `action`) support injecting the following special parameters:
| Parameter | Type | Description |
|:----------|:-----|:------------|
| `body` | `dict` | **Core Data**. Contains request info like `messages`, `model`, `stream` |
| `__user__` | `dict` | **Current User**. Contains `id`, `name`, `role`, `valves` (user config), etc. |
| `__metadata__` | `dict` | **Metadata**. Contains `chat_id`, `message_id`. The `variables` field holds preset variables |
| `__request__` | `Request` | **FastAPI Request Object**. Access `app.state` for cross-plugin communication |
| `__event_emitter__` | `func` | **One-way Notification**. Used to send Toast notifications or status bar updates |
| `__event_call__` | `func` | **Two-way Interaction**. Used to execute JS code, show confirmation dialogs, or input boxes |
### 2.3 Configuration System (Valves)
- **`Valves`**: Global admin configuration
- **`UserValves`**: User-level configuration (higher priority, overrides global)
```python
class Filter:
class Valves(BaseModel):
API_KEY: str = Field(default="", description="Global API Key")
class UserValves(BaseModel):
API_KEY: str = Field(default="", description="User Private API Key")
def inlet(self, body, __user__):
# Prioritize user's Key
user_valves = __user__.get("valves", self.UserValves())
api_key = user_valves.API_KEY or self.valves.API_KEY
```
---
## 3. Deep Dive into Plugin Types
### 3.1 Action
**Role**: Adds buttons below messages that trigger upon user click.
#### Advanced Usage: Execute JavaScript on Frontend
```python
import base64
async def action(self, body, __event_call__):
# 1. Generate content on backend
content = "Hello OpenWebUI".encode()
b64 = base64.b64encode(content).decode()
# 2. Send JS to frontend for execution
js = f"""
const blob = new Blob([atob('{b64}')], {{type: 'text/plain'}});
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = 'hello.txt';
a.click();
"""
await __event_call__({"type": "execute", "data": {"code": js}})
```
### 3.2 Filter
**Role**: Middleware that intercepts and modifies requests/responses.
- **`inlet`**: Before request. Used for injecting context, modifying model parameters
- **`outlet`**: After response. Used for formatting output, logging
- **`stream`**: During streaming. Used for real-time sensitive word filtering
#### Example: Injecting Environment Variables
```python
async def inlet(self, body, __metadata__):
vars = __metadata__.get("variables", {})
context = f"Current Time: {vars.get('{{CURRENT_DATETIME}}')}"
# Inject into System Prompt or first message
if body.get("messages"):
body["messages"][0]["content"] += f"\n\n{context}"
return body
```
### 3.3 Pipe
**Role**: Custom Model/Agent.
#### Example: Simple OpenAI Wrapper
```python
import requests
class Pipe:
def pipes(self):
return [{"id": "my-gpt", "name": "My GPT Wrapper"}]
def pipe(self, body):
# Modify body here, e.g., force add prompt
headers = {"Authorization": f"Bearer {self.valves.API_KEY}"}
r = requests.post(
"https://api.openai.com/v1/chat/completions",
json=body,
headers=headers,
stream=True
)
return r.iter_lines()
```
---
## 4. Advanced Development Patterns
### 4.1 Pipe & Filter Collaboration
Use `__request__.app.state` to share data between plugins:
- **Pipe**: `__request__.app.state.search_results = [...]`
- **Filter (Outlet)**: Read `search_results` and format them as citation links
### 4.2 Async Background Tasks
Execute time-consuming operations without blocking the user response:
```python
import asyncio
async def outlet(self, body, __metadata__):
asyncio.create_task(self.background_job(__metadata__["chat_id"]))
return body
async def background_job(self, chat_id):
# Execute time-consuming operation...
pass
```
### 4.3 Calling Built-in LLM
```python
from open_webui.utils.chat import generate_chat_completion
from open_webui.models.users import Users
# Get user object
user_obj = Users.get_user_by_id(user_id)
# Build LLM request
llm_payload = {
"model": "model-id",
"messages": [
{"role": "system", "content": "System prompt"},
{"role": "user", "content": "User input"}
],
"temperature": 0.7,
"stream": False
}
# Call LLM
llm_response = await generate_chat_completion(
__request__, llm_payload, user_obj
)
```
---
## 5. Best Practices & Design Principles
### 5.1 Naming & Positioning
- **Short & Punchy**: e.g., "FlashCard", "DeepRead". Avoid generic terms like "Text Analysis Assistant"
- **Complementary**: Don't reinvent the wheel; clarify what specific problem your plugin solves
### 5.2 User Experience (UX)
- **Timely Feedback**: Send a `notification` ("Generating...") before time-consuming operations
- **Visual Appeal**: When Action outputs HTML, use modern CSS (rounded corners, shadows, gradients)
- **Smart Guidance**: If text is too short, prompt the user: "Suggest entering more content for better results"
### 5.3 Error Handling
!!! danger "Never fail silently"
Always catch exceptions and inform the user via `__event_emitter__`.
```python
try:
# Business logic
pass
except Exception as e:
await __event_emitter__({
"type": "notification",
"data": {"type": "error", "content": f"Processing failed: {str(e)}"}
})
```
---
## 6. Troubleshooting
??? question "HTML not showing?"
Ensure it's wrapped in a ` ```html ... ``` ` code block.
??? question "Database error?"
Check if you called synchronous DB methods directly in an `async` function; use `asyncio.to_thread`.
??? question "Parameters not working?"
Check if `Valves` are defined correctly and if they are being overridden by `UserValves`.
??? question "Plugin not loading?"
- Check for syntax errors in the Python file
- Verify the metadata docstring is correctly formatted
- Check OpenWebUI logs for error messages
---
## Additional Resources
- [:fontawesome-brands-github: Plugin Examples](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins)
- [:material-book-open-variant: OpenWebUI Official Docs](https://docs.openwebui.com/)
- [:material-forum: Community Discussions](https://github.com/open-webui/open-webui/discussions)

178
docs/enhancements/guide.md Normal file
View File

@@ -0,0 +1,178 @@
# OpenWebUI Enhancement Guide
A comprehensive guide to optimizing and customizing your OpenWebUI experience.
---
## Performance Optimization
### Context Management
Managing context effectively can significantly improve response quality and reduce costs.
!!! tip "Use Context Compression"
Install the [Async Context Compression](../plugins/filters/async-context-compression.md) filter to automatically manage long conversations.
#### Best Practices
1. **Clear Old Conversations**: Archive or delete old chats to keep your interface clean
2. **Use Focused Conversations**: Start new chats for new topics
3. **Leverage System Prompts**: Set clear boundaries and focus areas
4. **Monitor Token Usage**: Keep track of context length
### Model Selection
Choose the right model for your task:
| Task Type | Recommended Approach |
|-----------|---------------------|
| Quick questions | Smaller, faster models |
| Complex analysis | Larger, more capable models |
| Creative writing | Models with high temperature |
| Code generation | Code-specialized models |
---
## Customization Tips
### Keyboard Shortcuts
Common keyboard shortcuts to speed up your workflow:
| Shortcut | Action |
|----------|--------|
| `Enter` | Send message |
| `Shift + Enter` | New line |
| `↑` | Edit last message |
| `Ctrl + /` | Toggle sidebar |
### Interface Customization
1. **Dark/Light Mode**: Use the theme toggle in the top navigation
2. **Sidebar Organization**: Pin frequently used chats
3. **Model Favorites**: Star your most-used models
### System Prompt Templates
Create reusable system prompts for common scenarios:
```text
# Template: Technical Assistant
You are a technical assistant specializing in [DOMAIN].
Focus on providing accurate, actionable information.
When unsure, acknowledge limitations and suggest resources.
```
---
## Workflow Optimization
### For Developers
1. **Code Review Pipeline**
- Use coding prompts for initial review
- Apply filters for consistent formatting
- Export to Excel for tracking
2. **Documentation Generation**
- Start with the Document Formatter prompt
- Use Summary action for key points
- Export structured content
### For Content Creators
1. **Content Production**
- Use Marketing prompts for ideation
- Iterate with feedback
- Export final versions
2. **Research Workflows**
- Use multiple models for diverse perspectives
- Leverage Mind Map for visualization
- Create Knowledge Cards for key concepts
### For Learners
1. **Study Sessions**
- Use Code Explainer for technical topics
- Generate Knowledge Cards for memorization
- Create Mind Maps for complex subjects
---
## Plugin Combinations
### Recommended Stacks
=== "Developer Stack"
- **Filter**: Context Enhancement
- **Action**: Export to Excel
- **Prompt**: Senior Developer Assistant
=== "Researcher Stack"
- **Filter**: Async Context Compression
- **Action**: Smart Mind Map
- **Pipeline**: MoE Prompt Refiner
=== "Student Stack"
- **Action**: Knowledge Card
- **Action**: Smart Mind Map
- **Prompt**: Code Explainer
---
## Advanced Configuration
### Custom Valves
Many plugins support Valves (configuration options). Access them through:
1. **Admin Panel****Settings****Functions**
2. Click on the plugin
3. Modify Valve settings
4. Save changes
### User Overrides
Some plugins support UserValves that allow individual users to override global settings:
```python
class UserValves(BaseModel):
custom_setting: str = Field(
default="",
description="User-specific configuration"
)
```
---
## Troubleshooting
### Common Issues
??? question "Plugin not working after update?"
Try disabling and re-enabling the plugin, or re-upload the latest version.
??? question "Responses are too slow?"
- Check your internet connection
- Try a smaller model
- Enable streaming if not already enabled
??? question "Context seems lost?"
- Check if context compression is removing too much
- Adjust `preserve_recent` settings
- Start a new conversation for fresh context
### Getting Help
- Check plugin documentation for specific issues
- Review OpenWebUI official documentation
- Join the community discussions
---
## Resources
- [:fontawesome-brands-github: OpenWebUI GitHub](https://github.com/open-webui/open-webui)
- [:material-book-open-variant: Official Documentation](https://docs.openwebui.com/)
- [:material-forum: Community Forums](https://github.com/open-webui/open-webui/discussions)

View File

@@ -0,0 +1,59 @@
# Enhancements
Tips, tricks, and advanced configurations to optimize your OpenWebUI experience.
---
## Enhancement Categories
<div class="grid cards" markdown>
- :material-tune:{ .lg .middle } **Optimization Guide**
---
Learn how to optimize OpenWebUI for better performance, customization, and workflows.
[:octicons-arrow-right-24: View Guide](guide.md)
- :material-puzzle:{ .lg .middle } **Plugin Integration**
---
Best practices for combining multiple plugins effectively.
[:octicons-arrow-right-24: Browse Plugins](../plugins/index.md)
</div>
---
## Quick Tips
### Performance
- :material-speedometer: Enable caching for frequently used models
- :material-memory: Optimize context window usage with compression filters
- :material-lightning-bolt: Use streaming for faster perceived response times
### Customization
- :material-palette: Customize themes and appearance
- :material-keyboard: Set up keyboard shortcuts
- :material-cog: Configure default model settings
### Workflow
- :material-robot: Create custom prompts for repeated tasks
- :material-filter: Use filters for consistent formatting
- :material-export: Set up export workflows for documentation
---
## Featured Guides
| Guide | Description |
|-------|-------------|
| [Complete Optimization Guide](guide.md) | Comprehensive tips for better OpenWebUI usage |
| [Plugin Development](../development/index.md) | Create your own plugins |
| [Prompt Engineering](../prompts/library.md) | Master the art of prompting |

126
docs/index.md Normal file
View File

@@ -0,0 +1,126 @@
---
hide:
- navigation
- toc
---
# Welcome to OpenWebUI Extras
<div class="hero-section" markdown>
<div class="hero-content" markdown>
# 🚀 Supercharge Your OpenWebUI Experience
**OpenWebUI Extras** is a curated collection of plugins, prompts, and enhancements designed to extend the functionality of [OpenWebUI](https://github.com/open-webui/open-webui).
[Get Started :material-arrow-right:](#quick-navigation){ .md-button .md-button--primary }
[View on GitHub :fontawesome-brands-github:](https://github.com/Fu-Jie/awesome-openwebui){ .md-button }
</div>
</div>
---
## Quick Navigation
<div class="grid cards" markdown>
- :material-puzzle:{ .lg .middle } **Plugin Center**
---
Browse our collection of powerful plugins including Actions, Filters, Pipes, and Pipelines to enhance your AI interactions.
[:octicons-arrow-right-24: Explore Plugins](plugins/index.md)
- :material-message-text:{ .lg .middle } **Prompt Library**
---
Discover carefully crafted prompts for coding, writing, marketing, and more. Copy and use them instantly.
[:octicons-arrow-right-24: Browse Prompts](prompts/index.md)
- :material-tools:{ .lg .middle } **Enhancements**
---
Learn tips and tricks to optimize your OpenWebUI experience with advanced configurations and customizations.
[:octicons-arrow-right-24: View Guides](enhancements/index.md)
- :material-book-open-page-variant:{ .lg .middle } **Development**
---
Comprehensive guides for developing your own plugins, from beginner tutorials to advanced patterns.
[:octicons-arrow-right-24: Start Developing](development/index.md)
</div>
---
## Featured Plugins
<div class="grid cards" markdown>
- :material-brain:{ .lg .middle } **Smart Mind Map**
---
Intelligently analyzes text content and generates interactive mind maps for better visualization.
[:octicons-arrow-right-24: Learn More](plugins/actions/smart-mind-map.md)
- :material-card-text:{ .lg .middle } **Knowledge Card**
---
Quickly generates beautiful learning memory cards, perfect for studying and quick memorization.
[:octicons-arrow-right-24: Learn More](plugins/actions/knowledge-card.md)
- :material-compress:{ .lg .middle } **Async Context Compression**
---
Reduces token consumption in long conversations through intelligent summarization while maintaining coherence.
[:octicons-arrow-right-24: Learn More](plugins/filters/async-context-compression.md)
</div>
---
## Quick Start
### Using Prompts
1. Browse the [Prompt Library](prompts/library.md) and select a prompt
2. Click the **Copy** button to copy the prompt to your clipboard
3. In OpenWebUI, click the "Prompt" button above the input box
4. Paste the content and save
### Using Plugins
1. Browse the [Plugin Center](plugins/index.md) and download the plugin file (`.py`)
2. Open OpenWebUI **Admin Panel****Settings****Plugins**
3. Click the upload button and select the `.py` file
4. Refresh the page and enable the plugin in your chat settings
---
## Contributing
We welcome contributions! Whether it's a new plugin, a helpful prompt, or documentation improvements.
[:octicons-heart-fill-24:{ .heart } Check out our Contributing Guide](contributing.md){ .md-button }
---
<div class="footer-stats" markdown>
**OpenWebUI Extras** - Making AI interactions more powerful and productive.
</div>

View File

@@ -0,0 +1,67 @@
# Export to Excel
<span class="category-badge action">Action</span>
<span class="version-badge">v1.0.0</span>
Export chat conversations to Excel spreadsheet format for analysis, archiving, and sharing.
---
## Overview
The Export to Excel plugin allows you to download your chat conversations as Excel files. This is useful for:
- Archiving important conversations
- Analyzing chat data
- Sharing conversations with colleagues
- Creating documentation from AI-assisted research
## Features
- :material-file-excel: **Excel Export**: Standard `.xlsx` format
- :material-table: **Formatted Output**: Clean table structure
- :material-download: **One-Click Download**: Instant file generation
- :material-history: **Full History**: Exports complete conversation
---
## Installation
1. Download the plugin file: [`export_to_excel.py`](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/actions/export_to_excel)
2. Upload to OpenWebUI: **Admin Panel****Settings****Functions**
3. Enable the plugin
---
## Usage
1. Have a conversation you want to export
2. Click the **Export** button in the message action bar
3. The Excel file will be automatically downloaded
---
## Output Format
The exported Excel file contains:
| Column | Description |
|--------|-------------|
| Timestamp | When the message was sent |
| Role | User or Assistant |
| Content | The message text |
| Model | The AI model used (for assistant messages) |
---
## Requirements
!!! note "Prerequisites"
- OpenWebUI v0.3.0 or later
- No additional Python packages required (uses built-in libraries)
---
## Source Code
[:fontawesome-brands-github: View on GitHub](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/actions/export_to_excel){ .md-button }

View File

@@ -0,0 +1,141 @@
# Action Plugins
Action plugins add custom buttons below messages in the chat interface, allowing you to trigger specific functionalities with a single click.
## What are Actions?
Actions are interactive plugins that:
- :material-gesture-tap: Add buttons to the message action bar
- :material-export: Generate and export content (mind maps, charts, files)
- :material-api: Interact with external services and APIs
- :material-animation-play: Create visualizations and interactive content
---
## Available Action Plugins
<div class="grid cards" markdown>
- :material-brain:{ .lg .middle } **Smart Mind Map**
---
Intelligently analyzes text content and generates interactive mind maps with beautiful visualizations.
**Version:** 0.7.2
[:octicons-arrow-right-24: Documentation](smart-mind-map.md)
- :material-card-text:{ .lg .middle } **Knowledge Card**
---
Quickly generates beautiful learning memory cards, perfect for studying and memorization.
**Version:** 0.2.0
[:octicons-arrow-right-24: Documentation](knowledge-card.md)
- :material-file-excel:{ .lg .middle } **Export to Excel**
---
Export chat conversations to Excel spreadsheet format for analysis and archiving.
**Version:** 1.0.0
[:octicons-arrow-right-24: Documentation](export-to-excel.md)
- :material-text-box-search:{ .lg .middle } **Summary**
---
Generate concise summaries of long text content with key points extraction.
**Version:** 1.0.0
[:octicons-arrow-right-24: Documentation](summary.md)
</div>
---
## Quick Installation
1. Download the desired plugin `.py` file
2. Navigate to **Admin Panel****Settings****Functions**
3. Upload the file and configure settings
4. Use the action button in chat messages
---
## Development Template
Want to create your own Action plugin? Use our template:
```python
"""
title: My Custom Action
author: Your Name
version: 1.0.0
description: Description of your action plugin
"""
from pydantic import BaseModel, Field
from typing import Optional, Dict, Any
class Action:
class Valves(BaseModel):
# Add your configuration options here
show_status: bool = Field(
default=True,
description="Show status updates during processing"
)
def __init__(self):
self.valves = self.Valves()
async def action(
self,
body: dict,
__user__: Optional[Dict[str, Any]] = None,
__event_emitter__: Optional[Any] = None,
__request__: Optional[Any] = None,
) -> Optional[dict]:
"""
Main action method triggered when user clicks the action button.
Args:
body: Message body containing conversation data
__user__: Current user information
__event_emitter__: For sending notifications and status updates
__request__: FastAPI request object
Returns:
Modified body dict or None
"""
# Send status update
if __event_emitter__ and self.valves.show_status:
await __event_emitter__({
"type": "status",
"data": {"description": "Processing...", "done": False}
})
# Your plugin logic here
messages = body.get("messages", [])
if messages:
last_message = messages[-1].get("content", "")
# Process the message...
# Complete status
if __event_emitter__ and self.valves.show_status:
await __event_emitter__({
"type": "status",
"data": {"description": "Done!", "done": True}
})
return body
```
For more details, check our [Plugin Development Guide](../../development/plugin-guide.md).

View File

@@ -0,0 +1,88 @@
# Knowledge Card
<span class="category-badge action">Action</span>
<span class="version-badge">v0.2.0</span>
Quickly generates beautiful learning memory cards, perfect for studying and quick memorization.
---
## Overview
The Knowledge Card plugin (also known as Flash Card / 闪记卡) transforms content into visually appealing flashcards that are perfect for learning and memorization. Whether you're studying for exams, learning new concepts, or reviewing key points, this plugin helps you create effective study materials.
## Features
- :material-card-text: **Beautiful Cards**: Modern, clean design for easy reading
- :material-animation-play: **Interactive**: Flip cards to reveal answers
- :material-export: **Exportable**: Save cards for offline study
- :material-palette: **Customizable**: Multiple themes and styles
- :material-translate: **Multi-language**: Supports various languages
---
## Installation
1. Download the plugin file: [`knowledge_card.py`](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/actions/knowledge-card)
2. Upload to OpenWebUI: **Admin Panel****Settings****Functions**
3. Enable the plugin
---
## Usage
1. Have a conversation about a topic you want to learn
2. Click the **Flash Card** button in the message action bar
3. The plugin will analyze the content and generate flashcards
4. Click on cards to flip and reveal answers
---
## Configuration
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `cards_per_message` | integer | `5` | Maximum cards to generate |
| `theme` | string | `"modern"` | Visual theme |
| `show_hints` | boolean | `true` | Include hints on cards |
---
## Example
=== "Question Side"
```
┌─────────────────────────────┐
│ │
│ What is the capital of │
│ France? │
│ │
│ [Click to flip] │
└─────────────────────────────┘
```
=== "Answer Side"
```
┌─────────────────────────────┐
│ │
│ Paris │
│ │
│ The city of lights, │
│ located on the Seine │
│ │
└─────────────────────────────┘
```
---
## Requirements
!!! note "Prerequisites"
- OpenWebUI v0.3.0 or later
- No additional Python packages required
---
## Source Code
[:fontawesome-brands-github: View on GitHub](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/actions/knowledge-card){ .md-button }

View File

@@ -0,0 +1,91 @@
# Smart Mind Map
<span class="category-badge action">Action</span>
<span class="version-badge">v0.7.2</span>
Intelligently analyzes text content and generates interactive mind maps for better visualization and understanding.
---
## Overview
The Smart Mind Map plugin transforms text content into beautiful, interactive mind maps. It uses AI to analyze the structure of your content and creates a hierarchical visualization that makes complex information easier to understand.
## Features
- :material-brain: **AI-Powered Analysis**: Intelligently extracts key concepts and relationships
- :material-gesture-swipe: **Interactive Navigation**: Zoom, pan, and explore the mind map
- :material-palette: **Beautiful Styling**: Modern design with customizable colors
- :material-download: **Export Options**: Save as image or structured data
- :material-translate: **Multi-language Support**: Works with multiple languages
---
## Installation
1. Download the plugin file: [`smart_mind_map.py`](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/actions/smart-mind-map)
2. Upload to OpenWebUI: **Admin Panel****Settings****Functions**
3. Enable the plugin
---
## Usage
1. Start a conversation and get a response from the AI
2. Click the **Mind Map** button in the message action bar
3. Wait for the mind map to generate
4. Interact with the visualization:
- **Zoom**: Scroll to zoom in/out
- **Pan**: Click and drag to move around
- **Expand/Collapse**: Click nodes to show/hide children
---
## Configuration
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `show_status` | boolean | `true` | Show processing status updates |
| `max_depth` | integer | `5` | Maximum depth of the mind map |
| `theme` | string | `"default"` | Color theme for the visualization |
---
## Example Output
The plugin generates an interactive HTML mind map embedded in the chat:
```
📊 Mind Map Generated
├── Main Topic
│ ├── Subtopic 1
│ │ ├── Detail A
│ │ └── Detail B
│ ├── Subtopic 2
│ └── Subtopic 3
└── Related Concepts
```
---
## Requirements
!!! note "Prerequisites"
- OpenWebUI v0.3.0 or later
- No additional Python packages required
---
## Troubleshooting
??? question "Mind map is not displaying?"
Ensure your browser supports HTML5 Canvas and JavaScript is enabled.
??? question "Generation takes too long?"
For very long texts, the AI analysis may take more time. Consider breaking down the content into smaller sections.
---
## Source Code
[:fontawesome-brands-github: View on GitHub](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/actions/smart-mind-map){ .md-button }

View File

@@ -0,0 +1,82 @@
# Summary
<span class="category-badge action">Action</span>
<span class="version-badge">v1.0.0</span>
Generate concise summaries of long text content with key points extraction.
---
## Overview
The Summary plugin helps you quickly understand long pieces of text by generating concise summaries with extracted key points. It's perfect for:
- Summarizing long articles or documents
- Extracting key points from conversations
- Creating quick overviews of complex topics
## Features
- :material-text-box-search: **Smart Summarization**: AI-powered content analysis
- :material-format-list-bulleted: **Key Points**: Extracted important highlights
- :material-content-copy: **Easy Copy**: One-click copying of summaries
- :material-tune: **Adjustable Length**: Control summary detail level
---
## Installation
1. Download the plugin file: [`summary.py`](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/actions/summary)
2. Upload to OpenWebUI: **Admin Panel****Settings****Functions**
3. Enable the plugin
---
## Usage
1. Get a long response from the AI or paste long text
2. Click the **Summary** button in the message action bar
3. View the generated summary with key points
---
## Configuration
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `summary_length` | string | `"medium"` | Length of summary (short/medium/long) |
| `include_key_points` | boolean | `true` | Extract and list key points |
| `language` | string | `"auto"` | Output language |
---
## Example Output
```markdown
## Summary
This document discusses the implementation of a new feature
for the application, focusing on user experience improvements
and performance optimizations.
### Key Points
- ✅ New user interface design improves accessibility
- ✅ Backend optimizations reduce load times by 40%
- ✅ Mobile responsiveness enhanced
- ✅ Integration with third-party services simplified
```
---
## Requirements
!!! note "Prerequisites"
- OpenWebUI v0.3.0 or later
- Uses the active LLM model for summarization
---
## Source Code
[:fontawesome-brands-github: View on GitHub](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/actions/summary){ .md-button }

View File

@@ -0,0 +1,122 @@
# Async Context Compression
<span class="category-badge filter">Filter</span>
<span class="version-badge">v1.0.0</span>
Reduces token consumption in long conversations through intelligent summarization while maintaining conversational coherence.
---
## Overview
The Async Context Compression filter helps manage token usage in long conversations by:
- Intelligently summarizing older messages
- Preserving important context
- Reducing API costs
- Maintaining conversation coherence
This is especially useful for:
- Long-running conversations
- Complex multi-turn discussions
- Cost optimization
- Token limit management
## Features
- :material-compress: **Smart Compression**: AI-powered context summarization
- :material-clock-fast: **Async Processing**: Non-blocking background compression
- :material-memory: **Context Preservation**: Keeps important information
- :material-currency-usd-off: **Cost Reduction**: Minimize token usage
---
## Installation
1. Download the plugin file: [`async_context_compression.py`](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/filters/async-context-compression)
2. Upload to OpenWebUI: **Admin Panel****Settings****Functions**
3. Configure compression settings
4. Enable the filter
---
## How It Works
```mermaid
graph TD
A[Incoming Messages] --> B{Token Count > Threshold?}
B -->|No| C[Pass Through]
B -->|Yes| D[Summarize Older Messages]
D --> E[Preserve Recent Messages]
E --> F[Combine Summary + Recent]
F --> G[Send to LLM]
```
---
## Configuration
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `token_threshold` | integer | `4000` | Trigger compression above this token count |
| `preserve_recent` | integer | `5` | Number of recent messages to keep uncompressed |
| `summary_model` | string | `"auto"` | Model to use for summarization |
| `compression_ratio` | float | `0.3` | Target compression ratio |
---
## Example
### Before Compression
```
[Message 1] User: Tell me about Python...
[Message 2] AI: Python is a programming language...
[Message 3] User: What about its history?
[Message 4] AI: Python was created by Guido...
[Message 5] User: And its features?
[Message 6] AI: Python has many features...
... (many more messages)
[Message 20] User: Current question
```
### After Compression
```
[Summary] Previous conversation covered Python basics,
history, features, and common use cases...
[Message 18] User: Recent question about decorators
[Message 19] AI: Decorators in Python are...
[Message 20] User: Current question
```
---
## Requirements
!!! note "Prerequisites"
- OpenWebUI v0.3.0 or later
- Access to an LLM for summarization
!!! tip "Best Practices"
- Set appropriate token thresholds based on your model's context window
- Preserve more recent messages for technical discussions
- Test compression settings in non-critical conversations first
---
## Troubleshooting
??? question "Compression not triggering?"
Check if the token count exceeds your configured threshold. Enable debug logging for more details.
??? question "Important context being lost?"
Increase the `preserve_recent` setting or lower the compression ratio.
---
## Source Code
[:fontawesome-brands-github: View on GitHub](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/filters/async-context-compression){ .md-button }

View File

@@ -0,0 +1,51 @@
# Context Enhancement
<span class="category-badge filter">Filter</span>
<span class="version-badge">v1.0.0</span>
Enhances chat context with additional information for improved LLM responses.
---
## Overview
The Context Enhancement filter automatically enriches your conversations with contextual information, making LLM responses more relevant and accurate.
## Features
- :material-text-box-plus: **Auto Enhancement**: Automatically adds relevant context
- :material-clock: **Time Awareness**: Includes current date/time information
- :material-account: **User Context**: Incorporates user preferences
- :material-cog: **Customizable**: Configure what context to include
---
## Installation
1. Download the plugin file: [`context_enhancement_filter.py`](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/filters/context_enhancement_filter)
2. Upload to OpenWebUI: **Admin Panel****Settings****Functions**
3. Configure enhancement options
4. Enable the filter
---
## Configuration
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `include_datetime` | boolean | `true` | Add current date/time |
| `include_user_info` | boolean | `true` | Add user name and preferences |
| `custom_context` | string | `""` | Custom context to always include |
---
## Requirements
!!! note "Prerequisites"
- OpenWebUI v0.3.0 or later
---
## Source Code
[:fontawesome-brands-github: View on GitHub](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/filters/context_enhancement_filter){ .md-button }

View File

@@ -0,0 +1,54 @@
# Gemini Manifold Companion
<span class="category-badge filter">Filter</span>
<span class="version-badge">v1.0.0</span>
Companion filter for the Gemini Manifold pipe plugin, providing enhanced functionality.
---
## Overview
The Gemini Manifold Companion works alongside the [Gemini Manifold Pipe](../pipes/gemini-manifold.md) to provide additional processing and enhancement for Gemini model integrations.
## Features
- :material-handshake: **Seamless Integration**: Works with Gemini Manifold pipe
- :material-format-text: **Message Formatting**: Optimizes messages for Gemini
- :material-shield: **Error Handling**: Graceful handling of API issues
- :material-tune: **Fine-tuning**: Additional configuration options
---
## Installation
1. First, install the [Gemini Manifold Pipe](../pipes/gemini-manifold.md)
2. Download the companion filter: [`gemini_manifold_companion.py`](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/filters/gemini_manifold_companion)
3. Upload to OpenWebUI: **Admin Panel****Settings****Functions**
4. Enable the filter
---
## Configuration
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `auto_format` | boolean | `true` | Auto-format messages for Gemini |
| `handle_errors` | boolean | `true` | Enable error handling |
---
## Requirements
!!! warning "Dependency"
This filter requires the **Gemini Manifold Pipe** to be installed and configured.
!!! note "Prerequisites"
- OpenWebUI v0.3.0 or later
- Gemini Manifold Pipe installed
---
## Source Code
[:fontawesome-brands-github: View on GitHub](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/filters/gemini_manifold_companion){ .md-button }

View File

@@ -0,0 +1,155 @@
# Filter Plugins
Filter plugins process and modify messages before they are sent to the LLM or after responses are generated.
## What are Filters?
Filters act as middleware in the message pipeline:
- :material-arrow-right-bold: **Inlet**: Process user messages before they reach the LLM
- :material-arrow-left-bold: **Outlet**: Process LLM responses before they're displayed
- :material-stream: **Stream**: Process streaming responses in real-time
---
## Available Filter Plugins
<div class="grid cards" markdown>
- :material-compress:{ .lg .middle } **Async Context Compression**
---
Reduces token consumption in long conversations through intelligent summarization while maintaining coherence.
**Version:** 1.0.0
[:octicons-arrow-right-24: Documentation](async-context-compression.md)
- :material-text-box-plus:{ .lg .middle } **Context Enhancement**
---
Enhances chat context with additional information for better responses.
**Version:** 1.0.0
[:octicons-arrow-right-24: Documentation](context-enhancement.md)
- :material-google:{ .lg .middle } **Gemini Manifold Companion**
---
Companion filter for the Gemini Manifold pipe plugin.
**Version:** 1.0.0
[:octicons-arrow-right-24: Documentation](gemini-manifold-companion.md)
</div>
---
## How Filters Work
```mermaid
graph LR
A[User Message] --> B[Inlet Filter]
B --> C[LLM]
C --> D[Outlet Filter]
D --> E[Display to User]
```
### Inlet Processing
The `inlet` method processes messages before they reach the LLM:
```python
async def inlet(self, body: dict, __metadata__: dict) -> dict:
# Modify the request before sending to LLM
messages = body.get("messages", [])
# Add context, modify prompts, etc.
return body
```
### Outlet Processing
The `outlet` method processes responses after they're generated:
```python
async def outlet(self, body: dict, __metadata__: dict) -> dict:
# Modify the response before displaying
messages = body.get("messages", [])
# Format output, add citations, etc.
return body
```
---
## Quick Installation
1. Download the desired filter `.py` file
2. Navigate to **Admin Panel****Settings****Functions**
3. Upload the file and configure settings
4. Enable the filter in chat settings or globally
---
## Development Template
```python
"""
title: My Custom Filter
author: Your Name
version: 1.0.0
description: Description of your filter plugin
"""
from pydantic import BaseModel, Field
from typing import Optional
class Filter:
class Valves(BaseModel):
priority: int = Field(
default=0,
description="Filter priority (lower = earlier execution)"
)
enabled: bool = Field(
default=True,
description="Enable/disable this filter"
)
def __init__(self):
self.valves = self.Valves()
async def inlet(
self,
body: dict,
__user__: Optional[dict] = None,
__metadata__: Optional[dict] = None
) -> dict:
"""Process messages before sending to LLM."""
if not self.valves.enabled:
return body
# Your inlet logic here
messages = body.get("messages", [])
return body
async def outlet(
self,
body: dict,
__user__: Optional[dict] = None,
__metadata__: Optional[dict] = None
) -> dict:
"""Process responses before displaying."""
if not self.valves.enabled:
return body
# Your outlet logic here
return body
```
For more details, check our [Plugin Development Guide](../../development/plugin-guide.md).

92
docs/plugins/index.md Normal file
View File

@@ -0,0 +1,92 @@
# Plugin Center
Welcome to the OpenWebUI Extras Plugin Center! Here you'll find a comprehensive collection of plugins to enhance your OpenWebUI experience.
## Plugin Types
OpenWebUI supports four types of plugins, each serving a different purpose:
<div class="grid cards" markdown>
- :material-gesture-tap:{ .lg .middle } **Actions**
---
Add custom buttons below messages to trigger specific actions like generating mind maps, exporting data, or creating visualizations.
[:octicons-arrow-right-24: Browse Actions](actions/index.md)
- :material-filter:{ .lg .middle } **Filters**
---
Process and modify messages before they reach the LLM or after responses are generated. Perfect for context enhancement and compression.
[:octicons-arrow-right-24: Browse Filters](filters/index.md)
- :material-pipe:{ .lg .middle } **Pipes**
---
Create custom model integrations or transform LLM responses. Connect to external APIs or implement custom model logic.
[:octicons-arrow-right-24: Browse Pipes](pipes/index.md)
- :material-pipe-wrench:{ .lg .middle } **Pipelines**
---
Complex workflows that combine multiple processing steps. Ideal for advanced use cases requiring multi-step transformations.
[:octicons-arrow-right-24: Browse Pipelines](pipelines/index.md)
</div>
---
## All Plugins at a Glance
| Plugin | Type | Description | Version |
|--------|------|-------------|---------|
| [Smart Mind Map](actions/smart-mind-map.md) | Action | Generate interactive mind maps from text | 0.7.2 |
| [Knowledge Card](actions/knowledge-card.md) | Action | Create beautiful learning flashcards | 0.2.0 |
| [Export to Excel](actions/export-to-excel.md) | Action | Export chat history to Excel files | 1.0.0 |
| [Summary](actions/summary.md) | Action | Text summarization tool | 1.0.0 |
| [Async Context Compression](filters/async-context-compression.md) | Filter | Intelligent context compression | 1.0.0 |
| [Context Enhancement](filters/context-enhancement.md) | Filter | Enhance chat context | 1.0.0 |
| [Gemini Manifold Companion](filters/gemini-manifold-companion.md) | Filter | Companion for Gemini Manifold | 1.0.0 |
| [Gemini Manifold](pipes/gemini-manifold.md) | Pipe | Gemini model integration | 1.0.0 |
| [MoE Prompt Refiner](pipelines/moe-prompt-refiner.md) | Pipeline | Multi-model prompt refinement | 1.0.0 |
---
## Installation Guide
### Step 1: Download the Plugin
Click on any plugin above to view its documentation and download the `.py` file.
### Step 2: Upload to OpenWebUI
1. Open OpenWebUI and navigate to **Admin Panel****Settings****Functions**
2. Click the **+** button to add a new function
3. Upload the downloaded `.py` file
4. Configure any required settings (API keys, options, etc.)
### Step 3: Enable and Use
1. Refresh the page after uploading
2. For **Actions**: Look for the plugin button in the message action bar
3. For **Filters**: Enable in your chat settings or globally
4. For **Pipes**: Select the custom model from the model dropdown
5. For **Pipelines**: Configure and activate in the pipeline settings
---
## Plugin Compatibility
!!! info "OpenWebUI Version"
Most plugins in this collection are designed for OpenWebUI **v0.3.0** and later. Please check individual plugin documentation for specific version requirements.
!!! warning "Dependencies"
Some plugins may require additional Python packages. Check each plugin's documentation for required dependencies.

View File

@@ -0,0 +1,63 @@
# Pipeline Plugins
Pipelines are complex workflows that combine multiple processing steps for advanced use cases.
## What are Pipelines?
Pipelines extend beyond simple transformations to implement:
- :material-workflow: Multi-step processing workflows
- :material-source-merge: Model orchestration
- :material-robot-industrial: Advanced agent behaviors
- :material-cog-box: Complex business logic
---
## Available Pipeline Plugins
<div class="grid cards" markdown>
- :material-view-module:{ .lg .middle } **MoE Prompt Refiner**
---
Refines prompts for Mixture of Experts (MoE) summary requests to generate high-quality comprehensive reports.
**Version:** 1.0.0
[:octicons-arrow-right-24: Documentation](moe-prompt-refiner.md)
</div>
---
## How Pipelines Differ
| Feature | Filters | Pipes | Pipelines |
|---------|---------|-------|-----------|
| Complexity | Simple | Medium | High |
| Use Case | Message processing | Model integration | Multi-step workflows |
| Execution | Before/after LLM | As LLM | Custom orchestration |
| Dependencies | Minimal | API access | Often multiple services |
---
## Quick Installation
1. Download the pipeline `.py` file
2. Navigate to **Admin Panel****Settings****Functions**
3. Upload and configure required services
4. Enable the pipeline
---
## Development Considerations
Pipelines often require:
- Multiple API integrations
- State management across steps
- Error handling at each stage
- Performance optimization
See the [Plugin Development Guide](../../development/plugin-guide.md) for detailed guidance.

View File

@@ -0,0 +1,109 @@
# MoE Prompt Refiner
<span class="category-badge pipeline">Pipeline</span>
<span class="version-badge">v1.0.0</span>
Refines prompts for Mixture of Experts (MoE) summary requests to generate high-quality comprehensive reports.
---
## Overview
The MoE Prompt Refiner is an advanced pipeline that optimizes prompts before sending them to multiple expert models, then synthesizes the responses into comprehensive, high-quality reports.
## Features
- :material-view-module: **Multi-Model**: Leverages multiple AI models
- :material-text-search: **Prompt Optimization**: Refines prompts for best results
- :material-merge: **Response Synthesis**: Combines expert responses
- :material-file-document: **Report Generation**: Creates structured reports
---
## Installation
1. Download the pipeline file: [`moe_prompt_refiner.py`](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/pipelines)
2. Upload to OpenWebUI: **Admin Panel****Settings****Functions**
3. Configure expert models and settings
4. Enable the pipeline
---
## How It Works
```mermaid
graph TD
A[User Prompt] --> B[Prompt Refiner]
B --> C[Expert Model 1]
B --> D[Expert Model 2]
B --> E[Expert Model N]
C --> F[Response Synthesizer]
D --> F
E --> F
F --> G[Comprehensive Report]
```
---
## Configuration
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `expert_models` | list | `[]` | List of models to consult |
| `synthesis_model` | string | `"auto"` | Model for synthesizing responses |
| `report_format` | string | `"markdown"` | Output format |
---
## Use Cases
- **Research Reports**: Gather insights from multiple AI perspectives
- **Comprehensive Analysis**: Multi-faceted problem analysis
- **Decision Support**: Balanced recommendations from diverse models
- **Content Creation**: Rich, multi-perspective content
---
## Example
**Input Prompt:**
```
Analyze the pros and cons of microservices architecture
```
**Output Report:**
```markdown
# Microservices Architecture Analysis
## Executive Summary
Based on analysis from multiple expert perspectives...
## Advantages
1. **Scalability** (Expert A)...
2. **Technology Flexibility** (Expert B)...
## Disadvantages
1. **Complexity** (Expert A)...
2. **Distributed System Challenges** (Expert C)...
## Recommendations
Synthesized recommendations based on expert consensus...
```
---
## Requirements
!!! note "Prerequisites"
- OpenWebUI v0.3.0 or later
- Access to multiple LLM models
- Sufficient API quotas for multi-model queries
!!! warning "Resource Usage"
This pipeline makes multiple API calls per request. Monitor your usage and costs.
---
## Source Code
[:fontawesome-brands-github: View on GitHub](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/pipelines){ .md-button }

View File

@@ -0,0 +1,106 @@
# Gemini Manifold
<span class="category-badge pipe">Pipe</span>
<span class="version-badge">v1.0.0</span>
Integration pipeline for Google's Gemini models with full streaming support.
---
## Overview
The Gemini Manifold pipe provides seamless integration with Google's Gemini AI models. It exposes Gemini models as selectable options in OpenWebUI, allowing you to use them just like any other model.
## Features
- :material-google: **Full Gemini Support**: Access all Gemini model variants
- :material-stream: **Streaming**: Real-time response streaming
- :material-image: **Multimodal**: Support for images and text
- :material-shield: **Error Handling**: Robust error management
- :material-tune: **Configurable**: Customize model parameters
---
## Installation
1. Download the plugin file: [`gemini_manifold.py`](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/pipes/gemini_mainfold)
2. Upload to OpenWebUI: **Admin Panel****Settings****Functions**
3. Configure your Gemini API key
4. Select Gemini models from the model dropdown
---
## Configuration
| Option | Type | Required | Description |
|--------|------|----------|-------------|
| `GEMINI_API_KEY` | string | Yes | Your Google AI Studio API key |
| `DEFAULT_MODEL` | string | No | Default Gemini model to use |
| `TEMPERATURE` | float | No | Response temperature (0-1) |
| `MAX_TOKENS` | integer | No | Maximum response tokens |
---
## Available Models
When configured, the following models become available:
- `gemini-pro` - Text-only model
- `gemini-pro-vision` - Multimodal model
- `gemini-1.5-pro` - Latest Pro model
- `gemini-1.5-flash` - Fast response model
---
## Usage
1. After installation, go to any chat
2. Open the model selector dropdown
3. Look for models prefixed with your pipe name
4. Select a Gemini model
5. Start chatting!
---
## Getting an API Key
1. Visit [Google AI Studio](https://makersuite.google.com/app/apikey)
2. Create a new API key
3. Copy the key and paste it in the plugin configuration
!!! warning "API Key Security"
Keep your API key secure. Never share it publicly or commit it to version control.
---
## Companion Filter
For enhanced functionality, consider installing the [Gemini Manifold Companion](../filters/gemini-manifold-companion.md) filter.
---
## Requirements
!!! note "Prerequisites"
- OpenWebUI v0.3.0 or later
- Valid Gemini API key
- Internet access to Google AI APIs
---
## Troubleshooting
??? question "Models not appearing?"
Ensure your API key is correctly configured and the plugin is enabled.
??? question "API errors?"
Check your API key validity and quota limits in Google AI Studio.
??? question "Slow responses?"
Consider using `gemini-1.5-flash` for faster response times.
---
## Source Code
[:fontawesome-brands-github: View on GitHub](https://github.com/Fu-Jie/awesome-openwebui/tree/main/plugins/pipes/gemini_mainfold){ .md-button }

133
docs/plugins/pipes/index.md Normal file
View File

@@ -0,0 +1,133 @@
# Pipe Plugins
Pipe plugins create custom model integrations or transform LLM responses. They appear as selectable models in the OpenWebUI interface.
## What are Pipes?
Pipes allow you to:
- :material-api: Connect to external AI APIs (Gemini, Claude, etc.)
- :material-robot: Create custom model wrappers
- :material-cog-transfer: Transform requests and responses
- :material-middleware: Implement middleware logic
---
## Available Pipe Plugins
<div class="grid cards" markdown>
- :material-google:{ .lg .middle } **Gemini Manifold**
---
Integration pipeline for Google's Gemini models with full streaming support.
**Version:** 1.0.0
[:octicons-arrow-right-24: Documentation](gemini-manifold.md)
</div>
---
## How Pipes Work
```mermaid
graph LR
A[User selects Pipe as Model] --> B[Pipe receives request]
B --> C[Transform/Route request]
C --> D[External API / Custom Logic]
D --> E[Return response]
E --> F[Display to User]
```
### The `pipes` Method
Defines what models this pipe provides:
```python
def pipes(self):
return [
{"id": "my-model", "name": "My Custom Model"},
{"id": "my-model-fast", "name": "My Custom Model (Fast)"}
]
```
### The `pipe` Method
Handles the actual request processing:
```python
def pipe(self, body: dict) -> Generator:
# Process the request
messages = body.get("messages", [])
# Call external API or custom logic
response = call_external_api(messages)
# Return response (can be streaming)
return response
```
---
## Quick Installation
1. Download the desired pipe `.py` file
2. Navigate to **Admin Panel****Settings****Functions**
3. Upload the file and configure API keys
4. The pipe will appear as a selectable model
---
## Development Template
```python
"""
title: My Custom Pipe
author: Your Name
version: 1.0.0
description: Description of your pipe plugin
"""
from pydantic import BaseModel, Field
from typing import Generator, Iterator, Union
class Pipe:
class Valves(BaseModel):
API_KEY: str = Field(
default="",
description="API key for the external service"
)
API_URL: str = Field(
default="https://api.example.com",
description="API endpoint URL"
)
def __init__(self):
self.valves = self.Valves()
def pipes(self) -> list[dict]:
"""Define available models."""
return [
{"id": "my-model", "name": "My Custom Model"},
]
def pipe(
self,
body: dict
) -> Union[str, Generator, Iterator]:
"""Process the request and return response."""
messages = body.get("messages", [])
model = body.get("model", "")
# Your logic here
# Can return:
# - str: Single response
# - Generator/Iterator: Streaming response
return "Response from custom pipe"
```
For more details, check our [Plugin Development Guide](../../development/plugin-guide.md).

102
docs/prompts/index.md Normal file
View File

@@ -0,0 +1,102 @@
# Prompts
Discover carefully crafted system prompts to enhance your AI interactions.
---
## What are Prompts?
Prompts are pre-written instructions that guide AI behavior. A well-crafted prompt can:
- :material-target: Focus the AI on specific tasks
- :material-format-quote-close: Set the desired tone and style
- :material-school: Establish expertise and knowledge boundaries
- :material-shield-check: Add safety and quality guidelines
---
## Browse the Library
<div class="grid cards" markdown>
- :material-library:{ .lg .middle } **Full Prompt Library**
---
Browse all available prompts organized by category with one-click copy functionality.
[:octicons-arrow-right-24: Open Library](library.md)
</div>
---
## Quick Access by Category
### :material-code-braces: Coding & Development
Perfect for programming assistance, code review, and debugging.
- [Senior Developer Assistant](library.md#senior-developer-assistant)
- [Code Debugger](library.md#code-debugger)
- [Code Explainer](library.md#code-explainer)
### :material-bullhorn: Marketing & Content
For content creation, copywriting, and marketing strategies.
- [Content Writer](library.md#content-writer)
- [Marketing Strategist](library.md#marketing-strategist)
### :material-file-document: Writing & Editing
Academic writing, paper polishing, and document editing.
- [Academic Paper Polisher](library.md#academic-paper-polisher)
- [Document Formatter](library.md#document-formatter)
### :material-theater: Role Play & Creative
Creative scenarios, storytelling, and interactive experiences.
- [Character Role Player](library.md#character-role-player)
- [Story Collaborator](library.md#story-collaborator)
---
## How to Use
### Method 1: System Prompt
1. Copy the prompt from the [Library](library.md)
2. Go to OpenWebUI **Settings****Personalization**
3. Paste in the **System Prompt** field
4. Save and start a new conversation
### Method 2: In-Chat Prompt
1. Copy the prompt from the [Library](library.md)
2. In any conversation, click the **Prompt** button
3. Paste and save as a reusable prompt
4. Select it from your saved prompts anytime
---
## Best Practices
!!! tip "Customization"
Feel free to modify prompts to better fit your specific needs. Add context, adjust tone, or combine multiple prompts.
!!! tip "Iteration"
If the AI's response isn't quite right, refine the prompt and try again. Small changes can have big impacts.
!!! tip "Specificity"
The more specific your prompt, the better the results. Include examples, constraints, and desired output formats.
---
## Contribute
Have a great prompt? Share it with the community!
[:octicons-heart-fill-24:{ .heart } Submit a Prompt](../contributing.md){ .md-button }

344
docs/prompts/library.md Normal file
View File

@@ -0,0 +1,344 @@
# Prompt Library
Welcome to the OpenWebUI Extras Prompt Library! Find carefully crafted prompts for various use cases.
---
## Browse by Category
<div class="grid cards" markdown>
- :material-code-braces:{ .lg .middle } **Coding & Development**
---
Programming assistance, code review, debugging, and development best practices.
[:octicons-arrow-right-24: Browse Coding Prompts](#coding-development)
- :material-bullhorn:{ .lg .middle } **Marketing & Content**
---
Content creation, copywriting, brand messaging, and marketing strategies.
[:octicons-arrow-right-24: Browse Marketing Prompts](#marketing-content)
- :material-file-document:{ .lg .middle } **Writing & Editing**
---
Academic writing, paper polishing, grammar checking, and document editing.
[:octicons-arrow-right-24: Browse Writing Prompts](#writing-editing)
- :material-theater:{ .lg .middle } **Role Play & Creative**
---
Character roles, creative scenarios, and interactive storytelling.
[:octicons-arrow-right-24: Browse Creative Prompts](#role-play-creative)
</div>
---
## How to Use Prompts
1. Find a prompt below that matches your needs
2. Click the **Copy** button on the code block
3. In OpenWebUI, click the "Prompt" button or paste as a System Prompt
4. Customize the prompt if needed
5. Start your conversation!
---
## Coding & Development { #coding-development }
### 🔧 Senior Developer Assistant
An expert programming assistant that provides clean, well-documented code.
```text
You are an expert senior software developer with extensive experience across multiple programming languages and frameworks. Your role is to:
1. Write clean, efficient, and well-documented code
2. Follow best practices and design patterns
3. Provide clear explanations for complex concepts
4. Suggest improvements and optimizations
5. Consider edge cases and error handling
When writing code:
- Use meaningful variable and function names
- Include comments for complex logic
- Follow the language's style guidelines
- Provide usage examples when appropriate
When reviewing code:
- Identify potential bugs and security issues
- Suggest performance improvements
- Check for code maintainability
- Recommend refactoring when beneficial
Always explain your reasoning and be ready to iterate based on feedback.
```
---
### 🐛 Code Debugger
A systematic approach to debugging code issues.
```text
You are an expert code debugger. When presented with code that has issues:
1. **Analyze**: First, read through the code carefully to understand its purpose
2. **Identify**: Locate potential bugs, errors, or issues
3. **Explain**: Clearly describe what's wrong and why it's problematic
4. **Fix**: Provide the corrected code with explanations
5. **Prevent**: Suggest best practices to avoid similar issues
Debug approach:
- Check for syntax errors first
- Verify logic flow and conditions
- Look for edge cases and boundary conditions
- Examine variable scope and lifecycle
- Consider thread safety if applicable
- Check error handling completeness
Format your response:
- 🔴 **Issue Found**: Description of the problem
- 🔍 **Root Cause**: Why this happened
- ✅ **Solution**: Fixed code with explanation
- 💡 **Prevention**: Tips to avoid this in future
```
---
### 📚 Code Explainer
Break down complex code into understandable explanations.
```text
You are a patient and thorough code educator. When explaining code:
1. Start with a high-level overview of what the code does
2. Break down the code into logical sections
3. Explain each section step by step
4. Use analogies and real-world examples when helpful
5. Highlight important patterns or techniques used
6. Point out any clever tricks or non-obvious behavior
Adjust your explanation based on:
- The apparent complexity of the code
- The user's indicated experience level
- The programming language conventions
Always encourage questions and provide additional resources when appropriate.
```
---
## Marketing & Content { #marketing-content }
### 📝 Content Writer
Create engaging content for various platforms and purposes.
```text
You are an experienced content writer and marketing specialist. Your role is to create compelling, engaging content tailored to specific audiences and platforms.
When creating content:
1. **Understand the Goal**: Clarify the purpose (inform, persuade, entertain)
2. **Know the Audience**: Consider demographics, interests, pain points
3. **Match the Platform**: Adapt tone and format for the medium
4. **Hook the Reader**: Start with compelling openings
5. **Deliver Value**: Provide useful, actionable information
6. **Call to Action**: Guide readers to the next step
Writing principles:
- Use clear, concise language
- Break up text for readability
- Include relevant examples
- Optimize for SEO when appropriate
- Maintain brand voice consistency
Available formats:
- Blog posts and articles
- Social media content
- Email campaigns
- Product descriptions
- Landing page copy
- Press releases
```
---
### 🎯 Marketing Strategist
Develop comprehensive marketing strategies and campaigns.
```text
You are a strategic marketing consultant with expertise in digital marketing, brand development, and campaign optimization.
Your approach:
1. **Analysis**: Understand the business, market, and competition
2. **Goals**: Define clear, measurable objectives
3. **Strategy**: Develop a comprehensive plan
4. **Tactics**: Recommend specific actions and channels
5. **Metrics**: Identify KPIs and measurement methods
Areas of expertise:
- Digital marketing (SEO, SEM, Social Media)
- Content marketing and strategy
- Brand positioning and messaging
- Customer journey mapping
- Marketing automation
- Analytics and optimization
When providing advice:
- Base recommendations on data and best practices
- Consider budget constraints
- Prioritize high-impact activities
- Provide actionable next steps
- Include success metrics
```
---
## Writing & Editing { #writing-editing }
### ✍️ Academic Paper Polisher
Improve academic writing for clarity, style, and impact.
```text
You are an expert academic editor specializing in research paper improvement. Your role is to enhance academic writing while maintaining the author's voice and intent.
Editing focus areas:
1. **Clarity**: Simplify complex sentences without losing meaning
2. **Conciseness**: Remove redundancy and wordiness
3. **Flow**: Improve transitions and logical progression
4. **Grammar**: Correct errors and improve syntax
5. **Style**: Ensure consistency and appropriate academic tone
Specific improvements:
- Active voice where appropriate
- Precise word choice
- Parallel structure
- Clear topic sentences
- Effective paragraph organization
- Proper citation integration
Format your feedback:
- Provide the edited text
- Highlight major changes with explanations
- Suggest alternatives when appropriate
- Maintain the original meaning and intent
```
---
### 📄 Document Formatter
Professional document formatting and structure.
```text
You are a professional document specialist. Help users create well-structured, properly formatted documents.
Services:
1. **Structure**: Organize content logically
2. **Format**: Apply consistent formatting
3. **Style**: Ensure professional appearance
4. **Templates**: Provide document templates
5. **Standards**: Follow industry conventions
Document types:
- Business reports
- Technical documentation
- Proposals and pitches
- Meeting minutes
- Standard operating procedures
- User guides and manuals
When formatting:
- Use clear headings and hierarchy
- Include appropriate white space
- Create scannable bullet points
- Add tables and visuals when helpful
- Ensure accessibility
```
---
## Role Play & Creative { #role-play-creative }
### 🎭 Character Role Player
Engaging interactive role-play experiences.
```text
You are a skilled role-play facilitator capable of embodying various characters and scenarios.
Guidelines:
1. **Stay in Character**: Maintain consistent personality and knowledge
2. **Be Reactive**: Respond naturally to user inputs
3. **Build the World**: Add relevant details and atmosphere
4. **Advance the Story**: Keep the narrative moving forward
5. **Respect Boundaries**: Keep content appropriate
Character elements:
- Distinct voice and mannerisms
- Consistent background and motivations
- Realistic knowledge limitations
- Emotional depth and reactions
- Growth and development over time
Scenarios available:
- Historical figures
- Fictional characters
- Professional roles (interview practice)
- Language practice partners
- Creative storytelling
```
---
### 📖 Story Collaborator
Collaborative creative writing and storytelling.
```text
You are a creative writing partner and story collaborator. Help users develop and write engaging narratives.
Collaboration modes:
1. **Co-writing**: Take turns writing story segments
2. **Brainstorming**: Generate ideas and plot points
3. **Development**: Flesh out characters and settings
4. **Editing**: Improve existing creative writing
5. **Feedback**: Provide constructive critique
Story elements to develop:
- Compelling characters with depth
- Engaging plots with tension
- Vivid settings and world-building
- Natural dialogue
- Meaningful themes
- Satisfying resolutions
When collaborating:
- Match the user's style and tone
- Offer suggestions, not dictations
- Build on their ideas
- Keep the story consistent
- Encourage creativity
```
---
## Submit Your Prompts
Have a great prompt to share? We'd love to include it!
[:octicons-heart-fill-24:{ .heart } Contribute a Prompt](../contributing.md){ .md-button }

195
docs/stylesheets/extra.css Normal file
View File

@@ -0,0 +1,195 @@
/* Custom styles for OpenWebUI Extras Documentation */
/* Hero Section */
.hero-section {
text-align: center;
padding: 2rem 0;
margin-bottom: 2rem;
}
.hero-content h1 {
font-size: 2.5rem;
margin-bottom: 1rem;
}
.hero-content p {
font-size: 1.2rem;
color: var(--md-default-fg-color--light);
margin-bottom: 2rem;
}
/* Button styling */
.md-button {
margin: 0.5rem;
}
/* Grid cards enhancement */
.grid.cards > ul > li {
transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
}
.grid.cards > ul > li:hover {
transform: translateY(-4px);
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
}
/* Icon styling in cards */
.grid.cards .lg {
font-size: 2rem;
}
.grid.cards .middle {
vertical-align: middle;
}
/* Heart icon color */
.heart {
color: #e91e63;
}
/* Code block enhancements */
.highlight pre {
border-radius: 8px;
}
/* Admonition styling */
.admonition {
border-radius: 8px;
}
/* Footer stats */
.footer-stats {
text-align: center;
padding: 2rem 0;
color: var(--md-default-fg-color--light);
}
/* Plugin card styling */
.plugin-card {
border: 1px solid var(--md-default-fg-color--lightest);
border-radius: 8px;
padding: 1.5rem;
margin-bottom: 1rem;
transition: box-shadow 0.2s ease-in-out;
}
.plugin-card:hover {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.plugin-card h3 {
margin-top: 0;
}
.plugin-meta {
display: flex;
gap: 1rem;
flex-wrap: wrap;
margin-top: 0.5rem;
}
.plugin-meta span {
display: inline-flex;
align-items: center;
gap: 0.25rem;
font-size: 0.875rem;
color: var(--md-default-fg-color--light);
}
/* Prompt card styling */
.prompt-card {
background: var(--md-code-bg-color);
border-radius: 8px;
padding: 1.5rem;
margin-bottom: 1.5rem;
}
.prompt-card h4 {
margin-top: 0;
color: var(--md-primary-fg-color);
}
/* Category badges */
.category-badge {
display: inline-block;
padding: 0.25rem 0.75rem;
border-radius: 999px;
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
}
.category-badge.action {
background: #e3f2fd;
color: #1976d2;
}
.category-badge.filter {
background: #f3e5f5;
color: #7b1fa2;
}
.category-badge.pipe {
background: #e8f5e9;
color: #388e3c;
}
.category-badge.pipeline {
background: #fff3e0;
color: #f57c00;
}
/* Dark mode adjustments */
[data-md-color-scheme="slate"] .category-badge.action {
background: #1565c0;
color: #e3f2fd;
}
[data-md-color-scheme="slate"] .category-badge.filter {
background: #6a1b9a;
color: #f3e5f5;
}
[data-md-color-scheme="slate"] .category-badge.pipe {
background: #2e7d32;
color: #e8f5e9;
}
[data-md-color-scheme="slate"] .category-badge.pipeline {
background: #e65100;
color: #fff3e0;
}
/* Version badge */
.version-badge {
display: inline-block;
padding: 0.125rem 0.5rem;
background: var(--md-primary-fg-color);
color: white;
border-radius: 4px;
font-size: 0.75rem;
font-family: var(--md-code-font-family);
}
/* Compatibility notice */
.compatibility-notice {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.5rem 1rem;
background: var(--md-code-bg-color);
border-radius: 4px;
font-size: 0.875rem;
margin: 1rem 0;
}
/* Table enhancements */
.md-typeset table:not([class]) {
border-radius: 8px;
overflow: hidden;
}
/* Navigation tabs styling */
.md-tabs {
background: var(--md-primary-fg-color);
}

172
mkdocs.yml Normal file
View File

@@ -0,0 +1,172 @@
# MkDocs Configuration for OpenWebUI Extras
# Site Information
site_name: OpenWebUI Extras
site_description: A collection of enhancements, plugins, and prompts for OpenWebUI
site_author: Fu-Jie
site_url: https://fu-jie.github.io/awesome-openwebui/
# Repository
repo_name: Fu-Jie/awesome-openwebui
repo_url: https://github.com/Fu-Jie/awesome-openwebui
edit_uri: edit/main/docs/
# Copyright
copyright: Copyright &copy; 2024 OpenWebUI Extras Contributors
# Theme Configuration
theme:
name: material
language: en
# Logo and Icons
icon:
logo: material/robot-happy-outline
repo: fontawesome/brands/github
# Color Palette with Light/Dark Toggle
palette:
# Light mode
- media: "(prefers-color-scheme: light)"
scheme: default
primary: indigo
accent: blue
toggle:
icon: material/brightness-7
name: Switch to dark mode
# Dark mode
- media: "(prefers-color-scheme: dark)"
scheme: slate
primary: indigo
accent: blue
toggle:
icon: material/brightness-4
name: Switch to light mode
# Navigation Features
features:
- navigation.tabs
- navigation.tabs.sticky
- navigation.sections
- navigation.expand
- navigation.path
- navigation.top
- navigation.footer
- search.highlight
- search.suggest
- search.share
- content.code.copy
- content.code.annotate
- content.tabs.link
- toc.follow
# Custom fonts
font:
text: Roboto
code: Roboto Mono
# Plugins
plugins:
- search:
separator: '[\s\-,:!=\[\]()"`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])'
- minify:
minify_html: true
# Markdown Extensions
markdown_extensions:
# Python Markdown
- abbr
- admonition
- attr_list
- def_list
- footnotes
- md_in_html
- toc:
permalink: true
toc_depth: 3
# Python Markdown Extensions
- pymdownx.arithmatex:
generic: true
- pymdownx.betterem:
smart_enable: all
- pymdownx.caret
- pymdownx.details
- pymdownx.emoji:
emoji_index: !!python/name:material.extensions.emoji.twemoji
emoji_generator: !!python/name:material.extensions.emoji.to_svg
- pymdownx.highlight:
anchor_linenums: true
line_spans: __span
pygments_lang_class: true
- pymdownx.inlinehilite
- pymdownx.keys
- pymdownx.magiclink:
normalize_issue_symbols: true
repo_url_shorthand: true
user: Fu-Jie
repo: awesome-openwebui
- pymdownx.mark
- pymdownx.smartsymbols
- pymdownx.snippets
- pymdownx.superfences:
custom_fences:
- name: mermaid
class: mermaid
format: !!python/name:pymdownx.superfences.fence_code_format
- pymdownx.tabbed:
alternate_style: true
combine_header_slug: true
- pymdownx.tasklist:
custom_checkbox: true
- pymdownx.tilde
# Extra Configuration
extra:
social:
- icon: fontawesome/brands/github
link: https://github.com/Fu-Jie/awesome-openwebui
generator: false
# Analytics (optional - add your tracking ID)
# analytics:
# provider: google
# property: G-XXXXXXXXXX
# Extra CSS
extra_css:
- stylesheets/extra.css
# Navigation Structure
nav:
- Home: index.md
- Plugins:
- plugins/index.md
- Actions:
- plugins/actions/index.md
- Smart Mind Map: plugins/actions/smart-mind-map.md
- Knowledge Card: plugins/actions/knowledge-card.md
- Export to Excel: plugins/actions/export-to-excel.md
- Summary: plugins/actions/summary.md
- Filters:
- plugins/filters/index.md
- Async Context Compression: plugins/filters/async-context-compression.md
- Context Enhancement: plugins/filters/context-enhancement.md
- Gemini Manifold Companion: plugins/filters/gemini-manifold-companion.md
- Pipes:
- plugins/pipes/index.md
- Gemini Manifold: plugins/pipes/gemini-manifold.md
- Pipelines:
- plugins/pipelines/index.md
- MoE Prompt Refiner: plugins/pipelines/moe-prompt-refiner.md
- Prompts:
- prompts/index.md
- prompts/library.md
- Enhancements:
- enhancements/index.md
- enhancements/guide.md
- Development:
- development/index.md
- Plugin Development Guide: development/plugin-guide.md
- Contributing: contributing.md

12
requirements.txt Normal file
View File

@@ -0,0 +1,12 @@
# MkDocs Documentation Dependencies
# Core MkDocs
mkdocs>=1.5.0
# Material Theme for MkDocs
mkdocs-material>=9.5.0
# Plugins
mkdocs-minify-plugin>=0.7.0
# Optional: Multi-language support (uncomment if needed)
# mkdocs-static-i18n>=1.0.0