From 679342f1010d58e1cc3141cbb5278cf76496a1ef Mon Sep 17 00:00:00 2001 From: 3metaJun <251347867+3metaJun@users.noreply.github.com> Date: Fri, 28 Aug 2026 11:32:24 +0800 Subject: [PATCH] fix: preserve unmanaged zero model ratios --- controller/metaproxy_provision.go | 8 ++++++-- controller/metaproxy_provision_test.go | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/controller/metaproxy_provision.go b/controller/metaproxy_provision.go index 363ff5285ee2..36decc712dbe 100644 --- a/controller/metaproxy_provision.go +++ b/controller/metaproxy_provision.go @@ -142,7 +142,7 @@ func validateMetaproxyProvisionRequest( return errors.New("channels exceeds the 256-channel limit") } - modelRatios, err := parseRatioMap("ModelRatio", request.Options.ModelRatio, false) + modelRatios, err := parseRatioMap("ModelRatio", request.Options.ModelRatio, true) if err != nil { return err } @@ -219,9 +219,13 @@ func validateMetaproxyProvisionRequest( continue } for _, modelName := range models { - if _, priced := modelRatios[modelName]; !priced { + ratio, priced := modelRatios[modelName] + if !priced { return fmt.Errorf("enabled model %q in an offered group is missing from ModelRatio", modelName) } + if ratio == 0 { + return fmt.Errorf("enabled model %q in an offered group must have a positive ModelRatio", modelName) + } } } return nil diff --git a/controller/metaproxy_provision_test.go b/controller/metaproxy_provision_test.go index 5a1d18719fac..ca4eb47eccab 100644 --- a/controller/metaproxy_provision_test.go +++ b/controller/metaproxy_provision_test.go @@ -85,6 +85,20 @@ func TestValidateMetaproxyProvisionRequestAllowsUnpricedModelInUnpublishedGroup( require.NoError(t, validateMetaproxyProvisionRequest(request, request.Digest, "none")) } +func TestValidateMetaproxyProvisionRequestAllowsLegacyZeroRatioOutsideManagedChannels(t *testing.T) { + request := validMetaproxyProvisionRequest() + request.Options.ModelRatio = `{"model-one":1,"legacy-disabled-model":0}` + require.NoError(t, validateMetaproxyProvisionRequest(request, request.Digest, "none")) +} + +func TestValidateMetaproxyProvisionRequestRejectsZeroRatioForOfferedModel(t *testing.T) { + request := validMetaproxyProvisionRequest() + request.Options.ModelRatio = `{"model-one":0}` + err := validateMetaproxyProvisionRequest(request, request.Digest, "none") + require.ErrorContains(t, err, "model-one") + require.ErrorContains(t, err, "positive ModelRatio") +} + func TestValidateMetaproxyProvisionRequestRejectsMalformedRatioJson(t *testing.T) { request := validMetaproxyProvisionRequest() request.Options.GroupRatio = `{"standard":"free"}`