@@ -239,6 +239,9 @@ func TestProxy_UsesConfiguredFallbackOnce(t *testing.T) {
239239 if meter .lastSuccessModel .ProviderConfig .ProviderName != "fallback" {
240240 t .Fatalf ("metered provider = %q, want fallback" , meter .lastSuccessModel .ProviderConfig .ProviderName )
241241 }
242+ if meter .lastSuccessModel .ServiceTier == nil || * meter .lastSuccessModel .ServiceTier != "flex" {
243+ t .Fatalf ("metered service tier = %v, want flex" , meter .lastSuccessModel .ServiceTier )
244+ }
242245}
243246
244247func TestProxy_ReturnsFallbackFailure (t * testing.T ) {
@@ -299,6 +302,7 @@ func newDirectModelGenerateService(meter *stubUsageMeter, provider *stubProvider
299302}
300303
301304func newFallbackGenerateService (meter * stubUsageMeter , primary , fallback * stubProvider ) * GenerateService {
305+ serviceTier := "flex"
302306 return NewGenerateService (
303307 & stubAuthService {authCtx : domain.AuthContext {
304308 Account : domain.Account {ID : "acc1" , Status : domain .AccountStatusActive },
@@ -309,7 +313,7 @@ func newFallbackGenerateService(meter *stubUsageMeter, primary, fallback *stubPr
309313 ProviderModelID : "primary-model" ,
310314 UpstreamModelName : "primary-upstream" ,
311315 ProviderConfig : domain.ProviderConfig {ProviderName : "primary" },
312- Fallback : & domain.ProviderTarget {ProviderModelID : "fallback-model" , UpstreamModelName : "fallback-upstream" , ProviderConfig : domain.ProviderConfig {ProviderName : "fallback" }},
316+ Fallback : & domain.ProviderTarget {ProviderModelID : "fallback-model" , UpstreamModelName : "fallback-upstream" , ServiceTier : & serviceTier , ProviderConfig : domain.ProviderConfig {ProviderName : "fallback" }},
313317 SupportsChatCompletions : true ,
314318 SupportsChatCompletionsStream : true ,
315319 MaxContextWindow : 1000 ,
@@ -377,6 +381,33 @@ func TestProxy_RejectsWhenBalanceIsEmpty(t *testing.T) {
377381 }
378382}
379383
384+ func TestValidateRequest_RejectsCallerSelectedDoublewordServiceTier (t * testing.T ) {
385+ svc := & GenerateService {}
386+ serviceTier := "flex"
387+ model := domain.PublicModel {
388+ PublicModelID : "doubleword/test-realtime" ,
389+ SupportsChatCompletions : true ,
390+ ProviderConfig : domain.ProviderConfig {ProviderName : "doubleword" },
391+ }
392+ err := svc .validateRequest (domain .EndpointChatCompletions , domain.GenerateRequest {
393+ ServiceTier : & serviceTier ,
394+ }, model )
395+ if err == nil {
396+ t .Fatal ("expected caller-selected Doubleword service tier to be rejected" )
397+ }
398+ gwErr , ok := err .(* domain.GatewayError )
399+ if ! ok || gwErr .Code != domain .ErrCodeInvalidField {
400+ t .Fatalf ("error = %#v, want invalid_field" , err )
401+ }
402+
403+ model .ProviderConfig .ProviderName = "openai"
404+ if err := svc .validateRequest (domain .EndpointChatCompletions , domain.GenerateRequest {
405+ ServiceTier : & serviceTier ,
406+ }, model ); err != nil {
407+ t .Fatalf ("non-Doubleword service tier rejected: %v" , err )
408+ }
409+ }
410+
380411func TestProxy_DoesNotRouteUnknownModel (t * testing.T ) {
381412 router := & stubRouterClient {decision : domain.RouteDecision {PublicModelID : "minimax/minimax-m2.7" }}
382413 svc := NewGenerateService (
0 commit comments