- Introduced a new `FunctionResponse` type to encapsulate function call responses, improving the clarity of data handling. - Updated the `GeminiPart` struct to include the new `FunctionResponse` field, allowing for better representation of function call results in Gemini requests. - Modified the `CovertGemini2OpenAI` function to handle tool calls more effectively by setting the message role and appending function responses to the Gemini parts, enhancing the integration with OpenAI and Gemini systems.
86 lines
2.8 KiB
Go
86 lines
2.8 KiB
Go
package gemini
|
|
|
|
type GeminiChatRequest struct {
|
|
Contents []GeminiChatContent `json:"contents"`
|
|
SafetySettings []GeminiChatSafetySettings `json:"safety_settings,omitempty"`
|
|
GenerationConfig GeminiChatGenerationConfig `json:"generation_config,omitempty"`
|
|
Tools []GeminiChatTools `json:"tools,omitempty"`
|
|
SystemInstructions *GeminiChatContent `json:"system_instruction,omitempty"`
|
|
}
|
|
|
|
type GeminiInlineData struct {
|
|
MimeType string `json:"mimeType"`
|
|
Data string `json:"data"`
|
|
}
|
|
|
|
type FunctionCall struct {
|
|
FunctionName string `json:"name"`
|
|
Arguments any `json:"args"`
|
|
}
|
|
|
|
type FunctionResponse struct {
|
|
Name string `json:"name"`
|
|
Response any `json:"response"`
|
|
}
|
|
|
|
type GeminiPart struct {
|
|
Text string `json:"text,omitempty"`
|
|
InlineData *GeminiInlineData `json:"inlineData,omitempty"`
|
|
FunctionCall *FunctionCall `json:"functionCall,omitempty"`
|
|
FunctionResponse *FunctionResponse `json:"functionResponse,omitempty"`
|
|
}
|
|
|
|
type GeminiChatContent struct {
|
|
Role string `json:"role,omitempty"`
|
|
Parts []GeminiPart `json:"parts"`
|
|
}
|
|
|
|
type GeminiChatSafetySettings struct {
|
|
Category string `json:"category"`
|
|
Threshold string `json:"threshold"`
|
|
}
|
|
|
|
type GeminiChatTools struct {
|
|
GoogleSearch any `json:"googleSearch,omitempty"`
|
|
FunctionDeclarations any `json:"functionDeclarations,omitempty"`
|
|
}
|
|
|
|
type GeminiChatGenerationConfig struct {
|
|
Temperature float64 `json:"temperature,omitempty"`
|
|
TopP float64 `json:"topP,omitempty"`
|
|
TopK float64 `json:"topK,omitempty"`
|
|
MaxOutputTokens uint `json:"maxOutputTokens,omitempty"`
|
|
CandidateCount int `json:"candidateCount,omitempty"`
|
|
StopSequences []string `json:"stopSequences,omitempty"`
|
|
ResponseMimeType string `json:"responseMimeType,omitempty"`
|
|
ResponseSchema any `json:"responseSchema,omitempty"`
|
|
}
|
|
|
|
type GeminiChatCandidate struct {
|
|
Content GeminiChatContent `json:"content"`
|
|
FinishReason string `json:"finishReason"`
|
|
Index int64 `json:"index"`
|
|
SafetyRatings []GeminiChatSafetyRating `json:"safetyRatings"`
|
|
}
|
|
|
|
type GeminiChatSafetyRating struct {
|
|
Category string `json:"category"`
|
|
Probability string `json:"probability"`
|
|
}
|
|
|
|
type GeminiChatPromptFeedback struct {
|
|
SafetyRatings []GeminiChatSafetyRating `json:"safetyRatings"`
|
|
}
|
|
|
|
type GeminiChatResponse struct {
|
|
Candidates []GeminiChatCandidate `json:"candidates"`
|
|
PromptFeedback GeminiChatPromptFeedback `json:"promptFeedback"`
|
|
UsageMetadata GeminiUsageMetadata `json:"usageMetadata"`
|
|
}
|
|
|
|
type GeminiUsageMetadata struct {
|
|
PromptTokenCount int `json:"promptTokenCount"`
|
|
CandidatesTokenCount int `json:"candidatesTokenCount"`
|
|
TotalTokenCount int `json:"totalTokenCount"`
|
|
}
|