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

@@ -231,10 +231,11 @@ Cloudflare Workers AI 所对应的 `type` 为 `cloudflare`。它特有的配置
Gemini 所对应的 `type``gemini`。它特有的配置字段如下:
| 名称 | 数据类型 | 填写要求 | 默认值 | 描述 |
| --------------------- | ------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `geminiSafetySetting` | map of string | 非必填 | - | Gemini AI 内容过滤和安全级别设定。参考[Safety settings](https://ai.google.dev/gemini-api/docs/safety-settings) |
| `apiVersion` | string | 非必填 | `v1beta` | 用于指定 API 的版本, 可选择 `v1``v1beta` 。 版本差异请参考[API versions explained](https://ai.google.dev/gemini-api/docs/api-versions)。 |
| 名称 | 数据类型 | 填写要求 | 默认值 | 描述 |
| ---------------------- | ------------- | -------- | -------- | ------------------------------------------------------------ |
| `geminiSafetySetting` | map of string | 非必填 | - | Gemini AI 内容过滤和安全级别设定。参考[Safety settings](https://ai.google.dev/gemini-api/docs/safety-settings) |
| `apiVersion` | string | 非必填 | `v1beta` | 用于指定 API 的版本, 可选择 `v1``v1beta` 。 版本差异请参考[API versions explained](https://ai.google.dev/gemini-api/docs/api-versions)。 |
| `geminiThinkingBudget` | number | 非必填 | - | gemini2.5系列的参数0是不开启思考-1动态调整具体参数指可参考官网 |
#### DeepL

View File

@@ -200,6 +200,8 @@ For Gemini, the corresponding `type` is `gemini`. Its unique configuration field
| Name | Data Type | Filling Requirements | Default Value | Description |
|---------------------|----------|----------------------|---------------|---------------------------------------------------------------------------------------------------------|
| `geminiSafetySetting` | map of string | Optional | - | Gemini AI content filtering and safety level settings. Refer to [Safety settings](https://ai.google.dev/gemini-api/docs/safety-settings). |
| `apiVersion` | string | 非必填 | `v1beta` | To specify the version of the API, you can choose either 'v1' or 'v1beta'. Version differences refer to https://ai.google.dev/gemini-api/docs/api-versions |
| `geminiThinkingBudget` | number | 非必填 | - | The parameters of the gemini2.5 series: 0 indicates no thinking mode, -1 represents dynamic adjustment. For specific parameter references, please refer to the official website |
### DeepL

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()