fix(provider/gemini): prevent empty parts in assistant messages

Tom X Nguyen created

Change summary

internal/llm/provider/gemini.go | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)

Detailed changes

internal/llm/provider/gemini.go 🔗

@@ -69,19 +69,16 @@ func (g *geminiClient) convertMessages(messages []message.Message) []*genai.Cont
 				Role:  "user",
 			})
 		case message.Assistant:
-			content := &genai.Content{
-				Role:  "model",
-				Parts: []*genai.Part{},
-			}
+			var assistantParts []*genai.Part
 
 			if msg.Content().String() != "" {
-				content.Parts = append(content.Parts, &genai.Part{Text: msg.Content().String()})
+				assistantParts = append(assistantParts, &genai.Part{Text: msg.Content().String()})
 			}
 
 			if len(msg.ToolCalls()) > 0 {
 				for _, call := range msg.ToolCalls() {
 					args, _ := parseJsonToMap(call.Input)
-					content.Parts = append(content.Parts, &genai.Part{
+					assistantParts = append(assistantParts, &genai.Part{
 						FunctionCall: &genai.FunctionCall{
 							Name: call.Name,
 							Args: args,
@@ -90,7 +87,12 @@ func (g *geminiClient) convertMessages(messages []message.Message) []*genai.Cont
 				}
 			}
 
-			history = append(history, content)
+			if len(assistantParts) > 0 {
+				history = append(history, &genai.Content{
+					Role:  "model",
+					Parts: assistantParts,
+				})
+			}
 
 		case message.Tool:
 			for _, result := range msg.ToolResults() {