diff --git a/internal/translator/openai/openai/responses/openai_openai-responses_request.go b/internal/translator/openai/openai/responses/openai_openai-responses_request.go index 35445163..9a64798b 100644 --- a/internal/translator/openai/openai/responses/openai_openai-responses_request.go +++ b/internal/translator/openai/openai/responses/openai_openai-responses_request.go @@ -70,7 +70,7 @@ func ConvertOpenAIResponsesRequestToOpenAIChatCompletions(modelName string, inpu if role == "developer" { role = "user" } - message := `{"role":"","content":""}` + message := `{"role":"","content":[]}` message, _ = sjson.Set(message, "role", role) if content := item.Get("content"); content.Exists() && content.IsArray() { @@ -84,20 +84,16 @@ func ConvertOpenAIResponsesRequestToOpenAIChatCompletions(modelName string, inpu } switch contentType { - case "input_text": + case "input_text", "output_text": text := contentItem.Get("text").String() - if messageContent != "" { - messageContent += "\n" + text - } else { - messageContent = text - } - case "output_text": - text := contentItem.Get("text").String() - if messageContent != "" { - messageContent += "\n" + text - } else { - messageContent = text - } + contentPart := `{"type":"text","text":""}` + contentPart, _ = sjson.Set(contentPart, "text", text) + message, _ = sjson.SetRaw(message, "content.-1", contentPart) + case "input_image": + imageURL := contentItem.Get("image_url").String() + contentPart := `{"type":"image_url","image_url":{"url":""}}` + contentPart, _ = sjson.Set(contentPart, "image_url.url", imageURL) + message, _ = sjson.SetRaw(message, "content.-1", contentPart) } return true })