Selaa lähdekoodia

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.
0-don 2 viikkoa sitten
vanhempi
commit
e8e94e958f
2 muutettua tiedostoa jossa 6 lisäystä ja 2 poistoa
  1. 1 1
      service/convert.go
  2. 5 1
      service/openaicompat/chat_to_responses.go

+ 1 - 1
service/convert.go

@@ -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(),

+ 5 - 1
service/openaicompat/chat_to_responses.go

@@ -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: