
这一小时四仓都没发版:一个 response.metadata 事件让 sub2api 在 v0.2.17 上的 overload 换号失效,生产数据是 47 次只救回 2 次;同一窗口还有 home 模式空目录回 502 的修复,以及 codex-proxy 额度分组与热路径落盘的两条排期。
/v1/responses 流式。7response.failed 从 sequence 3 推迟到 4,多出来的那个事件是 response.metadata。response.created | response.in_progress | response.metadata | response.failed (server_is_overloaded)。
backend/internal/service/openai_gateway_passthrough.go 第 1088–1095 行:注释写明生命周期元数据与传输心跳都不算模型输出,但 case 里只有 response.created、response.in_progress、keepalive 三个名字,response.queued 与 response.metadata 落到第 1092 行的 default 返回 false8!openAIStreamEventIsMetadata(eventType) 当作「这一帧算输出」,未知事件于是被当成已经开始输出。9response.failed 再进来,已经落不进输出前那条重试与换号分支,只能把 503 原样回给客户端。response.metadata 会让语义 TTFT 提前开始、首输出超时提前解除,所以监控上看到的延迟也会偏。060d0160,那正是 v0.2.17 标签指向的提交;go test ./internal/service/ 全量通过,含新增的 TestOpenAIStreamMetadataAndKeepaliveBeforeOverloadFailOver。10metadata 之后紧跟 failed、而 sub2api 侧 recovered 为 0,就是这一条。/v1/models 与 /v1beta/models 不再读本地注册表,改为向 home 控制中心要目录。{}。v8.0.33 把空目录当成畸形数据。home models payload has no sections。12home models payload contains no models。13
internal/api/server_routes.go 第 1158–1169 行:第 1159 行先挡空载荷,第 1163–1166 行解包成 section 到模型列表的映射,第 1167–1168 行把「section 数为 0」直接判成 no sections 错误,空目录与畸形载荷在这里被合并处理12server_error。14/v1/models 按 OpenAI、Claude、Codex、Grok 四种客户端形状各走一遍,/v1beta/models 与 /v1beta/models/{model} 是 Gemini 那两个。null、非对象、section 非空但没有可用模型 ID、上游错误信封,照旧报错。AntigravityUpstream.fetchQuota() 加一条 Quota Summary 拉取路径,返回 Gemini Models(共享池)与 Claude and GPT models(独立固定配额)两组,各带 Weekly 与 Five Hour 两个窗口;旧接口不可用时回退到现在的逐模型 buckets。groups 加 buckets,前端默认只画两组聚合进度条,回退模式下才逐模型展开;AI credits 与套餐内额度分开展示。
src/routes/auth.ts 第 99–110 行:第 99 行取一次 retrieveUserQuota,第 100–102 行只认响应里的 buckets 数组,第 103–110 行逐个映射成 modelId、remainingFraction、resetTime 三项,没有分组的字段api-keys.json。答复是「已确认按热路径 debounce 批量落盘修复」,暂不迁移存储介质。20markUsed() 与 recordUsage() 只更新内存并标 dirty,秒级 debounce 批量落盘;正常退出时 flush,异常退出最多丢一个窗口的计数;增删改 key、启停账号等配置变更仍即时持久化;补四类回归测试。21
src/auth/api-key-pool.ts 第 289–312 行:markUsed() 改完 requestCount 与 windowRequestCount 后第 297 行调 persist(),recordUsage() 改完 token 计数后第 312 行再调一次;persist() 走默认实现,第 105 行是 writeFileSync 写临时文件再加 renameSyncpersist(),额度端点也仍只回 buckets。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
antigravity.google
antigravity.google
github.com
github.com
github.com
github.com
status.openai.com
status.anthropic.com
status.cloud.google.com
codex-reset.com
opentherank.com
community.openai.com
reddit.com
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.