Restrict priority demotion to same-model peers
This commit is contained in:
@@ -944,6 +944,26 @@ WHERE reference_type = 'gateway_task'
|
||||
"credentials": map[string]any{"mode": "simulation"},
|
||||
"priority": 20,
|
||||
}, http.StatusCreated, &successPlatform)
|
||||
var unrelatedPriorityPlatform struct {
|
||||
ID string `json:"id"`
|
||||
}
|
||||
doJSON(t, server.URL, http.MethodPost, "/api/admin/platforms", loginResponse.AccessToken, map[string]any{
|
||||
"provider": "openai",
|
||||
"platformKey": "openai-unrelated-priority-" + suffixText,
|
||||
"name": "OpenAI Unrelated Priority",
|
||||
"baseUrl": "https://api.openai.com/v1",
|
||||
"authType": "bearer",
|
||||
"credentials": map[string]any{"mode": "simulation"},
|
||||
"priority": 900,
|
||||
}, http.StatusCreated, &unrelatedPriorityPlatform)
|
||||
var unrelatedPriorityPlatformModel map[string]any
|
||||
doJSON(t, server.URL, http.MethodPost, "/api/admin/platforms/"+unrelatedPriorityPlatform.ID+"/models", loginResponse.AccessToken, map[string]any{
|
||||
"canonicalModelKey": "openai:gpt-4o-mini",
|
||||
"modelName": "priority-demote-unrelated-" + suffixText,
|
||||
"modelAlias": "priority-demote-unrelated-" + suffixText,
|
||||
"modelType": []string{"text_generate"},
|
||||
"displayName": "Unrelated Priority",
|
||||
}, http.StatusCreated, &unrelatedPriorityPlatformModel)
|
||||
for _, platformID := range []string{failedPlatform.ID, successPlatform.ID} {
|
||||
var platformModel map[string]any
|
||||
doJSON(t, server.URL, http.MethodPost, "/api/admin/platforms/"+platformID+"/models", loginResponse.AccessToken, map[string]any{
|
||||
@@ -1000,6 +1020,26 @@ WHERE reference_type = 'gateway_task'
|
||||
if summary, ok := failoverDetail.Metrics["attempts"].([]any); !ok || len(summary) != 3 {
|
||||
t.Fatalf("task metrics should keep attempt-chain summary, got %+v", failoverDetail.Metrics)
|
||||
}
|
||||
var demotedDynamicPriority int
|
||||
var successEffectivePriority int
|
||||
var unrelatedEffectivePriority int
|
||||
if err := testPool.QueryRow(ctx, `
|
||||
SELECT COALESCE(failed.dynamic_priority, -1),
|
||||
COALESCE(success.dynamic_priority, success.priority),
|
||||
COALESCE(unrelated.dynamic_priority, unrelated.priority)
|
||||
FROM integration_platforms failed
|
||||
JOIN integration_platforms success ON success.id = $2::uuid
|
||||
JOIN integration_platforms unrelated ON unrelated.id = $3::uuid
|
||||
WHERE failed.id = $1::uuid`, failedPlatform.ID, successPlatform.ID, unrelatedPriorityPlatform.ID).Scan(&demotedDynamicPriority, &successEffectivePriority, &unrelatedEffectivePriority); err != nil {
|
||||
t.Fatalf("read priority demotion state: %v", err)
|
||||
}
|
||||
expectedDemotedPriority := successEffectivePriority + 1
|
||||
if unrelatedEffectivePriority <= expectedDemotedPriority {
|
||||
t.Fatalf("unrelated priority fixture should sit beyond same-model peers: unrelated=%d expected=%d", unrelatedEffectivePriority, expectedDemotedPriority)
|
||||
}
|
||||
if demotedDynamicPriority != expectedDemotedPriority {
|
||||
t.Fatalf("priority demotion should use only same-model peer clients, got dynamic_priority=%d want %d", demotedDynamicPriority, expectedDemotedPriority)
|
||||
}
|
||||
|
||||
var degradePolicySet struct {
|
||||
ID string `json:"id"`
|
||||
|
||||
Reference in New Issue
Block a user