{"id":30763950,"url":"https://github.com/daradib/openwebui-plugins","last_synced_at":"2026-05-20T05:08:45.321Z","repository":{"id":312334675,"uuid":"1047162183","full_name":"daradib/openwebui-plugins","owner":"daradib","description":"Custom tools for Open WebUI","archived":false,"fork":false,"pushed_at":"2025-08-29T21:18:01.000Z","size":3,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-29T23:23:31.259Z","etag":null,"topics":["llm","llms","mcp","open-webui","open-webui-tools"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/daradib.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-29T21:02:16.000Z","updated_at":"2025-08-29T21:18:04.000Z","dependencies_parsed_at":"2025-08-29T23:23:41.013Z","dependency_job_id":"22e20f1e-e949-4ad1-9f88-8ff37d01d766","html_url":"https://github.com/daradib/openwebui-plugins","commit_stats":null,"previous_names":["daradib/openwebui-plugins"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/daradib/openwebui-plugins","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daradib%2Fopenwebui-plugins","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daradib%2Fopenwebui-plugins/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daradib%2Fopenwebui-plugins/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daradib%2Fopenwebui-plugins/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daradib","download_url":"https://codeload.github.com/daradib/openwebui-plugins/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daradib%2Fopenwebui-plugins/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273641880,"owners_count":25142248,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["llm","llms","mcp","open-webui","open-webui-tools"],"created_at":"2025-09-04T16:55:41.996Z","updated_at":"2026-05-20T05:08:45.316Z","avatar_url":"https://github.com/daradib.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# openwebui-plugins\n\nA collection of powerful tools to enhance [Open WebUI](https://github.com/open-webui/open-webui) with agentic search and retrieval capabilities for multi-step reasoning and ReAct (Reasoning and Acting) workflows.\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Tools](#tools)\n  - [Document Search](#document-search)\n  - [Linkup Web Search](#linkup-web-search)\n  - [Perplexity Web Search (OpenRouter)](#perplexity-web-search-openrouter)\n- [License](#license)\n\n## Overview\n\nWhile Open WebUI has built-in document and web search functionality, these tools provide **native tool access** that enables models to use search capabilities in agentic workflows. This allows models to:\n\n- **Decompose complex questions** into focused sub-queries\n- **Use search tools iteratively**, refining queries based on results\n- **Reason through multi-step problems** using ReAct (Reasoning and Acting) patterns\n- **Chain multiple searches** to build comprehensive understanding\n\nThis repository provides three specialized tools for Open WebUI:\n\n- **Document Search**: Search document collections with hybrid semantic and keyword matching\n- **Linkup Web Search**: Access current web search results with flexible filtering\n- **Perplexity Web Search (OpenRouter)**: Access search summaries through OpenRouter\n\nEach tool includes automatic citation generation and is designed for seamless integration into agentic reasoning workflows.\n\n## Tools\n\n### Document Search\n\n**Purpose**: Search through document collections with agentic workflow support.\n\nThis tool enables models to iteratively explore knowledge bases through multi-step reasoning. Models can split and chain searches, using results to inform follow-up queries. This approach provides more accurate results, making it perfect for agentic Retrieval-Augmented Generation (RAG).\n\n#### Key Features\n\n- Hybrid semantic and keyword search for better accuracy\n- Optionally specify result count (default: 5 results)\n- Optionally specify file name to filter results (default: None)\n- High-performance vector storage (Qdrant)\n- Configurable embedding models (Ollama, DeepInfra, or HuggingFace)\n- Automatic citation generation with sequential indices for inline references\n- Build utility which supports multiple document extractors (LlamaIndex, PyMuPDF4LLM, or Docling) and efficient incremental updates to the vector store (new, modified, or deleted files)\n\n#### Quick Start\n\n1. **Prepare documents** in a folder\n2. **Build the document store** using the [build utility][build_document_store.py]\n3. **Import the tool** into Open WebUI\n4. **Configure the connection** to the document store\n5. **Create a model** in the workspace with access to the tool and a custom prompt\n\n#### Tool Parameters\n\n- **Required**: `query` - search query\n- **Optional**: `top_k` - number of results (default: 5)\n- **Optional**: `file_name` - filter results by filename (default: None)\n\n#### Tips for Better Accuracy\n\n- Parse PDF files into Markdown or JSON format instead of unstructured plain text.\n- Use a larger embedding model like the Qwen3-Embedding model series (0.6B, 4B, or 8B). For some suggestions from the [MTEB Leaderboard](https://huggingface.co/spaces/mteb/leaderboard), choose English or Multilingual as appropriate, filter the column \"Max Tokens\" \u003e= 1024 (chunk size), and sort by the \"Retrieval\" column.\n- Set the appropriate text instruction in the [build utility][build_document_store.py] arguments if needed, e.g., not needed for the Qwen3-Embedding model series.\n- Set the appropriate query instruction in the tool configuration if needed, e.g., for the Qwen3-Embedding model series the query instruction is: `Given a web search query, retrieve relevant passages that answer the query\\nQuery:`\n- Use a reranker model like Qwen3-Reranker-8B so that more search candidates can be retrieved.\n- Provide context on the documents in the Open WebUI system prompt (see [prompt example](#example-system-prompt)).\n\n#### Building the Document Store\n\nDownload the [build utility][build_document_store.py].\n\n**Basic setup** (fast, good for testing):\n```bash\npython utils/build_document_store.py /path/to/documents\n```\n\n**Recommended setup - example #1** (slower, higher quality):\n```bash\npython utils/build_document_store.py \\\n  --embedding_model Qwen/Qwen3-Embedding-0.6B \\\n  --output_format markdown \\\n  /path/to/documents\n```\n\n**Recommended setup - example #2** (slowest, highest quality):\n```bash\npython utils/build_document_store.py \\\n  --embedding_model Qwen/Qwen3-Embedding-8B \\\n  --output_format json \\\n  /path/to/documents\n```\n\nYou can run the [build utility][build_document_store.py] with all dependencies pre-installed using Docker/Podman.\n\nDocker/Podman build:\n\n```bash\n# CPU variant (default)\ndocker build --build-arg VARIANT=cpu -t build-document-store utils\n\n# Nvidia CUDA variant\ndocker build --build-arg VARIANT=cuda -t build-document-store utils\n\n# AMD ROCm variant\ndocker build --build-arg VARIANT=rocm -t build-document-store utils\n```\n\nDocker/Podman run:\n\n```bash\ndocker run --rm \\\n  --net host \\\n  -v ./cache:/root/.cache \\\n  -v ./documents:/data:ro \\\n  build-document-store \\\n  --qdrant-url http://localhost:6333 \\\n  /data\n```\n\nThe [build utility][build_document_store.py] supports several options:\n\n```\nusage: build_document_store.py [-h] [--qdrant-url QDRANT_URL]\n                               [--qdrant-collection QDRANT_COLLECTION]\n                               [--qdrant-api-key QDRANT_API_KEY]\n                               [--embedding-model EMBEDDING_MODEL]\n                               [--embedding-text-instruction EMBEDDING_TEXT_INSTRUCTION]\n                               [--ollama-base-url OLLAMA_BASE_URL | --deepinfra-api-key DEEPINFRA_API_KEY]\n                               [--format {plain,markdown,json}]\n                               [--workers WORKERS] [--dry-run]\n                               input_dir\n\nBuild a document store using LlamaIndex and Qdrant\n\npositional arguments:\n  input_dir             Directory containing input documents\n\noptions:\n  -h, --help            show this help message and exit\n  --qdrant-url QDRANT_URL\n                        Path to a local Qdrant directory or remote Qdrant\n                        instance (default: ./qdrant_db)\n  --qdrant-collection QDRANT_COLLECTION\n                        Qdrant collection to build (default: llamacollection)\n  --qdrant-api-key QDRANT_API_KEY\n                        API key for remote Qdrant instance (default: None)\n  --embedding-model EMBEDDING_MODEL\n                        Model for dense vector embeddings (default: sentence-\n                        transformers/all-MiniLM-L6-v2)\n  --embedding-text-instruction EMBEDDING_TEXT_INSTRUCTION\n                        Instruction to prepend to text before embedding, e.g.,\n                        'passage:'. Escape sequences like \\n are interpreted.\n                        (default: None)\n  --ollama-base-url OLLAMA_BASE_URL\n                        Base URL for Ollama API. When set, uses Ollama instead\n                        of downloading the embedding model from HuggingFace.\n                        (default: None)\n  --deepinfra-api-key DEEPINFRA_API_KEY\n                        API key for DeepInfra. When set, uses DeepInfra\n                        instead of downloading the embedding model from\n                        HuggingFace. (default: None)\n  --format {plain,markdown,json}\n                        Format to parse PDF files into (default: plain)\n  --workers WORKERS     Number of workers to use for parsing documents,\n                        generating embeddings, and saving to the vector store\n                        (default: None)\n  --dry-run             Compare files between input directory and Qdrant\n                        collection without actually adding or deleting\n                        documents (default: False)\n```\n\nThere are also utilities to [copy from Milvus to Qdrant][copy_milvus_to_qdrant.py] if you're looking to migrate from Milvus as well as to [copy Qdrant collections between servers][copy_qdrant_to_qdrant.py].\n\n[build_document_store.py]: https://github.com/daradib/openwebui-plugins/blob/main/utils/build_document_store.py\n[copy_milvus_to_qdrant.py]: https://github.com/daradib/openwebui-plugins/blob/main/utils/copy_milvus_to_qdrant.py\n[copy_qdrant_to_qdrant.py]: https://github.com/daradib/openwebui-plugins/blob/main/utils/copy_qdrant_to_qdrant.py\n\n#### Example System Prompt\n\n\u003e You are Danesh, a highly specialized AI assistant and expert query engine for a knowledge base of documents.\n\u003e\n\u003e SEARCH STRATEGY:\n\u003e - Decompose complex questions into focused sub-queries\n\u003e - Use the search tool iteratively, refining queries based on results\n\u003e - Gather comprehensive context before synthesizing your final answer\n\u003e\n\u003e RESPONSE REQUIREMENTS:\n\u003e - Base answers STRICTLY and EXCLUSIVELY on search result information\n\u003e - If insufficient information is found, clearly state this limitation\n\u003e - Include inline citations as [1][2][3] when ID numbers are available in search results\n\u003e - Provide factual, accurate, and comprehensive responses\n\u003e\n\u003e SCOPE:\n\u003e - Focus on document search results\n\u003e - For tangentially related queries, acknowledge the connection but redirect to document-specific aspects\n\n### Linkup Web Search\n\n**Purpose**: Enable agentic web search with real-time information gathering.\n\nThis tool empowers models to conduct web research through iterative search strategies. Models can split and chain searches to build comprehensive understanding of topics.\n\n#### Key Features\n\n- Access web search results or AI-generated answers\n- Date range filtering\n- Domain inclusion/exclusion\n- Automatic citation generation with sequential indices for inline references\n\n#### Setup\n\n1. **Import the tool** into Open WebUI (Workspace → Tools)\n2. **Get a Linkup API key** from [Linkup](https://linkup.so/)\n3. **Configure the tool** by clicking the valves settings icon and entering the API key\n\n#### Tool Parameters\n\n- **Required**: `query` - search query\n- **Optional**: `from_date` - search results from this date\n- **Optional**: `to_date` - search results until this date\n- **Optional**: `exclude_domains` - domains to exclude from results\n- **Optional**: `include_domains` - only include results from these domains\n\n#### Output Modes\n\n- **searchResults** (default): returns raw search results with full content and individual citations\n- **sourcedAnswer**: returns an AI-generated answer with source list and citations\n\nChoose `searchResults` for more accurate model grounding or `sourcedAnswer` to reduce token usage.\n\n### Perplexity Web Search (OpenRouter)\n\n**Purpose**: Access search summaries for multi-step reasoning workflows.\n\nThis tool enables models to leverage Perplexity's search summaries. It is adapted from the [Perplexity Web Search Tool](https://openwebui.com/t/abhiactually/perplexity) to support OpenRouter.\n\n#### Key Features\n\n- Access AI-generated answers from web search\n- Configurable model selection\n- Automatic citation generation\n\n#### Setup\n\n1. **Import the tool** into Open WebUI (Workspace → Tools)\n2. **Get an OpenRouter API key** from [OpenRouter](https://openrouter.ai/)\n3. **Configure the tool** by clicking the valves settings icon and entering the API key\n\nThe tool defaults to Perplexity Sonar Pro but can be configured to use other compatible models.\n\n## License\n\nCopyright © 2025 Dara Adib\n\nThis program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License along with this program. If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaradib%2Fopenwebui-plugins","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaradib%2Fopenwebui-plugins","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaradib%2Fopenwebui-plugins/lists"}