From 41a14558740b2e52f577d1ca04bd6ead30c2f0f4 Mon Sep 17 00:00:00 2001 From: Xijun Dai Date: Tue, 1 Jul 2025 21:44:34 +0800 Subject: [PATCH] fix(ai-proxy): restrict the `stream_options` parameter to be effective only in the openai/v1/chatcompletions (#2524) Signed-off-by: Xijun Dai --- plugins/wasm-go/extensions/ai-proxy/main.go | 5 +++-- plugins/wasm-go/extensions/ai-proxy/provider/doubao.go | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/wasm-go/extensions/ai-proxy/main.go b/plugins/wasm-go/extensions/ai-proxy/main.go index a31cf435d..4c4b52ca6 100644 --- a/plugins/wasm-go/extensions/ai-proxy/main.go +++ b/plugins/wasm-go/extensions/ai-proxy/main.go @@ -161,7 +161,8 @@ func onHttpRequestBody(ctx wrapper.HttpContext, pluginConfig config.PluginConfig if settingErr != nil { log.Errorf("failed to replace request body by custom settings: %v", settingErr) } - if providerConfig.IsOpenAIProtocol() { + // 仅 /v1/chat/completions 和 /v1/completions 接口支持 stream_options 参数 + if providerConfig.IsOpenAIProtocol() && (apiName == provider.ApiNameChatCompletion || apiName == provider.ApiNameCompletion) { newBody = normalizeOpenAiRequestBody(newBody) } log.Debugf("[onHttpRequestBody] newBody=%s", newBody) @@ -315,7 +316,7 @@ func onHttpResponseBody(ctx wrapper.HttpContext, pluginConfig config.PluginConfi func normalizeOpenAiRequestBody(body []byte) []byte { var err error // Default setting include_usage. - if gjson.GetBytes(body, "stream").Bool() { + if gjson.GetBytes(body, "stream").Bool() && (!gjson.GetBytes(body, "stream_options").Exists() || !gjson.GetBytes(body, "stream_options.include_usage").Exists()) { body, err = sjson.SetBytes(body, "stream_options.include_usage", true) if err != nil { log.Errorf("set include_usage failed, err:%s", err) diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/doubao.go b/plugins/wasm-go/extensions/ai-proxy/provider/doubao.go index f32490ea6..f63fc69db 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/doubao.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/doubao.go @@ -82,7 +82,7 @@ func (m *doubaoProvider) TransformRequestBody(ctx wrapper.HttpContext, apiName A // 移除火山 responses 接口暂时不支持的参数 // 参考: https://www.volcengine.com/docs/82379/1569618 // TODO: 这里应该用 DTO 处理 - for _, param := range []string{"parallel_tool_calls", "tool_choice", "stream_options"} { + for _, param := range []string{"parallel_tool_calls", "tool_choice"} { body, err = sjson.DeleteBytes(body, param) if err != nil { log.Warnf("[doubao] failed to delete %s in request body, err: %v", param, err)