fix(网关): Claude Code OAuth 补齐 oauth beta

This commit is contained in:
cyhhao
2026-01-16 23:15:52 +08:00
parent 0962ba43c0
commit 0c011b889b

View File

@@ -2820,12 +2820,19 @@ func (s *GatewayService) buildUpstreamRequest(ctx context.Context, c *gin.Contex
applyClaudeOAuthHeaderDefaults(req, reqStream)
}
// 处理anthropic-beta headerOAuth账号需要特殊处理
if tokenType == "oauth" && mimicClaudeCode {
if requestHasTools(body) {
req.Header.Set("anthropic-beta", claude.MessageBetaHeaderWithTools)
// 处理 anthropic-beta headerOAuth 账号需要包含 oauth beta
if tokenType == "oauth" {
if mimicClaudeCode {
// 非 Claude Code 客户端:按 Claude Code 规则生成 beta header
if requestHasTools(body) {
req.Header.Set("anthropic-beta", claude.MessageBetaHeaderWithTools)
} else {
req.Header.Set("anthropic-beta", claude.MessageBetaHeaderNoTools)
}
} else {
req.Header.Set("anthropic-beta", claude.MessageBetaHeaderNoTools)
// Claude Code 客户端:尽量透传原始 header仅补齐 oauth beta
clientBetaHeader := req.Header.Get("anthropic-beta")
req.Header.Set("anthropic-beta", s.getBetaHeader(modelID, clientBetaHeader))
}
} else if s.cfg != nil && s.cfg.Gateway.InjectBetaForAPIKey && req.Header.Get("anthropic-beta") == "" {
// API-key仅在请求显式使用 beta 特性且客户端未提供时,按需补齐(默认关闭)
@@ -4070,8 +4077,21 @@ func (s *GatewayService) buildCountTokensRequest(ctx context.Context, c *gin.Con
}
// OAuth 账号:处理 anthropic-beta header
if tokenType == "oauth" && mimicClaudeCode {
req.Header.Set("anthropic-beta", claude.CountTokensBetaHeader)
if tokenType == "oauth" {
if mimicClaudeCode {
req.Header.Set("anthropic-beta", claude.CountTokensBetaHeader)
} else {
clientBetaHeader := req.Header.Get("anthropic-beta")
if clientBetaHeader == "" {
req.Header.Set("anthropic-beta", claude.CountTokensBetaHeader)
} else {
beta := s.getBetaHeader(modelID, clientBetaHeader)
if !strings.Contains(beta, claude.BetaTokenCounting) {
beta = beta + "," + claude.BetaTokenCounting
}
req.Header.Set("anthropic-beta", beta)
}
}
} else if s.cfg != nil && s.cfg.Gateway.InjectBetaForAPIKey && req.Header.Get("anthropic-beta") == "" {
// API-key与 messages 同步的按需 beta 注入(默认关闭)
if requestNeedsBetaFeatures(body) {