Skip to content

sxjeru/vercel-gemini-retry

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

项目代码来源:https://linux.do/t/topic/873771

Credit:

本人仅添加香港区域限制,并针对号池特性允许对无效 key 错误进行重试。在此一并感谢上述所有开发者的贡献。

一键部署:

Deploy with Vercel

Vercel Gemini try'n'retry

一个 Gemini 代理项目,支持流式(SSE)响应、内部重试机制以及对上游错误的标准化处理。

简单来说,就是 截断(以及发现 key 失效)后自动重试

限制

  • Vercel Function 要求在 25 秒内发送初始响应,此后若不截断,可保持长时间流式输出。
  • 若有截断,则单次请求不断重试直至 300 秒用尽(默认启用 Fluid compute 时,未启用则仅 60s)
  • 末尾会固定输出 [done]
  • Vercel 限制请求体大小应小于 4.5 MB,故大于该体积的图片等文件将无法传输。

环境变量

您可以在部署或本地运行前设置下列环境变量(可在 Vercel 仪表盘或本地 shell 中设置):

  • UPSTREAM_URL_BASE:上游 API 基础 URL,默认 https://generativelanguage.googleapis.com
  • MAX_CONSECUTIVE_RETRIES:最大连续重试次数(默认 100
  • DEBUG_MODE:开启调试日志(true/false,默认关闭)
  • RETRY_DELAY_MS:重试间隔毫秒数(默认 750
  • SWALLOW_THOUGHTS_AFTER_RETRY:重试后是否吞掉模型的“思考(thought)”片段(true/false,默认为 true
  • KEYPOOL_MODE:号池模式,是否对 429, 400, 403 等因 key 无效导致的错误进行重试(true/false,默认为 false

另外,客户端需要在请求头中传递 Authorization(或 X-Goog-Api-Key)用于上游认证。

本地开发与测试

先安装 Vercel CLI(若未安装)并登录:

npm i -g vercel
vercel login

在项目根目录启动开发服务器:

npm run dev

默认监听 3000,您可以用 curl 或浏览器访问:

# 非流式 GET 示例
curl "http://localhost:3000/v1/models" -H "X-Goog-Api-Key: YOUR_KEY"

# 流式 POST 示例(SSE)
curl -N "http://localhost:3000/v1/models:streamGenerateContent?alt=sse" \
  -H "Content-Type: application/json" \
  -H "X-Goog-Api-Key: YOUR_KEY" \
  -d '{"messages":[{"role":"user","content":"hello"}]}'

注意:vercel dev 会自动加载 .env 文件中的环境变量,但为了在 PowerShell 中正确读取,请确保变量格式为 NAME=value(或者使用 setx 永久设置)。

手动部署到 Vercel

  1. 在 Vercel 仪表盘新建项目并连接到您的仓库,或在本地使用:
vercel --prod
  1. 在 Vercel 项目设置中配置上面的环境变量(UPSTREAM_URL_BASEMAX_CONSECUTIVE_RETRIES 等)。

  2. vercel.json 已配置了所有路径都重写到 api/proxy,这样您可以直接将任意请求代理到上游服务。

Edge Function 区域限制

项目已配置为不在香港地域运行,以避免区域报错。如需修改执行区域,请编辑 config.regions 配置:

regions: = [
  'sin1',
  'icn1',
  'hnd1',
  'kix1',
  'bom1',
  'cpt1',
  'pdx1',
  'cle1',
  'syd1',
  'iad1',
  'sfo1',
  'gru1',
];

提示:选择离用户最近的区域可减少延迟。如果不设置 regions,Vercel 会在所有可用区域部署。(包括香港)

About

Gemini 截断报错自动重试

Resources

License

Stars

Watchers

Forks

Contributors