**fix(translator): ensure partial content is retained while skipping encrypted thoughtSignature**

- Updated handling of `thoughtSignature` across all translator modules to retain other content payloads if present.
- Adjusted logic for `thought_signature` and `inline_data` keys for consistent processing.
This commit is contained in:
Luis Pater
2025-11-27 00:52:17 +08:00
parent 36755421fe
commit c8cee547fd
3 changed files with 21 additions and 8 deletions

View File

@@ -105,14 +105,19 @@ func ConvertAntigravityResponseToOpenAI(_ context.Context, _ string, originalReq
partTextResult := partResult.Get("text") partTextResult := partResult.Get("text")
functionCallResult := partResult.Get("functionCall") functionCallResult := partResult.Get("functionCall")
thoughtSignatureResult := partResult.Get("thoughtSignature") thoughtSignatureResult := partResult.Get("thoughtSignature")
if !thoughtSignatureResult.Exists() {
thoughtSignatureResult = partResult.Get("thought_signature")
}
inlineDataResult := partResult.Get("inlineData") inlineDataResult := partResult.Get("inlineData")
if !inlineDataResult.Exists() { if !inlineDataResult.Exists() {
inlineDataResult = partResult.Get("inline_data") inlineDataResult = partResult.Get("inline_data")
} }
// Handle thoughtSignature - this is encrypted reasoning content that should not be exposed to the client hasThoughtSignature := thoughtSignatureResult.Exists() && thoughtSignatureResult.String() != ""
if thoughtSignatureResult.Exists() && thoughtSignatureResult.String() != "" { hasContentPayload := partTextResult.Exists() || functionCallResult.Exists() || inlineDataResult.Exists()
// Skip thoughtSignature processing - it's internal encrypted data
// Ignore encrypted thoughtSignature but keep any actual content in the same part.
if hasThoughtSignature && !hasContentPayload {
continue continue
} }

View File

@@ -105,14 +105,19 @@ func ConvertCliResponseToOpenAI(_ context.Context, _ string, originalRequestRawJ
partTextResult := partResult.Get("text") partTextResult := partResult.Get("text")
functionCallResult := partResult.Get("functionCall") functionCallResult := partResult.Get("functionCall")
thoughtSignatureResult := partResult.Get("thoughtSignature") thoughtSignatureResult := partResult.Get("thoughtSignature")
if !thoughtSignatureResult.Exists() {
thoughtSignatureResult = partResult.Get("thought_signature")
}
inlineDataResult := partResult.Get("inlineData") inlineDataResult := partResult.Get("inlineData")
if !inlineDataResult.Exists() { if !inlineDataResult.Exists() {
inlineDataResult = partResult.Get("inline_data") inlineDataResult = partResult.Get("inline_data")
} }
// Handle thoughtSignature - this is encrypted reasoning content that should not be exposed to the client hasThoughtSignature := thoughtSignatureResult.Exists() && thoughtSignatureResult.String() != ""
if thoughtSignatureResult.Exists() && thoughtSignatureResult.String() != "" { hasContentPayload := partTextResult.Exists() || functionCallResult.Exists() || inlineDataResult.Exists()
// Skip thoughtSignature processing - it's internal encrypted data
// Ignore encrypted thoughtSignature but keep any actual content in the same part.
if hasThoughtSignature && !hasContentPayload {
continue continue
} }

View File

@@ -116,8 +116,11 @@ func ConvertGeminiResponseToOpenAI(_ context.Context, _ string, originalRequestR
thoughtSignatureResult = partResult.Get("thought_signature") thoughtSignatureResult = partResult.Get("thought_signature")
} }
// Skip thoughtSignature parts (encrypted reasoning not exposed downstream). hasThoughtSignature := thoughtSignatureResult.Exists() && thoughtSignatureResult.String() != ""
if thoughtSignatureResult.Exists() && thoughtSignatureResult.String() != "" { hasContentPayload := partTextResult.Exists() || functionCallResult.Exists() || inlineDataResult.Exists()
// Skip pure thoughtSignature parts but keep any actual payload in the same part.
if hasThoughtSignature && !hasContentPayload {
continue continue
} }