feat(ai-proxy): gemini model thinking support (#2712)

This commit is contained in:
NOBODY
2025-08-06 06:50:46 +08:00
committed by GitHub
parent 943fda0a9c
commit 5ee878198c
4 changed files with 25 additions and 4 deletions

View File

@@ -28,6 +28,12 @@ const (
geminiImageGenerationPath = "predict"
)
var geminiThinkingModels = map[string]bool{
"gemini-2.5-pro": true,
"gemini-2.5-flash": true,
"gemini-2.5-flash-lite": true,
}
type geminiProviderInitializer struct{}
func (g *geminiProviderInitializer) ValidateConfig(config *ProviderConfig) error {
@@ -365,6 +371,7 @@ func (g *geminiProvider) buildGeminiChatRequest(request *chatCompletionRequest)
Threshold: threshold,
})
}
geminiRequest := geminiGenerationContentRequest{
Contents: make([]geminiChatContent, 0, len(request.Messages)),
SafetySettings: safetySettings,
@@ -379,6 +386,13 @@ func (g *geminiProvider) buildGeminiChatRequest(request *chatCompletionRequest)
},
}
if geminiThinkingModels[request.Model] {
geminiRequest.GenerationConfig.ThinkingConfig = &geminiThinkingConfig{
IncludeThoughts: true,
ThinkingBudget: g.config.geminiThinkingBudget,
}
}
if request.Tools != nil {
functions := make([]function, 0, len(request.Tools))
for _, tool := range request.Tools {

View File

@@ -344,6 +344,9 @@ type ProviderConfig struct {
// @Title zh-CN Gemini AI内容过滤和安全级别设定
// @Description zh-CN 仅适用于 Gemini AI 服务。参考https://ai.google.dev/gemini-api/docs/safety-settings
geminiSafetySetting map[string]string `required:"false" yaml:"geminiSafetySetting" json:"geminiSafetySetting"`
// @Title zh-CN Gemini Thinking Budget 配置
// @Description zh-CN 仅适用于 Gemini AI 服务,用于控制思考预算
geminiThinkingBudget int64 `required:"false" yaml:"geminiThinkingBudget" json:"geminiThinkingBudget"`
// @Title zh-CN Vertex AI访问区域
// @Description zh-CN 仅适用于Vertex AI服务。如需查看支持的区域的完整列表请参阅https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations?hl=zh-cn#available-regions
vertexRegion string `required:"false" yaml:"vertexRegion" json:"vertexRegion"`
@@ -472,6 +475,7 @@ func (c *ProviderConfig) FromJson(json gjson.Result) {
c.geminiSafetySetting[k] = v.String()
}
}
c.geminiThinkingBudget = json.Get("geminiThinkingBudget").Int()
c.vertexRegion = json.Get("vertexRegion").String()
c.vertexProjectId = json.Get("vertexProjectId").String()
c.vertexAuthKey = json.Get("vertexAuthKey").String()