From 856343cfa66bccff25662eabf402ead035a9dbf8 Mon Sep 17 00:00:00 2001 From: Se7en Date: Sun, 1 Sep 2024 09:38:48 +0800 Subject: [PATCH] support failover for all models --- plugins/wasm-go/extensions/ai-proxy/provider/ai360.go | 2 +- plugins/wasm-go/extensions/ai-proxy/provider/baichuan.go | 2 +- plugins/wasm-go/extensions/ai-proxy/provider/baidu.go | 8 ++++---- plugins/wasm-go/extensions/ai-proxy/provider/claude.go | 2 +- .../wasm-go/extensions/ai-proxy/provider/cloudflare.go | 2 +- plugins/wasm-go/extensions/ai-proxy/provider/deepl.go | 2 +- plugins/wasm-go/extensions/ai-proxy/provider/deepseek.go | 2 +- plugins/wasm-go/extensions/ai-proxy/provider/gemini.go | 2 +- plugins/wasm-go/extensions/ai-proxy/provider/groq.go | 2 +- plugins/wasm-go/extensions/ai-proxy/provider/minimax.go | 2 +- plugins/wasm-go/extensions/ai-proxy/provider/mistral.go | 2 +- plugins/wasm-go/extensions/ai-proxy/provider/moonshot.go | 2 +- plugins/wasm-go/extensions/ai-proxy/provider/openai.go | 2 +- plugins/wasm-go/extensions/ai-proxy/provider/spark.go | 2 +- plugins/wasm-go/extensions/ai-proxy/provider/stepfun.go | 2 +- plugins/wasm-go/extensions/ai-proxy/provider/yi.go | 2 +- plugins/wasm-go/extensions/ai-proxy/provider/zhipuai.go | 2 +- 17 files changed, 20 insertions(+), 20 deletions(-) diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/ai360.go b/plugins/wasm-go/extensions/ai-proxy/provider/ai360.go index 00443fcf5e..ec116125b5 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/ai360.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/ai360.go @@ -49,7 +49,7 @@ func (m *ai360Provider) OnRequestHeaders(ctx wrapper.HttpContext, apiName ApiNam _ = util.OverwriteRequestHost(ai360Domain) _ = proxywasm.RemoveHttpRequestHeader("Accept-Encoding") _ = proxywasm.RemoveHttpRequestHeader("Content-Length") - _ = proxywasm.ReplaceHttpRequestHeader("Authorization", m.config.GetRandomToken()) + _ = proxywasm.ReplaceHttpRequestHeader("Authorization", ctx.GetContext(ApiTokenInUse).(string)) // Delay the header processing to allow changing streaming mode in OnRequestBody return types.HeaderStopIteration, nil } diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/baichuan.go b/plugins/wasm-go/extensions/ai-proxy/provider/baichuan.go index c16a8e4395..2a01f079f2 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/baichuan.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/baichuan.go @@ -49,7 +49,7 @@ func (m *baichuanProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName Api } _ = util.OverwriteRequestPath(baichuanChatCompletionPath) _ = util.OverwriteRequestHost(baichuanDomain) - _ = util.OverwriteRequestAuthorization("Bearer " + m.config.GetRandomToken()) + _ = util.OverwriteRequestAuthorization("Bearer " + ctx.GetContext(ApiTokenInUse).(string)) _ = proxywasm.RemoveHttpRequestHeader("Content-Length") return types.ActionContinue, nil } diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/baidu.go b/plugins/wasm-go/extensions/ai-proxy/provider/baidu.go index fc779d5306..a5b39c8d2c 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/baidu.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/baidu.go @@ -83,7 +83,7 @@ func (b *baiduProvider) OnRequestBody(ctx wrapper.HttpContext, apiName ApiName, return types.ActionContinue, errors.New("request model is empty") } // 根据模型重写requestPath - path := b.getRequestPath(request.Model) + path := b.getRequestPath(ctx, request.Model) _ = util.OverwriteRequestPath(path) if b.config.context == nil { @@ -126,7 +126,7 @@ func (b *baiduProvider) OnRequestBody(ctx wrapper.HttpContext, apiName ApiName, } request.Model = mappedModel ctx.SetContext(ctxKeyFinalRequestModel, request.Model) - path := b.getRequestPath(mappedModel) + path := b.getRequestPath(ctx, mappedModel) _ = util.OverwriteRequestPath(path) if b.config.context == nil { @@ -226,13 +226,13 @@ type baiduTextGenRequest struct { UserId string `json:"user_id,omitempty"` } -func (b *baiduProvider) getRequestPath(baiduModel string) string { +func (b *baiduProvider) getRequestPath(ctx wrapper.HttpContext, baiduModel string) string { // https://cloud.baidu.com/doc/WENXINWORKSHOP/s/clntwmv7t suffix, ok := baiduModelToPathSuffixMap[baiduModel] if !ok { suffix = baiduModel } - return fmt.Sprintf("/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/%s?access_token=%s", suffix, b.config.GetRandomToken()) + return fmt.Sprintf("/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/%s?access_token=%s", suffix, ctx.GetContext(ApiTokenInUse).(string)) } func (b *baiduProvider) setSystemContent(request *baiduTextGenRequest, content string) { diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/claude.go b/plugins/wasm-go/extensions/ai-proxy/provider/claude.go index 7bbbc93d79..3fdee70083 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/claude.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/claude.go @@ -108,7 +108,7 @@ func (c *claudeProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName ApiNa _ = util.OverwriteRequestPath(claudeChatCompletionPath) _ = util.OverwriteRequestHost(claudeDomain) - _ = proxywasm.ReplaceHttpRequestHeader("x-api-key", c.config.GetRandomToken()) + _ = proxywasm.ReplaceHttpRequestHeader("x-api-key", ctx.GetContext(ApiTokenInUse).(string)) if c.config.claudeVersion == "" { c.config.claudeVersion = defaultVersion diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/cloudflare.go b/plugins/wasm-go/extensions/ai-proxy/provider/cloudflare.go index 35f6f2dc78..720349c835 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/cloudflare.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/cloudflare.go @@ -49,7 +49,7 @@ func (c *cloudflareProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName A } _ = util.OverwriteRequestPath(strings.Replace(cloudflareChatCompletionPath, "{account_id}", c.config.cloudflareAccountId, 1)) _ = util.OverwriteRequestHost(cloudflareDomain) - _ = util.OverwriteRequestAuthorization("Bearer " + c.config.GetRandomToken()) + _ = util.OverwriteRequestAuthorization("Bearer " + ctx.GetContext(ApiTokenInUse).(string)) _ = proxywasm.RemoveHttpRequestHeader("Accept-Encoding") _ = proxywasm.RemoveHttpRequestHeader("Content-Length") diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/deepl.go b/plugins/wasm-go/extensions/ai-proxy/provider/deepl.go index 924746c8c9..dc40c621d4 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/deepl.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/deepl.go @@ -79,7 +79,7 @@ func (d *deeplProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName ApiNam return types.ActionContinue, errUnsupportedApiName } _ = util.OverwriteRequestPath(deeplChatCompletionPath) - _ = util.OverwriteRequestAuthorization("DeepL-Auth-Key " + d.config.GetRandomToken()) + _ = util.OverwriteRequestAuthorization("DeepL-Auth-Key " + ctx.GetContext(ApiTokenInUse).(string)) _ = proxywasm.RemoveHttpRequestHeader("Content-Length") _ = proxywasm.RemoveHttpRequestHeader("Accept-Encoding") return types.HeaderStopIteration, nil diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/deepseek.go b/plugins/wasm-go/extensions/ai-proxy/provider/deepseek.go index 8cb71462d2..99e778fb3f 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/deepseek.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/deepseek.go @@ -49,7 +49,7 @@ func (m *deepseekProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName Api } _ = util.OverwriteRequestPath(deepseekChatCompletionPath) _ = util.OverwriteRequestHost(deepseekDomain) - _ = util.OverwriteRequestAuthorization("Bearer " + m.config.GetRandomToken()) + _ = util.OverwriteRequestAuthorization("Bearer " + ctx.GetContext(ApiTokenInUse).(string)) _ = proxywasm.RemoveHttpRequestHeader("Content-Length") return types.ActionContinue, nil } diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/gemini.go b/plugins/wasm-go/extensions/ai-proxy/provider/gemini.go index 0d418c16a5..65596b4d2b 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/gemini.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/gemini.go @@ -52,7 +52,7 @@ func (g *geminiProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName ApiNa return types.ActionContinue, errUnsupportedApiName } - _ = proxywasm.ReplaceHttpRequestHeader(geminiApiKeyHeader, g.config.GetRandomToken()) + _ = proxywasm.ReplaceHttpRequestHeader(geminiApiKeyHeader, ctx.GetContext(ApiTokenInUse).(string)) _ = util.OverwriteRequestHost(geminiDomain) _ = proxywasm.RemoveHttpRequestHeader("Accept-Encoding") diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/groq.go b/plugins/wasm-go/extensions/ai-proxy/provider/groq.go index 644e450ee9..b41427a196 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/groq.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/groq.go @@ -47,7 +47,7 @@ func (m *groqProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName ApiName } _ = util.OverwriteRequestPath(groqChatCompletionPath) _ = util.OverwriteRequestHost(groqDomain) - _ = util.OverwriteRequestAuthorization("Bearer " + m.config.GetRandomToken()) + _ = util.OverwriteRequestAuthorization("Bearer " + ctx.GetContext(ApiTokenInUse).(string)) _ = proxywasm.RemoveHttpRequestHeader("Content-Length") return types.ActionContinue, nil } diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/minimax.go b/plugins/wasm-go/extensions/ai-proxy/provider/minimax.go index ded72d7b51..ceec72d8f3 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/minimax.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/minimax.go @@ -79,7 +79,7 @@ func (m *minimaxProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName ApiN return types.ActionContinue, errUnsupportedApiName } _ = util.OverwriteRequestHost(minimaxDomain) - _ = util.OverwriteRequestAuthorization("Bearer " + m.config.GetRandomToken()) + _ = util.OverwriteRequestAuthorization("Bearer " + ctx.GetContext(ApiTokenInUse).(string)) _ = proxywasm.RemoveHttpRequestHeader("Content-Length") // Delay the header processing to allow changing streaming mode in OnRequestBody diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/mistral.go b/plugins/wasm-go/extensions/ai-proxy/provider/mistral.go index b217d8019e..7000425366 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/mistral.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/mistral.go @@ -44,7 +44,7 @@ func (m *mistralProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName ApiN return types.ActionContinue, errUnsupportedApiName } _ = util.OverwriteRequestHost(mistralDomain) - _ = util.OverwriteRequestAuthorization("Bearer " + m.config.GetRandomToken()) + _ = util.OverwriteRequestAuthorization("Bearer " + ctx.GetContext(ApiTokenInUse).(string)) _ = proxywasm.RemoveHttpRequestHeader("Content-Length") return types.ActionContinue, nil } diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/moonshot.go b/plugins/wasm-go/extensions/ai-proxy/provider/moonshot.go index 6023b4abe8..8dfb56f4e5 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/moonshot.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/moonshot.go @@ -60,7 +60,7 @@ func (m *moonshotProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName Api } _ = util.OverwriteRequestPath(moonshotChatCompletionPath) _ = util.OverwriteRequestHost(moonshotDomain) - _ = util.OverwriteRequestAuthorization("Bearer " + m.config.GetRandomToken()) + _ = util.OverwriteRequestAuthorization("Bearer " + ctx.GetContext(ApiTokenInUse).(string)) _ = proxywasm.RemoveHttpRequestHeader("Content-Length") return types.ActionContinue, nil } diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/openai.go b/plugins/wasm-go/extensions/ai-proxy/provider/openai.go index 9f34932c1a..2ff8ea69a5 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/openai.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/openai.go @@ -74,7 +74,7 @@ func (m *openaiProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName ApiNa _ = util.OverwriteRequestHost(m.customDomain) } if len(m.config.apiTokens) > 0 { - _ = util.OverwriteRequestAuthorization("Bearer " + m.config.GetRandomToken()) + _ = util.OverwriteRequestAuthorization("Bearer " + ctx.GetContext(ApiTokenInUse).(string)) } _ = proxywasm.RemoveHttpRequestHeader("Content-Length") return types.ActionContinue, nil diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/spark.go b/plugins/wasm-go/extensions/ai-proxy/provider/spark.go index fc266dfbaa..bc6a4fd328 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/spark.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/spark.go @@ -73,7 +73,7 @@ func (p *sparkProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName ApiNam } _ = util.OverwriteRequestHost(sparkHost) _ = util.OverwriteRequestPath(sparkChatCompletionPath) - _ = util.OverwriteRequestAuthorization("Bearer " + p.config.GetRandomToken()) + _ = util.OverwriteRequestAuthorization("Bearer " + ctx.GetContext(ApiTokenInUse).(string)) _ = proxywasm.RemoveHttpRequestHeader("Accept-Encoding") _ = proxywasm.RemoveHttpRequestHeader("Content-Length") return types.ActionContinue, nil diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/stepfun.go b/plugins/wasm-go/extensions/ai-proxy/provider/stepfun.go index dd6792ed65..b593cb9343 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/stepfun.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/stepfun.go @@ -47,7 +47,7 @@ func (m *stepfunProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName ApiN } _ = util.OverwriteRequestPath(stepfunChatCompletionPath) _ = util.OverwriteRequestHost(stepfunDomain) - _ = util.OverwriteRequestAuthorization("Bearer " + m.config.GetRandomToken()) + _ = util.OverwriteRequestAuthorization("Bearer " + ctx.GetContext(ApiTokenInUse).(string)) _ = proxywasm.RemoveHttpRequestHeader("Content-Length") return types.ActionContinue, nil } diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/yi.go b/plugins/wasm-go/extensions/ai-proxy/provider/yi.go index 287945d903..a0b6533ad6 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/yi.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/yi.go @@ -47,7 +47,7 @@ func (m *yiProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName ApiName, } _ = util.OverwriteRequestPath(yiChatCompletionPath) _ = util.OverwriteRequestHost(yiDomain) - _ = util.OverwriteRequestAuthorization("Bearer " + m.config.GetRandomToken()) + _ = util.OverwriteRequestAuthorization("Bearer " + ctx.GetContext(ApiTokenInUse).(string)) _ = proxywasm.RemoveHttpRequestHeader("Content-Length") return types.ActionContinue, nil } diff --git a/plugins/wasm-go/extensions/ai-proxy/provider/zhipuai.go b/plugins/wasm-go/extensions/ai-proxy/provider/zhipuai.go index 9640cd02f4..6178d862c1 100644 --- a/plugins/wasm-go/extensions/ai-proxy/provider/zhipuai.go +++ b/plugins/wasm-go/extensions/ai-proxy/provider/zhipuai.go @@ -46,7 +46,7 @@ func (m *zhipuAiProvider) OnRequestHeaders(ctx wrapper.HttpContext, apiName ApiN } _ = util.OverwriteRequestPath(zhipuAiChatCompletionPath) _ = util.OverwriteRequestHost(zhipuAiDomain) - _ = util.OverwriteRequestAuthorization("Bearer " + m.config.GetRandomToken()) + _ = util.OverwriteRequestAuthorization("Bearer " + ctx.GetContext(ApiTokenInUse).(string)) _ = proxywasm.RemoveHttpRequestHeader("Content-Length") return types.ActionContinue, nil }