feat: support gemini SystemInstructions #408
This commit is contained in:
@@ -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",
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user