Compare commits
20 Commits
v2026.02.0
...
v0.6.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a5261d184 | ||
|
|
8cdc7723d2 | ||
|
|
a167f51026 | ||
|
|
03ff69f9e0 | ||
|
|
62c69a9a41 | ||
|
|
9bf2a5d2a2 | ||
|
|
13aed46c05 | ||
|
|
02a1668979 | ||
|
|
9760ccb243 | ||
|
|
e2c705fe15 | ||
|
|
37c7bf73c0 | ||
|
|
447e791ab6 | ||
|
|
cde685a364 | ||
|
|
b00206b063 | ||
|
|
e0a838e512 | ||
|
|
b9f4f5f1d6 | ||
|
|
c1afd1fa23 | ||
|
|
eaeaadaf12 | ||
|
|
ee70c6629e | ||
|
|
692971c93c |
@@ -46,6 +46,16 @@
|
|||||||
"ideas"
|
"ideas"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
"login": "abaroni",
|
||||||
|
"name": "Alessandro Baroni",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/u/21365486?v=4",
|
||||||
|
"profile": "https://github.com/abaroni",
|
||||||
|
"contributions": [
|
||||||
|
"ideas"
|
||||||
|
]
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"contributorsPerLine": 7,
|
"contributorsPerLine": 7,
|
||||||
"skipCi": true,
|
"skipCi": true,
|
||||||
|
|||||||
86
README.md
86
README.md
@@ -1,48 +1,72 @@
|
|||||||
# OpenWebUI Extras
|
# OpenWebUI Extras
|
||||||
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
||||||
[](#contributors-)
|
[](#contributors-)
|
||||||
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
||||||
|
|
||||||
English | [中文](./README_CN.md)
|
|
||||||
|
|
||||||
A collection of enhancements, plugins, and prompts for [OpenWebUI](https://github.com/open-webui/open-webui), developed and curated for personal use to extend functionality and improve experience.
|
A collection of enhancements, plugins, and prompts for [OpenWebUI](https://github.com/open-webui/open-webui), developed and curated for personal use to extend functionality and improve experience.
|
||||||
|
|
||||||
<!-- STATS_START -->
|
<!-- STATS_START -->
|
||||||
## 📊 Community Stats
|
## 📊 Community Stats
|
||||||
|
|
||||||
> 🕐 Auto-updated: 2026-02-09 11:10
|
> 🕐 Auto-updated: 2026-02-09 23:25
|
||||||
|
|
||||||
| 👤 Author | 👥 Followers | ⭐ Points | 🏆 Contributions |
|
| 👤 Author | 👥 Followers | ⭐ Points | 🏆 Contributions |
|
||||||
|:---:|:---:|:---:|:---:|
|
| :---: | :---: | :---: | :---: |
|
||||||
| [Fu-Jie](https://openwebui.com/u/Fu-Jie) | **210** | **259** | **43** |
|
| [Fu-Jie](https://openwebui.com/u/Fu-Jie) | **212** | **261** | **44** |
|
||||||
|
|
||||||
| 📝 Posts | ⬇️ Downloads | 👁️ Views | 👍 Upvotes | 💾 Saves |
|
| 📝 Posts | ⬇️ Downloads | 👁️ Views | 👍 Upvotes | 💾 Saves |
|
||||||
|:---:|:---:|:---:|:---:|:---:|
|
| :---: | :---: | :---: | :---: | :---: |
|
||||||
| **20** | **3909** | **45507** | **221** | **264** |
|
| **21** | **3962** | **46159** | **223** | **267** |
|
||||||
|
|
||||||
### 🔥 Top 6 Popular Plugins
|
### 🔥 Top 6 Popular Plugins
|
||||||
|
|
||||||
> 🕐 Auto-updated: 2026-02-09 11:10
|
> 🕐 Auto-updated: 2026-02-09 23:25
|
||||||
|
|
||||||
| Rank | Plugin | Version | Downloads | Views | Updated |
|
| Rank | Plugin | Version | Downloads | Views | Updated |
|
||||||
|:---:|------|:---:|:---:|:---:|:---:|
|
| :---: | :--- | :---: | :---: | :---: | :---: |
|
||||||
| 🥇 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | 0.9.2 | 916 | 8070 | 2026-01-28 |
|
| 🥇 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | 0.9.2 | 922 | 8131 | 2026-01-28 |
|
||||||
| 🥈 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | 1.5.0 | 665 | 6205 | 2026-01-30 |
|
| 🥈 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | 1.5.0 | 670 | 6311 | 2026-01-30 |
|
||||||
| 🥉 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | 0.4.4 | 365 | 2841 | 2026-02-07 |
|
| 🥉 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | 0.4.4 | 370 | 2881 | 2026-02-07 |
|
||||||
| 4️⃣ | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | 1.2.2 | 350 | 3580 | 2026-01-28 |
|
| 4️⃣ | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | 1.2.2 | 355 | 3627 | 2026-01-28 |
|
||||||
| 5️⃣ | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | 0.3.7 | 334 | 1569 | 2026-01-29 |
|
| 5️⃣ | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | 0.3.7 | 339 | 1611 | 2026-01-29 |
|
||||||
| 6️⃣ | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | 1.2.4 | 310 | 4433 | 2026-01-29 |
|
| 6️⃣ | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | 1.2.4 | 313 | 4483 | 2026-01-29 |
|
||||||
|
|
||||||
*See full stats in [Community Stats Report](./docs/community-stats.md)*
|
*See full stats in [Community Stats Report](./docs/community-stats.md)*
|
||||||
<!-- STATS_END -->
|
<!-- STATS_END -->
|
||||||
|
|
||||||
|
## 🌟 Star Features
|
||||||
|
|
||||||
|
### 1. [GitHub Copilot SDK Pipe](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4) [](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4)
|
||||||
|
|
||||||
|
**The ultimate Agent for OpenWebUI.** Supports native code execution (Python/Pandas), raw file analysis, and interactive artifacts.
|
||||||
|
> [!TIP]
|
||||||
|
> **No GitHub Copilot subscription required!** Supports **BYOK (Bring Your Own Key)** mode using your own OpenAI/Anthropic API keys.
|
||||||
|
|
||||||
|
### 2. [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) [](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a)
|
||||||
|
|
||||||
|
**Experience interactive thinking.** Seamlessly transforms complex chat sessions into structured, clickable mind maps for better visual modeling and rapid idea extraction.
|
||||||
|
|
||||||
|
### 3. [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) [](https://openwebui.com/posts/smart_infographic_ad6f0c7f)
|
||||||
|
|
||||||
|
**Professional data storytelling.** Converts raw information into sleek, boardroom-ready infographics powered by AntV, perfect for summarizing long-form content instantly.
|
||||||
|
|
||||||
|
### 4. [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) [](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315)
|
||||||
|
|
||||||
|
**High-fidelity reporting.** Export conversation history into professionally formatted Word documents with preserved headers, code blocks, and math formulas.
|
||||||
|
|
||||||
|
### 5. [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) [](https://openwebui.com/posts/async_context_compression_b1655bc8)
|
||||||
|
|
||||||
|
**Maximize your context window.** Intelligently compresses chat history using LLM logic to save tokens and costs while maintaining a high-quality reasoning chain.
|
||||||
|
|
||||||
## 📦 Project Contents
|
## 📦 Project Contents
|
||||||
|
|
||||||
### 🧩 Plugins
|
<!-- markdownlint-disable MD033 -->
|
||||||
|
<details>
|
||||||
|
<summary><b>🧩 Plugins (Actions, Filters, Pipes, Pipelines)</b></summary>
|
||||||
|
|
||||||
Located in the `plugins/` directory, containing Python-based enhancements:
|
Located in the `plugins/` directory, containing Python-based enhancements:
|
||||||
|
|
||||||
#### Actions
|
### Actions
|
||||||
|
|
||||||
- **Smart Mind Map** (`smart-mind-map`): Generates interactive mind maps from text.
|
- **Smart Mind Map** (`smart-mind-map`): Generates interactive mind maps from text.
|
||||||
- **Smart Infographic** (`infographic`): Transforms text into professional infographics using AntV.
|
- **Smart Infographic** (`infographic`): Transforms text into professional infographics using AntV.
|
||||||
@@ -51,27 +75,36 @@ Located in the `plugins/` directory, containing Python-based enhancements:
|
|||||||
- **Export to Excel** (`export_to_excel`): Exports chat history to Excel files.
|
- **Export to Excel** (`export_to_excel`): Exports chat history to Excel files.
|
||||||
- **Export to Word** (`export_to_docx`): Exports chat history to Word documents.
|
- **Export to Word** (`export_to_docx`): Exports chat history to Word documents.
|
||||||
|
|
||||||
#### Filters
|
### Filters
|
||||||
|
|
||||||
|
- **GitHub Copilot SDK Files Filter** (`github_copilot_sdk_files_filter`): Essential companion for Copilot SDK. Bypasses RAG to ensure full file accessibility for Agents.
|
||||||
|
- **Web Gemini Multimodal Filter** (`web_gemini_multimodel_filter`): Adds multimodal capabilities (PDF, Video, Office) to any model with intelligent routing.
|
||||||
- **Async Context Compression** (`async-context-compression`): Optimizes token usage via context compression.
|
- **Async Context Compression** (`async-context-compression`): Optimizes token usage via context compression.
|
||||||
- **Context Enhancement** (`context_enhancement_filter`): Enhances chat context.
|
- **Context Enhancement** (`context_enhancement_filter`): Enhances chat context.
|
||||||
- **Folder Memory** (`folder-memory`): Automatically extracts project rules from conversations and injects them into the folder's system prompt.
|
- **Folder Memory** (`folder-memory`): Automatically extracts project rules from conversations and injects them into the folder's system prompt.
|
||||||
- **Markdown Normalizer** (`markdown_normalizer`): Fixes common Markdown formatting issues in LLM outputs.
|
- **Markdown Normalizer** (`markdown_normalizer`): Fixes common Markdown formatting issues in LLM outputs.
|
||||||
|
|
||||||
#### Pipes
|
### Pipes
|
||||||
|
|
||||||
- **GitHub Copilot SDK** (`github-copilot-sdk`): Official GitHub Copilot SDK integration. Supports dynamic models, multi-turn conversation, streaming, multimodal input, and infinite sessions.
|
- **GitHub Copilot SDK** (`github-copilot-sdk`): Official GitHub Copilot SDK integration. Supports dynamic models (GPT-4o, Claude 3.5, o1), multi-turn conversation, streaming, and infinite sessions.
|
||||||
|
|
||||||
#### Pipelines
|
### Pipelines
|
||||||
|
|
||||||
- **MoE Prompt Refiner** (`moe_prompt_refiner`): Refines prompts for Mixture of Experts (MoE) summary requests to generate high-quality comprehensive reports.
|
- **MoE Prompt Refiner** (`moe_prompt_refiner`): Refines prompts for Mixture of Experts (MoE) summary requests to generate high-quality comprehensive reports.
|
||||||
|
|
||||||
### 🎯 Prompts
|
</details>
|
||||||
|
<!-- markdownlint-enable MD033 -->
|
||||||
|
|
||||||
Located in the `prompts/` directory, containing fine-tuned System Prompts:
|
<!-- markdownlint-disable MD033 -->
|
||||||
|
<details>
|
||||||
|
<summary><b>🎯 Prompts (System Prompts for various roles)</b></summary>
|
||||||
|
|
||||||
- **Coding**: Programming assistance prompts.
|
System Prompts are managed in the `docs/prompts/` directory:
|
||||||
- **Marketing**: Marketing and copywriting prompts.
|
|
||||||
|
- **[Prompt Library](./docs/prompts/library.md)**: A curated collection of fine-tuned prompts for Coding, Marketing, and Analysis.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
<!-- markdownlint-enable MD033 -->
|
||||||
|
|
||||||
## 🛠️ Extensions
|
## 🛠️ Extensions
|
||||||
|
|
||||||
@@ -135,6 +168,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
|
|||||||
<td align="center" valign="top" width="14.28%"><a href="https://trade.xyz/?ref=BZ1RJRXWO"><img src="https://avatars.githubusercontent.com/u/7317522?v=4?s=100" width="100px;" alt="Raxxoor"/><br /><sub><b>Raxxoor</b></sub></a><br /><a href="https://github.com/Fu-Jie/awesome-openwebui/issues?q=author%3Adhaern" title="Bug reports">🐛</a> <a href="#ideas-dhaern" title="Ideas, Planning, & Feedback">🤔</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://trade.xyz/?ref=BZ1RJRXWO"><img src="https://avatars.githubusercontent.com/u/7317522?v=4?s=100" width="100px;" alt="Raxxoor"/><br /><sub><b>Raxxoor</b></sub></a><br /><a href="https://github.com/Fu-Jie/awesome-openwebui/issues?q=author%3Adhaern" title="Bug reports">🐛</a> <a href="#ideas-dhaern" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/i-iooi-i"><img src="https://avatars.githubusercontent.com/u/1827701?v=4?s=100" width="100px;" alt="ZOLO"/><br /><sub><b>ZOLO</b></sub></a><br /><a href="https://github.com/Fu-Jie/awesome-openwebui/issues?q=author%3Ai-iooi-i" title="Bug reports">🐛</a> <a href="#ideas-i-iooi-i" title="Ideas, Planning, & Feedback">🤔</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/i-iooi-i"><img src="https://avatars.githubusercontent.com/u/1827701?v=4?s=100" width="100px;" alt="ZOLO"/><br /><sub><b>ZOLO</b></sub></a><br /><a href="https://github.com/Fu-Jie/awesome-openwebui/issues?q=author%3Ai-iooi-i" title="Bug reports">🐛</a> <a href="#ideas-i-iooi-i" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://perso.crans.org/grande/"><img src="https://avatars.githubusercontent.com/u/469017?v=4?s=100" width="100px;" alt="Johan Grande"/><br /><sub><b>Johan Grande</b></sub></a><br /><a href="#ideas-nahoj" title="Ideas, Planning, & Feedback">🤔</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://perso.crans.org/grande/"><img src="https://avatars.githubusercontent.com/u/469017?v=4?s=100" width="100px;" alt="Johan Grande"/><br /><sub><b>Johan Grande</b></sub></a><br /><a href="#ideas-nahoj" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||||
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/abaroni"><img src="https://avatars.githubusercontent.com/u/21365486?v=4?s=100" width="100px;" alt="Alessandro Baroni"/><br /><sub><b>Alessandro Baroni</b></sub></a><br /><a href="#ideas-abaroni" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
118
README_CN.md
118
README_CN.md
@@ -7,39 +7,65 @@ OpenWebUI 增强功能集合。包含个人开发与收集的插件、提示词
|
|||||||
<!-- STATS_START -->
|
<!-- STATS_START -->
|
||||||
## 📊 社区统计
|
## 📊 社区统计
|
||||||
|
|
||||||
> 🕐 自动更新于 2026-02-09 11:10
|
> 🕐 自动更新于 2026-02-09 23:25
|
||||||
|
|
||||||
| 👤 作者 | 👥 粉丝 | ⭐ 积分 | 🏆 贡献 |
|
| 👤 作者 | 👥 粉丝 | ⭐ 积分 | 🏆 贡献 |
|
||||||
|:---:|:---:|:---:|:---:|
|
| :---: | :---: | :---: | :---: |
|
||||||
| [Fu-Jie](https://openwebui.com/u/Fu-Jie) | **210** | **259** | **43** |
|
| [Fu-Jie](https://openwebui.com/u/Fu-Jie) | **212** | **261** | **44** |
|
||||||
|
|
||||||
| 📝 发布 | ⬇️ 下载 | 👁️ 浏览 | 👍 点赞 | 💾 收藏 |
|
| 📝 发布 | ⬇️ 下载 | 👁️ 浏览 | 👍 点赞 | 💾 收藏 |
|
||||||
|:---:|:---:|:---:|:---:|:---:|
|
| :---: | :---: | :---: | :---: | :---: |
|
||||||
| **20** | **3909** | **45507** | **221** | **264** |
|
| **21** | **3962** | **46159** | **223** | **267** |
|
||||||
|
|
||||||
### 🔥 热门插件 Top 6
|
### 🔥 热门插件 Top 6
|
||||||
|
|
||||||
> 🕐 自动更新于 2026-02-09 11:10
|
> 🕐 自动更新于 2026-02-09 23:25
|
||||||
|
|
||||||
| 排名 | 插件 | 版本 | 下载 | 浏览 | 更新日期 |
|
| 排名 | 插件 | 版本 | 下载 | 浏览 | 更新日期 |
|
||||||
|:---:|------|:---:|:---:|:---:|:---:|
|
| :---: | :--- | :---: | :---: | :---: | :---: |
|
||||||
| 🥇 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | 0.9.2 | 916 | 8070 | 2026-01-28 |
|
| 🥇 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | 0.9.2 | 922 | 8131 | 2026-01-28 |
|
||||||
| 🥈 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | 1.5.0 | 665 | 6205 | 2026-01-30 |
|
| 🥈 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | 1.5.0 | 670 | 6311 | 2026-01-30 |
|
||||||
| 🥉 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | 0.4.4 | 365 | 2841 | 2026-02-07 |
|
| 🥉 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | 0.4.4 | 370 | 2881 | 2026-02-07 |
|
||||||
| 4️⃣ | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | 1.2.2 | 350 | 3580 | 2026-01-28 |
|
| 4️⃣ | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | 1.2.2 | 355 | 3627 | 2026-01-28 |
|
||||||
| 5️⃣ | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | 0.3.7 | 334 | 1569 | 2026-01-29 |
|
| 5️⃣ | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | 0.3.7 | 339 | 1611 | 2026-01-29 |
|
||||||
| 6️⃣ | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | 1.2.4 | 310 | 4433 | 2026-01-29 |
|
| 6️⃣ | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | 1.2.4 | 313 | 4483 | 2026-01-29 |
|
||||||
|
|
||||||
*完整统计请查看 [社区统计报告](./docs/community-stats.zh.md)*
|
*完整统计请查看 [社区统计报告](./docs/community-stats.zh.md)*
|
||||||
<!-- STATS_END -->
|
<!-- STATS_END -->
|
||||||
|
|
||||||
|
## 🌟 精选功能
|
||||||
|
|
||||||
|
### 1. [GitHub Copilot SDK Pipe](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4) [](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4)
|
||||||
|
|
||||||
|
**OpenWebUI 终极 Agent 增强。** 支持原生代码执行(Python/Pandas)、原始文件直接分析以及交互式 Artifacts。
|
||||||
|
> [!TIP]
|
||||||
|
> **无需 GitHub Copilot 订阅!** 支持 **BYOK (Bring Your Own Key)** 模式,使用你自己的 OpenAI/Anthropic API Key。
|
||||||
|
|
||||||
|
### 2. [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) [](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a)
|
||||||
|
|
||||||
|
**体验浸入式思维。** 将复杂的对话瞬间转化为结构化、可点击的交互式思维导图,助力知识建模与逻辑提取。
|
||||||
|
|
||||||
|
### 3. [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) [](https://openwebui.com/posts/smart_infographic_ad6f0c7f)
|
||||||
|
|
||||||
|
**专业数据叙事。** 将零散信息转化为精美的信息图表(由 AntV 驱动),一键生成学术/汇报级的可视化总结。
|
||||||
|
|
||||||
|
### 4. [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) [](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315)
|
||||||
|
|
||||||
|
**高保真文档导出。** 将对话历史导出为格式完美的 Word 文档,完美保留标题、代码块、LaTeX 公式及 Mermaid 流程图。
|
||||||
|
|
||||||
|
### 5. [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) [](https://openwebui.com/posts/async_context_compression_b1655bc8)
|
||||||
|
|
||||||
|
**挑战 Token 極限。** 采用多专家异步压缩逻辑,在保持高吞吐量推理链的同时,大幅降低 Token 消耗。
|
||||||
|
|
||||||
## 📦 项目内容
|
## 📦 项目内容
|
||||||
|
|
||||||
### 🧩 插件 (Plugins)
|
<!-- markdownlint-disable MD033 -->
|
||||||
|
<details>
|
||||||
|
<summary><b>🧩 插件 (Actions, Filters, Pipes, Pipelines)</b></summary>
|
||||||
|
|
||||||
位于 `plugins/` 目录,包含各类 Python 编写的功能增强插件:
|
位于 `plugins/` 目录,包含各类 Python 编写的功能增强插件:
|
||||||
|
|
||||||
#### Actions (交互增强)
|
### Actions (交互增强)
|
||||||
|
|
||||||
- **Smart Mind Map** (`smart-mind-map`): 智能分析文本并生成交互式思维导图。
|
- **Smart Mind Map** (`smart-mind-map`): 智能分析文本并生成交互式思维导图。
|
||||||
- **Smart Infographic** (`infographic`): 基于 AntV 的智能信息图生成工具。
|
- **Smart Infographic** (`infographic`): 基于 AntV 的智能信息图生成工具。
|
||||||
@@ -48,33 +74,36 @@ OpenWebUI 增强功能集合。包含个人开发与收集的插件、提示词
|
|||||||
- **Export to Excel** (`export_to_excel`): 将对话内容导出为 Excel 文件。
|
- **Export to Excel** (`export_to_excel`): 将对话内容导出为 Excel 文件。
|
||||||
- **Export to Word** (`export_to_docx`): 将对话内容导出为 Word 文档。
|
- **Export to Word** (`export_to_docx`): 将对话内容导出为 Word 文档。
|
||||||
|
|
||||||
#### Filters (消息处理)
|
### Filters (消息处理)
|
||||||
|
|
||||||
|
- **GitHub Copilot SDK Files Filter** (`github_copilot_sdk_files_filter`): Copilot SDK 必备搭档。绕过 RAG,确保 Agent 能真正看到你的每一个文件。
|
||||||
|
- **Web Gemini Multimodal Filter** (`web_gemini_multimodel_filter`): 为任意模型提供多模态能力(PDF、Office、视频等),支持智能路由。
|
||||||
- **Async Context Compression** (`async-context-compression`): 异步上下文压缩,优化 Token 使用。
|
- **Async Context Compression** (`async-context-compression`): 异步上下文压缩,优化 Token 使用。
|
||||||
- **Context Enhancement** (`context_enhancement_filter`): 上下文增强过滤器。
|
- **Context Enhancement** (`context_enhancement_filter`): 上下文增强过滤器。
|
||||||
- **Folder Memory** (`folder-memory`): 自动从对话中提取项目规则并注入到文件夹系统提示词中。
|
- **Folder Memory** (`folder-memory`): 自动从对话中提取项目规则并注入到文件夹系统提示词中。
|
||||||
- **Gemini Manifold Companion** (`gemini_manifold_companion`): Gemini Manifold 配套增强。
|
|
||||||
- **Gemini Multimodal Filter** (`web_gemini_multimodel_filter`): 为任意模型提供多模态能力(PDF、Office、视频等),支持智能路由和字幕精修。
|
|
||||||
- **Markdown Normalizer** (`markdown_normalizer`): 修复 LLM 输出中常见的 Markdown 格式问题。
|
- **Markdown Normalizer** (`markdown_normalizer`): 修复 LLM 输出中常见的 Markdown 格式问题。
|
||||||
- **Multi-Model Context Merger** (`multi_model_context_merger`): 自动合并并注入多模型回答的上下文。
|
|
||||||
|
|
||||||
#### Pipes (模型管道)
|
### Pipes (模型管道)
|
||||||
|
|
||||||
- **GitHub Copilot SDK** (`github-copilot-sdk`): GitHub Copilot SDK 官方集成。支持动态模型、多轮对话、流式输出、图片输入及无限会话。
|
- **GitHub Copilot SDK** (`github-copilot-sdk`): GitHub Copilot SDK 官方集成。支持动态模型、多轮对话、流式输出、图片输入及无限会话。
|
||||||
- **Gemini Manifold** (`gemini_mainfold`): 集成 Gemini 模型的管道。
|
|
||||||
|
|
||||||
#### Pipelines (工作流管道)
|
### Pipelines (工作流管道)
|
||||||
|
|
||||||
- **MoE Prompt Refiner** (`moe_prompt_refiner`): 优化多模型 (MoE) 汇总请求的提示词,生成高质量的综合报告。
|
- **MoE Prompt Refiner** (`moe_prompt_refiner`): 优化多模型 (MoE) 汇总请求的提示词,生成高质量的综合报告。
|
||||||
|
|
||||||
### 🎯 提示词 (Prompts)
|
</details>
|
||||||
|
<!-- markdownlint-enable MD033 -->
|
||||||
|
|
||||||
位于 `prompts/` 目录,包含精心调优的 System Prompts:
|
<!-- markdownlint-disable MD033 -->
|
||||||
|
<details>
|
||||||
|
<summary><b>🎯 提示词 (Prompts - 多角色系统提示词)</b></summary>
|
||||||
|
|
||||||
- **Coding**: 编程辅助类提示词。
|
位于 `docs/prompts/` 目录,包含精心调优的提示词集合:
|
||||||
- **Marketing**: 营销文案类提示词。
|
|
||||||
|
|
||||||
每个提示词都独立保存为 Markdown 文件,可直接在 OpenWebUI 中使用。
|
- **[Prompt Library](./docs/prompts/library.md)**: 编程、翻译、分析及营销等全领域提示词精选。
|
||||||
|
|
||||||
|
</details>
|
||||||
|
<!-- markdownlint-enable MD033 -->
|
||||||
|
|
||||||
## 🛠️ 扩展 (Extensions)
|
## 🛠️ 扩展 (Extensions)
|
||||||
|
|
||||||
@@ -84,6 +113,10 @@ Open WebUI 的前端增强扩展:
|
|||||||
|
|
||||||
## 📖 开发文档
|
## 📖 开发文档
|
||||||
|
|
||||||
|
<!-- markdownlint-disable MD033 -->
|
||||||
|
<details>
|
||||||
|
<summary><b>📚 官方开发与运营指南</b></summary>
|
||||||
|
|
||||||
位于 `docs/zh/` 目录:
|
位于 `docs/zh/` 目录:
|
||||||
|
|
||||||
- **[插件开发权威指南](./docs/zh/plugin_development_guide.md)** - 整合了入门教程、核心 SDK 详解及最佳实践的系统化指南。 ⭐
|
- **[插件开发权威指南](./docs/zh/plugin_development_guide.md)** - 整合了入门教程、核心 SDK 详解及最佳实践的系统化指南。 ⭐
|
||||||
@@ -91,36 +124,11 @@ Open WebUI 的前端增强扩展:
|
|||||||
|
|
||||||
更多示例请查看 `docs/examples/` 目录。
|
更多示例请查看 `docs/examples/` 目录。
|
||||||
|
|
||||||
|
</details>
|
||||||
|
<!-- markdownlint-enable MD033 -->
|
||||||
|
|
||||||
## 🚀 快速开始
|
## 🚀 快速开始
|
||||||
|
|
||||||
本项目是一个资源集合,无需安装 Python 环境。你只需要下载对应的文件并导入到你的 OpenWebUI 实例中即可。
|
本项目是一个资源集合,无需安装 Python 环境。你只需要下载对应的文件并导入到你的 OpenWebUI 实例中即可。
|
||||||
|
|
||||||
### 使用提示词 (Prompts)
|
|
||||||
|
|
||||||
1. 在 `/prompts` 目录中浏览并选择你感兴趣的提示词文件 (`.md`)。
|
|
||||||
2. 复制文件内容。
|
|
||||||
3. 在 OpenWebUI 聊天界面中,点击输入框上方的 "Prompt" 按钮。
|
|
||||||
4. 粘贴内容并保存。
|
|
||||||
|
|
||||||
### 使用插件 (Plugins)
|
|
||||||
|
|
||||||
1. **从 OpenWebUI 社区安装 (推荐)**:
|
|
||||||
- 访问我的主页: [Fu-Jie's Profile](https://openwebui.com/u/Fu-Jie)
|
|
||||||
- 浏览插件列表,选择你喜欢的插件。
|
|
||||||
- 点击 "Get" 按钮,将其直接导入到你的 OpenWebUI 实例中。
|
|
||||||
|
|
||||||
2. **手动安装**:
|
|
||||||
- 在 `/plugins` 目录中浏览并下载你需要的插件文件 (`.py`)。
|
|
||||||
- 打开 OpenWebUI 的 **管理员面板 (Admin Panel)** -> **设置 (Settings)** -> **插件 (Plugins)**。
|
|
||||||
- 点击上传按钮,选择刚才下载的 `.py` 文件。
|
|
||||||
- 上传成功后,刷新页面,你就可以在聊天设置或工具栏中启用该插件了。
|
|
||||||
|
|
||||||
### 贡献代码
|
|
||||||
|
|
||||||
如果你有优质的提示词或插件想要分享:
|
|
||||||
|
|
||||||
1. Fork 本仓库。
|
|
||||||
2. 将你的文件添加到对应的 `prompts/` 或 `plugins/` 目录。
|
|
||||||
3. 提交 Pull Request。
|
|
||||||
|
|
||||||
[贡献指南](./CONTRIBUTING_CN.md) | [更新日志](./CHANGELOG.md)
|
[贡献指南](./CONTRIBUTING_CN.md) | [更新日志](./CHANGELOG.md)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"label": "downloads",
|
"label": "downloads",
|
||||||
"message": "3.9k",
|
"message": "4.0k",
|
||||||
"color": "blue",
|
"color": "blue",
|
||||||
"namedLogo": "openwebui"
|
"namedLogo": "openwebui"
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"label": "followers",
|
"label": "followers",
|
||||||
"message": "210",
|
"message": "212",
|
||||||
"color": "blue"
|
"color": "blue"
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"label": "plugins",
|
"label": "plugins",
|
||||||
"message": "20",
|
"message": "21",
|
||||||
"color": "green"
|
"color": "green"
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"label": "points",
|
"label": "points",
|
||||||
"message": "259",
|
"message": "261",
|
||||||
"color": "orange"
|
"color": "orange"
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"label": "upvotes",
|
"label": "upvotes",
|
||||||
"message": "221",
|
"message": "223",
|
||||||
"color": "brightgreen"
|
"color": "brightgreen"
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,15 @@
|
|||||||
{
|
{
|
||||||
"total_posts": 20,
|
"total_posts": 21,
|
||||||
"total_downloads": 3909,
|
"total_downloads": 3962,
|
||||||
"total_views": 45507,
|
"total_views": 46159,
|
||||||
"total_upvotes": 221,
|
"total_upvotes": 223,
|
||||||
"total_downvotes": 2,
|
"total_downvotes": 2,
|
||||||
"total_saves": 264,
|
"total_saves": 267,
|
||||||
"total_comments": 51,
|
"total_comments": 51,
|
||||||
"by_type": {
|
"by_type": {
|
||||||
"pipe": 1,
|
"action": 15,
|
||||||
"action": 14,
|
"filter": 2,
|
||||||
"unknown": 4,
|
"unknown": 4
|
||||||
"filter": 1
|
|
||||||
},
|
},
|
||||||
"posts": [
|
"posts": [
|
||||||
{
|
{
|
||||||
@@ -20,8 +19,8 @@
|
|||||||
"version": "0.9.2",
|
"version": "0.9.2",
|
||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "Intelligently analyzes text content and generates interactive mind maps to help users structure and visualize knowledge.",
|
"description": "Intelligently analyzes text content and generates interactive mind maps to help users structure and visualize knowledge.",
|
||||||
"downloads": 916,
|
"downloads": 922,
|
||||||
"views": 8070,
|
"views": 8131,
|
||||||
"upvotes": 22,
|
"upvotes": 22,
|
||||||
"saves": 50,
|
"saves": 50,
|
||||||
"comments": 13,
|
"comments": 13,
|
||||||
@@ -36,8 +35,8 @@
|
|||||||
"version": "1.5.0",
|
"version": "1.5.0",
|
||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "AI-powered infographic generator based on AntV Infographic. Supports professional templates, auto-icon matching, and SVG/PNG downloads.",
|
"description": "AI-powered infographic generator based on AntV Infographic. Supports professional templates, auto-icon matching, and SVG/PNG downloads.",
|
||||||
"downloads": 665,
|
"downloads": 670,
|
||||||
"views": 6205,
|
"views": 6311,
|
||||||
"upvotes": 24,
|
"upvotes": 24,
|
||||||
"saves": 34,
|
"saves": 34,
|
||||||
"comments": 10,
|
"comments": 10,
|
||||||
@@ -52,8 +51,8 @@
|
|||||||
"version": "0.4.4",
|
"version": "0.4.4",
|
||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "Export current conversation from Markdown to Word (.docx) with Mermaid diagrams rendered client-side (Mermaid.js, SVG+PNG), LaTeX math, real hyperlinks, improved tables, syntax highlighting, and blockquote support.",
|
"description": "Export current conversation from Markdown to Word (.docx) with Mermaid diagrams rendered client-side (Mermaid.js, SVG+PNG), LaTeX math, real hyperlinks, improved tables, syntax highlighting, and blockquote support.",
|
||||||
"downloads": 365,
|
"downloads": 370,
|
||||||
"views": 2841,
|
"views": 2881,
|
||||||
"upvotes": 14,
|
"upvotes": 14,
|
||||||
"saves": 26,
|
"saves": 26,
|
||||||
"comments": 3,
|
"comments": 3,
|
||||||
@@ -68,8 +67,8 @@
|
|||||||
"version": "1.2.2",
|
"version": "1.2.2",
|
||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "Reduces token consumption in long conversations while maintaining coherence through intelligent summarization and message compression.",
|
"description": "Reduces token consumption in long conversations while maintaining coherence through intelligent summarization and message compression.",
|
||||||
"downloads": 350,
|
"downloads": 355,
|
||||||
"views": 3580,
|
"views": 3627,
|
||||||
"upvotes": 14,
|
"upvotes": 14,
|
||||||
"saves": 33,
|
"saves": 33,
|
||||||
"comments": 0,
|
"comments": 0,
|
||||||
@@ -84,8 +83,8 @@
|
|||||||
"version": "0.3.7",
|
"version": "0.3.7",
|
||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "Extracts tables from chat messages and exports them to Excel (.xlsx) files with smart formatting.",
|
"description": "Extracts tables from chat messages and exports them to Excel (.xlsx) files with smart formatting.",
|
||||||
"downloads": 334,
|
"downloads": 339,
|
||||||
"views": 1569,
|
"views": 1611,
|
||||||
"upvotes": 7,
|
"upvotes": 7,
|
||||||
"saves": 6,
|
"saves": 6,
|
||||||
"comments": 0,
|
"comments": 0,
|
||||||
@@ -100,8 +99,8 @@
|
|||||||
"version": "1.2.4",
|
"version": "1.2.4",
|
||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "A content normalizer filter that fixes common Markdown formatting issues in LLM outputs, such as broken code blocks, LaTeX formulas, and list formatting.",
|
"description": "A content normalizer filter that fixes common Markdown formatting issues in LLM outputs, such as broken code blocks, LaTeX formulas, and list formatting.",
|
||||||
"downloads": 310,
|
"downloads": 313,
|
||||||
"views": 4433,
|
"views": 4483,
|
||||||
"upvotes": 17,
|
"upvotes": 17,
|
||||||
"saves": 28,
|
"saves": 28,
|
||||||
"comments": 5,
|
"comments": 5,
|
||||||
@@ -116,8 +115,8 @@
|
|||||||
"version": "0.2.4",
|
"version": "0.2.4",
|
||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "Quickly generates beautiful flashcards from text, extracting key points and categories.",
|
"description": "Quickly generates beautiful flashcards from text, extracting key points and categories.",
|
||||||
"downloads": 217,
|
"downloads": 219,
|
||||||
"views": 3302,
|
"views": 3321,
|
||||||
"upvotes": 13,
|
"upvotes": 13,
|
||||||
"saves": 14,
|
"saves": 14,
|
||||||
"comments": 2,
|
"comments": 2,
|
||||||
@@ -132,10 +131,10 @@
|
|||||||
"version": "",
|
"version": "",
|
||||||
"author": "",
|
"author": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"downloads": 178,
|
"downloads": 180,
|
||||||
"views": 2475,
|
"views": 2530,
|
||||||
"upvotes": 8,
|
"upvotes": 9,
|
||||||
"saves": 4,
|
"saves": 5,
|
||||||
"comments": 0,
|
"comments": 0,
|
||||||
"created_at": "2026-01-28",
|
"created_at": "2026-01-28",
|
||||||
"updated_at": "2026-01-28",
|
"updated_at": "2026-01-28",
|
||||||
@@ -148,8 +147,8 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "A comprehensive thinking lens that dives deep into any content - from context to logic, insights, and action paths.",
|
"description": "A comprehensive thinking lens that dives deep into any content - from context to logic, insights, and action paths.",
|
||||||
"downloads": 144,
|
"downloads": 146,
|
||||||
"views": 1218,
|
"views": 1232,
|
||||||
"upvotes": 6,
|
"upvotes": 6,
|
||||||
"saves": 11,
|
"saves": 11,
|
||||||
"comments": 0,
|
"comments": 0,
|
||||||
@@ -164,10 +163,10 @@
|
|||||||
"version": "0.4.4",
|
"version": "0.4.4",
|
||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "将对话导出为 Word (.docx),支持 Mermaid 图表 (客户端渲染 SVG+PNG)、LaTeX 数学公式、真实超链接、增强表格格式、代码高亮和引用块。",
|
"description": "将对话导出为 Word (.docx),支持 Mermaid 图表 (客户端渲染 SVG+PNG)、LaTeX 数学公式、真实超链接、增强表格格式、代码高亮和引用块。",
|
||||||
"downloads": 122,
|
"downloads": 124,
|
||||||
"views": 2149,
|
"views": 2171,
|
||||||
"upvotes": 13,
|
"upvotes": 13,
|
||||||
"saves": 6,
|
"saves": 7,
|
||||||
"comments": 4,
|
"comments": 4,
|
||||||
"created_at": "2026-01-04",
|
"created_at": "2026-01-04",
|
||||||
"updated_at": "2026-02-07",
|
"updated_at": "2026-02-07",
|
||||||
@@ -176,19 +175,35 @@
|
|||||||
{
|
{
|
||||||
"title": "GitHub Copilot Official SDK Pipe",
|
"title": "GitHub Copilot Official SDK Pipe",
|
||||||
"slug": "github_copilot_official_sdk_pipe_ce96f7b4",
|
"slug": "github_copilot_official_sdk_pipe_ce96f7b4",
|
||||||
"type": "pipe",
|
"type": "action",
|
||||||
"version": "0.5.1",
|
"version": "0.6.0",
|
||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "Integrate GitHub Copilot SDK. Supports dynamic models, multi-turn conversation, streaming, multimodal input, infinite sessions, and frontend debug logging.",
|
"description": "Integrate GitHub Copilot SDK. Supports dynamic models, multi-turn conversation, streaming, multimodal input, infinite sessions, and frontend debug logging.",
|
||||||
"downloads": 71,
|
"downloads": 83,
|
||||||
"views": 2069,
|
"views": 2162,
|
||||||
"upvotes": 13,
|
"upvotes": 13,
|
||||||
"saves": 6,
|
"saves": 7,
|
||||||
"comments": 4,
|
"comments": 4,
|
||||||
"created_at": "2026-01-26",
|
"created_at": "2026-01-26",
|
||||||
"updated_at": "2026-02-08",
|
"updated_at": "2026-02-09",
|
||||||
"url": "https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4"
|
"url": "https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"title": "📂 Folder Memory – Auto-Evolving Project Context",
|
||||||
|
"slug": "folder_memory_auto_evolving_project_context_4a9875b2",
|
||||||
|
"type": "filter",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"author": "Fu-Jie",
|
||||||
|
"description": "Automatically extracts project rules from conversations and injects them into the folder's system prompt.",
|
||||||
|
"downloads": 59,
|
||||||
|
"views": 1264,
|
||||||
|
"upvotes": 6,
|
||||||
|
"saves": 8,
|
||||||
|
"comments": 0,
|
||||||
|
"created_at": "2026-01-20",
|
||||||
|
"updated_at": "2026-01-20",
|
||||||
|
"url": "https://openwebui.com/posts/folder_memory_auto_evolving_project_context_4a9875b2"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"title": "智能信息图",
|
"title": "智能信息图",
|
||||||
"slug": "智能信息图_e04a48ff",
|
"slug": "智能信息图_e04a48ff",
|
||||||
@@ -197,7 +212,7 @@
|
|||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "基于 AntV Infographic 的智能信息图生成插件。支持多种专业模板,自动图标匹配,并提供 SVG/PNG 下载功能。",
|
"description": "基于 AntV Infographic 的智能信息图生成插件。支持多种专业模板,自动图标匹配,并提供 SVG/PNG 下载功能。",
|
||||||
"downloads": 58,
|
"downloads": 58,
|
||||||
"views": 1031,
|
"views": 1040,
|
||||||
"upvotes": 10,
|
"upvotes": 10,
|
||||||
"saves": 1,
|
"saves": 1,
|
||||||
"comments": 0,
|
"comments": 0,
|
||||||
@@ -205,22 +220,6 @@
|
|||||||
"updated_at": "2026-01-29",
|
"updated_at": "2026-01-29",
|
||||||
"url": "https://openwebui.com/posts/智能信息图_e04a48ff"
|
"url": "https://openwebui.com/posts/智能信息图_e04a48ff"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"title": "📂 Folder Memory – Auto-Evolving Project Context",
|
|
||||||
"slug": "folder_memory_auto_evolving_project_context_4a9875b2",
|
|
||||||
"type": "filter",
|
|
||||||
"version": "0.1.0",
|
|
||||||
"author": "Fu-Jie",
|
|
||||||
"description": "Automatically extracts project rules from conversations and injects them into the folder's system prompt.",
|
|
||||||
"downloads": 58,
|
|
||||||
"views": 1247,
|
|
||||||
"upvotes": 6,
|
|
||||||
"saves": 8,
|
|
||||||
"comments": 0,
|
|
||||||
"created_at": "2026-01-20",
|
|
||||||
"updated_at": "2026-01-20",
|
|
||||||
"url": "https://openwebui.com/posts/folder_memory_auto_evolving_project_context_4a9875b2"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"title": "思维导图",
|
"title": "思维导图",
|
||||||
"slug": "智能生成交互式思维导图帮助用户可视化知识_8d4b097b",
|
"slug": "智能生成交互式思维导图帮助用户可视化知识_8d4b097b",
|
||||||
@@ -229,7 +228,7 @@
|
|||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "智能分析文本内容,生成交互式思维导图,帮助用户结构化和可视化知识。",
|
"description": "智能分析文本内容,生成交互式思维导图,帮助用户结构化和可视化知识。",
|
||||||
"downloads": 37,
|
"downloads": 37,
|
||||||
"views": 573,
|
"views": 577,
|
||||||
"upvotes": 6,
|
"upvotes": 6,
|
||||||
"saves": 2,
|
"saves": 2,
|
||||||
"comments": 0,
|
"comments": 0,
|
||||||
@@ -245,7 +244,7 @@
|
|||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "通过智能摘要和消息压缩,降低长对话的 token 消耗,同时保持对话连贯性。",
|
"description": "通过智能摘要和消息压缩,降低长对话的 token 消耗,同时保持对话连贯性。",
|
||||||
"downloads": 33,
|
"downloads": 33,
|
||||||
"views": 646,
|
"views": 650,
|
||||||
"upvotes": 7,
|
"upvotes": 7,
|
||||||
"saves": 5,
|
"saves": 5,
|
||||||
"comments": 0,
|
"comments": 0,
|
||||||
@@ -261,7 +260,7 @@
|
|||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "快速将文本提炼为精美的学习记忆卡片,支持核心要点提取与分类。",
|
"description": "快速将文本提炼为精美的学习记忆卡片,支持核心要点提取与分类。",
|
||||||
"downloads": 27,
|
"downloads": 27,
|
||||||
"views": 670,
|
"views": 675,
|
||||||
"upvotes": 8,
|
"upvotes": 8,
|
||||||
"saves": 1,
|
"saves": 1,
|
||||||
"comments": 0,
|
"comments": 0,
|
||||||
@@ -277,7 +276,7 @@
|
|||||||
"author": "Fu-Jie",
|
"author": "Fu-Jie",
|
||||||
"description": "全方位的思维透镜 —— 从背景全景到逻辑脉络,从深度洞察到行动路径。",
|
"description": "全方位的思维透镜 —— 从背景全景到逻辑脉络,从深度洞察到行动路径。",
|
||||||
"downloads": 24,
|
"downloads": 24,
|
||||||
"views": 419,
|
"views": 423,
|
||||||
"upvotes": 5,
|
"upvotes": 5,
|
||||||
"saves": 1,
|
"saves": 1,
|
||||||
"comments": 0,
|
"comments": 0,
|
||||||
@@ -285,6 +284,22 @@
|
|||||||
"updated_at": "2026-01-08",
|
"updated_at": "2026-01-08",
|
||||||
"url": "https://openwebui.com/posts/精读_99830b0f"
|
"url": "https://openwebui.com/posts/精读_99830b0f"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"title": "GitHub Copilot SDK Files Filter",
|
||||||
|
"slug": "github_copilot_sdk_files_filter_403a62ee",
|
||||||
|
"type": "filter",
|
||||||
|
"version": "0.1.2",
|
||||||
|
"author": "Fu-Jie",
|
||||||
|
"description": "A specialized filter to bypass OpenWebUI's default RAG for GitHub Copilot SDK models. It moves uploaded files to a safe location ('copilot_files') so the Copilot Pipe can process them natively without interference.",
|
||||||
|
"downloads": 3,
|
||||||
|
"views": 47,
|
||||||
|
"upvotes": 1,
|
||||||
|
"saves": 0,
|
||||||
|
"comments": 0,
|
||||||
|
"created_at": "2026-02-09",
|
||||||
|
"updated_at": "2026-02-09",
|
||||||
|
"url": "https://openwebui.com/posts/github_copilot_sdk_files_filter_403a62ee"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"title": "🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager",
|
"title": "🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager",
|
||||||
"slug": "open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e",
|
"slug": "open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e",
|
||||||
@@ -293,7 +308,7 @@
|
|||||||
"author": "",
|
"author": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"downloads": 0,
|
"downloads": 0,
|
||||||
"views": 1460,
|
"views": 1468,
|
||||||
"upvotes": 12,
|
"upvotes": 12,
|
||||||
"saves": 18,
|
"saves": 18,
|
||||||
"comments": 8,
|
"comments": 8,
|
||||||
@@ -309,7 +324,7 @@
|
|||||||
"author": "",
|
"author": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"downloads": 0,
|
"downloads": 0,
|
||||||
"views": 139,
|
"views": 140,
|
||||||
"upvotes": 2,
|
"upvotes": 2,
|
||||||
"saves": 0,
|
"saves": 0,
|
||||||
"comments": 0,
|
"comments": 0,
|
||||||
@@ -325,7 +340,7 @@
|
|||||||
"author": "",
|
"author": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"downloads": 0,
|
"downloads": 0,
|
||||||
"views": 1411,
|
"views": 1415,
|
||||||
"upvotes": 14,
|
"upvotes": 14,
|
||||||
"saves": 10,
|
"saves": 10,
|
||||||
"comments": 2,
|
"comments": 2,
|
||||||
@@ -339,11 +354,11 @@
|
|||||||
"name": "Fu-Jie",
|
"name": "Fu-Jie",
|
||||||
"profile_url": "https://openwebui.com/u/Fu-Jie",
|
"profile_url": "https://openwebui.com/u/Fu-Jie",
|
||||||
"profile_image": "https://community.s3.openwebui.com/uploads/users/b15d1348-4347-42b4-b815-e053342d6cb0/profile_d9510745-4bd4-4f8f-a997-4a21847d9300.webp",
|
"profile_image": "https://community.s3.openwebui.com/uploads/users/b15d1348-4347-42b4-b815-e053342d6cb0/profile_d9510745-4bd4-4f8f-a997-4a21847d9300.webp",
|
||||||
"followers": 210,
|
"followers": 212,
|
||||||
"following": 4,
|
"following": 4,
|
||||||
"total_points": 259,
|
"total_points": 261,
|
||||||
"post_points": 219,
|
"post_points": 221,
|
||||||
"comment_points": 40,
|
"comment_points": 40,
|
||||||
"contributions": 43
|
"contributions": 44
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,46 +1,46 @@
|
|||||||
# 📊 OpenWebUI Community Stats Report
|
# 📊 OpenWebUI Community Stats Report
|
||||||
|
|
||||||
> 📅 Updated: 2026-02-09 11:10
|
> 📅 Updated: 2026-02-09 23:25
|
||||||
|
|
||||||
## 📈 Overview
|
## 📈 Overview
|
||||||
|
|
||||||
| Metric | Value |
|
| Metric | Value |
|
||||||
|------|------|
|
|------|------|
|
||||||
| 📝 Total Posts | 20 |
|
| 📝 Total Posts | 21 |
|
||||||
| ⬇️ Total Downloads | 3909 |
|
| ⬇️ Total Downloads | 3962 |
|
||||||
| 👁️ Total Views | 45507 |
|
| 👁️ Total Views | 46159 |
|
||||||
| 👍 Total Upvotes | 221 |
|
| 👍 Total Upvotes | 223 |
|
||||||
| 💾 Total Saves | 264 |
|
| 💾 Total Saves | 267 |
|
||||||
| 💬 Total Comments | 51 |
|
| 💬 Total Comments | 51 |
|
||||||
|
|
||||||
## 📂 By Type
|
## 📂 By Type
|
||||||
|
|
||||||
- **pipe**: 1
|
- **action**: 15
|
||||||
- **action**: 14
|
- **filter**: 2
|
||||||
- **unknown**: 4
|
- **unknown**: 4
|
||||||
- **filter**: 1
|
|
||||||
|
|
||||||
## 📋 Posts List
|
## 📋 Posts List
|
||||||
|
|
||||||
| Rank | Title | Type | Version | Downloads | Views | Upvotes | Saves | Updated |
|
| Rank | Title | Type | Version | Downloads | Views | Upvotes | Saves | Updated |
|
||||||
|:---:|------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
|:---:|------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
||||||
| 1 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | action | 0.9.2 | 916 | 8070 | 22 | 50 | 2026-01-28 |
|
| 1 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | action | 0.9.2 | 922 | 8131 | 22 | 50 | 2026-01-28 |
|
||||||
| 2 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | action | 1.5.0 | 665 | 6205 | 24 | 34 | 2026-01-30 |
|
| 2 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | action | 1.5.0 | 670 | 6311 | 24 | 34 | 2026-01-30 |
|
||||||
| 3 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | action | 0.4.4 | 365 | 2841 | 14 | 26 | 2026-02-07 |
|
| 3 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | action | 0.4.4 | 370 | 2881 | 14 | 26 | 2026-02-07 |
|
||||||
| 4 | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | action | 1.2.2 | 350 | 3580 | 14 | 33 | 2026-01-28 |
|
| 4 | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | action | 1.2.2 | 355 | 3627 | 14 | 33 | 2026-01-28 |
|
||||||
| 5 | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | action | 0.3.7 | 334 | 1569 | 7 | 6 | 2026-01-29 |
|
| 5 | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | action | 0.3.7 | 339 | 1611 | 7 | 6 | 2026-01-29 |
|
||||||
| 6 | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | action | 1.2.4 | 310 | 4433 | 17 | 28 | 2026-01-29 |
|
| 6 | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | action | 1.2.4 | 313 | 4483 | 17 | 28 | 2026-01-29 |
|
||||||
| 7 | [Flash Card](https://openwebui.com/posts/flash_card_65a2ea8f) | action | 0.2.4 | 217 | 3302 | 13 | 14 | 2026-01-28 |
|
| 7 | [Flash Card](https://openwebui.com/posts/flash_card_65a2ea8f) | action | 0.2.4 | 219 | 3321 | 13 | 14 | 2026-01-28 |
|
||||||
| 8 | [AI Task Instruction Generator](https://openwebui.com/posts/ai_task_instruction_generator_9bab8b37) | unknown | | 178 | 2475 | 8 | 4 | 2026-01-28 |
|
| 8 | [AI Task Instruction Generator](https://openwebui.com/posts/ai_task_instruction_generator_9bab8b37) | unknown | | 180 | 2530 | 9 | 5 | 2026-01-28 |
|
||||||
| 9 | [Deep Dive](https://openwebui.com/posts/deep_dive_c0b846e4) | action | 1.0.0 | 144 | 1218 | 6 | 11 | 2026-01-08 |
|
| 9 | [Deep Dive](https://openwebui.com/posts/deep_dive_c0b846e4) | action | 1.0.0 | 146 | 1232 | 6 | 11 | 2026-01-08 |
|
||||||
| 10 | [导出为Word增强版](https://openwebui.com/posts/导出为_word_支持公式流程图表格和代码块_8a6306c0) | action | 0.4.4 | 122 | 2149 | 13 | 6 | 2026-02-07 |
|
| 10 | [导出为Word增强版](https://openwebui.com/posts/导出为_word_支持公式流程图表格和代码块_8a6306c0) | action | 0.4.4 | 124 | 2171 | 13 | 7 | 2026-02-07 |
|
||||||
| 11 | [GitHub Copilot Official SDK Pipe](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4) | pipe | 0.5.1 | 71 | 2069 | 13 | 6 | 2026-02-08 |
|
| 11 | [GitHub Copilot Official SDK Pipe](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4) | action | 0.6.0 | 83 | 2162 | 13 | 7 | 2026-02-09 |
|
||||||
| 12 | [智能信息图](https://openwebui.com/posts/智能信息图_e04a48ff) | action | 1.5.0 | 58 | 1031 | 10 | 1 | 2026-01-29 |
|
| 12 | [📂 Folder Memory – Auto-Evolving Project Context](https://openwebui.com/posts/folder_memory_auto_evolving_project_context_4a9875b2) | filter | 0.1.0 | 59 | 1264 | 6 | 8 | 2026-01-20 |
|
||||||
| 13 | [📂 Folder Memory – Auto-Evolving Project Context](https://openwebui.com/posts/folder_memory_auto_evolving_project_context_4a9875b2) | filter | 0.1.0 | 58 | 1247 | 6 | 8 | 2026-01-20 |
|
| 13 | [智能信息图](https://openwebui.com/posts/智能信息图_e04a48ff) | action | 1.5.0 | 58 | 1040 | 10 | 1 | 2026-01-29 |
|
||||||
| 14 | [思维导图](https://openwebui.com/posts/智能生成交互式思维导图帮助用户可视化知识_8d4b097b) | action | 0.9.2 | 37 | 573 | 6 | 2 | 2026-01-28 |
|
| 14 | [思维导图](https://openwebui.com/posts/智能生成交互式思维导图帮助用户可视化知识_8d4b097b) | action | 0.9.2 | 37 | 577 | 6 | 2 | 2026-01-28 |
|
||||||
| 15 | [异步上下文压缩](https://openwebui.com/posts/异步上下文压缩_5c0617cb) | action | 1.2.2 | 33 | 646 | 7 | 5 | 2026-01-28 |
|
| 15 | [异步上下文压缩](https://openwebui.com/posts/异步上下文压缩_5c0617cb) | action | 1.2.2 | 33 | 650 | 7 | 5 | 2026-01-28 |
|
||||||
| 16 | [闪记卡 (Flash Card)](https://openwebui.com/posts/闪记卡生成插件_4a31eac3) | action | 0.2.4 | 27 | 670 | 8 | 1 | 2026-01-28 |
|
| 16 | [闪记卡 (Flash Card)](https://openwebui.com/posts/闪记卡生成插件_4a31eac3) | action | 0.2.4 | 27 | 675 | 8 | 1 | 2026-01-28 |
|
||||||
| 17 | [精读](https://openwebui.com/posts/精读_99830b0f) | action | 1.0.0 | 24 | 419 | 5 | 1 | 2026-01-08 |
|
| 17 | [精读](https://openwebui.com/posts/精读_99830b0f) | action | 1.0.0 | 24 | 423 | 5 | 1 | 2026-01-08 |
|
||||||
| 18 | [🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager](https://openwebui.com/posts/open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e) | unknown | | 0 | 1460 | 12 | 18 | 2026-01-28 |
|
| 18 | [GitHub Copilot SDK Files Filter](https://openwebui.com/posts/github_copilot_sdk_files_filter_403a62ee) | filter | 0.1.2 | 3 | 47 | 1 | 0 | 2026-02-09 |
|
||||||
| 19 | [Review of Claude Haiku 4.5](https://openwebui.com/posts/review_of_claude_haiku_45_41b0db39) | unknown | | 0 | 139 | 2 | 0 | 2026-01-14 |
|
| 19 | [🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager](https://openwebui.com/posts/open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e) | unknown | | 0 | 1468 | 12 | 18 | 2026-01-28 |
|
||||||
| 20 | [ 🛠️ Debug Open WebUI Plugins in Your Browser](https://openwebui.com/posts/debug_open_webui_plugins_in_your_browser_81bf7960) | unknown | | 0 | 1411 | 14 | 10 | 2026-01-10 |
|
| 20 | [Review of Claude Haiku 4.5](https://openwebui.com/posts/review_of_claude_haiku_45_41b0db39) | unknown | | 0 | 140 | 2 | 0 | 2026-01-14 |
|
||||||
|
| 21 | [ 🛠️ Debug Open WebUI Plugins in Your Browser](https://openwebui.com/posts/debug_open_webui_plugins_in_your_browser_81bf7960) | unknown | | 0 | 1415 | 14 | 10 | 2026-01-10 |
|
||||||
|
|||||||
@@ -1,46 +1,46 @@
|
|||||||
# 📊 OpenWebUI 社区统计报告
|
# 📊 OpenWebUI 社区统计报告
|
||||||
|
|
||||||
> 📅 更新时间: 2026-02-09 11:10
|
> 📅 更新时间: 2026-02-09 23:25
|
||||||
|
|
||||||
## 📈 总览
|
## 📈 总览
|
||||||
|
|
||||||
| 指标 | 数值 |
|
| 指标 | 数值 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| 📝 发布数量 | 20 |
|
| 📝 发布数量 | 21 |
|
||||||
| ⬇️ 总下载量 | 3909 |
|
| ⬇️ 总下载量 | 3962 |
|
||||||
| 👁️ 总浏览量 | 45507 |
|
| 👁️ 总浏览量 | 46159 |
|
||||||
| 👍 总点赞数 | 221 |
|
| 👍 总点赞数 | 223 |
|
||||||
| 💾 总收藏数 | 264 |
|
| 💾 总收藏数 | 267 |
|
||||||
| 💬 总评论数 | 51 |
|
| 💬 总评论数 | 51 |
|
||||||
|
|
||||||
## 📂 按类型分类
|
## 📂 按类型分类
|
||||||
|
|
||||||
- **pipe**: 1
|
- **action**: 15
|
||||||
- **action**: 14
|
- **filter**: 2
|
||||||
- **unknown**: 4
|
- **unknown**: 4
|
||||||
- **filter**: 1
|
|
||||||
|
|
||||||
## 📋 发布列表
|
## 📋 发布列表
|
||||||
|
|
||||||
| 排名 | 标题 | 类型 | 版本 | 下载 | 浏览 | 点赞 | 收藏 | 更新日期 |
|
| 排名 | 标题 | 类型 | 版本 | 下载 | 浏览 | 点赞 | 收藏 | 更新日期 |
|
||||||
|:---:|------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
|:---:|------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
||||||
| 1 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | action | 0.9.2 | 916 | 8070 | 22 | 50 | 2026-01-28 |
|
| 1 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | action | 0.9.2 | 922 | 8131 | 22 | 50 | 2026-01-28 |
|
||||||
| 2 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | action | 1.5.0 | 665 | 6205 | 24 | 34 | 2026-01-30 |
|
| 2 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | action | 1.5.0 | 670 | 6311 | 24 | 34 | 2026-01-30 |
|
||||||
| 3 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | action | 0.4.4 | 365 | 2841 | 14 | 26 | 2026-02-07 |
|
| 3 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | action | 0.4.4 | 370 | 2881 | 14 | 26 | 2026-02-07 |
|
||||||
| 4 | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | action | 1.2.2 | 350 | 3580 | 14 | 33 | 2026-01-28 |
|
| 4 | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | action | 1.2.2 | 355 | 3627 | 14 | 33 | 2026-01-28 |
|
||||||
| 5 | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | action | 0.3.7 | 334 | 1569 | 7 | 6 | 2026-01-29 |
|
| 5 | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | action | 0.3.7 | 339 | 1611 | 7 | 6 | 2026-01-29 |
|
||||||
| 6 | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | action | 1.2.4 | 310 | 4433 | 17 | 28 | 2026-01-29 |
|
| 6 | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | action | 1.2.4 | 313 | 4483 | 17 | 28 | 2026-01-29 |
|
||||||
| 7 | [Flash Card](https://openwebui.com/posts/flash_card_65a2ea8f) | action | 0.2.4 | 217 | 3302 | 13 | 14 | 2026-01-28 |
|
| 7 | [Flash Card](https://openwebui.com/posts/flash_card_65a2ea8f) | action | 0.2.4 | 219 | 3321 | 13 | 14 | 2026-01-28 |
|
||||||
| 8 | [AI Task Instruction Generator](https://openwebui.com/posts/ai_task_instruction_generator_9bab8b37) | unknown | | 178 | 2475 | 8 | 4 | 2026-01-28 |
|
| 8 | [AI Task Instruction Generator](https://openwebui.com/posts/ai_task_instruction_generator_9bab8b37) | unknown | | 180 | 2530 | 9 | 5 | 2026-01-28 |
|
||||||
| 9 | [Deep Dive](https://openwebui.com/posts/deep_dive_c0b846e4) | action | 1.0.0 | 144 | 1218 | 6 | 11 | 2026-01-08 |
|
| 9 | [Deep Dive](https://openwebui.com/posts/deep_dive_c0b846e4) | action | 1.0.0 | 146 | 1232 | 6 | 11 | 2026-01-08 |
|
||||||
| 10 | [导出为Word增强版](https://openwebui.com/posts/导出为_word_支持公式流程图表格和代码块_8a6306c0) | action | 0.4.4 | 122 | 2149 | 13 | 6 | 2026-02-07 |
|
| 10 | [导出为Word增强版](https://openwebui.com/posts/导出为_word_支持公式流程图表格和代码块_8a6306c0) | action | 0.4.4 | 124 | 2171 | 13 | 7 | 2026-02-07 |
|
||||||
| 11 | [GitHub Copilot Official SDK Pipe](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4) | pipe | 0.5.1 | 71 | 2069 | 13 | 6 | 2026-02-08 |
|
| 11 | [GitHub Copilot Official SDK Pipe](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4) | action | 0.6.0 | 83 | 2162 | 13 | 7 | 2026-02-09 |
|
||||||
| 12 | [智能信息图](https://openwebui.com/posts/智能信息图_e04a48ff) | action | 1.5.0 | 58 | 1031 | 10 | 1 | 2026-01-29 |
|
| 12 | [📂 Folder Memory – Auto-Evolving Project Context](https://openwebui.com/posts/folder_memory_auto_evolving_project_context_4a9875b2) | filter | 0.1.0 | 59 | 1264 | 6 | 8 | 2026-01-20 |
|
||||||
| 13 | [📂 Folder Memory – Auto-Evolving Project Context](https://openwebui.com/posts/folder_memory_auto_evolving_project_context_4a9875b2) | filter | 0.1.0 | 58 | 1247 | 6 | 8 | 2026-01-20 |
|
| 13 | [智能信息图](https://openwebui.com/posts/智能信息图_e04a48ff) | action | 1.5.0 | 58 | 1040 | 10 | 1 | 2026-01-29 |
|
||||||
| 14 | [思维导图](https://openwebui.com/posts/智能生成交互式思维导图帮助用户可视化知识_8d4b097b) | action | 0.9.2 | 37 | 573 | 6 | 2 | 2026-01-28 |
|
| 14 | [思维导图](https://openwebui.com/posts/智能生成交互式思维导图帮助用户可视化知识_8d4b097b) | action | 0.9.2 | 37 | 577 | 6 | 2 | 2026-01-28 |
|
||||||
| 15 | [异步上下文压缩](https://openwebui.com/posts/异步上下文压缩_5c0617cb) | action | 1.2.2 | 33 | 646 | 7 | 5 | 2026-01-28 |
|
| 15 | [异步上下文压缩](https://openwebui.com/posts/异步上下文压缩_5c0617cb) | action | 1.2.2 | 33 | 650 | 7 | 5 | 2026-01-28 |
|
||||||
| 16 | [闪记卡 (Flash Card)](https://openwebui.com/posts/闪记卡生成插件_4a31eac3) | action | 0.2.4 | 27 | 670 | 8 | 1 | 2026-01-28 |
|
| 16 | [闪记卡 (Flash Card)](https://openwebui.com/posts/闪记卡生成插件_4a31eac3) | action | 0.2.4 | 27 | 675 | 8 | 1 | 2026-01-28 |
|
||||||
| 17 | [精读](https://openwebui.com/posts/精读_99830b0f) | action | 1.0.0 | 24 | 419 | 5 | 1 | 2026-01-08 |
|
| 17 | [精读](https://openwebui.com/posts/精读_99830b0f) | action | 1.0.0 | 24 | 423 | 5 | 1 | 2026-01-08 |
|
||||||
| 18 | [🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager](https://openwebui.com/posts/open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e) | unknown | | 0 | 1460 | 12 | 18 | 2026-01-28 |
|
| 18 | [GitHub Copilot SDK Files Filter](https://openwebui.com/posts/github_copilot_sdk_files_filter_403a62ee) | filter | 0.1.2 | 3 | 47 | 1 | 0 | 2026-02-09 |
|
||||||
| 19 | [Review of Claude Haiku 4.5](https://openwebui.com/posts/review_of_claude_haiku_45_41b0db39) | unknown | | 0 | 139 | 2 | 0 | 2026-01-14 |
|
| 19 | [🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager](https://openwebui.com/posts/open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e) | unknown | | 0 | 1468 | 12 | 18 | 2026-01-28 |
|
||||||
| 20 | [ 🛠️ Debug Open WebUI Plugins in Your Browser](https://openwebui.com/posts/debug_open_webui_plugins_in_your_browser_81bf7960) | unknown | | 0 | 1411 | 14 | 10 | 2026-01-10 |
|
| 20 | [Review of Claude Haiku 4.5](https://openwebui.com/posts/review_of_claude_haiku_45_41b0db39) | unknown | | 0 | 140 | 2 | 0 | 2026-01-14 |
|
||||||
|
| 21 | [ 🛠️ Debug Open WebUI Plugins in Your Browser](https://openwebui.com/posts/debug_open_webui_plugins_in_your_browser_81bf7960) | unknown | | 0 | 1415 | 14 | 10 | 2026-01-10 |
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ Actions are interactive plugins that:
|
|||||||
|
|
||||||
Intelligently analyzes text content and generates interactive mind maps with beautiful visualizations.
|
Intelligently analyzes text content and generates interactive mind maps with beautiful visualizations.
|
||||||
|
|
||||||
**Version:** 0.9.1
|
**Version:** 0.9.2
|
||||||
|
|
||||||
[:octicons-arrow-right-24: Documentation](smart-mind-map.md)
|
[:octicons-arrow-right-24: Documentation](smart-mind-map.md)
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@ Actions are interactive plugins that:
|
|||||||
|
|
||||||
Transform text into professional infographics using AntV visualization engine with various templates.
|
Transform text into professional infographics using AntV visualization engine with various templates.
|
||||||
|
|
||||||
**Version:** 1.4.9
|
**Version:** 1.5.0
|
||||||
|
|
||||||
[:octicons-arrow-right-24: Documentation](smart-infographic.md)
|
[:octicons-arrow-right-24: Documentation](smart-infographic.md)
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# 📊 Export to Excel
|
# 📊 Export to Excel
|
||||||
|
|
||||||
**Author:** [Fu-Jie](https://github.com/Fu-Jie/awesome-openwebui) | **Version:** 0.3.6 | **Project:** [Awesome OpenWebUI](https://github.com/Fu-Jie/awesome-openwebui) | **License:** MIT
|
**Author:** [Fu-Jie](https://github.com/Fu-Jie/awesome-openwebui) | **Version:** 0.3.7 | **Project:** [Awesome OpenWebUI](https://github.com/Fu-Jie/awesome-openwebui) | **License:** MIT
|
||||||
|
|
||||||
Export chat history to an Excel (.xlsx) file directly from the chat interface.
|
Export chat history to an Excel (.xlsx) file directly from the chat interface.
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# GitHub Copilot SDK Pipe for OpenWebUI
|
# GitHub Copilot SDK Pipe for OpenWebUI
|
||||||
|
|
||||||
**Author:** [Fu-Jie](https://github.com/Fu-Jie/awesome-openwebui) | **Version:** 0.6.0 | **Project:** [Awesome OpenWebUI](https://github.com/Fu-Jie/awesome-openwebui) | **License:** MIT
|
**Author:** [Fu-Jie](https://github.com/Fu-Jie/awesome-openwebui) | **Version:** 0.6.1 | **Project:** [Awesome OpenWebUI](https://github.com/Fu-Jie/awesome-openwebui) | **License:** MIT
|
||||||
|
|
||||||
This is an advanced Pipe function for [OpenWebUI](https://github.com/open-webui/open-webui) that integrates the official [GitHub Copilot SDK](https://github.com/github/copilot-sdk). It enables you to use **GitHub Copilot models** (e.g., `gpt-5.2-codex`, `claude-sonnet-4.5`,`gemini-3-pro`, `gpt-5-mini`) **AND** your own models via **BYOK** (OpenAI, Anthropic) directly within OpenWebUI, providing a unified agentic experience with **strict User & Chat-level Workspace Isolation**.
|
This is an advanced Pipe function for [OpenWebUI](https://github.com/open-webui/open-webui) that integrates the official [GitHub Copilot SDK](https://github.com/github/copilot-sdk). It enables you to use **GitHub Copilot models** (e.g., `gpt-5.2-codex`, `claude-sonnet-4.5`,`gemini-3-pro`, `gpt-5-mini`) **AND** your own models via **BYOK** (OpenAI, Anthropic) directly within OpenWebUI, providing a unified agentic experience with **strict User & Chat-level Workspace Isolation**.
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ This is an advanced Pipe function for [OpenWebUI](https://github.com/open-webui/
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ✨ v0.6.0 Updates (What's New)
|
## ✨ v0.6.1 Updates (What's New)
|
||||||
|
|
||||||
- **👥 User & Chat Management**: Physical management architecture (`user_id/chat_id`) for absolute resource independence.
|
- **👥 User & Chat Management**: Physical management architecture (`user_id/chat_id`) for absolute resource independence.
|
||||||
- **🤖 Empowering Agent Autonomy**: Automatic synchronization of raw files to the workspace, enabling direct Python-based analysis of Excel/CSV.
|
- **🤖 Empowering Agent Autonomy**: Automatic synchronization of raw files to the workspace, enabling direct Python-based analysis of Excel/CSV.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# GitHub Copilot SDK 官方管道
|
# GitHub Copilot SDK 官方管道
|
||||||
|
|
||||||
**作者:** [Fu-Jie](https://github.com/Fu-Jie/awesome-openwebui) | **版本:** 0.6.0 | **项目:** [Awesome OpenWebUI](https://github.com/Fu-Jie/awesome-openwebui) | **许可证:** MIT
|
**作者:** [Fu-Jie](https://github.com/Fu-Jie/awesome-openwebui) | **版本:** 0.6.1 | **项目:** [Awesome OpenWebUI](https://github.com/Fu-Jie/awesome-openwebui) | **许可证:** MIT
|
||||||
|
|
||||||
这是一个用于 [OpenWebUI](https://github.com/open-webui/open-webui) 的高级 Pipe 函数,深度集成了 **GitHub Copilot SDK**。它不仅支持 **GitHub Copilot 官方模型**(如 `gpt-5.2-codex`, `claude-sonnet-4.5`, `gemini-3-pro`, `gpt-5-mini`),还支持 **BYOK (自带 Key)** 模式对接自定义服务商(OpenAI, Anthropic),并具备**严格的用户与会话级工作区隔离**能力,提供统一且安全的 Agent 交互体验。
|
这是一个用于 [OpenWebUI](https://github.com/open-webui/open-webui) 的高级 Pipe 函数,深度集成了 **GitHub Copilot SDK**。它不仅支持 **GitHub Copilot 官方模型**(如 `gpt-5.2-codex`, `claude-sonnet-4.5`, `gemini-3-pro`, `gpt-5-mini`),还支持 **BYOK (自带 Key)** 模式对接自定义服务商(OpenAI, Anthropic),并具备**严格的用户与会话级工作区隔离**能力,提供统一且安全的 Agent 交互体验。
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ✨ 0.6.0 更新内容 (What's New)
|
## ✨ 0.6.1 更新内容 (What's New)
|
||||||
|
|
||||||
- **👥 多用户与会话管理**: 采用 `user_id/chat_id` 的物理隔离架构,确保资源独立与稳健管理。
|
- **👥 多用户与会话管理**: 采用 `user_id/chat_id` 的物理隔离架构,确保资源独立与稳健管理。
|
||||||
- **🤖 赋予 Agent 文件自主权**: 自动将上传的文件同步至物理工作区,支持 Python 直接分析 Excel/CSV。
|
- **🤖 赋予 Agent 文件自主权**: 自动将上传的文件同步至物理工作区,支持 Python 直接分析 Excel/CSV。
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ author_url: https://github.com/Fu-Jie/awesome-openwebui
|
|||||||
funding_url: https://github.com/open-webui
|
funding_url: https://github.com/open-webui
|
||||||
openwebui_id: ce96f7b4-12fc-4ac3-9a01-875713e69359
|
openwebui_id: ce96f7b4-12fc-4ac3-9a01-875713e69359
|
||||||
description: Integrate GitHub Copilot SDK. Supports dynamic models, multi-turn conversation, streaming, multimodal input, infinite sessions, and frontend debug logging.
|
description: Integrate GitHub Copilot SDK. Supports dynamic models, multi-turn conversation, streaming, multimodal input, infinite sessions, and frontend debug logging.
|
||||||
version: 0.6.0
|
version: 0.6.1
|
||||||
requirements: github-copilot-sdk==0.1.23
|
requirements: github-copilot-sdk==0.1.23
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -1753,75 +1753,82 @@ class Pipe:
|
|||||||
"chat_id": str(chat_id).strip(),
|
"chat_id": str(chat_id).strip(),
|
||||||
}
|
}
|
||||||
|
|
||||||
async def _fetch_byok_models(self) -> List[dict]:
|
async def _fetch_byok_models(self, uv: "Pipe.UserValves" = None) -> List[dict]:
|
||||||
"""Fetch BYOK models from configured provider."""
|
"""Fetch BYOK models from configured provider."""
|
||||||
model_list = []
|
model_list = []
|
||||||
if self.valves.BYOK_BASE_URL:
|
|
||||||
|
# Resolve effective settings (User > Global)
|
||||||
|
# Note: We handle the case where uv might be None
|
||||||
|
effective_base_url = (uv.BYOK_BASE_URL if uv else "") or self.valves.BYOK_BASE_URL
|
||||||
|
effective_type = (uv.BYOK_TYPE if uv else "") or self.valves.BYOK_TYPE
|
||||||
|
effective_api_key = (uv.BYOK_API_KEY if uv else "") or self.valves.BYOK_API_KEY
|
||||||
|
effective_bearer_token = (uv.BYOK_BEARER_TOKEN if uv else "") or self.valves.BYOK_BEARER_TOKEN
|
||||||
|
effective_models = (uv.BYOK_MODELS if uv else "") or self.valves.BYOK_MODELS
|
||||||
|
|
||||||
|
if effective_base_url:
|
||||||
try:
|
try:
|
||||||
base_url = self.valves.BYOK_BASE_URL.rstrip("/")
|
base_url = effective_base_url.rstrip("/")
|
||||||
url = f"{base_url}/models"
|
url = f"{base_url}/models"
|
||||||
headers = {}
|
headers = {}
|
||||||
provider_type = self.valves.BYOK_TYPE.lower()
|
provider_type = effective_type.lower()
|
||||||
|
|
||||||
if provider_type == "anthropic":
|
if provider_type == "anthropic":
|
||||||
if self.valves.BYOK_API_KEY:
|
if effective_api_key:
|
||||||
headers["x-api-key"] = self.valves.BYOK_API_KEY
|
headers["x-api-key"] = effective_api_key
|
||||||
headers["anthropic-version"] = "2023-06-01"
|
headers["anthropic-version"] = "2023-06-01"
|
||||||
else:
|
else:
|
||||||
if self.valves.BYOK_BEARER_TOKEN:
|
if effective_bearer_token:
|
||||||
headers["Authorization"] = (
|
headers["Authorization"] = (
|
||||||
f"Bearer {self.valves.BYOK_BEARER_TOKEN}"
|
f"Bearer {effective_bearer_token}"
|
||||||
)
|
)
|
||||||
elif self.valves.BYOK_API_KEY:
|
elif effective_api_key:
|
||||||
headers["Authorization"] = f"Bearer {self.valves.BYOK_API_KEY}"
|
headers["Authorization"] = f"Bearer {effective_api_key}"
|
||||||
|
|
||||||
timeout = aiohttp.ClientTimeout(total=5)
|
timeout = aiohttp.ClientTimeout(total=60)
|
||||||
async with aiohttp.ClientSession(timeout=timeout) as session:
|
async with aiohttp.ClientSession(timeout=timeout) as session:
|
||||||
async with session.get(url, headers=headers) as resp:
|
for attempt in range(3):
|
||||||
if resp.status == 200:
|
try:
|
||||||
data = await resp.json()
|
async with session.get(url, headers=headers) as resp:
|
||||||
if (
|
if resp.status == 200:
|
||||||
isinstance(data, dict)
|
data = await resp.json()
|
||||||
and "data" in data
|
if (
|
||||||
and isinstance(data["data"], list)
|
isinstance(data, dict)
|
||||||
):
|
and "data" in data
|
||||||
for item in data["data"]:
|
and isinstance(data["data"], list)
|
||||||
if isinstance(item, dict) and "id" in item:
|
):
|
||||||
model_list.append(item["id"])
|
for item in data["data"]:
|
||||||
await self._emit_debug_log(
|
if isinstance(item, dict) and "id" in item:
|
||||||
f"BYOK: Fetched {len(model_list)} models from {url}"
|
model_list.append(item["id"])
|
||||||
)
|
elif isinstance(data, list):
|
||||||
else:
|
for item in data:
|
||||||
await self._emit_debug_log(
|
if isinstance(item, dict) and "id" in item:
|
||||||
f"BYOK: Failed to fetch models from {url}. Status: {resp.status}"
|
model_list.append(item["id"])
|
||||||
)
|
|
||||||
|
await self._emit_debug_log(
|
||||||
|
f"BYOK: Fetched {len(model_list)} models from {url}"
|
||||||
|
)
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
await self._emit_debug_log(
|
||||||
|
f"BYOK: Failed to fetch models from {url} (Attempt {attempt+1}/3). Status: {resp.status}"
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
await self._emit_debug_log(f"BYOK: Model fetch error (Attempt {attempt+1}/3): {e}")
|
||||||
|
|
||||||
|
if attempt < 2:
|
||||||
|
await asyncio.sleep(1)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
await self._emit_debug_log(f"BYOK: Model fetch error: {e}")
|
await self._emit_debug_log(f"BYOK: Setup error: {e}")
|
||||||
|
|
||||||
# Fallback to configured list or defaults
|
# Fallback to configured list or defaults
|
||||||
if not model_list:
|
if not model_list:
|
||||||
if self.valves.BYOK_MODELS.strip():
|
if effective_models.strip():
|
||||||
model_list = [
|
model_list = [
|
||||||
m.strip() for m in self.valves.BYOK_MODELS.split(",") if m.strip()
|
m.strip() for m in effective_models.split(",") if m.strip()
|
||||||
]
|
]
|
||||||
await self._emit_debug_log(
|
await self._emit_debug_log(
|
||||||
f"BYOK: Using user-configured BYOK_MODELS ({len(model_list)} models)."
|
f"BYOK: Using user-configured BYOK_MODELS ({len(model_list)} models)."
|
||||||
)
|
)
|
||||||
else:
|
|
||||||
defaults = {
|
|
||||||
"anthropic": [
|
|
||||||
"claude-3-5-sonnet-latest",
|
|
||||||
"claude-3-5-haiku-latest",
|
|
||||||
"claude-3-opus-latest",
|
|
||||||
],
|
|
||||||
}
|
|
||||||
model_list = defaults.get(
|
|
||||||
self.valves.BYOK_TYPE.lower(),
|
|
||||||
["gpt-4o", "gpt-4o-mini", "claude-3-5-sonnet-latest"],
|
|
||||||
)
|
|
||||||
await self._emit_debug_log(
|
|
||||||
f"BYOK: Using default fallback models for {self.valves.BYOK_TYPE} ({len(model_list)} models)."
|
|
||||||
)
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
@@ -1943,13 +1950,14 @@ class Pipe:
|
|||||||
|
|
||||||
# Fetch BYOK models if configured
|
# Fetch BYOK models if configured
|
||||||
byok = []
|
byok = []
|
||||||
if self.valves.BYOK_BASE_URL and (
|
effective_base_url = uv.BYOK_BASE_URL or self.valves.BYOK_BASE_URL
|
||||||
|
if effective_base_url and (
|
||||||
uv.BYOK_API_KEY
|
uv.BYOK_API_KEY
|
||||||
or self.valves.BYOK_API_KEY
|
or self.valves.BYOK_API_KEY
|
||||||
or uv.BYOK_BEARER_TOKEN
|
or uv.BYOK_BEARER_TOKEN
|
||||||
or self.valves.BYOK_BEARER_TOKEN
|
or self.valves.BYOK_BEARER_TOKEN
|
||||||
):
|
):
|
||||||
byok = await self._fetch_byok_models()
|
byok = await self._fetch_byok_models(uv=uv)
|
||||||
|
|
||||||
standard = []
|
standard = []
|
||||||
if token:
|
if token:
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ author: Fu-Jie
|
|||||||
author_url: https://github.com/Fu-Jie/awesome-openwebui
|
author_url: https://github.com/Fu-Jie/awesome-openwebui
|
||||||
funding_url: https://github.com/open-webui
|
funding_url: https://github.com/open-webui
|
||||||
description: 集成 GitHub Copilot SDK。支持动态模型、多选提供商、流式输出、多模态 input、无限会话及前端调试日志。
|
description: 集成 GitHub Copilot SDK。支持动态模型、多选提供商、流式输出、多模态 input、无限会话及前端调试日志。
|
||||||
version: 0.6.0
|
version: 0.6.1
|
||||||
requirements: github-copilot-sdk==0.1.23
|
requirements: github-copilot-sdk==0.1.23
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -779,52 +779,92 @@ class Pipe:
|
|||||||
pass
|
pass
|
||||||
return text, att
|
return text, att
|
||||||
|
|
||||||
async def _fetch_byok_models(self) -> List[dict]:
|
async def _fetch_byok_models(self, uv: "Pipe.UserValves" = None) -> List[dict]:
|
||||||
if not self.valves.BYOK_BASE_URL:
|
"""从配置的提供商获取 BYOK 模型。"""
|
||||||
return []
|
model_list = []
|
||||||
try:
|
|
||||||
url, t = (
|
# 确定有效配置 (用户 > 全局)
|
||||||
f"{self.valves.BYOK_BASE_URL.rstrip('/')}/models",
|
effective_base_url = (uv.BYOK_BASE_URL if uv else "") or self.valves.BYOK_BASE_URL
|
||||||
self.valves.BYOK_TYPE.lower(),
|
effective_type = (uv.BYOK_TYPE if uv else "") or self.valves.BYOK_TYPE
|
||||||
)
|
effective_api_key = (uv.BYOK_API_KEY if uv else "") or self.valves.BYOK_API_KEY
|
||||||
h = {"anthropic-version": "2023-06-01"} if t == "anthropic" else {}
|
effective_bearer_token = (uv.BYOK_BEARER_TOKEN if uv else "") or self.valves.BYOK_BEARER_TOKEN
|
||||||
if self.valves.BYOK_API_KEY:
|
effective_models = (uv.BYOK_MODELS if uv else "") or self.valves.BYOK_MODELS
|
||||||
h["x-api-key" if t == "anthropic" else "Authorization"] = (
|
|
||||||
self.valves.BYOK_API_KEY
|
if effective_base_url:
|
||||||
if t == "anthropic"
|
try:
|
||||||
else f"Bearer {self.valves.BYOK_API_KEY}"
|
base_url = effective_base_url.rstrip("/")
|
||||||
|
url = f"{base_url}/models"
|
||||||
|
headers = {}
|
||||||
|
provider_type = effective_type.lower()
|
||||||
|
|
||||||
|
if provider_type == "anthropic":
|
||||||
|
if effective_api_key:
|
||||||
|
headers["x-api-key"] = effective_api_key
|
||||||
|
headers["anthropic-version"] = "2023-06-01"
|
||||||
|
else:
|
||||||
|
if effective_bearer_token:
|
||||||
|
headers["Authorization"] = (
|
||||||
|
f"Bearer {effective_bearer_token}"
|
||||||
|
)
|
||||||
|
elif effective_api_key:
|
||||||
|
headers["Authorization"] = f"Bearer {effective_api_key}"
|
||||||
|
|
||||||
|
timeout = aiohttp.ClientTimeout(total=60)
|
||||||
|
async with aiohttp.ClientSession(timeout=timeout) as session:
|
||||||
|
for attempt in range(3):
|
||||||
|
try:
|
||||||
|
async with session.get(url, headers=headers) as resp:
|
||||||
|
if resp.status == 200:
|
||||||
|
data = await resp.json()
|
||||||
|
if (
|
||||||
|
isinstance(data, dict)
|
||||||
|
and "data" in data
|
||||||
|
and isinstance(data["data"], list)
|
||||||
|
):
|
||||||
|
for item in data["data"]:
|
||||||
|
if isinstance(item, dict) and "id" in item:
|
||||||
|
model_list.append(item["id"])
|
||||||
|
elif isinstance(data, list):
|
||||||
|
for item in data:
|
||||||
|
if isinstance(item, dict) and "id" in item:
|
||||||
|
model_list.append(item["id"])
|
||||||
|
|
||||||
|
await self._emit_debug_log(
|
||||||
|
f"BYOK: 从 {url} 获取了 {len(model_list)} 个模型"
|
||||||
|
)
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
await self._emit_debug_log(
|
||||||
|
f"BYOK: 获取模型失败 {url} (尝试 {attempt+1}/3). 状态码: {resp.status}"
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
await self._emit_debug_log(f"BYOK: 模型获取错误 (尝试 {attempt+1}/3): {e}")
|
||||||
|
|
||||||
|
if attempt < 2:
|
||||||
|
await asyncio.sleep(1)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
await self._emit_debug_log(f"BYOK: 设置错误: {e}")
|
||||||
|
|
||||||
|
# 如果自动获取失败,回退到手动配置列表
|
||||||
|
if not model_list:
|
||||||
|
if effective_models.strip():
|
||||||
|
model_list = [
|
||||||
|
m.strip() for m in effective_models.split(",") if m.strip()
|
||||||
|
]
|
||||||
|
await self._emit_debug_log(
|
||||||
|
f"BYOK: 使用用户手动配置的 BYOK_MODELS ({len(model_list)} 个模型)."
|
||||||
)
|
)
|
||||||
if self.valves.BYOK_BEARER_TOKEN:
|
|
||||||
h["Authorization"] = f"Bearer {self.valves.BYOK_BEARER_TOKEN}"
|
|
||||||
async with aiohttp.ClientSession(
|
|
||||||
timeout=aiohttp.ClientTimeout(total=5)
|
|
||||||
) as s:
|
|
||||||
async with s.get(url, headers=h) as r:
|
|
||||||
if r.status == 200:
|
|
||||||
data = await r.json()
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
"id": m["id"],
|
|
||||||
"name": f"-{self._clean_model_id(m['id'])}",
|
|
||||||
"source": "byok",
|
|
||||||
"provider": self.valves.BYOK_TYPE.capitalize(),
|
|
||||||
}
|
|
||||||
for m in data.get("data", [])
|
|
||||||
if isinstance(m, dict) and "id" in m
|
|
||||||
]
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
"id": m.strip(),
|
"id": m,
|
||||||
"name": f"-{self._clean_model_id(m.strip())}",
|
"name": f"-{self._clean_model_id(m)}",
|
||||||
"source": "byok",
|
"source": "byok",
|
||||||
"provider": self.valves.BYOK_TYPE.capitalize(),
|
"provider": effective_type.capitalize(),
|
||||||
|
"raw_id": m,
|
||||||
}
|
}
|
||||||
for m in self.valves.BYOK_MODELS.split(",")
|
for m in model_list
|
||||||
if m.strip()
|
|
||||||
] or [
|
|
||||||
{"id": "gpt-4o", "name": "-gpt-4o", "source": "byok", "provider": "OpenAI"}
|
|
||||||
]
|
]
|
||||||
|
|
||||||
def _build_session_config(
|
def _build_session_config(
|
||||||
@@ -1116,191 +1156,126 @@ class Pipe:
|
|||||||
await client.stop()
|
await client.stop()
|
||||||
|
|
||||||
async def pipes(self, __user__: Optional[dict] = None) -> List[dict]:
|
async def pipes(self, __user__: Optional[dict] = None) -> List[dict]:
|
||||||
# 清理多余日志,仅在 DEBUG 开启时输出
|
# 获取用户配置
|
||||||
uv = self._get_user_valves(__user__)
|
uv = self._get_user_valves(__user__)
|
||||||
if uv.DEBUG or self.valves.DEBUG:
|
|
||||||
logger.info(f"[Copilot SDK] 获取模型列表 (用户: {bool(__user__)})")
|
|
||||||
|
|
||||||
token = uv.GH_TOKEN or self.valves.GH_TOKEN
|
token = uv.GH_TOKEN or self.valves.GH_TOKEN
|
||||||
|
|
||||||
# 环境防抖检查 (24小时内只检查一次)
|
# 环境初始化 (带有 24 小时冷却时间)
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
now = datetime.now().timestamp()
|
now = datetime.now().timestamp()
|
||||||
needs_setup = not self.__class__._env_setup_done or (
|
if not self.__class__._env_setup_done or (now - self.__class__._last_update_check > 86400):
|
||||||
now - self.__class__._last_update_check > 86400
|
self._setup_env(debug_enabled=uv.DEBUG or self.valves.DEBUG, token=token)
|
||||||
)
|
|
||||||
|
|
||||||
if needs_setup:
|
|
||||||
self._setup_env(debug_enabled=uv.DEBUG or self.valves.DEBUG)
|
|
||||||
elif token:
|
elif token:
|
||||||
os.environ["GH_TOKEN"] = os.environ["GITHUB_TOKEN"] = token
|
os.environ["GH_TOKEN"] = os.environ["GITHUB_TOKEN"] = token
|
||||||
|
|
||||||
|
# 确定倍率限制
|
||||||
eff_max = self.valves.MAX_MULTIPLIER
|
eff_max = self.valves.MAX_MULTIPLIER
|
||||||
if uv.MAX_MULTIPLIER is not None:
|
if uv.MAX_MULTIPLIER is not None:
|
||||||
eff_max = uv.MAX_MULTIPLIER
|
eff_max = uv.MAX_MULTIPLIER
|
||||||
|
|
||||||
ex_kw = [
|
# 确定关键词和提供商过滤
|
||||||
k.strip().lower()
|
ex_kw = [k.strip().lower() for k in (self.valves.EXCLUDE_KEYWORDS + "," + uv.EXCLUDE_KEYWORDS).split(",") if k.strip()]
|
||||||
for k in (self.valves.EXCLUDE_KEYWORDS + "," + uv.EXCLUDE_KEYWORDS).split(
|
allowed_p = [p.strip().lower() for p in (uv.PROVIDERS if uv.PROVIDERS else self.valves.PROVIDERS).split(",") if p.strip()]
|
||||||
","
|
|
||||||
)
|
# 如果缓存为空,刷新模型列表
|
||||||
if k.strip()
|
if not self._model_cache:
|
||||||
]
|
byok_models = []
|
||||||
allowed_p = [
|
|
||||||
p.strip().lower()
|
|
||||||
for p in (uv.PROVIDERS if uv.PROVIDERS else self.valves.PROVIDERS).split(
|
|
||||||
","
|
|
||||||
)
|
|
||||||
if p.strip()
|
|
||||||
]
|
|
||||||
if self._model_cache:
|
|
||||||
res = []
|
|
||||||
for m in self._model_cache:
|
|
||||||
if allowed_p and m.get("provider", "Unknown").lower() not in allowed_p:
|
|
||||||
continue
|
|
||||||
mid, mname = (m.get("raw_id") or m.get("id", "")).lower(), m.get(
|
|
||||||
"name", ""
|
|
||||||
).lower()
|
|
||||||
if any(kw in mid or kw in mname for kw in ex_kw):
|
|
||||||
continue
|
|
||||||
if m.get("source") == "copilot" and m.get("multiplier", 0) > eff_max:
|
|
||||||
continue
|
|
||||||
res.append(m)
|
|
||||||
return res
|
|
||||||
try:
|
|
||||||
self._setup_env()
|
|
||||||
byok_models = (
|
|
||||||
await self._fetch_byok_models()
|
|
||||||
if self.valves.BYOK_BASE_URL
|
|
||||||
and (
|
|
||||||
uv.BYOK_API_KEY
|
|
||||||
or self.valves.BYOK_API_KEY
|
|
||||||
or self.valves.BYOK_BEARER_TOKEN
|
|
||||||
)
|
|
||||||
else []
|
|
||||||
)
|
|
||||||
standard_models = []
|
standard_models = []
|
||||||
if self.valves.GH_TOKEN:
|
|
||||||
c = CopilotClient({"cli_path": os.environ.get("COPILOT_CLI_PATH")})
|
# 1. 获取 BYOK 模型 (优先使用个人设置)
|
||||||
|
if ((uv.BYOK_BASE_URL if uv else "") or self.valves.BYOK_BASE_URL) and \
|
||||||
|
((uv.BYOK_API_KEY if uv else "") or self.valves.BYOK_API_KEY or (uv.BYOK_BEARER_TOKEN if uv else "") or self.valves.BYOK_BEARER_TOKEN):
|
||||||
|
byok_models = await self._fetch_byok_models(uv=uv)
|
||||||
|
|
||||||
|
# 2. 获取标准 Copilot 模型
|
||||||
|
if token:
|
||||||
|
c = await self._get_client()
|
||||||
try:
|
try:
|
||||||
await c.start()
|
raw_models = await c.list_models()
|
||||||
auth = await c.get_auth_status()
|
raw = raw_models if isinstance(raw_models, list) else []
|
||||||
if getattr(auth, "status", str(auth)) == "authenticated":
|
processed = []
|
||||||
raw_models = await c.list_models()
|
|
||||||
raw = raw_models if isinstance(raw_models, list) else []
|
for m in raw:
|
||||||
processed = []
|
try:
|
||||||
await self._emit_debug_log(
|
m_is_dict = isinstance(m, dict)
|
||||||
f"SDK 返回了 {len(raw)} 个原始模型数据。"
|
mid = m.get("id") if m_is_dict else getattr(m, "id", str(m))
|
||||||
)
|
bill = m.get("billing") if m_is_dict else getattr(m, "billing", None)
|
||||||
for m in raw:
|
if bill and not isinstance(bill, dict):
|
||||||
try:
|
bill = bill.to_dict() if hasattr(bill, "to_dict") else vars(bill)
|
||||||
m_is_dict = isinstance(m, dict)
|
|
||||||
mid = (
|
pol = m.get("policy") if m_is_dict else getattr(m, "policy", None)
|
||||||
m.get("id")
|
if pol and not isinstance(pol, dict):
|
||||||
if m_is_dict
|
pol = pol.to_dict() if hasattr(pol, "to_dict") else vars(pol)
|
||||||
else getattr(m, "id", str(m))
|
|
||||||
)
|
if (pol or {}).get("state") == "disabled":
|
||||||
bill = (
|
continue
|
||||||
m.get("billing")
|
|
||||||
if m_is_dict
|
cap = m.get("capabilities") if m_is_dict else getattr(m, "capabilities", None)
|
||||||
else getattr(m, "billing", None)
|
vis, reas, ctx, supp = False, False, None, []
|
||||||
)
|
if cap:
|
||||||
if bill and not isinstance(bill, dict):
|
if not isinstance(cap, dict):
|
||||||
bill = (
|
cap = cap.to_dict() if hasattr(cap, "to_dict") else vars(cap)
|
||||||
bill.to_dict()
|
s = cap.get("supports", {})
|
||||||
if hasattr(bill, "to_dict")
|
vis, reas = s.get("vision", False), s.get("reasoning_effort", False)
|
||||||
else vars(bill)
|
l = cap.get("limits", {})
|
||||||
)
|
ctx = l.get("max_context_window_tokens")
|
||||||
pol = (
|
|
||||||
m.get("policy")
|
raw_eff = (m.get("supported_reasoning_efforts") if m_is_dict else getattr(m, "supported_reasoning_efforts", [])) or []
|
||||||
if m_is_dict
|
supp = [str(e).lower() for e in raw_eff if e]
|
||||||
else getattr(m, "policy", None)
|
mult = (bill or {}).get("multiplier", 1)
|
||||||
)
|
cid = self._clean_model_id(mid)
|
||||||
if pol and not isinstance(pol, dict):
|
processed.append({
|
||||||
pol = (
|
"id": f"{self.id}-{mid}",
|
||||||
pol.to_dict()
|
"name": f"-{cid} ({mult}x)" if mult > 0 else f"-🔥 {cid} (0x)",
|
||||||
if hasattr(pol, "to_dict")
|
"multiplier": mult,
|
||||||
else vars(pol)
|
"raw_id": mid,
|
||||||
)
|
"source": "copilot",
|
||||||
if (pol or {}).get("state") == "disabled":
|
"provider": self._get_provider_name(m),
|
||||||
continue
|
"meta": {
|
||||||
cap = (
|
"capabilities": {
|
||||||
m.get("capabilities")
|
"vision": vis,
|
||||||
if m_is_dict
|
"reasoning": reas,
|
||||||
else getattr(m, "capabilities", None)
|
"supported_reasoning_efforts": supp,
|
||||||
)
|
},
|
||||||
vis, reas, ctx, supp = False, False, None, []
|
"context_length": ctx,
|
||||||
if cap:
|
},
|
||||||
if not isinstance(cap, dict):
|
})
|
||||||
cap = (
|
except:
|
||||||
cap.to_dict()
|
continue
|
||||||
if hasattr(cap, "to_dict")
|
|
||||||
else vars(cap)
|
processed.sort(key=lambda x: (x["multiplier"], x["raw_id"]))
|
||||||
)
|
standard_models = processed
|
||||||
s = cap.get("supports", {})
|
self._standard_model_ids = {m["raw_id"] for m in processed}
|
||||||
vis, reas = s.get("vision", False), s.get(
|
|
||||||
"reasoning_effort", False
|
|
||||||
)
|
|
||||||
l = cap.get("limits", {})
|
|
||||||
ctx = l.get("max_context_window_tokens")
|
|
||||||
raw_eff = (
|
|
||||||
m.get("supported_reasoning_efforts")
|
|
||||||
if m_is_dict
|
|
||||||
else getattr(m, "supported_reasoning_efforts", [])
|
|
||||||
) or []
|
|
||||||
supp = [str(e).lower() for e in raw_eff if e]
|
|
||||||
mult = (bill or {}).get("multiplier", 1)
|
|
||||||
cid = self._clean_model_id(mid)
|
|
||||||
processed.append(
|
|
||||||
{
|
|
||||||
"id": f"{self.id}-{mid}",
|
|
||||||
"name": (
|
|
||||||
f"-{cid} ({mult}x)"
|
|
||||||
if mult > 0
|
|
||||||
else f"-🔥 {cid} (0x)"
|
|
||||||
),
|
|
||||||
"multiplier": mult,
|
|
||||||
"raw_id": mid,
|
|
||||||
"source": "copilot",
|
|
||||||
"provider": self._get_provider_name(m),
|
|
||||||
"meta": {
|
|
||||||
"capabilities": {
|
|
||||||
"vision": vis,
|
|
||||||
"reasoning": reas,
|
|
||||||
"supported_reasoning_efforts": supp,
|
|
||||||
},
|
|
||||||
"context_length": ctx,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
except Exception as pe:
|
|
||||||
await self._emit_debug_log(f"❌ 解析失败 {mid}: {pe}")
|
|
||||||
processed.sort(key=lambda x: (x["multiplier"], x["raw_id"]))
|
|
||||||
standard_models = processed
|
|
||||||
self._standard_model_ids = {m["raw_id"] for m in processed}
|
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
finally:
|
finally:
|
||||||
await c.stop()
|
await c.stop()
|
||||||
|
|
||||||
self._model_cache = standard_models + byok_models
|
self._model_cache = standard_models + byok_models
|
||||||
if not self._model_cache:
|
|
||||||
return [{"id": "error", "name": "错误:未返回内容。"}]
|
if not self._model_cache:
|
||||||
res = []
|
return [{"id": "error", "name": "未找到任何模型。请检查 Token 或 BYOK 配置。"}]
|
||||||
for m in self._model_cache:
|
|
||||||
if allowed_p and m.get("provider", "Unknown").lower() not in allowed_p:
|
# 3. 实时过滤结果
|
||||||
|
res = []
|
||||||
|
for m in self._model_cache:
|
||||||
|
# 提供商过滤
|
||||||
|
if allowed_p and m.get("provider", "Unknown").lower() not in allowed_p:
|
||||||
|
continue
|
||||||
|
|
||||||
|
mid, mname = (m.get("raw_id") or m.get("id", "")).lower(), m.get("name", "").lower()
|
||||||
|
# 关键词过滤
|
||||||
|
if any(kw in mid or kw in mname for kw in ex_kw):
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 倍率限制 (仅限 Copilot 官方模型)
|
||||||
|
if m.get("source") == "copilot":
|
||||||
|
if float(m.get("multiplier", 1)) > (float(eff_max) + 0.0001):
|
||||||
continue
|
continue
|
||||||
mid, mname = (m.get("raw_id") or m.get("id", "")).lower(), m.get(
|
|
||||||
"name", ""
|
res.append(m)
|
||||||
).lower()
|
|
||||||
if any(kw in mid or kw in mname for kw in ex_kw):
|
return res if res else [{"id": "none", "name": "没有匹配当前过滤条件的模型"}]
|
||||||
continue
|
|
||||||
if m.get("source") == "copilot" and m.get("multiplier", 0) > eff_max:
|
|
||||||
continue
|
|
||||||
res.append(m)
|
|
||||||
return res
|
|
||||||
except Exception as e:
|
|
||||||
return [{"id": "error", "name": f"错误: {e}"}]
|
|
||||||
|
|
||||||
async def stream_response(
|
async def stream_response(
|
||||||
self,
|
self,
|
||||||
|
|||||||
@@ -445,7 +445,7 @@ class OpenWebUIStats:
|
|||||||
username = user.get("username", "")
|
username = user.get("username", "")
|
||||||
profile_url = user.get("profile_url", "")
|
profile_url = user.get("profile_url", "")
|
||||||
lines.append(t["author_header"])
|
lines.append(t["author_header"])
|
||||||
lines.append("|:---:|:---:|:---:|:---:|")
|
lines.append("| :---: | :---: | :---: | :---: |")
|
||||||
lines.append(
|
lines.append(
|
||||||
f"| [{username}]({profile_url}) | **{user.get('followers', 0)}** | "
|
f"| [{username}]({profile_url}) | **{user.get('followers', 0)}** | "
|
||||||
f"**{user.get('total_points', 0)}** | **{user.get('contributions', 0)}** |"
|
f"**{user.get('total_points', 0)}** | **{user.get('contributions', 0)}** |"
|
||||||
@@ -454,7 +454,7 @@ class OpenWebUIStats:
|
|||||||
|
|
||||||
# 统计徽章表格
|
# 统计徽章表格
|
||||||
lines.append(t["header"])
|
lines.append(t["header"])
|
||||||
lines.append("|:---:|:---:|:---:|:---:|:---:|")
|
lines.append("| :---: | :---: | :---: | :---: | :---: |")
|
||||||
lines.append(
|
lines.append(
|
||||||
f"| **{stats['total_posts']}** | **{stats['total_downloads']}** | "
|
f"| **{stats['total_posts']}** | **{stats['total_downloads']}** | "
|
||||||
f"**{stats['total_views']}** | **{stats['total_upvotes']}** | **{stats['total_saves']}** |"
|
f"**{stats['total_views']}** | **{stats['total_upvotes']}** | **{stats['total_saves']}** |"
|
||||||
@@ -467,7 +467,7 @@ class OpenWebUIStats:
|
|||||||
lines.append(t["top6_updated"])
|
lines.append(t["top6_updated"])
|
||||||
lines.append("")
|
lines.append("")
|
||||||
lines.append(t["top6_header"])
|
lines.append(t["top6_header"])
|
||||||
lines.append("|:---:|------|:---:|:---:|:---:|:---:|")
|
lines.append("| :---: | :--- | :---: | :---: | :---: | :---: |")
|
||||||
|
|
||||||
medals = ["🥇", "🥈", "🥉", "4️⃣", "5️⃣", "6️⃣"]
|
medals = ["🥇", "🥈", "🥉", "4️⃣", "5️⃣", "6️⃣"]
|
||||||
for i, post in enumerate(top_plugins):
|
for i, post in enumerate(top_plugins):
|
||||||
|
|||||||
Reference in New Issue
Block a user