diff --git a/plugins/wasm-go/extensions/ai-proxy/README.md b/plugins/wasm-go/extensions/ai-proxy/README.md index a6c5343f6..bb42b7b07 100644 --- a/plugins/wasm-go/extensions/ai-proxy/README.md +++ b/plugins/wasm-go/extensions/ai-proxy/README.md @@ -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 diff --git a/plugins/wasm-go/extensions/ai-proxy/README_EN.md b/plugins/wasm-go/extensions/ai-proxy/README_EN.md index 3e3206e58..e337b1b13 100644 --- a/plugins/wasm-go/extensions/ai-proxy/README_EN.md +++ b/plugins/wasm-go/extensions/ai-proxy/README_EN.md @@ -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 diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/gemini.go b/plugins/wasm-go/extensions/ai-proxy/provider/gemini.go index b3a9499f7..7e25ca7ee 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/gemini.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/gemini.go @@ -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 { diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/provider.go b/plugins/wasm-go/extensions/ai-proxy/provider/provider.go index a36d9f029..8050db6ae 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/provider.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/provider.go @@ -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()