fix: apply forced beta query at final upstream URL stage
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
|
||||||
"github.com/QuantumNous/new-api/dto"
|
"github.com/QuantumNous/new-api/dto"
|
||||||
"github.com/QuantumNous/new-api/relay/channel"
|
"github.com/QuantumNous/new-api/relay/channel"
|
||||||
@@ -41,11 +42,32 @@ func (a *Adaptor) Init(info *relaycommon.RelayInfo) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) {
|
func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) {
|
||||||
baseURL := fmt.Sprintf("%s/v1/messages", info.ChannelBaseUrl)
|
requestURL := fmt.Sprintf("%s/v1/messages", info.ChannelBaseUrl)
|
||||||
if info.IsClaudeBetaQuery {
|
if !shouldAppendClaudeBetaQuery(info) {
|
||||||
baseURL = baseURL + "?beta=true"
|
return requestURL, nil
|
||||||
}
|
}
|
||||||
return baseURL, nil
|
|
||||||
|
parsedURL, err := url.Parse(requestURL)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
query := parsedURL.Query()
|
||||||
|
query.Set("beta", "true")
|
||||||
|
parsedURL.RawQuery = query.Encode()
|
||||||
|
return parsedURL.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func shouldAppendClaudeBetaQuery(info *relaycommon.RelayInfo) bool {
|
||||||
|
if info == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if info.IsClaudeBetaQuery {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if info.ChannelOtherSettings.ClaudeBetaQuery {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func CommonClaudeHeadersOperation(c *gin.Context, req *http.Header, info *relaycommon.RelayInfo) {
|
func CommonClaudeHeadersOperation(c *gin.Context, req *http.Header, info *relaycommon.RelayInfo) {
|
||||||
|
|||||||
@@ -338,15 +338,10 @@ func GenRelayInfoClaude(c *gin.Context, request dto.Request) *RelayInfo {
|
|||||||
info.ClaudeConvertInfo = &ClaudeConvertInfo{
|
info.ClaudeConvertInfo = &ClaudeConvertInfo{
|
||||||
LastMessagesType: LastMessageTypeNone,
|
LastMessagesType: LastMessageTypeNone,
|
||||||
}
|
}
|
||||||
info.IsClaudeBetaQuery = c.Query("beta") == "true" || isClaudeBetaForced(c)
|
info.IsClaudeBetaQuery = c.Query("beta") == "true"
|
||||||
return info
|
return info
|
||||||
}
|
}
|
||||||
|
|
||||||
func isClaudeBetaForced(c *gin.Context) bool {
|
|
||||||
channelOtherSettings, ok := common.GetContextKeyType[dto.ChannelOtherSettings](c, constant.ContextKeyChannelOtherSetting)
|
|
||||||
return ok && channelOtherSettings.ClaudeBetaQuery
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenRelayInfoRerank(c *gin.Context, request *dto.RerankRequest) *RelayInfo {
|
func GenRelayInfoRerank(c *gin.Context, request *dto.RerankRequest) *RelayInfo {
|
||||||
info := genBaseRelayInfo(c, request)
|
info := genBaseRelayInfo(c, request)
|
||||||
info.RelayMode = relayconstant.RelayModeRerank
|
info.RelayMode = relayconstant.RelayModeRerank
|
||||||
|
|||||||
Reference in New Issue
Block a user