Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added assets/Screenshot 2025-11-23 023944.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/Screenshot 2025-11-23 024001.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/Screenshot 2025-11-23 024015.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/Screenshot 2025-11-23 033554.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file modified infrastructure/storage/chromadb/chroma.sqlite3
Binary file not shown.
11 changes: 11 additions & 0 deletions openwebui/pipelines/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
.venv
.env
.git
.gitignore
.github
Dockerfile
examples
docs
*.md
dev.sh
dev-docker.sh
1 change: 1 addition & 0 deletions openwebui/pipelines/.github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
github: tjbck
120 changes: 120 additions & 0 deletions openwebui/pipelines/.github/workflows/build-docker-image.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
name: Build Docker Image

on:
workflow_call:
inputs:
build_args:
required: false
default: ""
type: string
cache_id:
required: true
type: string
extract_flavor:
required: false
default: ""
type: string
image_name:
required: true
type: string
image_tag:
required: false
default: ""
type: string
registry:
required: false
default: ghcr.io
type: string

env:
FULL_IMAGE_NAME: ${{ inputs.registry }}/${{ inputs.image_name }}

jobs:
build-image:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
strategy:
fail-fast: false
matrix:
platform:
- linux/amd64
- linux/arm64

steps:
- name: Prepare
run: |
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV

- name: Checkout repository
uses: actions/checkout@v4

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ${{ inputs.registry }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata for Docker images
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.FULL_IMAGE_NAME }}
tags: |
type=ref,event=branch
type=ref,event=tag
type=sha,prefix=git-
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
${{ inputs.image_tag }}
flavor: |
latest=${{ github.ref == 'refs/heads/main' }}
${{ inputs.extract_flavor }}

- name: Extract metadata for Docker cache
id: cache-meta
uses: docker/metadata-action@v5
with:
images: ${{ env.FULL_IMAGE_NAME }}
tags: |
type=ref,event=branch
flavor: |
prefix=cache-${{ inputs.cache_id }}-${{ matrix.platform }}-

- name: Build Docker image
uses: docker/build-push-action@v5
id: build
with:
context: .
push: true
platforms: ${{ matrix.platform }}
labels: ${{ steps.meta.outputs.labels }}
outputs: type=image,name=${{ env.FULL_IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true
cache-from: type=registry,ref=${{ steps.cache-meta.outputs.tags }}
cache-to: type=registry,ref=${{ steps.cache-meta.outputs.tags }},mode=max
build-args: |
BUILD_HASH=${{ github.sha }}
${{ inputs.build_args }}

- name: Export digest
run: |
mkdir -p /tmp/digests
digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"

- name: Upload digest
uses: actions/upload-artifact@v4
with:
name: digests-${{ inputs.cache_id }}-${{ env.PLATFORM_PAIR }}
path: /tmp/digests/*
if-no-files-found: error
retention-days: 1
60 changes: 60 additions & 0 deletions openwebui/pipelines/.github/workflows/docker-build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: Create and publish Docker images with specific build args

on:
workflow_dispatch:
push:
branches:
- main
- dev

jobs:
build-main-image:
uses: ./.github/workflows/build-docker-image.yaml
with:
image_name: ${{ github.repository }}
cache_id: main

build-cuda-image:
uses: ./.github/workflows/build-docker-image.yaml
with:
image_name: ${{ github.repository }}
cache_id: cuda
image_tag: type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=cuda
extract_flavor: suffix=-cuda,onlatest=true
build_args: |
USE_CUDA=true

build-minimum-image:
uses: ./.github/workflows/build-docker-image.yaml
with:
image_name: ${{ github.repository }}
cache_id: minimum
image_tag: type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=minimum
extract_flavor: suffix=-minimum,onlatest=true
build_args: |
MINIMUM_BUILD=true

merge-main-images:
uses: ./.github/workflows/merge-docker-images.yaml
needs: [build-main-image]
with:
image_name: ${{ github.repository }}
cache_id: main

merge-cuda-images:
uses: ./.github/workflows/merge-docker-images.yaml
needs: [build-cuda-image]
with:
image_name: ${{ github.repository }}
cache_id: cuda
extract_flavor: suffix=-cuda,onlatest=true
extract_tags: type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=cuda

merge-minimum-images:
uses: ./.github/workflows/merge-docker-images.yaml
needs: [build-minimum-image]
with:
image_name: ${{ github.repository }}
cache_id: minimum
extract_flavor: suffix=-minimum,onlatest=true
extract_tags: type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=minimum
71 changes: 71 additions & 0 deletions openwebui/pipelines/.github/workflows/merge-docker-images.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: Merge Docker Images

on:
workflow_call:
inputs:
cache_id:
required: true
type: string
extract_flavor:
required: false
default: ""
type: string
extract_tags:
required: false
default: ""
type: string
image_name:
required: true
type: string
registry:
required: false
default: ghcr.io
type: string

env:
FULL_IMAGE_NAME: ${{ inputs.registry }}/${{ inputs.image_name }}

jobs:
merge-images:
runs-on: ubuntu-latest
steps:
- name: Download digests
uses: actions/download-artifact@v4
with:
pattern: digests-${{ inputs.cache_id }}-*
path: /tmp/digests
merge-multiple: true

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ${{ inputs.registry }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata for Docker images
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.FULL_IMAGE_NAME }}
tags: |
type=ref,event=branch
type=ref,event=tag
type=sha,prefix=git-
${{ inputs.extract_tags }}
flavor: |
latest=${{ github.ref == 'refs/heads/main' }}
${{ inputs.extract_flavor }}

- name: Create manifest list and push
working-directory: /tmp/digests
run: |
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf '${{ env.FULL_IMAGE_NAME }}@sha256:%s ' *)

- name: Inspect image
run: |
docker buildx imagetools inspect ${{ env.FULL_IMAGE_NAME }}:${{ steps.meta.outputs.version }}
12 changes: 12 additions & 0 deletions openwebui/pipelines/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
__pycache__
.env

/litellm


pipelines/*
!pipelines/.gitignore
.DS_Store

.venv
venv/
1 change: 1 addition & 0 deletions openwebui/pipelines/.webui_secret_key
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
o1jkf6Q9i+/33ijt
50 changes: 50 additions & 0 deletions openwebui/pipelines/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
## Contributing to Pipelines

🚀 **Welcome, Contributors!** 🚀

We are thrilled to have you join the Pipelines community! Your contributions are essential to making Pipelines a powerful and versatile framework for extending OpenAI-compatible applications' capabilities. This document provides guidelines to ensure your contributions are smooth and effective.

### 📌 Key Points

- **Scope of Pipelines:** Remember that Pipelines is a framework designed to enhance OpenAI interactions, specifically through a plugin-like approach. Focus your contributions on making Pipelines more robust, flexible, and user-friendly within this context.
- **Open WebUI Integration:** Pipelines is primarily designed to work with Open WebUI. While contributions that expand compatibility with other platforms are welcome, prioritize functionalities that seamlessly integrate with Open WebUI's ecosystem.

### 🚨 Reporting Issues

Encountered a bug or have an idea for improvement? We encourage you to report it! Here's how:

1. **Check Existing Issues:** Browse the [Issues tab](https://github.com/open-webui/pipelines/issues) to see if the issue or suggestion has already been reported.
2. **Open a New Issue:** If it's a new issue, feel free to open one. Follow the issue template for clear and concise reporting. Provide detailed descriptions, steps to reproduce, expected outcomes, and actual results. This helps us understand and resolve the issue efficiently.

### 🧭 Scope of Support

- **Python Fundamentals:** Pipelines leverages Python. Basic Python knowledge is essential for contributing effectively.

## 💡 Contributing

Ready to make a difference? Here's how you can contribute to Pipelines:

### 🛠 Pull Requests

We encourage pull requests to improve Pipelines! Here's the process:

1. **Discuss Your Idea:** If your contribution involves significant changes, discuss it in the [Issues tab](https://github.com/open-webui/pipelines/issues) first. This ensures your idea aligns with the project's vision.
2. **Coding Standards:** Follow the project's coding standards and write clear, descriptive commit messages.
3. **Update Documentation:** If your contribution impacts documentation, update it accordingly.
4. **Submit Your Pull Request:** Submit your pull request and provide a clear summary of your changes.

### 📚 Documentation

Help make Pipelines more accessible by:

- **Writing Tutorials:** Create guides for setting up, using, and customizing Pipelines.
- **Improving Documentation:** Enhance existing documentation for clarity, completeness, and accuracy.
- **Adding Examples:** Contribute pipelines examples that showcase different functionalities and use cases.

### 🤔 Questions & Feedback

Got questions or feedback? Join our [Discord community](https://discord.gg/5rJgQTnV4s) or open an issue. We're here to help!

## 🙏 Thank You!

Your contributions are invaluable to Pipelines' success! We are excited to see what you bring to the project. Together, we can create a powerful and versatile framework for extending OpenAI capabilities. 🌟
Loading