48 lines
1.7 KiB
Go
48 lines
1.7 KiB
Go
package integrations
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/maximhq/bifrost/core/schemas"
|
|
"github.com/maximhq/bifrost/transports/bifrost-http/lib"
|
|
"github.com/valyala/fasthttp"
|
|
)
|
|
|
|
func TestExtractModelAndRequestType_LargePayloadUsesMetadataWithoutBodyParse(t *testing.T) {
|
|
ctx := &fasthttp.RequestCtx{}
|
|
ctx.SetUserValue("model", "gemini-2.5-pro:generateContent")
|
|
// Intentionally invalid JSON: detection must rely on large-payload metadata, not body parse.
|
|
ctx.Request.SetBodyString(`{"contents":[INVALID`)
|
|
|
|
bifrostCtx := schemas.NewBifrostContext(context.Background(), schemas.NoDeadline)
|
|
bifrostCtx.SetValue(schemas.BifrostContextKeyLargePayloadMode, true)
|
|
bifrostCtx.SetValue(schemas.BifrostContextKeyLargePayloadMetadata, &schemas.LargePayloadMetadata{
|
|
ResponseModalities: []string{"AUDIO"},
|
|
})
|
|
ctx.SetUserValue(lib.FastHTTPUserValueBifrostContext, bifrostCtx)
|
|
|
|
model, reqType := extractModelAndRequestType(ctx)
|
|
if model != "gemini-2.5-pro" {
|
|
t.Fatalf("expected normalized model gemini-2.5-pro, got %q", model)
|
|
}
|
|
if reqType != schemas.SpeechRequest {
|
|
t.Fatalf("expected speech request type from metadata, got %q", reqType)
|
|
}
|
|
}
|
|
|
|
func TestExtractModelAndRequestType_LargeBodyHeuristicSkipsParse(t *testing.T) {
|
|
ctx := &fasthttp.RequestCtx{}
|
|
ctx.SetUserValue("model", "gemini-2.5-pro:generateContent")
|
|
ctx.Request.SetBodyStream(strings.NewReader(`{"contents":[INVALID`), schemas.DefaultLargePayloadRequestThresholdBytes+1)
|
|
|
|
model, reqType := extractModelAndRequestType(ctx)
|
|
if model != "gemini-2.5-pro" {
|
|
t.Fatalf("expected normalized model gemini-2.5-pro, got %q", model)
|
|
}
|
|
if reqType != schemas.ResponsesRequest {
|
|
t.Fatalf("expected responses request type from large-body heuristic, got %q", reqType)
|
|
}
|
|
}
|