feat: unify param/header overrides with retry-aware conditions and flexible header operations
This commit is contained in:
@@ -101,6 +101,7 @@ type RelayInfo struct {
|
||||
RelayMode int
|
||||
OriginModelName string
|
||||
RequestURLPath string
|
||||
RequestHeaders map[string]string
|
||||
ShouldIncludeUsage bool
|
||||
DisablePing bool // 是否禁止向下游发送自定义 Ping
|
||||
ClientWs *websocket.Conn
|
||||
@@ -142,6 +143,8 @@ type RelayInfo struct {
|
||||
IsChannelTest bool // channel test request
|
||||
RetryIndex int
|
||||
LastError *types.NewAPIError
|
||||
RuntimeHeadersOverride map[string]interface{}
|
||||
UseRuntimeHeadersOverride bool
|
||||
|
||||
PriceData types.PriceData
|
||||
|
||||
@@ -458,6 +461,7 @@ func genBaseRelayInfo(c *gin.Context, request dto.Request) *RelayInfo {
|
||||
isFirstResponse: true,
|
||||
RelayMode: relayconstant.Path2RelayMode(c.Request.URL.Path),
|
||||
RequestURLPath: c.Request.URL.String(),
|
||||
RequestHeaders: cloneRequestHeaders(c),
|
||||
IsStream: isStream,
|
||||
|
||||
StartTime: startTime,
|
||||
@@ -490,6 +494,27 @@ func genBaseRelayInfo(c *gin.Context, request dto.Request) *RelayInfo {
|
||||
return info
|
||||
}
|
||||
|
||||
func cloneRequestHeaders(c *gin.Context) map[string]string {
|
||||
if c == nil || c.Request == nil {
|
||||
return nil
|
||||
}
|
||||
if len(c.Request.Header) == 0 {
|
||||
return nil
|
||||
}
|
||||
headers := make(map[string]string, len(c.Request.Header))
|
||||
for key := range c.Request.Header {
|
||||
value := strings.TrimSpace(c.Request.Header.Get(key))
|
||||
if value == "" {
|
||||
continue
|
||||
}
|
||||
headers[key] = value
|
||||
}
|
||||
if len(headers) == 0 {
|
||||
return nil
|
||||
}
|
||||
return headers
|
||||
}
|
||||
|
||||
func GenRelayInfo(c *gin.Context, relayFormat types.RelayFormat, request dto.Request, ws *websocket.Conn) (*RelayInfo, error) {
|
||||
var info *RelayInfo
|
||||
var err error
|
||||
|
||||
Reference in New Issue
Block a user