History

fix(runtime): treat non-empty finishReason as terminal

hkfires committed 11 months ago

Commit d32bb9d1 parent 8356b351 file · +6 −5Browse files

Unified · Split

internal/runtime/executor/usage_helpers.go+6−5
@@ -486,7 +486,7 @@ func FilterSSEUsageMetadata(payload []byte) []byte { · 485 unmodified lines
486 return bytes.Join(lines, []byte("\n"))486 return bytes.Join(lines, []byte("\n"))
487}487}
488 488
489// StripUsageMetadataFromJSON drops usageMetadata unless finishReason is "stop".489// StripUsageMetadataFromJSON drops usageMetadata unless finishReason is present (terminal).
490// It handles both formats:490// It handles both formats:
491// - Aistudio: candidates.0.finishReason491// - Aistudio: candidates.0.finishReason
492// - Antigravity: response.candidates.0.finishReason492// - Antigravity: response.candidates.0.finishReason
@@ -501,15 +501,15 @@ func StripUsageMetadataFromJSON(rawJSON []byte) ([]byte, bool) { · 8 unmodified lines
501 if !finishReason.Exists() {501 if !finishReason.Exists() {
502 finishReason = gjson.GetBytes(jsonBytes, "response.candidates.0.finishReason")502 finishReason = gjson.GetBytes(jsonBytes, "response.candidates.0.finishReason")
503 }503 }
504 stopReason := finishReason.Exists() && strings.ToLower(strings.TrimSpace(finishReason.String())) == "stop"504 terminalReason := finishReason.Exists() && strings.TrimSpace(finishReason.String()) != ""
505 505
506 usageMetadata := gjson.GetBytes(jsonBytes, "usageMetadata")506 usageMetadata := gjson.GetBytes(jsonBytes, "usageMetadata")
507 if !usageMetadata.Exists() {507 if !usageMetadata.Exists() {
508 usageMetadata = gjson.GetBytes(jsonBytes, "response.usageMetadata")508 usageMetadata = gjson.GetBytes(jsonBytes, "response.usageMetadata")
509 }509 }
510 510
511 // Stop chunk: keep as-is.511 // Terminal chunk: keep as-is.
512 if stopReason {512 if terminalReason {
513 return rawJSON, false513 return rawJSON, false
514 }514 }
515 515
@@ -556,7 +556,8 @@ func isStopChunkWithoutUsage(jsonBytes []byte) bool { · 40 unmodified lines
556 if !finishReason.Exists() {556 if !finishReason.Exists() {
557 finishReason = gjson.GetBytes(jsonBytes, "response.candidates.0.finishReason")557 finishReason = gjson.GetBytes(jsonBytes, "response.candidates.0.finishReason")
558 }558 }
559 if !finishReason.Exists() || strings.ToLower(strings.TrimSpace(finishReason.String())) != "stop" {559 trimmed := strings.TrimSpace(finishReason.String())
560 if !finishReason.Exists() || trimmed == "" {
560 return false561 return false
561 }562 }
562 return !hasUsageMetadata(jsonBytes)563 return !hasUsageMetadata(jsonBytes)