Explorar el Código

fix: gemini support empty role mapping to user (#427)

zijiren hace 1 mes
padre
commit
d7bd1dc0de

+ 4 - 0
core/relay/adaptor/anthropic/gemini.go

@@ -442,6 +442,10 @@ func convertGeminiContent(
 	msg := relaymodel.ClaudeMessage{}
 
 	// Map role
+	if content.Role == "" {
+		content.Role = "user"
+	}
+
 	switch content.Role {
 	case "model":
 		msg.Role = "assistant"

+ 26 - 0
core/relay/adaptor/gemini/main.go

@@ -90,6 +90,27 @@ func ensureThoughtSignature(node *ast.Node) error {
 	})
 }
 
+func ensureRole(node *ast.Node) error {
+	contents := node.Get("contents")
+	if !contents.Exists() {
+		return nil
+	}
+
+	return contents.ForEach(func(_ ast.Sequence, content *ast.Node) bool {
+		role := content.Get("role")
+		if !role.Exists() {
+			_, _ = content.Set("role", ast.NewString("user"))
+		} else {
+			val, _ := role.String()
+			if val == "" {
+				_, _ = content.Set("role", ast.NewString("user"))
+			}
+		}
+
+		return true
+	})
+}
+
 func NativeConvertRequest(
 	meta *meta.Meta,
 	req *http.Request,
@@ -105,6 +126,11 @@ func NativeConvertRequest(
 		return adaptor.ConvertResult{}, err
 	}
 
+	err = ensureRole(&node)
+	if err != nil {
+		return adaptor.ConvertResult{}, err
+	}
+
 	for _, callback := range callback {
 		if callback == nil {
 			continue

+ 4 - 0
core/relay/adaptor/openai/gemini.go

@@ -533,6 +533,10 @@ func convertGeminiContentToOpenAI(
 
 	// Map role
 	role := content.Role
+	if role == "" {
+		role = "user"
+	}
+
 	switch role {
 	case "model":
 		role = "assistant"