Skip to content

fix(openai): failover 切换账号时重建请求体,避免 alias 模型因缓存泄漏到下一账号#2920

Open
wucm667 wants to merge 1 commit into
Wei-Shaw:mainfrom
wucm667:fix/openai-failover-stale-cached-body
Open

fix(openai): failover 切换账号时重建请求体,避免 alias 模型因缓存泄漏到下一账号#2920
wucm667 wants to merge 1 commit into
Wei-Shaw:mainfrom
wucm667:fix/openai-failover-stale-cached-body

Conversation

@wucm667
Copy link
Copy Markdown
Contributor

@wucm667 wucm667 commented May 31, 2026

背景

/v1/responses failover 时 handler 每轮都会把原始 raw body 传给 Forward。Forward 会在 gin context 中缓存解析后的 body map,账号 A 的 model_mapping 修改缓存后,如果返回可 failover 错误,下一轮账号 B 可能复用这份已被 A 改写的缓存,导致 bodyModified 判定和实际 raw body 分离,alias 模型泄漏到下一账号。

改动

  • 在 OpenAI Responses failover 每次调用 Forward 前清理 OpenAI parsed request body 缓存,让每个账号尝试都基于当前 forward body 重新解析和映射。
  • 在 getOpenAIRequestBodyMap 增加防御性脏缓存检测:当缓存 map 中的 model 与传入 raw body 的 model 不一致时,丢弃缓存并重新解析。
  • 新增回归测试覆盖同一 gin context 连续 Forward 的账号切换场景,包括 A/B 都有 mapping、A 有 B 无、A 无 B 有,以及未显式清缓存时的脏缓存防御。

测试

  • cd backend && go test -tags=unit ./internal/service/... -run OpenAI
  • cd backend && go test -tags=unit ./...
  • cd backend && golangci-lint run ./...

Fixes #2897

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

OpenAI /responses failover can bypass account model_mapping due to cached body reuse

1 participant