""" title: GitHub Copilot Official SDK Pipe author: Fu-Jie author_url: https://github.com/Fu-Jie/awesome-openwebui funding_url: https://github.com/open-webui description: 集成 GitHub Copilot SDK。支持动态模型、多轮对话、流式输出、多模态输入、无限会话及前端调试日志。 version: 0.5.1 requirements: github-copilot-sdk==0.1.23 """ import os import re import time import json import base64 import tempfile import asyncio import logging import shutil import subprocess import sys import hashlib from pathlib import Path from typing import Optional, Union, AsyncGenerator, List, Any, Dict, Callable, Tuple, Literal from types import SimpleNamespace from pydantic import BaseModel, Field, create_model from datetime import datetime, timezone import contextlib # 导入 Copilot SDK 模块 from copilot import CopilotClient, define_tool # 导入 Tool Server Connections 和 Tool System (从 OpenWebUI 配置) from open_webui.config import ( PERSISTENT_CONFIG_REGISTRY, TOOL_SERVER_CONNECTIONS, ) from open_webui.utils.tools import get_tools as get_openwebui_tools, get_builtin_tools from open_webui.models.tools import Tools from open_webui.models.users import Users # Setup logger logger = logging.getLogger(__name__) FORMATTING_GUIDELINES = ( "\n\n[环境与能力上下文]\n" "你是一个在特定高性能环境中运行的 AI 助手。了解你的上下文对于做出最佳决策至关重要。\n" "\n" "**系统环境:**\n" "- **平台**:你在 **OpenWebUI** 托管的 Linux 容器化环境中运行。\n" "- **核心引擎**:你由 **GitHub Copilot SDK** 驱动,并通过 **GitHub Copilot CLI** 进行交互。\n" "- **访问权限**:你可以直接访问 **OpenWebUI 源代码**。你可以通过文件操作或工具读取、分析和参考你正在运行的平台的内部实现。\n" "- **文件系统访问**:你以 **root** 身份运行。你对 **整个容器文件系统** 拥有 **读取权限**(包括系统文件)。但是,你应 **仅写入** 你指定的持久化工作区目录。\n" "- **原生 Python 环境**:你运行在一个 **丰富的 Python 环境** 中,已经包含了 OpenWebUI 的所有依赖库。你可以直接导入并使用这些已安装的库(例如用于数据处理、工具函数等),而无需安装任何新东西。\n" "- **包管理**:仅当你需要 **额外** 的库时,才应在你的工作区内 **创建一个虚拟环境** 并在那里安装它们。不要搞乱全局 pip。\n" "- **网络**:你有互联网访问权限,并且可以在提供相应工具(例如 Web 搜索、MCP 服务器)的情况下与外部 API 进行交互。\n" "\n" "**界面能力 (OpenWebUI):**\n" "- **丰富的 Web UI**:你不受简单终端或纯文本响应的限制。你在现代 Web 浏览器中进行渲染。\n" "- **视觉渲染**:你可以并且应该使用高级视觉元素来清晰地解释概念。\n" "- **交互式脚本**:如果环境支持/工具有效,你通常可以直接运行 Python 脚本来执行计算、数据分析或自动化任务。\n" "- **内置工具集成**:OpenWebUI 提供了与内部服务直接交互的原生工具。例如,`create_note`、`get_notes` 或 `manage_memories` 等工具直接操作平台的数据库。利用这些工具来持久化地管理用户数据和系统状态。\n" "\n" "**格式化与呈现指令:**\n" "1. **Markdown & 多媒体**:\n" " - 自由使用 **粗体**、*斜体*、列表和 **Markdown 表格**(标准格式,严禁使用 HTML 表格)来构建你的答案。\n" " - **Mermaid 图表**:对于流程图、序列图或架构逻辑,请务必使用标准的 ```mermaid 代码块。不要使用其他格式。\n" " - **LaTeX 数学**:使用标准 LaTeX 格式表示数学表达式。\n" "\n" "2. **图像与文件**:\n" " - 如果工具生成了图像或文件,你 **必须** 使用 `![caption](url)` 直接嵌入。\n" " - 除非明确要求,否则不要仅提供文本链接。\n" "\n" "3. **交互式 HTML/JS**:\n" " - 你可以输出独立的 HTML/JS/CSS 代码块。OpenWebUI 将在 iframe 中将其渲染为交互式小部件。\n" " - **重要**:请将所有 HTML、CSS(在 `