mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-04-19 05:17:26 +00:00
Merge pull request #3066 from seefs001/fix/aws-header-override
Fix/aws header override
This commit is contained in:
@@ -436,11 +436,46 @@ func mergeChannelOverride(base map[string]interface{}, tpl map[string]interface{
|
||||
}
|
||||
out := cloneStringAnyMap(base)
|
||||
for k, v := range tpl {
|
||||
if strings.EqualFold(strings.TrimSpace(k), "operations") {
|
||||
baseOps, hasBaseOps := extractParamOperations(out[k])
|
||||
tplOps, hasTplOps := extractParamOperations(v)
|
||||
if hasTplOps {
|
||||
if hasBaseOps {
|
||||
out[k] = append(tplOps, baseOps...)
|
||||
} else {
|
||||
out[k] = tplOps
|
||||
}
|
||||
continue
|
||||
}
|
||||
}
|
||||
if _, exists := out[k]; exists {
|
||||
continue
|
||||
}
|
||||
out[k] = v
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func extractParamOperations(value interface{}) ([]interface{}, bool) {
|
||||
switch ops := value.(type) {
|
||||
case []interface{}:
|
||||
if len(ops) == 0 {
|
||||
return []interface{}{}, true
|
||||
}
|
||||
cloned := make([]interface{}, 0, len(ops))
|
||||
cloned = append(cloned, ops...)
|
||||
return cloned, true
|
||||
case []map[string]interface{}:
|
||||
cloned := make([]interface{}, 0, len(ops))
|
||||
for _, op := range ops {
|
||||
cloned = append(cloned, op)
|
||||
}
|
||||
return cloned, true
|
||||
default:
|
||||
return nil, false
|
||||
}
|
||||
}
|
||||
|
||||
func appendChannelAffinityTemplateAdminInfo(c *gin.Context, meta channelAffinityMeta) {
|
||||
if c == nil {
|
||||
return
|
||||
|
||||
@@ -56,7 +56,7 @@ func TestApplyChannelAffinityOverrideTemplate_MergeTemplate(t *testing.T) {
|
||||
|
||||
merged, applied := ApplyChannelAffinityOverrideTemplate(ctx, base)
|
||||
require.True(t, applied)
|
||||
require.Equal(t, 0.2, merged["temperature"])
|
||||
require.Equal(t, 0.7, merged["temperature"])
|
||||
require.Equal(t, 0.95, merged["top_p"])
|
||||
require.Equal(t, 2000, merged["max_tokens"])
|
||||
require.Equal(t, 0.7, base["temperature"])
|
||||
@@ -74,6 +74,48 @@ func TestApplyChannelAffinityOverrideTemplate_MergeTemplate(t *testing.T) {
|
||||
require.EqualValues(t, 2, overrideInfo["param_override_keys"])
|
||||
}
|
||||
|
||||
func TestApplyChannelAffinityOverrideTemplate_MergeOperations(t *testing.T) {
|
||||
ctx := buildChannelAffinityTemplateContextForTest(channelAffinityMeta{
|
||||
RuleName: "rule-with-ops-template",
|
||||
ParamTemplate: map[string]interface{}{
|
||||
"operations": []map[string]interface{}{
|
||||
{
|
||||
"mode": "pass_headers",
|
||||
"value": []string{"Originator"},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
base := map[string]interface{}{
|
||||
"temperature": 0.7,
|
||||
"operations": []map[string]interface{}{
|
||||
{
|
||||
"path": "model",
|
||||
"mode": "trim_prefix",
|
||||
"value": "openai/",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
merged, applied := ApplyChannelAffinityOverrideTemplate(ctx, base)
|
||||
require.True(t, applied)
|
||||
require.Equal(t, 0.7, merged["temperature"])
|
||||
|
||||
opsAny, ok := merged["operations"]
|
||||
require.True(t, ok)
|
||||
ops, ok := opsAny.([]interface{})
|
||||
require.True(t, ok)
|
||||
require.Len(t, ops, 2)
|
||||
|
||||
firstOp, ok := ops[0].(map[string]interface{})
|
||||
require.True(t, ok)
|
||||
require.Equal(t, "pass_headers", firstOp["mode"])
|
||||
|
||||
secondOp, ok := ops[1].(map[string]interface{})
|
||||
require.True(t, ok)
|
||||
require.Equal(t, "trim_prefix", secondOp["mode"])
|
||||
}
|
||||
|
||||
func TestChannelAffinityHitCodexTemplatePassHeadersEffective(t *testing.T) {
|
||||
gin.SetMode(gin.TestMode)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user