From e9d3dfbce1788b82f5982ad2a2d1db3160dbd896 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=B0ing?= Date: Sat, 11 Jul 2026 18:15:52 +0800 Subject: [PATCH] =?UTF-8?q?fix(translator):=20=E5=B7=A5=E5=85=B7=E8=BE=93?= =?UTF-8?q?=E5=87=BA=E4=B8=8E=20custom=20input=20=E8=A7=A3=E5=8C=85?= =?UTF-8?q?=E7=9A=84=E5=81=A5=E5=A3=AE=E6=80=A7=E6=94=B9=E8=BF=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 采纳 review 意见:responsesToolOutputText 支持纯字符串数组元素, 避免非 content-parts 形态的输出被静默丢弃;unwrapCustomToolInput 在 input 为对象/数组时以原始 JSON 解包,不再仅限字符串。 Ref #4219 --- .../openai/responses/openai_openai-responses_tools.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/internal/translator/openai/openai/responses/openai_openai-responses_tools.go b/internal/translator/openai/openai/responses/openai_openai-responses_tools.go index 5dd8c6e5..44143721 100644 --- a/internal/translator/openai/openai/responses/openai_openai-responses_tools.go +++ b/internal/translator/openai/openai/responses/openai_openai-responses_tools.go @@ -120,6 +120,10 @@ func responsesToolOutputText(output gjson.Result) string { if output.IsArray() { var b strings.Builder output.ForEach(func(_, part gjson.Result) bool { + if part.Type == gjson.String { + b.WriteString(part.String()) + return true + } if text := part.Get("text"); text.Exists() { b.WriteString(text.String()) } @@ -168,8 +172,11 @@ func responsesCustomToolNames(requestRawJSON []byte) map[string]struct{} { // function-call arguments produced for a converted custom tool; it falls back // to the raw arguments when the wrapper is absent. func unwrapCustomToolInput(arguments string) string { - if v := gjson.Get(arguments, "input"); v.Exists() && v.Type == gjson.String { - return v.String() + if v := gjson.Get(arguments, "input"); v.Exists() { + if v.Type == gjson.String { + return v.String() + } + return v.Raw } return arguments }