Files
bifrost/transports/bifrost-http/integrations/genai_large_request_test.go
Beyhan Oğur 880f412e2c first commit
2026-04-26 21:52:23 +03:00

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)
}
}