Skip to content

Commit 04f7b30

Browse files
committed
fix: make response model pattern ordering deterministic
1 parent e344c76 commit 04f7b30

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

internal/executor/responsemodifier/claude_response_modifier.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,10 @@ func sortedMappingPatterns(mapping map[string]string) []string {
116116
if leftWildcards != rightWildcards {
117117
return leftWildcards < rightWildcards
118118
}
119-
return len(left) > len(right)
119+
if len(left) != len(right) {
120+
return len(left) > len(right)
121+
}
122+
return left < right
120123
})
121124
return patterns
122125
}

internal/executor/responsemodifier/response_modifier_writer_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,20 @@ func TestMapModel(t *testing.T) {
2929
}
3030
}
3131

32+
func TestSortedMappingPatternsUsesDeterministicTieBreaker(t *testing.T) {
33+
mapping := map[string]string{
34+
"claude-3-*": "older",
35+
"claude-4-*": "newer",
36+
"claude-*": "fallback",
37+
"*": "global",
38+
}
39+
got := sortedMappingPatterns(mapping)
40+
want := []string{"claude-3-*", "claude-4-*", "claude-*", "*"}
41+
if strings.Join(got, ",") != strings.Join(want, ",") {
42+
t.Fatalf("sortedMappingPatterns() = %v, want %v", got, want)
43+
}
44+
}
45+
3246
func TestResponseModifierWriterModifiesNonStreamingClaudeResponse(t *testing.T) {
3347
rr := httptest.NewRecorder()
3448
writer := NewResponseModifierWriter(rr, claudeProvider(map[string]string{"upstream": "alias", "nested": "nested-alias"}), domain.ClientTypeClaude, false)

0 commit comments

Comments
 (0)