mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-03 13:00:52 +08:00
fix(translator): update HasValidSignature to require modelName parameter for improved validation
This commit is contained in:
4
internal/cache/signature_cache.go
vendored
4
internal/cache/signature_cache.go
vendored
@@ -186,8 +186,8 @@ func ClearSignatureCache(sessionID string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// HasValidSignature checks if a signature is valid (non-empty and long enough)
|
// HasValidSignature checks if a signature is valid (non-empty and long enough)
|
||||||
func HasValidSignature(signature string) bool {
|
func HasValidSignature(modelName, signature string) bool {
|
||||||
return signature != "" && len(signature) >= MinValidSignatureLen
|
return (signature != "" && len(signature) >= MinValidSignatureLen) || (signature == "skip_thought_signature_validator" && GetModelGroup(modelName) == "gemini")
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetModelGroup(modelName string) string {
|
func GetModelGroup(modelName string) string {
|
||||||
|
|||||||
2
internal/cache/signature_cache_test.go
vendored
2
internal/cache/signature_cache_test.go
vendored
@@ -132,7 +132,7 @@ func TestHasValidSignature(t *testing.T) {
|
|||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
result := HasValidSignature(tt.signature)
|
result := HasValidSignature("claude-sonnet-4-5-thinking", tt.signature)
|
||||||
if result != tt.expected {
|
if result != tt.expected {
|
||||||
t.Errorf("HasValidSignature(%q) = %v, expected %v", tt.signature, result, tt.expected)
|
t.Errorf("HasValidSignature(%q) = %v, expected %v", tt.signature, result, tt.expected)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -156,19 +156,19 @@ func ConvertClaudeRequestToAntigravity(modelName string, inputRawJSON []byte, _
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if cache.HasValidSignature(clientSignature) {
|
if cache.HasValidSignature(modelName, clientSignature) {
|
||||||
signature = clientSignature
|
signature = clientSignature
|
||||||
}
|
}
|
||||||
// log.Debugf("Using client-provided signature for thinking block")
|
// log.Debugf("Using client-provided signature for thinking block")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store for subsequent tool_use in the same message
|
// Store for subsequent tool_use in the same message
|
||||||
if cache.HasValidSignature(signature) {
|
if cache.HasValidSignature(modelName, signature) {
|
||||||
currentMessageThinkingSignature = signature
|
currentMessageThinkingSignature = signature
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skip trailing unsigned thinking blocks on last assistant message
|
// Skip trailing unsigned thinking blocks on last assistant message
|
||||||
isUnsigned := !cache.HasValidSignature(signature)
|
isUnsigned := !cache.HasValidSignature(modelName, signature)
|
||||||
|
|
||||||
// If unsigned, skip entirely (don't convert to text)
|
// If unsigned, skip entirely (don't convert to text)
|
||||||
// Claude requires assistant messages to start with thinking blocks when thinking is enabled
|
// Claude requires assistant messages to start with thinking blocks when thinking is enabled
|
||||||
@@ -223,7 +223,7 @@ func ConvertClaudeRequestToAntigravity(modelName string, inputRawJSON []byte, _
|
|||||||
// This is the approach used in opencode-google-antigravity-auth for Gemini
|
// This is the approach used in opencode-google-antigravity-auth for Gemini
|
||||||
// and also works for Claude through Antigravity API
|
// and also works for Claude through Antigravity API
|
||||||
const skipSentinel = "skip_thought_signature_validator"
|
const skipSentinel = "skip_thought_signature_validator"
|
||||||
if cache.HasValidSignature(currentMessageThinkingSignature) {
|
if cache.HasValidSignature(modelName, currentMessageThinkingSignature) {
|
||||||
partJSON, _ = sjson.Set(partJSON, "thoughtSignature", currentMessageThinkingSignature)
|
partJSON, _ = sjson.Set(partJSON, "thoughtSignature", currentMessageThinkingSignature)
|
||||||
} else {
|
} else {
|
||||||
// No valid signature - use skip sentinel to bypass validation
|
// No valid signature - use skip sentinel to bypass validation
|
||||||
|
|||||||
Reference in New Issue
Block a user