fix: normalize input_text content blocks in Claude-to-OpenAI conversion

Clients like OpenClaw send input_text content blocks (a Responses API
type) through /v1/messages. The Claude-to-OpenAI converter silently
drops unknown types, so the message arrives empty at the upstream,
causing "Invalid value: 'input_text'" errors.

Map input_text to text since they share the same structure.
This commit is contained in:
0-don
2026-02-18 18:24:59 +01:00
parent f77381cc75
commit e8e94e958f
2 changed files with 6 additions and 2 deletions

View File

@@ -127,7 +127,7 @@ func ClaudeToOpenAIRequest(claudeRequest dto.ClaudeRequest, info *relaycommon.Re
for _, mediaMsg := range contents {
switch mediaMsg.Type {
case "text":
case "text", "input_text":
message := dto.MediaContent{
Type: "text",
Text: mediaMsg.GetText(),

View File

@@ -214,8 +214,12 @@ func ChatCompletionsRequestToResponsesRequest(req *dto.GeneralOpenAIRequest) (*d
for _, part := range parts {
switch part.Type {
case dto.ContentTypeText:
textType := "input_text"
if role == "assistant" {
textType = "output_text"
}
contentParts = append(contentParts, map[string]any{
"type": "input_text",
"type": textType,
"text": part.Text,
})
case dto.ContentTypeImageURL: