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 86cf19f8..1fb5ca1f 100644 --- a/internal/translator/openai/openai/responses/openai_openai-responses_request.go +++ b/internal/translator/openai/openai/responses/openai_openai-responses_request.go @@ -68,6 +68,9 @@ func ConvertOpenAIResponsesRequestToOpenAIChatCompletions(modelName string, inpu case "message", "": // Handle regular message conversion role := item.Get("role").String() + if role == "developer" { + role = "user" + } message := `{"role":"","content":""}` message, _ = sjson.Set(message, "role", role) @@ -167,7 +170,8 @@ func ConvertOpenAIResponsesRequestToOpenAIChatCompletions(modelName string, inpu // Only function tools need structural conversion because Chat Completions nests details under "function". toolType := tool.Get("type").String() if toolType != "" && toolType != "function" && tool.IsObject() { - chatCompletionsTools = append(chatCompletionsTools, tool.Value()) + // Almost all providers lack built-in tools, so we just ignore them. + // chatCompletionsTools = append(chatCompletionsTools, tool.Value()) return true }