Simulates Gemini CLI, Antigravity, Codex, Grok, and Kiro client requests, compat
Find a file
2025-07-20 15:31:45 +08:00
.gitignore init 2025-07-20 15:31:45 +08:00
gemini-api-server.js init 2025-07-20 15:31:45 +08:00
gemini-core.js Create gemini-core.js 2025-07-20 15:30:09 +08:00
LICENSE Initial commit 2025-07-20 15:05:56 +08:00
openai-api-server.js init 2025-07-20 15:31:45 +08:00
package-lock.json init 2025-07-20 15:31:45 +08:00
package.json init 2025-07-20 15:31:45 +08:00
README-EN.md init 2025-07-20 15:31:45 +08:00
README.md init 2025-07-20 15:31:45 +08:00

GeminiCli2API

该项目包含两个 Node.js HTTP 服务器。它们作为 Google Cloud Code Assist API 的本地代理。其中一个服务器还提供了与 OpenAI API 兼容的接口。可以抛弃终端界面通过API的形式接入到任意客户端。

中文 / English

项目概述

  • gemini-api-server.js: 这是一个独立的 Node.js HTTP 服务器。它作为 Google Cloud Code Assist API 的本地代理。该服务器提供所有功能和错误修复。它的设计稳健、灵活。通过全面可控的日志系统,可以方便地进行监控。
  • openai-api-server.js: 这个脚本基于 gemini-api-server.js。它创建了一个独立的 Node.js HTTP 服务器。此服务器也是 Google Cloud Code Assist API 的本地代理。但是,它对外提供了与 OpenAI API 兼容的接口。因此,任何支持 OpenAI API 的客户端可以直接使用它。
  • gemini-core.js: 这个文件包含两个服务器共享的核心逻辑。例如认证、API 调用、请求/响应处理以及日志记录功能。

功能说明

解决的问题

  • 解决了 Gemini 官方免费额度减少的问题。现在,用户可以使用 Gemini CLI 账号授权,每天进行 1000 次请求。
  • 提供了与 OpenAI API 的兼容性,方便现有 OpenAI 客户端使用。

目前的局限

  • 不能使用原版 Gemini CLI 的内置功能。
  • 不支持多模态能力。(todo)

主要功能

Gemini API Server (gemini-api-server.js)

  • 自动认证与令牌续期: 首次运行,脚本会引导用户通过浏览器完成 Google 账号手动授权。它将获取 OAuth 令牌。此令牌会安全地存储在本地,并在过期前自动刷新。这确保了服务的持续运行,无需手动干预。
  • 手动授权流程:
    1. 复制授权链接: 终端会输出一个 Google 授权 URL。请复制此 URL。
    2. 在浏览器中打开链接: 在任何有图形界面的设备上 (例如你的本地电脑) 的浏览器中打开该 URL。
    3. 完成授权: 登录你的 Google 账号并授予权限。
    4. 复制重定向后的 URL: 授权后浏览器会尝试重定向到一个URL提取授权码完成认证并正常启动服务。
  • 灵活的 API 密钥校验: 用户可以在 URL 查询参数 (?key=...) 或 x-goog-api-key 请求头中提供密钥。只要密钥正确,请求即可通过授权。密钥可以通过 --api-key 启动参数设置。
  • 角色规范化修复: 服务器会自动为请求体添加必要的 'user'/'model' 角色。同时,它会正确保留 systemInstruction (或 system_instruction)。
  • 固定的模型列表: 服务器专门提供并使用 gemini-2.5-progemini-2.5-flash 模型。
  • 完整的 Gemini API 端点支持: 实现了 listModels, generateContent, streamGenerateContent
  • 全面可控的日志系统: 包括令牌剩余有效期。它可以输出到控制台或文件的带时间戳的提示词日志。支持日志打印。

OpenAI 兼容 API Server (openai-api-server.js)

  • OpenAI API 兼容性: 实现了 /v1/models/v1/chat/completions 端点。
  • 格式转换: 自动将 OpenAI 格式的请求/响应与内部 Gemini 格式进行转换。
  • 流式传输支持: 完全支持 OpenAI 的流式响应 ("stream": true)。
  • 灵活的认证: 支持通过 Authorization: Bearer <key> 请求头、URL 查询参数 (?key=...) 或 x-goog-api-key 请求头进行 API 密钥校验。
  • 可配置性: 可以通过命令行参数配置监听地址、端口、API 密钥和提示词日志模式。
  • 重用核心逻辑: 底层仍使用 gemini-core.js 与 Google 服务通信。

安装

  1. 环境设置: 在项目根目录创建一个 package.json 文件,内容为: {"type": "module"}。这是为了避免模块类型警告。 (本项目已提供 package.json 文件,无需手动创建)

  2. 安装依赖:

    npm install
    

    这将安装 google-auth-libraryuuid

使用说明 与 命令行示例

1. Gemini API Server (gemini-api-server.js)

启动服务 (可以组合使用以下参数):

  • 默认启动: 监听 localhost:3000,不打印提示词
    node gemini-api-server.js
    
  • 指定监听 IP: 监听所有网络接口 (例如,用于 Docker 或局域网访问)
    node gemini-api-server.js 0.0.0.0
    
  • 打印提示词到控制台: 监听 localhost,并在控制台输出提示词详情
    node gemini-api-server.js --log-prompts console
    
  • 打印提示词到文件: 监听 localhost,并将提示词详情保存到一个带启动时间戳的新文件中 (例如: prompts-20231027-153055.log)
    node gemini-api-server.js --log-prompts file
    
  • 组合使用参数 (参数顺序无关):
    • 在指定 IP 上运行,并打印提示词到控制台
      node gemini-api-server.js 192.168.1.100 --log-prompts console
      
    • 在所有网络接口上运行,并打印提示词到文件
      node gemini-api-server.js --log-prompts file 0.0.0.0
      
    • 指定 API Key 和端口
      node gemini-api-server.js --api-key your_secret_key --port 3001
      

调用 API 接口 (默认 API Key: 123456):

  • a) 列出可用模型 (GET 请求,密钥在 URL 参数中)
    curl "http://localhost:3000/v1beta/models?key=123456"
    
  • b) 生成内容 - 单轮对话 (POST 请求,密钥在请求头中)
    curl "http://localhost:3000/v1beta/models/gemini-2.5-pro:generateContent" \
      -H "Content-Type: application/json" \
      -H "x-goog-api-key: 123456" \
      -d '{"contents":[{"parts":[{"text":"用一句话解释什么是代理服务器"}]}]}'
    
  • c) 生成内容 - 带系统提示词 (POST 请求,密钥在请求头中,注意 system_instruction)
    curl "http://localhost:3000/v1beta/models/gemini-2.5-pro:generateContent" \
      -H "Content-Type: application/json" \
      -H "x-goog-api-key: 123456" \
      -d '{
        "system_instruction": { "parts": [{ "text": "你是一只名叫 Neko 的猫。" }] },
        "contents": [{ "parts": [{ "text": "你好,你叫什么名字?" }] }]
      }'
    
  • d) 流式生成内容 (POST 请求,密钥在 URL 参数中)
    curl "http://localhost:3000/v1beta/models/gemini-2.5-flash:streamGenerateContent?key=123456" \
      -H "Content-Type: application/json" \
      -d '{"contents":[{"parts":[{"text":"写一首关于宇宙的五行短诗"}]}]}'
    

2. OpenAI 兼容 API Server (openai-api-server.js)

启动服务 :

  • 同Gemini API Server 保持一致:

调用 API 接口 (假设 API Key: your_secret_key, 服务运行在 localhost:8000):

  • a) 列出可用模型:
    curl http://localhost:8000/v1/models \
      -H "Authorization: Bearer your_secret_key"
    
  • b) 生成内容 - 带系统提示词 (非流式):
    curl http://localhost:8000/v1/chat/completions \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer your_secret_key" \
      -d '{
        "model": "gemini-2.5-pro",
        "messages": [
          {"role": "system", "content": "你是一只名叫 Neko 的猫。"},
          {"role": "user", "content": "你好,你叫什么名字?"}
        ]
      }'
    
  • c) 生成内容 - 流式:
    curl http://localhost:8000/v1/chat/completions \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer your_secret_key" \
      -d '{
        "model": "gemini-2.5-flash",
        "messages": [
          {"role": "user", "content": "写一首关于宇宙的五行短诗"}
        ],
        "stream": true
      }'