[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-snailyp--gemini-balance":3,"tool-snailyp--gemini-balance":61},[4,18,26,36,45,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},8272,"opencode","anomalyco\u002Fopencode","OpenCode 是一款开源的 AI 编程助手（Coding Agent），旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件，而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码，还是排查难以定位的 Bug，OpenCode 都能通过自然语言交互高效完成，显著减少开发者在重复性劳动和上下文切换上的时间消耗。\n\n这款工具专为软件开发者、工程师及技术研究人员设计，特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构，这意味着用户可以审查代码逻辑、自定义行为策略，甚至私有化部署以保障数据安全，彻底打破了传统闭源 AI 助手的“黑盒”限制。\n\n在技术体验上，OpenCode 提供了灵活的终端界面（Terminal UI）和正在测试中的桌面应用程序，支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具，安装便捷，并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客，还是渴望提升产出的独立开发者，OpenCode 都提供了一个透明、可信",144296,1,"2026-04-16T14:50:03",[13,35],"插件",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":42,"last_commit_at":43,"category_tags":44,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",109154,2,"2026-04-18T11:18:24",[14,15,13],{"id":46,"name":47,"github_repo":48,"description_zh":49,"stars":50,"difficulty_score":42,"last_commit_at":51,"category_tags":52,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[35,13,15,14],{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":42,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[35,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":77,"owner_email":78,"owner_twitter":76,"owner_website":76,"owner_url":79,"languages":80,"stars":101,"forks":102,"last_commit_at":103,"license":104,"difficulty_score":42,"env_os":105,"env_gpu":106,"env_ram":106,"env_deps":107,"category_tags":118,"github_topics":119,"view_count":42,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":126,"updated_at":127,"faqs":128,"releases":169},9203,"snailyp\u002Fgemini-balance","gemini-balance","Gemini polling proxy service （gemini轮询代理服务）","Gemini Balance 是一款基于 Python FastAPI 构建的开源代理服务，专为优化 Google Gemini API 的使用体验而设计。它核心解决了单一 API 密钥容易触及调用频率限制（Rate Limit）导致服务中断的痛点，通过智能轮询机制自动管理多个密钥，实现负载均衡，确保对话服务的高可用性。\n\n这款工具非常适合需要稳定接入 Gemini 能力的开发者、AI 应用构建者以及研究人员使用。其独特亮点在于“双协议兼容”，不仅原生支持 Gemini 接口，还能完美模拟 OpenAI API 格式，让用户无需修改现有代码即可无缝切换后端模型。此外，Gemini Balance 提供了可视化的管理后台，支持动态配置密钥、实时监控各密钥的健康状态及详细错误日志，且修改配置无需重启服务。它还集成了图文对话、图片编辑及联网搜索等高级功能的快捷调用方式，并具备批量添加与自动去重密钥的能力。值得注意的是，该项目遵循非商业许可协议，严禁用于商业转售，是个人及团队搭建私有化 AI 网关的理想选择。","[Read this document in Chinese](README_ZH.md)\n\n# Gemini Balance - Gemini API Proxy and Load Balancer\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F13692\" target=\"_blank\">\n    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_1145cd82417e.png\" alt=\"snailyp%2Fgemini-balance | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"\u002F>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fwww.python.org\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3.9%2B-blue.svg\" alt=\"Python\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Ffastapi.tiangolo.com\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FFastAPI-0.100%2B-green.svg\" alt=\"FastAPI\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.uvicorn.org\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FUvicorn-running-purple.svg\" alt=\"Uvicorn\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Ft.me\u002F+soaHax5lyI0wZDVl\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTelegram-Group-blue.svg?logo=telegram\" alt=\"Telegram Group\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n> ⚠️ **Important**: This project is licensed under the [CC BY-NC 4.0](LICENSE) license. **Any form of commercial resale service is prohibited**.\n> I have never sold this service on any platform. If you encounter someone selling this service, they are a reseller. Please do not be deceived.\n\n---\n\n## 📖 Project Introduction\n\n**Gemini Balance** is an application built with Python FastAPI, designed to provide proxy and load balancing functions for the Google Gemini API. It allows you to manage multiple Gemini API Keys and implement key rotation, authentication, model filtering, and status monitoring through simple configuration. Additionally, the project integrates image generation and multiple image hosting upload functions, and supports proxying in the OpenAI API format.\n\n\u003Cdetails>\n\u003Csummary>📂 View Project Structure\u003C\u002Fsummary>\n\n```plaintext\napp\u002F\n├── config\u002F       # Configuration management\n├── core\u002F         # Core application logic (FastAPI instance creation, middleware, etc.)\n├── database\u002F     # Database models and connections\n├── domain\u002F       # Business domain objects\n├── exception\u002F    # Custom exceptions\n├── handler\u002F      # Request handlers\n├── log\u002F          # Logging configuration\n├── main.py       # Application entry point\n├── middleware\u002F   # FastAPI middleware\n├── router\u002F       # API routes (Gemini, OpenAI, status page, etc.)\n├── scheduler\u002F    # Scheduled tasks (e.g., Key status check)\n├── service\u002F      # Business logic services (chat, Key management, statistics, etc.)\n├── static\u002F       # Static files (CSS, JS)\n├── templates\u002F    # HTML templates (e.g., Key status page)\n└── utils\u002F        # Utility functions\n```\n\u003C\u002Fdetails>\n\n---\n\n## ✨ Feature Highlights\n\n*   **Multi-Key Load Balancing**: Supports configuring multiple Gemini API Keys (`API_KEYS`) for automatic sequential polling.\n*   **Visual Configuration**: Configurations modified through the admin backend take effect immediately without restarting.\n    ![Configuration Panel](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_0477909a0eb9.png)\n*   **Dual Protocol API Compatibility**: Supports both Gemini and OpenAI CHAT API formats.\n    *   OpenAI Base URL: `http:\u002F\u002Flocalhost:8000(\u002Fhf)\u002Fv1`\n    *   Gemini Base URL: `http:\u002F\u002Flocalhost:8000(\u002Fgemini)\u002Fv1beta`\n*   **Image-Text Chat & Modification**: Configure models with `IMAGE_MODELS` to support image-text chat and editing. Use the `configured_model-image` model name to invoke.\n    ![Chat with Image Generation](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_424ab1fcce6d.png)\n    ![Modify Image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_adab00d20b32.png)\n*   **Web Search**: Configure models with `SEARCH_MODELS` to support web search. Use the `configured_model-search` model name to invoke.\n    ![Web Search](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_56e681e65e79.png)\n*   **Key Status Monitoring**: Provides a `\u002Fkeys_status` page (authentication required) for real-time monitoring.\n    ![Monitoring Panel](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_1fb82da35153.png)\n*   **Detailed Logging**: Provides detailed error logs for easy troubleshooting.\n    ![Call Details](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_169a67984a4b.png)\n    ![Log List](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_7cf2e9b66a0a.png)\n    ![Log Details](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_72f8687ad6fb.png)\n*   **Flexible Key Addition**: Add keys in batches using the `gemini_key` regex, with automatic deduplication.\n    ![Add Key](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_a0be17dee0ac.png)\n*   **Failure Retry & Auto-Disable**: Automatically retries failed API requests (`MAX_RETRIES`) and disables keys after excessive failures (`MAX_FAILURES`).\n*   **Comprehensive API Compatibility**:\n    *   **Embeddings API**: Fully compatible with the OpenAI `embeddings` API format.\n    *   **Image Generation API**: Adapts the `imagen-3.0-generate-002` model to the OpenAI image generation API format.\n*   **Automatic Model List Maintenance**: Automatically fetches and syncs the latest model lists from Gemini and OpenAI.\n*   **Proxy Support**: Supports HTTP\u002FSOCKS5 proxies (`PROXIES`).\n*   **Docker Support**: Provides Docker images for both AMD and ARM architectures.\n    *   Image Address: `ghcr.io\u002Fsnailyp\u002Fgemini-balance:latest`\n\n---\n\n## 🚀 Quick Start\n\n### Option 1: Docker Compose (Recommended)\n\n1.  **Get `docker-compose.yml`**:\n    Download the `docker-compose.yml` file from the project repository.\n2.  **Prepare `.env` file**:\n    Copy `.env.example` to `.env` and configure it. Ensure `DATABASE_TYPE` is set to `mysql` and fill in the `MYSQL_*` details.\n3.  **Start Services**:\n    In the directory containing `docker-compose.yml` and `.env`, run:\n    ```bash\n    docker-compose up -d\n    ```\n\n### Option 2: Docker Command\n\n1.  **Pull Image**:\n    ```bash\n    docker pull ghcr.io\u002Fsnailyp\u002Fgemini-balance:latest\n    ```\n2.  **Prepare `.env` file**:\n    Copy `.env.example` to `.env` and configure it.\n3.  **Run Container**:\n    ```bash\n    docker run -d -p 8000:8000 --name gemini-balance \\\n    -v .\u002Fdata:\u002Fapp\u002Fdata \\\n    --env-file .env \\\n    ghcr.io\u002Fsnailyp\u002Fgemini-balance:latest\n    ```\n    *   `-d`: Detached mode.\n    *   `-p 8000:8000`: Map container port 8000 to host.\n    *   `-v .\u002Fdata:\u002Fapp\u002Fdata`: Mount volume for persistent data.\n    *   `--env-file .env`: Load environment variables.\n\n### Option 3: Local Development\n\n1.  **Clone and Install**:\n    ```bash\n    git clone https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance.git\n    cd gemini-balance\n    pip install -r requirements.txt\n    ```\n2.  **Configure Environment**:\n    Copy `.env.example` to `.env` and configure it.\n3.  **Start Application**:\n    ```bash\n    uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload\n    ```\n    Access the application at `http:\u002F\u002Flocalhost:8000`.\n\n---\n\n## ⚙️ API Endpoints\n\n### Gemini API Format (`\u002Fgemini\u002Fv1beta`)\n\nThis endpoint is directly forwarded to official Gemini API format endpoint, without advanced features.\n\n*   `GET \u002Fmodels`: List available Gemini models.\n*   `POST \u002Fmodels\u002F{model_name}:generateContent`: Generate content.\n*   `POST \u002Fmodels\u002F{model_name}:streamGenerateContent`: Stream content generation.\n\n### OpenAI API Format\n\n#### Hugging Face (HF) Compatible\n\nIf you want to use advanced features, like fake streaming, please use this endpoint.\n\n*   `GET \u002Fhf\u002Fv1\u002Fmodels`: List models.\n*   `POST \u002Fhf\u002Fv1\u002Fchat\u002Fcompletions`: Chat completion.\n*   `POST \u002Fhf\u002Fv1\u002Fembeddings`: Create text embeddings.\n*   `POST \u002Fhf\u002Fv1\u002Fimages\u002Fgenerations`: Generate images.\n\n#### Standard OpenAI\n\nThis endpoint is directly forwarded to official OpenAI Compatible API format endpoint, without advanced features.\n\n*   `GET \u002Fopenai\u002Fv1\u002Fmodels`: List models.\n*   `POST \u002Fopenai\u002Fv1\u002Fchat\u002Fcompletions`: Chat completion (Recommended).\n*   `POST \u002Fopenai\u002Fv1\u002Fembeddings`: Create text embeddings.\n*   `POST \u002Fopenai\u002Fv1\u002Fimages\u002Fgenerations`: Generate images.\n\n---\n\n\u003Cdetails>\n\u003Csummary>📋 View Full Configuration List\u003C\u002Fsummary>\n\n| Configuration Item | Description | Default Value |\n| :--- | :--- | :--- |\n| **Database** | | |\n| `DATABASE_TYPE` | `mysql` or `sqlite` | `mysql` |\n| `SQLITE_DATABASE` | Path for SQLite database file | `default_db` |\n| `MYSQL_HOST` | MySQL host address | `localhost` |\n| `MYSQL_SOCKET` | MySQL socket address | `\u002Fvar\u002Frun\u002Fmysqld\u002Fmysqld.sock` |\n| `MYSQL_PORT` | MySQL port | `3306` |\n| `MYSQL_USER` | MySQL username | `your_db_user` |\n| `MYSQL_PASSWORD` | MySQL password | `your_db_password` |\n| `MYSQL_DATABASE` | MySQL database name | `defaultdb` |\n| **API** | | |\n| `API_KEYS` | **Required**, list of Gemini API keys | `[]` |\n| `ALLOWED_TOKENS` | **Required**, list of access tokens | `[]` |\n| `AUTH_TOKEN` | Super admin token, defaults to the first of `ALLOWED_TOKENS` | `sk-123456` |\n| `ADMIN_SESSION_EXPIRE` | Admin session expiration time in seconds (5 minutes to 24 hours) | `3600` |\n| `TEST_MODEL` | Model for testing key validity | `gemini-2.5-flash-lite` |\n| `IMAGE_MODELS` | Models supporting image generation | `[\"gemini-2.0-flash-exp\", \"gemini-2.5-flash-image-preview\"]` |\n| `SEARCH_MODELS` | Models supporting web search | `[\"gemini-2.5-flash\",\"gemini-2.5-pro\"]` |\n| `FILTERED_MODELS` | Disabled models | `[]` |\n| `TOOLS_CODE_EXECUTION_ENABLED` | Enable code execution tool | `false` |\n| `SHOW_SEARCH_LINK` | Display search result links in response | `true` |\n| `SHOW_THINKING_PROCESS` | Display model's thinking process | `true` |\n| `THINKING_MODELS` | Models supporting thinking process | `[]` |\n| `THINKING_BUDGET_MAP` | Budget map for thinking function (model:budget) | `{}` |\n| `URL_NORMALIZATION_ENABLED` | Enable smart URL routing | `false` |\n| `URL_CONTEXT_ENABLED` | Enable URL context understanding | `false` |\n| `URL_CONTEXT_MODELS` | Models supporting URL context | `[]` |\n| `BASE_URL` | Gemini API base URL | `https:\u002F\u002Fgenerativelanguage.googleapis.com\u002Fv1beta` |\n| `MAX_FAILURES` | Max failures allowed per key | `3` |\n| `MAX_RETRIES` | Max retries for failed API requests | `3` |\n| `CHECK_INTERVAL_HOURS` | Interval (hours) to re-check disabled keys | `1` |\n| `TIMEZONE` | Application timezone | `Asia\u002FShanghai` |\n| `TIME_OUT` | Request timeout (seconds) | `300` |\n| `PROXIES` | List of proxy servers | `[]` |\n| **Logging & Security** | | |\n| `LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARNING`, `ERROR` | `INFO` |\n| `ERROR_LOG_RECORD_REQUEST_BODY` | Record request body in error logs (may contain sensitive information) | `false` |\n| `AUTO_DELETE_ERROR_LOGS_ENABLED` | Auto-delete error logs | `true` |\n| `AUTO_DELETE_ERROR_LOGS_DAYS` | Error log retention period (days) | `7` |\n| `AUTO_DELETE_REQUEST_LOGS_ENABLED`| Auto-delete request logs | `false` |\n| `AUTO_DELETE_REQUEST_LOGS_DAYS` | Request log retention period (days) | `30` |\n| `SAFETY_SETTINGS` | Content safety thresholds (JSON string) | `[{\"category\": \"HARM_CATEGORY_HARASSMENT\", \"threshold\": \"OFF\"}, ...]` |\n| **TTS** | | |\n| `TTS_MODEL` | TTS model name | `gemini-2.5-flash-preview-tts` |\n| `TTS_VOICE_NAME` | TTS voice name | `Zephyr` |\n| `TTS_SPEED` | TTS speed | `normal` |\n| **Image Generation** | | |\n| `PAID_KEY` | Paid API Key for advanced features | `your-paid-api-key` |\n| `CREATE_IMAGE_MODEL` | Image generation model | `imagen-3.0-generate-002` |\n| `UPLOAD_PROVIDER` | Image upload provider: `smms`, `picgo`, `cloudflare_imgbed`, `aliyun_oss` | `smms` |\n| `OSS_ENDPOINT` | Aliyun OSS public endpoint | `oss-cn-shanghai.aliyuncs.com` |\n| `OSS_ENDPOINT_INNER` | Aliyun OSS internal endpoint (intra-VPC) | `oss-cn-shanghai-internal.aliyuncs.com` |\n| `OSS_ACCESS_KEY` | Aliyun AccessKey ID | `LTAI5txxxxxxxxxxxxxxxx` |\n| `OSS_ACCESS_KEY_SECRET` | Aliyun AccessKey Secret | `yXxxxxxxxxxxxxxxxxxxxxx` |\n| `OSS_BUCKET_NAME` | Aliyun OSS bucket name | `your-bucket-name` |\n| `OSS_REGION` | Aliyun OSS region | `cn-shanghai` |\n| `SMMS_SECRET_TOKEN` | SM.MS API Token | `your-smms-token` |\n| `PICGO_API_KEY` | PicoGo API Key | `your-picogo-apikey` |\n| `PICGO_API_URL` | PicoGo API Server URL | `https:\u002F\u002Fwww.picgo.net\u002Fapi\u002F1\u002Fupload` |\n| `CLOUDFLARE_IMGBED_URL` | CloudFlare ImgBed upload URL | `https:\u002F\u002Fxxxxxxx.pages.dev\u002Fupload` |\n| `CLOUDFLARE_IMGBED_AUTH_CODE`| CloudFlare ImgBed auth key | `your-cloudflare-imgber-auth-code` |\n| `CLOUDFLARE_IMGBED_UPLOAD_FOLDER`| CloudFlare ImgBed upload folder | `\"\"` |\n| **Stream Optimizer** | | |\n| `STREAM_OPTIMIZER_ENABLED` | Enable stream output optimization | `false` |\n| `STREAM_MIN_DELAY` | Minimum stream output delay | `0.016` |\n| `STREAM_MAX_DELAY` | Maximum stream output delay | `0.024` |\n| `STREAM_SHORT_TEXT_THRESHOLD`| Short text threshold | `10` |\n| `STREAM_LONG_TEXT_THRESHOLD` | Long text threshold | `50` |\n| `STREAM_CHUNK_SIZE` | Stream output chunk size | `5` |\n| **Fake Stream** | | |\n| `FAKE_STREAM_ENABLED` | Enable fake streaming | `false` |\n| `FAKE_STREAM_EMPTY_DATA_INTERVAL_SECONDS` | Heartbeat interval for fake streaming (seconds) | `5` |\n\n\u003C\u002Fdetails>\n\n---\n\n## 🤝 Contributing\n\nPull Requests or Issues are welcome.\n\n[![Contributors](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_2649c90f10a7.png)](https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fgraphs\u002Fcontributors)\n\n## ⭐ Star History\n\n[![Star History Chart](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_dbcbfdeb8320.png)](https:\u002F\u002Fstar-history.com\u002F#snailyp\u002Fgemini-balance&Date)\n\n## 🎉 Special Thanks\n\n*   [PicGo](https:\u002F\u002Fwww.picgo.net\u002F)\n*   [SM.MS](https:\u002F\u002Fsmms.app\u002F)\n*   [CloudFlare-ImgBed](https:\u002F\u002Fgithub.com\u002FMarSeventh\u002FCloudFlare-ImgBed)\n\n## 🙏 Our Supporters\n\nA special shout-out to [DigitalOcean](https:\u002F\u002Fm.do.co\u002Fc\u002Fb249dd7f3b4c) for providing the rock-solid and dependable cloud infrastructure that keeps this project humming!\n\n\u003Ca href=\"https:\u002F\u002Fm.do.co\u002Fc\u002Fb249dd7f3b4c\">\n  \u003Cimg src=\"files\u002Fdataocean.svg\" alt=\"DigitalOcean Logo\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\nCDN acceleration and security protection for this project are sponsored by [Tencent EdgeOne](https:\u002F\u002Fedgeone.ai\u002F?from=github).\n\n\u003Ca href=\"https:\u002F\u002Fedgeone.ai\u002F?from=github\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_335675e17afc.png\" alt=\"EdgeOne Logo\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\n## 💖 Friendly Projects\n\n*   **[OneLine](https:\u002F\u002Fgithub.com\u002Fchengtx809\u002FOneLine)** by [chengtx809](https:\u002F\u002Fgithub.com\u002Fchengtx809) - AI-driven hot event timeline generation tool.\n\n## 🎁 Project Support\n\nIf you find this project helpful, consider supporting me via [Afdian](https:\u002F\u002Fafdian.com\u002Fa\u002Fsnaily).\n\n## License\n\nThis project is licensed under the [CC BY-NC 4.0](LICENSE) (Attribution-NonCommercial) license.\n","[在中文中阅读此文档](README_ZH.md)\n\n# Gemini Balance - Gemini API 代理与负载均衡器\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F13692\" target=\"_blank\">\n    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_1145cd82417e.png\" alt=\"snailyp%2Fgemini-balance | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"\u002F>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fwww.python.org\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3.9%2B-blue.svg\" alt=\"Python\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Ffastapi.tiangolo.com\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FFastAPI-0.100%2B-green.svg\" alt=\"FastAPI\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.uvicorn.org\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FUvicorn-running-purple.svg\" alt=\"Uvicorn\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Ft.me\u002F+soaHax5lyI0wZDVl\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTelegram-Group-blue.svg?logo=telegram\" alt=\"Telegram Group\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n> ⚠️ **重要提示**: 本项目采用 [CC BY-NC 4.0](LICENSE) 许可证。**严禁任何形式的商业转售服务**。\n> 我从未在任何平台上出售过此服务。如果您遇到有人出售该服务，那便是转售者，请勿上当。\n\n---\n\n## 📖 项目介绍\n\n**Gemini Balance** 是一个基于 Python FastAPI 构建的应用程序，旨在为 Google Gemini API 提供代理和负载均衡功能。它允许您管理多个 Gemini API 密钥，并通过简单的配置实现密钥轮换、身份验证、模型筛选以及状态监控。此外，该项目还集成了图像生成和多种图片托管上传功能，并支持以 OpenAI API 格式进行代理。\n\n\u003Cdetails>\n\u003Csummary>📂 查看项目结构\u003C\u002Fsummary>\n\n```plaintext\napp\u002F\n├── config\u002F       # 配置管理\n├── core\u002F         # 应用核心逻辑（创建 FastAPI 实例、中间件等）\n├── database\u002F     # 数据库模型及连接\n├── domain\u002F       # 业务领域对象\n├── exception\u002F    # 自定义异常\n├── handler\u002F      # 请求处理器\n├── log\u002F          # 日志配置\n├── main.py       # 应用入口\n├── middleware\u002F   # FastAPI 中间件\n├── router\u002F       # API 路由（Gemini、OpenAI、状态页面等）\n├── scheduler\u002F    # 定时任务（如密钥状态检查）\n├── service\u002F      # 业务逻辑服务（聊天、密钥管理、统计等）\n├── static\u002F       # 静态文件（CSS、JS）\n├── templates\u002F    # HTML 模板（如密钥状态页面）\n└── utils\u002F        # 工具函数\n```\n\u003C\u002Fdetails>\n\n---\n\n## ✨ 功能亮点\n\n*   **多密钥负载均衡**: 支持配置多个 Gemini API 密钥 (`API_KEYS`)，实现自动轮询。\n*   **可视化配置**: 通过管理后台修改的配置会立即生效，无需重启。\n    ![配置面板](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_0477909a0eb9.png)\n*   **双协议 API 兼容**: 同时支持 Gemini 和 OpenAI CHAT API 格式。\n    *   OpenAI 基础 URL: `http:\u002F\u002Flocalhost:8000(\u002Fhf)\u002Fv1`\n    *   Gemini 基础 URL: `http:\u002F\u002Flocalhost:8000(\u002Fgemini)\u002Fv1beta`\n*   **图文聊天与编辑**: 使用 `IMAGE_MODELS` 配置模型，支持图文聊天和编辑。调用时使用 `configured_model-image` 模型名称。\n    ![带图像生成的聊天](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_424ab1fcce6d.png)\n    ![编辑图像](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_adab00d20b32.png)\n*   **网页搜索**: 使用 `SEARCH_MODELS` 配置模型，支持网页搜索。调用时使用 `configured_model-search` 模型名称。\n    ![网页搜索](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_56e681e65e79.png)\n*   **密钥状态监控**: 提供 `\u002Fkeys_status` 页面（需认证），用于实时监控。\n    ![监控面板](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_1fb82da35153.png)\n*   **详细日志记录**: 提供详细的错误日志，便于排查问题。\n    ![调用详情](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_169a67984a4b.png)\n    ![日志列表](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_7cf2e9b66a0a.png)\n    ![日志详情](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_72f8687ad6fb.png)\n*   **灵活添加密钥**: 使用 `gemini_key` 正则表达式批量添加密钥，并自动去重。\n    ![添加密钥](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_a0be17dee0ac.png)\n*   **失败重试与自动禁用**: 自动重试失败的 API 请求（`MAX_RETRIES`），并在多次失败后禁用密钥（`MAX_FAILURES`）。\n*   **全面的 API 兰兼容性**:\n    *   **嵌入 API**: 完全兼容 OpenAI 的 `embeddings` API 格式。\n    *   **图像生成 API**: 将 `imagen-3.0-generate-002` 模型适配为 OpenAI 图像生成 API 格式。\n*   **自动维护模型列表**: 自动从 Gemini 和 OpenAI 获取并同步最新的模型列表。\n*   **代理支持**: 支持 HTTP\u002FSOCKS5 代理 (`PROXIES`)。\n*   **Docker 支持**: 提供适用于 AMD 和 ARM 架构的 Docker 镜像。\n    *   镜像地址: `ghcr.io\u002Fsnailyp\u002Fgemini-balance:latest`\n\n---\n\n## 🚀 快速开始\n\n### 选项 1: Docker Compose（推荐）\n\n1.  **获取 `docker-compose.yml`**:\n    从项目仓库下载 `docker-compose.yml` 文件。\n2.  **准备 `.env` 文件**:\n    复制 `.env.example` 到 `.env` 并进行配置。确保将 `DATABASE_TYPE` 设置为 `mysql`，并填写 `MYSQL_*` 相关信息。\n3.  **启动服务**:\n    在包含 `docker-compose.yml` 和 `.env` 的目录下，运行：\n    ```bash\n    docker-compose up -d\n    ```\n\n### 选项 2: Docker 命令\n\n1.  **拉取镜像**:\n    ```bash\n    docker pull ghcr.io\u002Fsnailyp\u002Fgemini-balance:latest\n    ```\n2.  **准备 `.env` 文件**:\n    复制 `.env.example` 到 `.env` 并进行配置。\n3.  **运行容器**:\n    ```bash\n    docker run -d -p 8000:8000 --name gemini-balance \\\n    -v .\u002Fdata:\u002Fapp\u002Fdata \\\n    --env-file .env \\\n    ghcr.io\u002Fsnailyp\u002Fgemini-balance:latest\n    ```\n    *   `-d`: 以分离模式运行。\n    *   `-p 8000:8000`: 将容器端口 8000 映射到主机。\n    *   `-v .\u002Fdata:\u002Fapp\u002Fdata`: 挂载卷以保存持久化数据。\n    *   `--env-file .env`: 加载环境变量。\n\n### 选项 3: 本地开发\n\n1.  **克隆并安装**:\n    ```bash\n    git clone https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance.git\n    cd gemini-balance\n    pip install -r requirements.txt\n    ```\n2.  **配置环境**:\n    复制 `.env.example` 到 `.env` 并进行配置。\n3.  **启动应用**:\n    ```bash\n    uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload\n    ```\n    您可以通过 `http:\u002F\u002Flocalhost:8000` 访问应用程序。\n\n---\n\n## ⚙️ API 端点\n\n### Gemini API 格式 (`\u002Fgemini\u002Fv1beta`)\n\n此端点直接转发至官方 Gemini API 格式的端点，不包含高级功能。\n\n*   `GET \u002Fmodels`: 列出可用的 Gemini 模型。\n*   `POST \u002Fmodels\u002F{model_name}:generateContent`: 生成内容。\n*   `POST \u002Fmodels\u002F{model_name}:streamGenerateContent`: 流式内容生成。\n\n### OpenAI API 格式\n\n#### Hugging Face (HF) 兼容\n\n如果您希望使用高级功能，例如假流式传输，请使用此端点。\n\n*   `GET \u002Fhf\u002Fv1\u002Fmodels`: 列出模型。\n*   `POST \u002Fhf\u002Fv1\u002Fchat\u002Fcompletions`: 聊天补全。\n*   `POST \u002Fhf\u002Fv1\u002Fembeddings`: 创建文本嵌入。\n*   `POST \u002Fhf\u002Fv1\u002Fimages\u002Fgenerations`: 生成图片。\n\n#### 标准 OpenAI\n\n此端点会直接转发到官方的 OpenAI 兼容 API 格式端点，不包含高级功能。\n\n*   `GET \u002Fopenai\u002Fv1\u002Fmodels`: 列出模型。\n*   `POST \u002Fopenai\u002Fv1\u002Fchat\u002Fcompletions`: 聊天补全（推荐）。\n*   `POST \u002Fopenai\u002Fv1\u002Fembeddings`: 创建文本嵌入。\n*   `POST \u002Fopenai\u002Fv1\u002Fimages\u002Fgenerations`: 生成图片。\n\n---\n\n\u003Cdetails>\n\u003Csummary>📋 查看完整配置列表\u003C\u002Fsummary>\n\n| 配置项 | 描述 | 默认值 |\n| :--- | :--- | :--- |\n| **数据库** | | |\n| `DATABASE_TYPE` | `mysql` 或 `sqlite` | `mysql` |\n| `SQLITE_DATABASE` | SQLite 数据库文件路径 | `default_db` |\n| `MYSQL_HOST` | MySQL 主机地址 | `localhost` |\n| `MYSQL_SOCKET` | MySQL 套接字地址 | `\u002Fvar\u002Frun\u002Fmysqld\u002Fmysqld.sock` |\n| `MYSQL_PORT` | MySQL 端口 | `3306` |\n| `MYSQL_USER` | MySQL 用户名 | `your_db_user` |\n| `MYSQL_PASSWORD` | MySQL 密码 | `your_db_password` |\n| `MYSQL_DATABASE` | MySQL 数据库名称 | `defaultdb` |\n| **API** | | |\n| `API_KEYS` | **必填**, Gemini API 密钥列表 | `[]` |\n| `ALLOWED_TOKENS` | **必填**, 访问令牌列表 | `[]` |\n| `AUTH_TOKEN` | 超级管理员令牌，默认为 `ALLOWED_TOKENS` 中的第一个 | `sk-123456` |\n| `ADMIN_SESSION_EXPIRE` | 管理员会话过期时间（秒）（5 分钟至 24 小时） | `3600` |\n| `TEST_MODEL` | 用于测试密钥有效性的模型 | `gemini-2.5-flash-lite` |\n| `IMAGE_MODELS` | 支持图像生成的模型 | `[\"gemini-2.0-flash-exp\", \"gemini-2.5-flash-image-preview\"]` |\n| `SEARCH_MODELS` | 支持网页搜索的模型 | `[\"gemini-2.5-flash\",\"gemini-2.5-pro\"]` |\n| `FILTERED_MODELS` | 禁用的模型 | `[]` |\n| `TOOLS_CODE_EXECUTION_ENABLED` | 启用代码执行工具 | `false` |\n| `SHOW_SEARCH_LINK` | 在响应中显示搜索结果链接 | `true` |\n| `SHOW_THINKING_PROCESS` | 显示模型的思考过程 | `true` |\n| `THINKING_MODELS` | 支持思考过程的模型 | `[]` |\n| `THINKING_BUDGET_MAP` | 思考功能的预算映射（模型:预算） | `{}` |\n| `URL_NORMALIZATION_ENABLED` | 启用智能 URL 路由 | `false` |\n| `URL_CONTEXT_ENABLED` | 启用 URL 上下文理解 | `false` |\n| `URL_CONTEXT_MODELS` | 支持 URL 上下文的模型 | `[]` |\n| `BASE_URL` | Gemini API 基础 URL | `https:\u002F\u002Fgenerativelanguage.googleapis.com\u002Fv1beta` |\n| `MAX_FAILURES` | 每个密钥允许的最大失败次数 | `3` |\n| `MAX_RETRIES` | 失败 API 请求的最大重试次数 | `3` |\n| `CHECK_INTERVAL_HOURS` | 检查禁用密钥的时间间隔（小时） | `1` |\n| `TIMEZONE` | 应用程序时区 | `Asia\u002FShanghai` |\n| `TIME_OUT` | 请求超时时间（秒） | `300` |\n| `PROXIES` | 代理服务器列表 | `[]` |\n| **日志与安全** | | |\n| `LOG_LEVEL` | 日志级别：`DEBUG`、`INFO`、`WARNING`、`ERROR` | `INFO` |\n| `ERROR_LOG_RECORD_REQUEST_BODY` | 在错误日志中记录请求体（可能包含敏感信息） | `false` |\n| `AUTO_DELETE_ERROR_LOGS_ENABLED` | 自动删除错误日志 | `true` |\n| `AUTO_DELETE_ERROR_LOGS_DAYS` | 错误日志保留期限（天） | `7` |\n| `AUTO_DELETE_REQUEST_LOGS_ENABLED` | 自动删除请求日志 | `false` |\n| `AUTO_DELETE_REQUEST_LOGS_DAYS` | 请求日志保留期限（天） | `30` |\n| `SAFETY_SETTINGS` | 内容安全阈值（JSON 字符串） | `[{\"category\": \"HARM_CATEGORY_HARASSMENT\", \"threshold\": \"OFF\"}, ...]` |\n| **TTS** | | |\n| `TTS_MODEL` | TTS 模型名称 | `gemini-2.5-flash-preview-tts` |\n| `TTS_VOICE_NAME` | TTS 语音名称 | `Zephyr` |\n| `TTS_SPEED` | TTS 语速 | `normal` |\n| **图像生成** | | |\n| `PAID_KEY` | 用于高级功能的付费 API 密钥 | `your-paid-api-key` |\n| `CREATE_IMAGE_MODEL` | 图像生成模型 | `imagen-3.0-generate-002` |\n| `UPLOAD_PROVIDER` | 图像上传服务提供商：`smms`、`picgo`、`cloudflare_imgbed`、`aliyun_oss` | `smms` |\n| `OSS_ENDPOINT` | 阿里云 OSS 公共端点 | `oss-cn-shanghai.aliyuncs.com` |\n| `OSS_ENDPOINT_INNER` | 阿里云 OSS 内部端点（VPC 内） | `oss-cn-shanghai-internal.aliyuncs.com` |\n| `OSS_ACCESS_KEY` | 阿里云 AccessKey ID | `LTAI5txxxxxxxxxxxxxxxx` |\n| `OSS_ACCESS_KEY_SECRET` | 阿里云 AccessKey Secret | `yXxxxxxxxxxxxxxxxxxxxxx` |\n| `OSS_BUCKET_NAME` | 阿里云 OSS 存储桶名称 | `your-bucket-name` |\n| `OSS_REGION` | 阿里云 OSS 区域 | `cn-shanghai` |\n| `SMMS_SECRET_TOKEN` | SM.MS API 令牌 | `your-smms-token` |\n| `PICGO_API_KEY` | PicoGo API 密钥 | `your-picogo-apikey` |\n| `PICGO_API_URL` | PicoGo API 服务器地址 | `https:\u002F\u002Fwww.picgo.net\u002Fapi\u002F1\u002Fupload` |\n| `CLOUDFLARE_IMGBED_URL` | CloudFlare ImgBed 上传网址 | `https:\u002F\u002Fxxxxxxx.pages.dev\u002Fupload` |\n| `CLOUDFLARE_IMGBED_AUTH_CODE` | CloudFlare ImgBed 认证密钥 | `your-cloudflare-imgber-auth-code` |\n| `CLOUDFLARE_IMGBED_UPLOAD_FOLDER` | CloudFlare ImgBed 上传文件夹 | `\"\"` |\n| **流优化器** | | |\n| `STREAM_OPTIMIZER_ENABLED` | 启用流输出优化 | `false` |\n| `STREAM_MIN_DELAY` | 流输出最小延迟 | `0.016` |\n| `STREAM_MAX_DELAY` | 流输出最大延迟 | `0.024` |\n| `STREAM_SHORT_TEXT_THRESHOLD` | 短文本阈值 | `10` |\n| `STREAM_LONG_TEXT_THRESHOLD` | 长文本阈值 | `50` |\n| `STREAM_CHUNK_SIZE` | 流输出分块大小 | `5` |\n| **假流** | | |\n| `FAKE_STREAM_ENABLED` | 启用假流式传输 | `false` |\n| `FAKE_STREAM_EMPTY_DATA_INTERVAL_SECONDS` | 假流式传输的心跳间隔（秒） | `5` |\n\n\u003C\u002Fdetails>\n\n---\n\n## 🤝 贡献\n\n欢迎提交 Pull Request 或 Issues。\n\n[![贡献者](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_2649c90f10a7.png)](https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fgraphs\u002Fcontributors)\n\n## ⭐ 星标历史\n\n[![星标历史图](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_dbcbfdeb8320.png)](https:\u002F\u002Fstar-history.com\u002F#snailyp\u002Fgemini-balance&Date)\n\n## 🎉 特别感谢\n\n*   [PicGo](https:\u002F\u002Fwww.picgo.net\u002F)\n*   [SM.MS](https:\u002F\u002Fsmms.app\u002F)\n*   [CloudFlare-ImgBed](https:\u002F\u002Fgithub.com\u002FMarSeventh\u002FCloudFlare-ImgBed)\n\n## 🙏 我们的赞助商\n\n特别鸣谢 [DigitalOcean](https:\u002F\u002Fm.do.co\u002Fc\u002Fb249dd7f3b4c)，他们提供了坚固可靠的云基础设施，让本项目得以顺利运行！\n\n\u003Ca href=\"https:\u002F\u002Fm.do.co\u002Fc\u002Fb249dd7f3b4c\">\n  \u003Cimg src=\"files\u002Fdataocean.svg\" alt=\"DigitalOcean Logo\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\n本项目的 CDN 加速和安全防护由 [腾讯 EdgeOne](https:\u002F\u002Fedgeone.ai\u002F?from=github) 赞助。\n\n\u003Ca href=\"https:\u002F\u002Fedgeone.ai\u002F?from=github\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_readme_335675e17afc.png\" alt=\"EdgeOne Logo\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\n## 💖 友好项目\n\n*   **[OneLine](https:\u002F\u002Fgithub.com\u002Fchengtx809\u002FOneLine)** 由 [chengtx809](https:\u002F\u002Fgithub.com\u002Fchengtx809) 开发 - 基于 AI 的热点事件时间线生成工具。\n\n## 🎁 项目支持\n\n如果您觉得这个项目很有帮助，请考虑通过 [Afdian](https:\u002F\u002Fafdian.com\u002Fa\u002Fsnaily) 支持我。\n\n## 许可证\n\n本项目采用 [CC BY-NC 4.0](LICENSE)（署名-非商业性使用）许可证。","# Gemini Balance 快速上手指南\n\nGemini Balance 是一个基于 Python FastAPI 构建的 Google Gemini API 代理与负载均衡工具。它支持多 Key 轮询、自动故障转移、OpenAI 格式兼容以及图像生成等功能。\n\n## 环境准备\n\n在开始之前，请确保您的系统满足以下要求：\n\n*   **操作系统**：Linux, macOS 或 Windows (推荐 Linux 服务器)\n*   **容器化方案 (推荐)**：\n    *   Docker Engine 20.10+\n    *   Docker Compose v2.0+\n*   **本地运行方案**：\n    *   Python 3.9 或更高版本\n    *   pip (Python 包管理工具)\n    *   数据库：MySQL (推荐) 或 SQLite (轻量级测试用)\n\n> **提示**：国内用户若拉取 Docker 镜像困难，可配置 Docker 镜像加速器（如阿里云、腾讯云等）后再执行拉取命令。\n\n## 安装步骤\n\n推荐使用 **Docker Compose** 方式进行部署，管理更便捷且数据持久化配置更清晰。\n\n### 方式一：Docker Compose 部署（推荐）\n\n1.  **获取配置文件**\n    从项目仓库下载 `docker-compose.yml` 和 `.env.example` 文件。\n    ```bash\n    wget https:\u002F\u002Fraw.githubusercontent.com\u002Fsnailyp\u002Fgemini-balance\u002Fmain\u002Fdocker-compose.yml\n    wget https:\u002F\u002Fraw.githubusercontent.com\u002Fsnailyp\u002Fgemini-balance\u002Fmain\u002F.env.example -O .env\n    ```\n\n2.  **配置环境变量**\n    编辑 `.env` 文件，填入必要的配置信息。\n    *   **必填项**：\n        *   `API_KEYS`: 填入您的 Gemini API Key 列表（例如：`[\"sk-abc...\", \"sk-def...\"]`）。\n        *   `ALLOWED_TOKENS`: 设置访问令牌，用于客户端鉴权。\n        *   `DATABASE_TYPE`: 设置为 `mysql` 并填写下方的 `MYSQL_*` 相关信息；若使用 SQLite 则设为 `sqlite`。\n    *   **可选项**：根据需求配置图片存储、代理地址等。\n\n3.  **启动服务**\n    在包含上述文件的目录下执行：\n    ```bash\n    docker-compose up -d\n    ```\n\n### 方式二：Docker 单命令部署\n\n如果您不想使用 compose 文件，可以直接运行以下命令（需提前准备好 `.env` 文件）：\n\n```bash\ndocker run -d -p 8000:8000 --name gemini-balance \\\n-v .\u002Fdata:\u002Fapp\u002Fdata \\\n--env-file .env \\\nghcr.io\u002Fsnailyp\u002Fgemini-balance:latest\n```\n\n### 方式三：本地源码运行（开发模式）\n\n1.  **克隆代码并安装依赖**\n    ```bash\n    git clone https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance.git\n    cd gemini-balance\n    pip install -r requirements.txt\n    # 国内用户可使用清华源加速：pip install -r requirements.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n    ```\n\n2.  **配置环境**\n    复制并编辑配置文件：\n    ```bash\n    cp .env.example .env\n    # 使用编辑器修改 .env 文件\n    ```\n\n3.  **启动应用**\n    ```bash\n    uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload\n    ```\n\n## 基本使用\n\n服务启动后，默认监听在 `http:\u002F\u002Flocalhost:8000`。\n\n### 1. 验证服务状态\n访问管理面板查看 Key 状态和日志（需要鉴权）：\n*   地址：`http:\u002F\u002Flocalhost:8000\u002Fkeys_status`\n*   鉴权 Token：即 `.env` 中配置的 `AUTH_TOKEN` 或 `ALLOWED_TOKENS` 中的第一个。\n\n### 2. 调用 API (OpenAI 兼容格式)\n\nGemini Balance 完美兼容 OpenAI SDK。您可以将 `Base URL` 指向本地服务，即可复用现有的 ChatGPT 客户端或代码。\n\n*   **Base URL**: `http:\u002F\u002Flocalhost:8000\u002Fopenai\u002Fv1`\n*   **API Key**: 填写您在 `.env` 中配置的 `ALLOWED_TOKENS` 中的任意一个。\n\n**Python 调用示例：**\n\n```python\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=\"your_allowed_token\",  # 替换为 .env 中配置的 ALLOWED_TOKENS\n    base_url=\"http:\u002F\u002Flocalhost:8000\u002Fopenai\u002Fv1\"\n)\n\nresponse = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",  # 模型名称会自动同步，也可使用 configured_model-search 等特性模型\n    messages=[\n        {\"role\": \"system\", \"content\": \"你是一个有用的助手。\"},\n        {\"role\": \"user\", \"content\": \"你好，请介绍一下你自己。\"}\n    ]\n)\n\nprint(response.choices[0].message.content)\n```\n\n### 3. 使用高级特性\n\n*   **联网搜索**：将模型名指定为 `configured_model-search` 即可触发联网搜索功能（需在 `.env` 中配置 `SEARCH_MODELS`）。\n*   **图片生成\u002F理解**：将模型名指定为 `configured_model-image` 即可使用图文对话或生成功能。\n*   **负载均衡**：只需在 `.env` 的 `API_KEYS` 中填入多个 Key，程序会自动进行轮询和故障剔除，无需修改调用代码。\n\n> **注意**：本项目遵循 CC BY-NC 4.0 协议，严禁用于任何形式的商业转售服务。","某初创团队正在开发一款集成多模态能力的智能客服系统，需要高频调用 Google Gemini API 处理用户图文咨询。\n\n### 没有 gemini-balance 时\n- **配额限制频繁中断**：单个 API Key 的每分钟请求数（RPM）极易触顶，导致服务在高峰期频频报错，用户体验极差。\n- **故障排查困难**：当请求失败时，难以快速判断是网络波动、模型临时不可用还是特定 Key 被限流，缺乏直观的监控面板。\n- **协议适配成本高**：后端代码需同时维护适配 Gemini 原生格式和 OpenAI 格式的两套逻辑，增加了开发与维护负担。\n- **功能扩展受限**：想要利用 Gemini 的原生联网搜索或图片编辑功能，需要单独编写复杂的参数构造逻辑，难以动态切换。\n\n### 使用 gemini-balance 后\n- **自动轮询确保持续可用**：配置多个 API Key 后，gemini-balance 自动执行负载均衡与故障转移，单个 Key 触限时无缝切换至下一个，服务零中断。\n- **可视化监控一目了然**：通过内置的状态页面实时查看每个 Key 的健康度与调用详情，异常请求日志清晰可查，秒级定位问题根源。\n- **统一接口简化开发**：只需对接 gemini-balance 提供的标准 OpenAI 兼容接口，即可透明调用 Gemini 能力，无需修改现有业务代码。\n- **高级功能即配即用**：在后台简单勾选即可开启联网搜索或图文编辑模式，通过特定模型名称直接调用，大幅降低新功能上线门槛。\n\ngemini-balance 通过智能调度与协议统一，将不稳定的单一 API 资源转化为高可用、易监控的企业级服务能力。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsnailyp_gemini-balance_0477909a.png","snailyp","snaily","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fsnailyp_f123e3fa.jpg","The firm executor of the Gardenia plan",null,"earth","snaily@linux.do","https:\u002F\u002Fgithub.com\u002Fsnailyp",[81,85,89,93,97],{"name":82,"color":83,"percentage":84},"Python","#3572A5",49.9,{"name":86,"color":87,"percentage":88},"HTML","#e34c26",25.4,{"name":90,"color":91,"percentage":92},"JavaScript","#f1e05a",23.5,{"name":94,"color":95,"percentage":96},"CSS","#663399",1.2,{"name":98,"color":99,"percentage":100},"Dockerfile","#384d54",0,5891,1176,"2026-04-18T06:40:01","NOASSERTION","Linux, macOS, Windows","未说明",{"notes":108,"python":109,"dependencies":110},"该工具是一个 API 代理和负载均衡服务，主要依赖网络请求而非本地模型推理，因此无特殊 GPU 需求。支持 Docker 部署（提供 AMD 和 ARM 架构镜像）或本地源码运行。数据库默认配置为 MySQL，也可切换为 SQLite。需配置 Gemini API Keys 和环境变量文件 (.env) 方可启动。","3.9+",[111,112,113,114,115,116,117],"FastAPI>=0.100","Uvicorn","SQLAlchemy","PyMySQL","aiosqlite","httpx","python-dotenv",[15,35],[120,121,122,123,124,125],"gemini","gemini-api","googlesearch","imagen-3","load-balancer","openai-api","2026-03-27T02:49:30.150509","2026-04-19T03:06:38.681060",[129,134,139,144,149,154,159,164],{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},41329,"获取模型列表时界面卡死或请求失败怎么办？","这通常是因为部署了旧版本的镜像。请检查并拉取最新的 Docker 镜像重新部署。如果不确定，可以尝试清空浏览器缓存或更换浏览器验证，但核心解决方案是更新后端镜像到最新版本。","https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fissues\u002F87",{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},41330,"在 ClawCloud 等平台部署后访问显示 \"no healthy upstream\" 错误如何解决？","这通常是节点区域问题。尝试切换部署地区，例如如果新加坡节点（红色）不可用，请尝试切换到其他地区（如黄色标记的区域）重新部署即可解决。","https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fissues\u002F258",{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},41331,"遇到 \"The language model did not provide any assistant messages\" 错误或 API 无响应如何处理？","建议先切换到稳定性更好的模型（如 gemini-1.5-flash）进行测试。如果使用 gemini-2.5-pro 等高级模型，建议移除共享的 API Key，使用独占 Key 以避免冲突或配额限制。","https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fissues\u002F83",{"id":145,"question_zh":146,"answer_zh":147,"source_url":148},41332,"在 OpenWebUI 中使用 Thinking 模型无法联网或使用过滤器（函数）是什么原因？","Thinking 模型本身设计上不支持联网功能。如果需要联网搜索功能，请配置使用支持该功能的模型（如 Pro 系列），并在配置中将模型设置为数组类型以启用多个模型支持。","https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fissues\u002F18",{"id":150,"question_zh":151,"answer_zh":152,"source_url":153},41333,"如何配置以支持腾讯云 EdgeOne AI 网关实现国内直连加速？","项目已支持 EdgeOne AI 网关。配置时请注意不要使用 v2 版本的接口地址，请按照官方文档图示添加正确的网关地址。配置成功后可实现无需国外服务器或代理的直接访问，并可结合 CDN 加速。","https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fissues\u002F186",{"id":155,"question_zh":156,"answer_zh":157,"source_url":158},41334,"接入 Claude Code 或其他客户端时报错 429 (Resource has been exhausted) 怎么办？","429 错误表示触发了速率限制（Rate Limits）。这通常是因为单个 API Key 的请求频率过高。解决方案是增加可用的 API Key 数量（例如购买或收集更多 Key 放入密钥池），让系统自动轮换以降低单个 Key 的压力。","https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fissues\u002F304",{"id":160,"question_zh":161,"answer_zh":162,"source_url":163},41335,"通过 Nginx 反代后，OpenWebUI 连接报错 500 或 405 Method Not Allowed 如何排查？","首先确认反代配置是否正确（确保使用了 HTTPS）。其次，重点检查客户端（如 OpenWebUI）填写的 API Key 是否正确。如果直接使用谷歌官方 Key 能通，但通过中转报错，通常是中转生成的 Key 无效或权限配置有误。","https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fissues\u002F225",{"id":165,"question_zh":166,"answer_zh":167,"source_url":168},41336,"监控界面中 API 调用次数不增加，只有在验证 Key 时才统计，这是什么问题？","这可能是旧版本缓存或配置未生效导致的。尝试重新安装或重启容器通常能解决该统计显示问题。如果问题依旧，建议先用少量 Key 进行测试以排除大规模并发导致的统计延迟。","https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fissues\u002F59",[170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265],{"id":171,"version":172,"summary_zh":173,"released_at":174},333282,"v2.2.8","- 没有变化","2025-09-23T14:10:56",{"id":176,"version":177,"summary_zh":178,"released_at":179},333283,"v2.2.7.1","- 修复：修复所有密钥验证失效的问题\n\n**完整更新日志**: https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.2.7...v2.2.7.1","2025-09-23T13:28:07",{"id":181,"version":182,"summary_zh":183,"released_at":184},333284,"v2.2.7","修复：修复v2.2.6版本中非流式错误日志的错误码问题\n\n**完整更新日志**: https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.2.6...v2.2.7","2025-09-18T03:00:24",{"id":186,"version":187,"summary_zh":188,"released_at":189},333285,"v2.2.6","## 变更内容\n* docs：在README中添加关于端点的说明，由@ConstasJ在https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F316中完成\n* 实现图片处理的Base64回退机制，在未配置上传器时使用，由@bbbugg在https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F344中完成\n* 添加Adminer，便于MySQL数据库管理，由@vickyyd在https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F303中完成\n* feat：增加自定义PicGo API URL，由@SquirrelJimmy在https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F351中完成\n* Feat：支持阿里云OSS，由@minguncle在https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F360中完成\n* Fix：Gemini流式响应现在返回结构化错误，而非空响应，由@bbbugg在https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F347中完成\n* perf(db)：支持删除大量错误日志\n* feat(config)：新增错误日志请求体记录开关（默认关闭）\n* style(ui)：重构配置编辑器字段描述显示方式\n* refactor(scheduler)：修复定时任务配置和时间处理逻辑，支持将CHECK_INTERVAL_HOURS设置为0以禁用密钥检查任务\n* feat(config)：更新默认模型及相关配置\n* feat(static)：实现静态资源版本化\n\n## 新贡献者\n* @ConstasJ 在https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F316中完成了首次贡献\n* @bbbugg 在https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F344中完成了首次贡献\n* @vickyyd 在https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F303中完成了首次贡献\n* @SquirrelJimmy 在https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F351中完成了首次贡献\n* @minguncle 在https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F360中完成了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.2.5...v2.2.6","2025-09-17T23:41:21",{"id":191,"version":192,"summary_zh":193,"released_at":194},333286,"v2.2.5","## 变更内容\n\n* 修复(keystatus)：修复时间区间不匹配导致无法获取 error_log 的问题\n* 新增(UI)：支持对值得关注的 Key 进行多选、全选及批量操作\n* 修复：修复 details 接口响应缓慢的问题\n> 如果界面未生效，请按 Ctrl + F5 强制刷新\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.2.4...v2.2.5","2025-08-18T09:28:58",{"id":196,"version":197,"summary_zh":198,"released_at":199},333287,"v2.2.4","## 变更内容\n\n* 修复(config): 修复API密钥分页bug\n* 修复(ui): 移除 keys_status 自动刷新开关及相关逻辑\n* 新增(ui): 添加API调用趋势图及时间区间切换\n* 新增(api,ui): 新增按Key调用详情与错误日志查找并联动前端，引入按密钥维度的请求详情及错误日志关联，新增错误日志精确查找接口，并扩展统计时间维度，提升故障定位与可观测性\n* 新增(api,ui): 新增24小时错误码最高Key统计与面板\n> 如果UI不生效，记得按Ctrl + F5强制刷新\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.2.3...v2.2.4","2025-08-18T01:12:58",{"id":201,"version":202,"summary_zh":203,"released_at":204},333288,"v2.2.3","## 变更内容\n* 功能：新增 Gemini API 嵌入兼容性，适用于 embedContent 和 batchEmbedContents 方法，由 @cxyfer 在 https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F270 中实现。\n* 功能：在与 OpenAI 兼容的请求中添加对 `n` 参数的支持……由 @zenyanbo 在 https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F300 中实现。\n* 修复：修复 Gemini 模型不支持同时使用 tools 和结构化输出的问题，由 @4Crusaders 在 https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F286 中修复。\n* 修复 #248，由 @sanjusss 在 https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F249 中完成。\n* 样式（数据库、静态资源）：优化代码格式并本地化静态资源。\n* 样式（数据库、静态资源）：简化删除所有错误日志的日志记录逻辑。\n* 功能：实现 API 密钥分页功能，并优化代码结构（若未生效，请按 Ctrl + F5 强制刷新）。\n\n## 新贡献者\n* @zenyanbo 在 https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F300 中完成了首次贡献。\n* @4Crusaders 在 https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F286 中完成了首次贡献。\n* @sanjusss 在 https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F249 中完成了首次贡献。\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.2.2...v2.2.3","2025-08-16T09:46:47",{"id":206,"version":207,"summary_zh":208,"released_at":209},333289,"v2.2.2","## 变更内容\n* 安全性提升：不再在日志中记录完整密钥，由 @lins05 在 https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F234 中实现\n* 支持通过 ADMIN_SESSION_EXPIRE 环境变量自定义管理员会话过期时间，由 @lins05 在 https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F235 中实现\n* 功能：实现代理健康检查功能，由 @icesixgod 在 https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F244 中实现\n* 修复：修复了使用第一个密钥获取模型列表时，若该密钥失效则无法获取模型的问题\n* 重构：将密钥状态页面重构为客户端动态加载，优化了密钥过多导致卡顿的问题\n* 功能：为无效密钥列表添加筛选和搜索功能\n* 修复：将网址上下文功能的默认设置改为 false\n* 功能：添加下拉菜单，并支持批量复制密钥和批量检测\n* 功能（密钥相关）：按错误码分组展示校验失败的密钥，便于及时剔除无效密钥\n\n\n## 新贡献者\n* @lins05 在 https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F234 中完成了首次贡献\n* @icesixgod 在 https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F244 中完成了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.2.1...v2.2.2","2025-07-25T09:08:55",{"id":211,"version":212,"summary_zh":213,"released_at":214},333290,"v2.2.1","修复：修复 gemini-cli 工具调用与 URL_CONTEXT 功能的兼容性问题  \n修复：更新思考预算配置，使用 _get_real_model 函数获取真实模型  \n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.2.0...v2.2.1","2025-07-20T05:44:30",{"id":216,"version":217,"summary_zh":218,"released_at":219},333291,"v2.2.0","修复：更新思考模型预算说明，默认使用-1  \n修复：更新思考配置，针对gemini-2.5-pro模型将最低思考预算设置为128，而非0  \n功能：新增URL上下文理解功能 [链接](https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Furl-context?hl=zh-cn#configure-url-context)  \n修复：修复Vertex Express API中无法添加“-”的问题  \n\n**完整变更日志**：[链接](https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.1.13...v2.2.0)","2025-07-19T17:48:24",{"id":221,"version":222,"summary_zh":223,"released_at":224},333292,"v2.1.13","fix: 为API_KEYS和ALLOWED_TOKENS添加默认值\r\nfix:   在密钥验证成功时重置失败计数\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.1.12...v2.1.13","2025-07-19T07:25:18",{"id":226,"version":227,"summary_zh":228,"released_at":229},333293,"v2.1.12","**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.1.11...v2.1.12","2025-07-18T17:40:30",{"id":231,"version":232,"summary_zh":233,"released_at":234},333294,"v2.1.11","fix：修复密钥检测bug\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.1.10...v2.1.11","2025-07-18T16:44:38",{"id":236,"version":237,"summary_zh":238,"released_at":239},333295,"v2.1.10","## What's Changed\r\n* Add native Gemini TTS support with smart multi-speaker detection by @zzh2632185 in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F212\r\n* 解决使用request.generationConfig后出现的'parts' 错误 by @zzh2632185 in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F214\r\n* feat: Add Files API support for file upload and management by @cxyfer in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F200\r\n* fix # 219 by @hewenyu in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F220\r\n\r\n## New Contributors\r\n* @zzh2632185 made their first contribution in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F212\r\n* @cxyfer made their first contribution in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F200\r\n* @hewenyu made their first contribution in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F220\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.1.9...v2.1.10","2025-07-18T14:35:56",{"id":241,"version":242,"summary_zh":243,"released_at":244},333296,"v2.1.9","## What's Changed\r\n* fix: Handle empty parts in CountTokensRequest and improve payload fil… by @liucong2013 in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F183\r\n* fix: 修复与Claude Code Router兼容性问题：清理不支持的JSON Schema字段和generationConfig处理 by @RipperTs in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F194\r\n* feat: 更新响应处理逻辑以支持推理内容 （openai格式也支持了）\r\n* feat: 添加 TTS 语音名称常量并更新 TTS 服务逻辑\r\n* refactor: 移除 ApiClient 中的 count_tokens 抽象方法\r\n* feat: 添加自定义 Headers 功能 （适配edgeone ai网关）\r\n\r\n## New Contributors\r\n* @RipperTs made their first contribution in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F194\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.1.8...v2.1.9","2025-07-10T13:36:26",{"id":246,"version":247,"summary_zh":248,"released_at":249},333297,"v2.1.8","## What's Changed\r\n* feat: 支持CloudFlare图床自定义上传文件夹路径 by @Miracloon in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F176\r\n* feat: Add support for countTokens API and improve debug logging by @liucong2013 in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F181\r\n\r\n## New Contributors\r\n* @Miracloon made their first contribution in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F176\r\n* @liucong2013 made their first contribution in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F181\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.1.7...v2.1.8","2025-07-07T06:27:47",{"id":251,"version":252,"summary_zh":253,"released_at":254},333298,"v2.1.7","## What's Changed\r\n* fix: 使用Union替代类型注解中的管道符号，使python3.9版本不报错 by @Wangnov in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F158\r\n* fix: 更新 thinkingBudget 范围 by @stevessr in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F160\r\n* feat: 添加智能路由中间件，支持API路径自动规范化 by @chinrain in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F162\r\n* Feat\u002Fauto route by @chinrain in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F167\r\n* fix: 修复数据库密码中包含特殊字符串时的问题 by @BigLiao in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F171\r\n* fix: 修复api中对role的校验 by @BigLiao in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F172\r\n\r\n## New Contributors\r\n* @Wangnov made their first contribution in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F158\r\n* @stevessr made their first contribution in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F160\r\n* @chinrain made their first contribution in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F162\r\n* @BigLiao made their first contribution in https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fpull\u002F171\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsnailyp\u002Fgemini-balance\u002Fcompare\u002Fv2.1.6...v2.1.7","2025-07-04T16:50:05",{"id":256,"version":257,"summary_zh":258,"released_at":259},333299,"v2.1.6","fix: 更新API请求URL，增加pageSize参数以支持更大模型列表的获取\r\nfeat: 增加了代理列表使用策略选项，对于同一个API_KEY可以使用固定代理","2025-06-26T09:14:30",{"id":261,"version":262,"summary_zh":263,"released_at":264},333300,"v2.1.5","feat(error_log): 添加清空所有错误日志的功能\r\n\r\nfeat: 在OpenAI chat服务中，适配googleSearch内置工具调用支持\r\n\r\nfeat: 添加环境变量加载和思考配置处理\r\n\r\nfeat(response_handler): 更新_extract_result函数以返回思考内容\r\n\r\nfeat(vertex): 集成 Vertex AI Express API 支持 (gemini格式)\r\n- path: gb地址 + \u002Fvertex-express\r\n\r\nchore: 优化UI为更耐看的浅色系主题","2025-06-07T13:11:12",{"id":266,"version":267,"summary_zh":268,"released_at":269},333301,"v2.1.4","feat(ui): 更新密钥状态页面样式和API调用详情\r\nfix: 修复请求日志删除任务中的时区属性错误\r\nfeat: 添加Telegram交流群链接至README和底部导航","2025-05-11T16:44:37"]