From d29ec9552632ae2c8bb22de4a617c590e13debfd Mon Sep 17 00:00:00 2001 From: Vino Date: Wed, 21 Jan 2026 16:45:50 +0800 Subject: [PATCH] fix(translator): ensure system message is only added if it contains content --- .../translator/openai/claude/openai_claude_request.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/translator/openai/claude/openai_claude_request.go b/internal/translator/openai/claude/openai_claude_request.go index c268ec62..dc832e9c 100644 --- a/internal/translator/openai/claude/openai_claude_request.go +++ b/internal/translator/openai/claude/openai_claude_request.go @@ -89,12 +89,14 @@ func ConvertClaudeRequestToOpenAI(modelName string, inputRawJSON []byte, stream // Handle system message first systemMsgJSON := `{"role":"system","content":[]}` + hasSystemContent := false if system := root.Get("system"); system.Exists() { if system.Type == gjson.String { if system.String() != "" { oldSystem := `{"type":"text","text":""}` oldSystem, _ = sjson.Set(oldSystem, "text", system.String()) systemMsgJSON, _ = sjson.SetRaw(systemMsgJSON, "content.-1", oldSystem) + hasSystemContent = true } } else if system.Type == gjson.JSON { if system.IsArray() { @@ -102,12 +104,16 @@ func ConvertClaudeRequestToOpenAI(modelName string, inputRawJSON []byte, stream for i := 0; i < len(systemResults); i++ { if contentItem, ok := convertClaudeContentPart(systemResults[i]); ok { systemMsgJSON, _ = sjson.SetRaw(systemMsgJSON, "content.-1", contentItem) + hasSystemContent = true } } } } } - messagesJSON, _ = sjson.SetRaw(messagesJSON, "-1", systemMsgJSON) + // Only add system message if it has content + if hasSystemContent { + messagesJSON, _ = sjson.SetRaw(messagesJSON, "-1", systemMsgJSON) + } // Process Anthropic messages if messages := root.Get("messages"); messages.Exists() && messages.IsArray() {