feat: support gemini SystemInstructions #408

This commit is contained in:
CalciumIon
2024-12-16 20:19:29 +08:00
parent aab3887d2c
commit e6c6bbdef9
3 changed files with 36 additions and 29 deletions

View File

@@ -5,7 +5,7 @@ const (
) )
var ModelList = []string{ var ModelList = []string{
"gemini-1.5-pro-latest", "gemini-1.5-flash-latest", "gemini-ultra", "gemini-1.5-pro-latest", "gemini-1.5-flash-latest",
"gemini-1.5-pro-exp-0827", "gemini-1.5-flash-exp-0827", "gemini-1.5-pro-exp-0827", "gemini-1.5-flash-exp-0827",
"gemini-exp-1114", "gemini-exp-1206", "gemini-exp-1114", "gemini-exp-1206",
"gemini-2.0-flash-exp", "gemini-2.0-flash-exp",

View File

@@ -1,10 +1,11 @@
package gemini package gemini
type GeminiChatRequest struct { type GeminiChatRequest struct {
Contents []GeminiChatContent `json:"contents"` Contents []GeminiChatContent `json:"contents"`
SafetySettings []GeminiChatSafetySettings `json:"safety_settings,omitempty"` SafetySettings []GeminiChatSafetySettings `json:"safety_settings,omitempty"`
GenerationConfig GeminiChatGenerationConfig `json:"generation_config,omitempty"` GenerationConfig GeminiChatGenerationConfig `json:"generation_config,omitempty"`
Tools []GeminiChatTools `json:"tools,omitempty"` Tools []GeminiChatTools `json:"tools,omitempty"`
SystemInstructions *GeminiPart `json:"system_instructions,omitempty"`
} }
type GeminiInlineData struct { type GeminiInlineData struct {

View File

@@ -72,21 +72,27 @@ func CovertGemini2OpenAI(textRequest dto.GeneralOpenAIRequest) *GeminiChatReques
}, },
} }
} }
shouldAddDummyModelMessage := false //shouldAddDummyModelMessage := false
for _, message := range textRequest.Messages { for _, message := range textRequest.Messages {
if message.Role == "system" {
geminiRequest.SystemInstructions = &GeminiPart{
Text: message.StringContent(),
}
continue
}
content := GeminiChatContent{ content := GeminiChatContent{
Role: message.Role, Role: message.Role,
Parts: []GeminiPart{ //Parts: []GeminiPart{
{ // {
Text: message.StringContent(), // Text: message.StringContent(),
}, // },
}, //},
} }
openaiContent := message.ParseContent() openaiContent := message.ParseContent()
var parts []GeminiPart var parts []GeminiPart
imageNum := 0 imageNum := 0
for _, part := range openaiContent { for _, part := range openaiContent {
if part.Type == dto.ContentTypeText { if part.Type == dto.ContentTypeText {
parts = append(parts, GeminiPart{ parts = append(parts, GeminiPart{
Text: part.Text, Text: part.Text,
@@ -127,24 +133,24 @@ func CovertGemini2OpenAI(textRequest dto.GeneralOpenAIRequest) *GeminiChatReques
content.Role = "model" content.Role = "model"
} }
// Converting system prompt to prompt from user for the same reason // Converting system prompt to prompt from user for the same reason
if content.Role == "system" { //if content.Role == "system" {
content.Role = "user" // content.Role = "user"
shouldAddDummyModelMessage = true // shouldAddDummyModelMessage = true
} //}
geminiRequest.Contents = append(geminiRequest.Contents, content) geminiRequest.Contents = append(geminiRequest.Contents, content)
//
// If a system message is the last message, we need to add a dummy model message to make gemini happy //// If a system message is the last message, we need to add a dummy model message to make gemini happy
if shouldAddDummyModelMessage { //if shouldAddDummyModelMessage {
geminiRequest.Contents = append(geminiRequest.Contents, GeminiChatContent{ // geminiRequest.Contents = append(geminiRequest.Contents, GeminiChatContent{
Role: "model", // Role: "model",
Parts: []GeminiPart{ // Parts: []GeminiPart{
{ // {
Text: "Okay", // Text: "Okay",
}, // },
}, // },
}) // })
shouldAddDummyModelMessage = false // shouldAddDummyModelMessage = false
} //}
} }
return &geminiRequest return &geminiRequest
} }