diff --git a/internal/runtime/executor/kimi_executor.go b/internal/runtime/executor/kimi_executor.go index 7bf6078d..a3fe0f28 100644 --- a/internal/runtime/executor/kimi_executor.go +++ b/internal/runtime/executor/kimi_executor.go @@ -502,11 +502,10 @@ func moveKimiToolOutputImagesToUserMessages(body []byte) ([]byte, error) { } func splitKimiStructuredToolOutput(content gjson.Result) (string, []kimiToolOutputImage, bool) { - if content.Type != gjson.String { - return "", nil, false + structured := content + if content.Type == gjson.String { + structured = gjson.Parse(content.String()) } - - structured := gjson.Parse(content.String()) var parts []gjson.Result switch { case structured.IsArray(): @@ -538,10 +537,11 @@ func splitKimiStructuredToolOutput(content gjson.Result) (string, []kimiToolOutp textParts = append(textParts, part.Raw) continue } - images = append(images, kimiToolOutputImage{ - url: url, - detail: part.Get("detail").String(), - }) + detail := part.Get("detail").String() + if detail == "" { + detail = part.Get("image_url.detail").String() + } + images = append(images, kimiToolOutputImage{url: url, detail: detail}) textParts = append(textParts, "[image output attached in the following user message]") default: textParts = append(textParts, part.Raw) diff --git a/internal/runtime/executor/kimi_executor_test.go b/internal/runtime/executor/kimi_executor_test.go index 125c8812..e6dd49ca 100644 --- a/internal/runtime/executor/kimi_executor_test.go +++ b/internal/runtime/executor/kimi_executor_test.go @@ -417,8 +417,8 @@ func TestKimiExecutorMovesResponsesToolImagesToNativeUserContentForBothExecution if got := messages[3].Get("content.1.image_url.url").String(); got != imageURL { t.Fatalf("request %d native image URL = %q, want %q", requestIndex, got, imageURL) } - if got := messages[3].Get("content.1.image_url.detail").String(); got != "original" { - t.Fatalf("request %d native image detail = %q, want original", requestIndex, got) + if got := messages[3].Get("content.1.image_url.detail").String(); got != "high" { + t.Fatalf("request %d native image detail = %q, want high", requestIndex, got) } if got := messages[4].Get("content.0.text").String(); got != "next" { t.Fatalf("request %d final user text = %q, want next", requestIndex, got)