
sub2api 在写模型级冷却时会同时写一把整族 Gemini 的键,Pro 号的 Argon 用满后,同一张凭证上的 Gemini 3.8 Flash 也跟着被跳过;本期把两把键、调度判定、今晚可用的两条处置路径和修复进展逐条落到行号。
antigravity:gemini2。modelRateLimitKeysForRequest 返回的是「这次请求要查哪些键」的列表。函数先按账号的模型映射拿到 modelKey,Antigravity 账号再经 resolveFinalAntigravityModelKey 落到最终模型名,然后以这一把键起一个切片7。antigravity:gemini。
backend/internal/service/model_rate_limit.go 第 66–92 行。第 80 行是只有精确模型名的那个切片,第 83–84 行的三条件里,!isAntigravityGeminiImageModel 是唯一的例外口子,所以图片模型不继承家族冷却,文本模型继承。7openai:image-generation、Anthropic 平台的 Fable 家族键。三处写法一致,说明家族键是这套冷静机制的统一设计,落到哪一类模型就继承哪一类。antigravityModelRateLimitKeys 第 162 到 173 行,同样是「先放精确名,再在三个条件都满足时追加家族键」8。setAntigravityModelRateLimits 拿到这两把键之后,用 for _, key := range keys 逐个写库,每个键各调一次 setModelRateLimitByModelName,再刷一次账号的限流缓存9。
backend/internal/service/antigravity_gateway_retry.go 第 881–898 行。第 885 行一次取回全部键,第 891 行的循环让每个键各写一条限流记录,第 893 行同步刷缓存;写两条和写一条走的是同一段代码,没有「只写精确名」的分支。9retryDelay 大于等于 7 秒(antigravityRateLimitThreshold),代码就直接限流这个模型、不再重试;上游没给 retryDelay 时按 30 秒算10。判定函数在 antigravity_gateway_retry.go 第 1053 到 1082 行11。IsSchedulableForModelWithContext。前两句依次拦:账号整体不可调度就返回 false;本次请求的键命中任一条限流记录也返回 false12。isModelRateLimitedWithContext,它遍历请求对应的每一把键,命中任意一把就判为限流13。
backend/internal/service/antigravity_quota_scope.go 第 37–52 行。第 44 行这一句是分水岭:家族键一旦写进 model_rate_limits,任何非图片 Gemini 请求都会在这里被判 false;第 46 行是全函数唯一的放行例外,条件同时要求 Antigravity 平台、开了 overages、积分未耗尽。12LoadCodeAssist,会把 tier 归一成 ULTRA、PRO、FREE、UNKNOWN 之一,再连同逐模型的 antigravity_quota 一起写进用量信息1415。
backend/internal/repository/scheduler_cache.go 第 1245–1262 行。第 1251 行与第 1255 行是全部被搬进调度快照的键,plan_type 在列,antigravity_quota 与 subscription_tier 不在列。选号侧想按 tier 区分 Pro 与 Ultra,先得让这两个字段到达这一层。16gemini-3-flash 期望被限流17。
backend/internal/service/model_rate_limit_test.go 第 258–281 行。第 271–273 行三个图片模型断言未被限流,第 274 行断言 gemini-3-flash 被限流;用例名字就写着 ImageDoesNotInheritGeminiFamilyLimit,说明「文本模型继承、图片模型不继承」是被写进预期的行为。17POST /api/v1/admin/accounts/:id/clear-rate-limit 这一组里,清限流那条走 ClearRateLimit:先清账号的限流时刻,再清 Antigravity 的额度作用域,然后清整张 model_rate_limits,最后连临时不可调度一起清掉1819。batch-clear-error21。model_rate_limits 存在账号 extra 里,能删掉它的只有上面那两个清理函数;重登只换令牌,那张表原样留着。websockets: true 的 Codex 凭证加一个开关,让它们也能用 websocket 执行器去服务 HTTP 下游请求;作者自测固定开销 websocket 1.2 秒、HTTP 2.1 秒24。DownstreamWebsocket(ctx) && codexWebsocketsEnabled(auth) 两个条件都成立才走 wsExec,否则落到 httpExec25。
internal/runtime/executor/codex_websockets_executor.go 第 74–98 行。Execute 与 ExecuteStream 两个入口的写法一致:第 78 行与第 91 行都要求下游本身是 websocket,第 84 行与第 97 行才回落到 HTTP 执行器。凭证上的 websockets: true 只决定第二个条件,决定不了第一个。25codex 走的仍是浏览器回调那条路,flow=device 只对 xai 等少数 provider 开放27。要等设备码登录,还是得等这张单。error.details[].reason 和 error_number 2011,是内容参数被拒,处理方式是换图换格式,清限流没有用。extra.model_rate_limits。里面同时出现精确模型名与 antigravity:gemini 两把键,就对上这一期说的病;只有一把,问题在别处。clear-rate-limit(整张限流表一起清,Argon 的冷却也没了),或者给这张号开 allow_overages(走积分,积分耗尽会写 5 小时标记)。github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
status.claude.com
status.openai.com
status.cloud.google.com
codex-reset.com
discuss.ai.google.dev
discuss.ai.google.dev
discuss.ai.google.dev
discuss.ai.google.dev
community.openai.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.