49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"go.wit.com/lib/protobuf/chatpb"
|
|
"google.golang.org/genai"
|
|
)
|
|
|
|
func convertToPB(resp *genai.GenerateContentResponse) *chatpb.ChatEntry {
|
|
entry := &chatpb.ChatEntry{}
|
|
|
|
if resp == nil || len(resp.Candidates) == 0 || resp.Candidates[0].Content == nil {
|
|
return entry
|
|
}
|
|
|
|
content := resp.Candidates[0].Content
|
|
for _, part := range content.Parts {
|
|
if part.Text != "" {
|
|
entry.Parts = append(entry.Parts, &chatpb.Part{
|
|
PartType: &chatpb.Part_Text{Text: part.Text},
|
|
})
|
|
}
|
|
if fc := part.FunctionCall; fc != nil {
|
|
fmt.Printf("Gemini API requested to execute command: %s\n", fc.Name)
|
|
entry.Parts = append(entry.Parts, &chatpb.Part{
|
|
PartType: &chatpb.Part_FunctionCall{
|
|
FunctionCall: &chatpb.FunctionCall{
|
|
Name: fc.Name,
|
|
Args: &chatpb.ArgsInfo{}, // TODO: Properly map args from fc.Args map[string]any
|
|
},
|
|
},
|
|
})
|
|
}
|
|
if fr := part.FunctionResponse; fr != nil {
|
|
// Convert the FunctionResponse to the protobuf equivalent
|
|
entry.Parts = append(entry.Parts, &chatpb.Part{
|
|
PartType: &chatpb.Part_FunctionResponse{
|
|
FunctionResponse: &chatpb.FunctionResponse{
|
|
Name: fr.Name,
|
|
// TODO: Properly map the response content
|
|
},
|
|
},
|
|
})
|
|
}
|
|
}
|
|
return entry
|
|
}
|