Skip to content

CassiopeiaCode/GeminiGateway

Repository files navigation

Gemini Gateway

Gemini Gateway 是一个高性能、高可用的 Gemini API 代理和负载均衡解决方案。它旨在通过集中管理和动态调度一组 API 密钥,为您的应用程序提供稳定、可靠的 Gemini 模型访问服务。

该项目通过智能的密钥轮换、自动测试和状态监控机制,最大限度地提高 API 请求的成功率,并在正确认证后绕过速率限制。

Deep Wiki

✨ 核心功能

代理与负载均衡

  • 🚀 高性能代理: 基于 Flask 构建的轻量级代理服务器,支持并发请求和流式响应 (SSE),确保低延迟和高吞吐量。
  • ⚖️ 动态负载均衡: 动态从可用密钥池中为每个请求选择一个健康的密钥(优先选择状态为 200 的密钥)。
  • 🔄 智能重试机制: 当一个密钥请求失败(例如,HTTP 状态码非 200、请求异常或收到空的 SSE 响应)时,会自动切换到下一个可用密钥,最多重试5次。
  • 💧 熔断机制: 当可用密钥数量低于预设阈值时,会根据概率拒绝新请求,防止因大量无效密钥导致的服务雪崩。

密钥管理与健康检查

  • 🔑 集中式密钥管理:
    • 自动从 keys/ 目录下的所有文件中读取 API 密钥。
    • 支持多种格式:每个文件可以包含一个或多个以换行符、空格或逗号分隔的密钥。
    • 自动格式化源文件,确保每个密钥独占一行,便于维护。
    • 将所有密钥同步到 SQLite 数据库中,进行统一管理。
  • 🔬 自动化健康检查:
    • 定期对每个密钥在所有支持的 Gemini 模型上进行可用性测试。
    • 根据 HTTP 状态码(200, 403, 4xx, 5xx)智能调整密钥的下一次测试时间。

安全、监控与配置

  • 🛡️ 安全认证与特权:
    • 支持通过 AUTH_KEY 对代理服务进行认证。
    • 使用有效 AUTH_KEY 的请求将自动绕过 IP 速率限制和熔断机制,确保授权访问的最高可用性。
  • ✋ IP 速率限制: 内置基于 IP 的速率限制器,可配置分钟级和小时级的请求限制,自动封禁恶意 IP。
  • 📊 状态监控与日志:
    • 定期将按模型聚合的密钥健康状态和请求统计输出到 status.txt 文件。
    • 记录详细的请求日志,包括使用的密钥、模型、响应状态和延迟。
    • 自动清理旧的日志记录。
  • ⚙️ 灵活配置:
    • 所有关键参数(如端口、调度间隔、重试次数、代理设置等)都可通过 config.py 文件进行配置。
    • 支持通过 SOCKS5 代理转发所有出站请求。

🚀 快速开始

1. 环境准备

  • Python 3.7+
  • 安装依赖:
    pip install -r requirements.txt

2. 配置

  • 将您的 Gemini API 密钥放入 keys/ 目录下的一个或多个文本文件中。
    • 您可以将多个密钥放在同一个文件中,用换行、空格或逗号分隔。脚本会自动读取并格式化。
  • 根据您的需求修改 config.py 文件中的配置项。

3. 运行

python main.py

服务启动后,main.py 会在后台启动四个独立的线程:

  1. 密钥同步服务: 定期从 keys/ 目录同步密钥到数据库。
  2. 密钥测试服务: 定期测试数据库中密钥的有效性。
  3. 状态打印服务: 定期将服务状态写入 status.txt
  4. 日志清理服务: 定期清理旧的请求日志。

最后,主线程会启动 Flask 代理服务,监听指定端口。

🛠️ 项目结构

.
├── main.py                   # 主程序入口,启动所有后台服务和代理
├── proxy_service.py          # Flask 代理服务核心逻辑
├── key_sync.py               # 将文件中的密钥同步到数据库
├── key_reader.py             # 从文件中读取并格式化密钥
├── key_tester.py             # 定期测试密钥可用性
├── key_status_printer.py     # 定期将密钥状态输出到文件
├── database.py               # 数据库初始化和操作
├── config.py                 # 所有配置项
├── rate_limiter.py           # 基于 IP 的请求速率限制器
├── keys/                       # 存放 API 密钥文件的目录
│   ├── my_keys.txt
│   └── other_keys.txt
└── README.md                 # 项目说明文档

📝 API 用法

将您原来请求 Google API 的地址 https://generativelanguage.googleapis.com 替换为 Gemini Gateway 的服务地址即可。

示例 (curl):

curl -X POST "http://127.0.0.1:55200/v1beta/models/gemini-1.5-flash:generateContent" \
     -H "Content-Type: application/json" \
     -d '{
           "contents": [{
             "parts":[{
               "text": "你好,世界!"
             }]
           }]
         }'

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages