mirror of
https://github.com/alibaba/higress.git
synced 2026-06-10 05:07:30 +08:00
fix(ai-proxy): URL encode model name in Bedrock requests (#2321)
This commit is contained in:
@@ -13,6 +13,7 @@ import (
|
|||||||
"hash/crc32"
|
"hash/crc32"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@@ -22,6 +23,8 @@ import (
|
|||||||
"github.com/alibaba/higress/plugins/wasm-go/pkg/wrapper"
|
"github.com/alibaba/higress/plugins/wasm-go/pkg/wrapper"
|
||||||
"github.com/higress-group/proxy-wasm-go-sdk/proxywasm"
|
"github.com/higress-group/proxy-wasm-go-sdk/proxywasm"
|
||||||
"github.com/higress-group/proxy-wasm-go-sdk/proxywasm/types"
|
"github.com/higress-group/proxy-wasm-go-sdk/proxywasm/types"
|
||||||
|
"github.com/tidwall/gjson"
|
||||||
|
"github.com/tidwall/sjson"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -607,6 +610,11 @@ func (b *bedrockProvider) insertHttpContextMessage(body []byte, content string,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *bedrockProvider) TransformRequestBodyHeaders(ctx wrapper.HttpContext, apiName ApiName, body []byte, headers http.Header) ([]byte, error) {
|
func (b *bedrockProvider) TransformRequestBodyHeaders(ctx wrapper.HttpContext, apiName ApiName, body []byte, headers http.Header) ([]byte, error) {
|
||||||
|
if gjson.GetBytes(body, "model").Exists() {
|
||||||
|
rawModel := gjson.GetBytes(body, "model").String()
|
||||||
|
encodedModel := url.QueryEscape(rawModel)
|
||||||
|
body, _ = sjson.SetBytes(body, "model", encodedModel)
|
||||||
|
}
|
||||||
switch apiName {
|
switch apiName {
|
||||||
case ApiNameChatCompletion:
|
case ApiNameChatCompletion:
|
||||||
return b.onChatCompletionRequestBody(ctx, body, headers)
|
return b.onChatCompletionRequestBody(ctx, body, headers)
|
||||||
@@ -901,7 +909,6 @@ func (b *bedrockProvider) setAuthHeaders(body []byte, headers http.Header) {
|
|||||||
|
|
||||||
func (b *bedrockProvider) generateSignature(path, amzDate, dateStamp string, body []byte) string {
|
func (b *bedrockProvider) generateSignature(path, amzDate, dateStamp string, body []byte) string {
|
||||||
hashedPayload := sha256Hex(body)
|
hashedPayload := sha256Hex(body)
|
||||||
path = urlEncoding(path)
|
|
||||||
|
|
||||||
endpoint := fmt.Sprintf(bedrockDefaultDomain, b.config.awsRegion)
|
endpoint := fmt.Sprintf(bedrockDefaultDomain, b.config.awsRegion)
|
||||||
canonicalHeaders := fmt.Sprintf("host:%s\nx-amz-date:%s\n", endpoint, amzDate)
|
canonicalHeaders := fmt.Sprintf("host:%s\nx-amz-date:%s\n", endpoint, amzDate)
|
||||||
@@ -918,16 +925,6 @@ func (b *bedrockProvider) generateSignature(path, amzDate, dateStamp string, bod
|
|||||||
return signature
|
return signature
|
||||||
}
|
}
|
||||||
|
|
||||||
func urlEncoding(rawStr string) string {
|
|
||||||
encodedStr := strings.ReplaceAll(rawStr, ":", "%3A")
|
|
||||||
encodedStr = strings.ReplaceAll(encodedStr, "+", "%2B")
|
|
||||||
encodedStr = strings.ReplaceAll(encodedStr, "=", "%3D")
|
|
||||||
encodedStr = strings.ReplaceAll(encodedStr, "&", "%26")
|
|
||||||
encodedStr = strings.ReplaceAll(encodedStr, "$", "%24")
|
|
||||||
encodedStr = strings.ReplaceAll(encodedStr, "@", "%40")
|
|
||||||
return encodedStr
|
|
||||||
}
|
|
||||||
|
|
||||||
func getSignatureKey(key, dateStamp, region, service string) []byte {
|
func getSignatureKey(key, dateStamp, region, service string) []byte {
|
||||||
kDate := hmacSha256([]byte("AWS4"+key), dateStamp)
|
kDate := hmacSha256([]byte("AWS4"+key), dateStamp)
|
||||||
kRegion := hmacSha256(kDate, region)
|
kRegion := hmacSha256(kDate, region)
|
||||||
|
|||||||
Reference in New Issue
Block a user