diff --git a/cmd/epp/main.go b/cmd/epp/main.go index bda7cc207..2d4c4cc44 100644 --- a/cmd/epp/main.go +++ b/cmd/epp/main.go @@ -45,10 +45,11 @@ import ( "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/metrics/collectors" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins" - "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins/filter" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins/capacity" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins/kvcache" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins/picker" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins/prefix" - "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins/scorer" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins/queue" runserver "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/server" envutil "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/env" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/logging" @@ -194,11 +195,11 @@ func run() error { scheduler := scheduling.NewScheduler(datastore) if schedulerV2 == "true" { - queueScorerWeight := envutil.GetEnvInt("QUEUE_SCORE_WEIGHT", scorer.DefaultQueueScorerWeight, setupLog) - kvCacheScorerWeight := envutil.GetEnvInt("KV_CACHE_SCORE_WEIGHT", scorer.DefaultKVCacheScorerWeight, setupLog) + queueScorerWeight := envutil.GetEnvInt("QUEUE_SCORE_WEIGHT", queue.DefaultQueueScorerWeight, setupLog) + kvCacheScorerWeight := envutil.GetEnvInt("KV_CACHE_SCORE_WEIGHT", kvcache.DefaultKVCacheScorerWeight, setupLog) scorers := map[plugins.Scorer]int{ - &scorer.QueueScorer{}: queueScorerWeight, - &scorer.KVCacheScorer{}: kvCacheScorerWeight, + &queue.QueueScorer{}: queueScorerWeight, + &kvcache.KVCacheScorer{}: kvCacheScorerWeight, } schedConfigOpts := []scheduling.ConfigOption{} if prefixCacheScheduling == "true" { @@ -207,7 +208,7 @@ func run() error { } schedulerConfig := scheduling.NewSchedulerConfig( []plugins.PreSchedule{}, - []plugins.Filter{filter.NewSheddableCapacityFilter()}, + []plugins.Filter{capacity.NewSheddableCapacityFilter()}, scorers, picker.NewMaxScorePicker(), []plugins.PostSchedule{}, diff --git a/pkg/epp/scheduling/plugins/capacity/filter_test.go b/pkg/epp/scheduling/plugins/capacity/filter_test.go new file mode 100644 index 000000000..b4e8419ee --- /dev/null +++ b/pkg/epp/scheduling/plugins/capacity/filter_test.go @@ -0,0 +1,85 @@ +/* +Copyright 2025 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package capacity + +import ( + "context" + "testing" + + "github.com/google/go-cmp/cmp" + backendmetrics "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/backend/metrics" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/types" +) + +func TestFilter(t *testing.T) { + tests := []struct { + name string + req *types.LLMRequest + filter plugins.Filter + input []types.Pod + output []types.Pod + }{ + { + name: "SheddableCapacityFilter, sheddable request", + req: &types.LLMRequest{Critical: false}, + filter: &SheddableCapacityFilter{queueThreshold: 0, kvCacheThreshold: 0.8}, + input: []types.Pod{ + &types.PodMetrics{ + // This pod should be returned. + MetricsState: &backendmetrics.MetricsState{ + WaitingQueueSize: 0, + KVCacheUsagePercent: 0, + }, + }, + &types.PodMetrics{ + // Queue is non zero, despite low kv cache, should not return. + MetricsState: &backendmetrics.MetricsState{ + WaitingQueueSize: 1, + KVCacheUsagePercent: 0.3, + }, + }, + &types.PodMetrics{ + // High kv cache despite zero queue, should not return + MetricsState: &backendmetrics.MetricsState{ + WaitingQueueSize: 0, + KVCacheUsagePercent: 1.0, + }, + }, + }, + output: []types.Pod{ + &types.PodMetrics{ + MetricsState: &backendmetrics.MetricsState{ + WaitingQueueSize: 0, + KVCacheUsagePercent: 0, + }, + }, + }, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + ctx := types.NewSchedulingContext(context.Background(), test.req, nil, test.input) + got := test.filter.Filter(ctx, test.input) + + if diff := cmp.Diff(test.output, got); diff != "" { + t.Errorf("Unexpected output (-want +got): %v", diff) + } + }) + } +} diff --git a/pkg/epp/scheduling/plugins/filter/sheddable_capacity_filter.go b/pkg/epp/scheduling/plugins/capacity/sheddable_capacity_filter.go similarity index 99% rename from pkg/epp/scheduling/plugins/filter/sheddable_capacity_filter.go rename to pkg/epp/scheduling/plugins/capacity/sheddable_capacity_filter.go index 5a298a022..20661c867 100644 --- a/pkg/epp/scheduling/plugins/filter/sheddable_capacity_filter.go +++ b/pkg/epp/scheduling/plugins/capacity/sheddable_capacity_filter.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package filter +package capacity import ( "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/config" diff --git a/pkg/epp/scheduling/plugins/kvcache/filter_test.go b/pkg/epp/scheduling/plugins/kvcache/filter_test.go new file mode 100644 index 000000000..ccfd8e3dc --- /dev/null +++ b/pkg/epp/scheduling/plugins/kvcache/filter_test.go @@ -0,0 +1,89 @@ +/* +Copyright 2025 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package kvcache + +import ( + "context" + "testing" + + "github.com/google/go-cmp/cmp" + backendmetrics "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/backend/metrics" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/types" +) + +func TestFilter(t *testing.T) { + tests := []struct { + name string + req *types.LLMRequest + filter plugins.Filter + input []types.Pod + output []types.Pod + }{ + + { + name: "least kv cache empty input", + filter: NewLeastKVCacheFilter(), + input: []types.Pod{}, + output: []types.Pod{}, + }, + { + name: "least kv cache", + filter: NewLeastKVCacheFilter(), + input: []types.Pod{ + &types.PodMetrics{ + MetricsState: &backendmetrics.MetricsState{ + KVCacheUsagePercent: 0, + }, + }, + &types.PodMetrics{ + MetricsState: &backendmetrics.MetricsState{ + KVCacheUsagePercent: 0.3, + }, + }, + &types.PodMetrics{ + MetricsState: &backendmetrics.MetricsState{ + KVCacheUsagePercent: 1.0, + }, + }, + }, + output: []types.Pod{ + &types.PodMetrics{ + MetricsState: &backendmetrics.MetricsState{ + KVCacheUsagePercent: 0, + }, + }, + &types.PodMetrics{ + MetricsState: &backendmetrics.MetricsState{ + KVCacheUsagePercent: 0.3, + }, + }, + }, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + ctx := types.NewSchedulingContext(context.Background(), test.req, nil, test.input) + got := test.filter.Filter(ctx, test.input) + + if diff := cmp.Diff(test.output, got); diff != "" { + t.Errorf("Unexpected output (-want +got): %v", diff) + } + }) + } +} diff --git a/pkg/epp/scheduling/plugins/scorer/kvcache.go b/pkg/epp/scheduling/plugins/kvcache/kvcache_scorer.go similarity index 98% rename from pkg/epp/scheduling/plugins/scorer/kvcache.go rename to pkg/epp/scheduling/plugins/kvcache/kvcache_scorer.go index dbb6079dc..a75d344d8 100644 --- a/pkg/epp/scheduling/plugins/scorer/kvcache.go +++ b/pkg/epp/scheduling/plugins/kvcache/kvcache_scorer.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package scorer +package kvcache import ( "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/types" diff --git a/pkg/epp/scheduling/plugins/scorer/kvcache_test.go b/pkg/epp/scheduling/plugins/kvcache/kvcache_scorer_test.go similarity index 99% rename from pkg/epp/scheduling/plugins/scorer/kvcache_test.go rename to pkg/epp/scheduling/plugins/kvcache/kvcache_scorer_test.go index 54cbaf25d..d7de32968 100644 --- a/pkg/epp/scheduling/plugins/scorer/kvcache_test.go +++ b/pkg/epp/scheduling/plugins/kvcache/kvcache_scorer_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package scorer +package kvcache import ( "context" diff --git a/pkg/epp/scheduling/plugins/filter/least_kvcache_filter.go b/pkg/epp/scheduling/plugins/kvcache/least_kvcache_filter.go similarity index 99% rename from pkg/epp/scheduling/plugins/filter/least_kvcache_filter.go rename to pkg/epp/scheduling/plugins/kvcache/least_kvcache_filter.go index eed647682..6dccf27f0 100644 --- a/pkg/epp/scheduling/plugins/filter/least_kvcache_filter.go +++ b/pkg/epp/scheduling/plugins/kvcache/least_kvcache_filter.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package filter +package kvcache import ( "math" diff --git a/pkg/epp/scheduling/plugins/filter/filter_test.go b/pkg/epp/scheduling/plugins/lora/filter_test.go similarity index 57% rename from pkg/epp/scheduling/plugins/filter/filter_test.go rename to pkg/epp/scheduling/plugins/lora/filter_test.go index 3f844740a..9feba4655 100644 --- a/pkg/epp/scheduling/plugins/filter/filter_test.go +++ b/pkg/epp/scheduling/plugins/lora/filter_test.go @@ -14,173 +14,20 @@ See the License for the specific language governing permissions and limitations under the License. */ -package filter +package lora import ( "context" "testing" - "github.com/google/go-cmp/cmp" "github.com/google/uuid" k8stypes "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/backend" backendmetrics "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/backend/metrics" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/config" - "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/types" ) -type filterAll struct{} - -func (f *filterAll) Name() string { - return "filter all" -} - -func (f *filterAll) Filter(ctx *types.SchedulingContext, pods []types.Pod) []types.Pod { - return []types.Pod{} -} - -func TestFilter(t *testing.T) { - tests := []struct { - name string - req *types.LLMRequest - filter plugins.Filter - input []types.Pod - output []types.Pod - }{ - { - name: "simple filter filters all pods", - filter: &filterAll{}, - output: []types.Pod{}, - }, - { - name: "least queuing empty input", - filter: NewLeastQueueFilter(), - input: []types.Pod{}, - output: []types.Pod{}, - }, - { - name: "least queuing", - filter: NewLeastQueueFilter(), - input: []types.Pod{ - &types.PodMetrics{ - MetricsState: &backendmetrics.MetricsState{ - WaitingQueueSize: 0, - }, - }, - &types.PodMetrics{ - MetricsState: &backendmetrics.MetricsState{ - WaitingQueueSize: 3, - }, - }, - &types.PodMetrics{ - MetricsState: &backendmetrics.MetricsState{ - WaitingQueueSize: 10, - }, - }, - }, - output: []types.Pod{ - &types.PodMetrics{ - MetricsState: &backendmetrics.MetricsState{ - WaitingQueueSize: 0, - }, - }, - &types.PodMetrics{ - MetricsState: &backendmetrics.MetricsState{ - WaitingQueueSize: 3, - }, - }, - }, - }, - { - name: "least kv cache empty input", - filter: NewLeastKVCacheFilter(), - input: []types.Pod{}, - output: []types.Pod{}, - }, - { - name: "least kv cache", - filter: NewLeastKVCacheFilter(), - input: []types.Pod{ - &types.PodMetrics{ - MetricsState: &backendmetrics.MetricsState{ - KVCacheUsagePercent: 0, - }, - }, - &types.PodMetrics{ - MetricsState: &backendmetrics.MetricsState{ - KVCacheUsagePercent: 0.3, - }, - }, - &types.PodMetrics{ - MetricsState: &backendmetrics.MetricsState{ - KVCacheUsagePercent: 1.0, - }, - }, - }, - output: []types.Pod{ - &types.PodMetrics{ - MetricsState: &backendmetrics.MetricsState{ - KVCacheUsagePercent: 0, - }, - }, - &types.PodMetrics{ - MetricsState: &backendmetrics.MetricsState{ - KVCacheUsagePercent: 0.3, - }, - }, - }, - }, - { - name: "SheddableCapacityFilter, sheddable request", - req: &types.LLMRequest{Critical: false}, - filter: &SheddableCapacityFilter{queueThreshold: 0, kvCacheThreshold: 0.8}, - input: []types.Pod{ - &types.PodMetrics{ - // This pod should be returned. - MetricsState: &backendmetrics.MetricsState{ - WaitingQueueSize: 0, - KVCacheUsagePercent: 0, - }, - }, - &types.PodMetrics{ - // Queue is non zero, despite low kv cache, should not return. - MetricsState: &backendmetrics.MetricsState{ - WaitingQueueSize: 1, - KVCacheUsagePercent: 0.3, - }, - }, - &types.PodMetrics{ - // High kv cache despite zero queue, should not return - MetricsState: &backendmetrics.MetricsState{ - WaitingQueueSize: 0, - KVCacheUsagePercent: 1.0, - }, - }, - }, - output: []types.Pod{ - &types.PodMetrics{ - MetricsState: &backendmetrics.MetricsState{ - WaitingQueueSize: 0, - KVCacheUsagePercent: 0, - }, - }, - }, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - ctx := types.NewSchedulingContext(context.Background(), test.req, nil, test.input) - got := test.filter.Filter(ctx, test.input) - - if diff := cmp.Diff(test.output, got); diff != "" { - t.Errorf("Unexpected output (-want +got): %v", diff) - } - }) - } -} - // TestLoRASoftAffinityDistribution tests that the loRASoftAffinityFilter function // properly distributes requests according to the loraAffinityThreshold func TestLoRASoftAffinityDistribution(t *testing.T) { diff --git a/pkg/epp/scheduling/plugins/filter/lora_affinity_filter.go b/pkg/epp/scheduling/plugins/lora/lora_affinity_filter.go similarity index 99% rename from pkg/epp/scheduling/plugins/filter/lora_affinity_filter.go rename to pkg/epp/scheduling/plugins/lora/lora_affinity_filter.go index bc744a8ef..a09424009 100644 --- a/pkg/epp/scheduling/plugins/filter/lora_affinity_filter.go +++ b/pkg/epp/scheduling/plugins/lora/lora_affinity_filter.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package filter +package lora import ( "math/rand" diff --git a/pkg/epp/scheduling/plugins/queue/filter_test.go b/pkg/epp/scheduling/plugins/queue/filter_test.go new file mode 100644 index 000000000..3230d7b7f --- /dev/null +++ b/pkg/epp/scheduling/plugins/queue/filter_test.go @@ -0,0 +1,88 @@ +/* +Copyright 2025 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package queue + +import ( + "context" + "testing" + + "github.com/google/go-cmp/cmp" + backendmetrics "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/backend/metrics" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/types" +) + +func TestFilter(t *testing.T) { + tests := []struct { + name string + req *types.LLMRequest + filter plugins.Filter + input []types.Pod + output []types.Pod + }{ + { + name: "least queuing empty input", + filter: NewLeastQueueFilter(), + input: []types.Pod{}, + output: []types.Pod{}, + }, + { + name: "least queuing", + filter: NewLeastQueueFilter(), + input: []types.Pod{ + &types.PodMetrics{ + MetricsState: &backendmetrics.MetricsState{ + WaitingQueueSize: 0, + }, + }, + &types.PodMetrics{ + MetricsState: &backendmetrics.MetricsState{ + WaitingQueueSize: 3, + }, + }, + &types.PodMetrics{ + MetricsState: &backendmetrics.MetricsState{ + WaitingQueueSize: 10, + }, + }, + }, + output: []types.Pod{ + &types.PodMetrics{ + MetricsState: &backendmetrics.MetricsState{ + WaitingQueueSize: 0, + }, + }, + &types.PodMetrics{ + MetricsState: &backendmetrics.MetricsState{ + WaitingQueueSize: 3, + }, + }, + }, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + ctx := types.NewSchedulingContext(context.Background(), test.req, nil, test.input) + got := test.filter.Filter(ctx, test.input) + + if diff := cmp.Diff(test.output, got); diff != "" { + t.Errorf("Unexpected output (-want +got): %v", diff) + } + }) + } +} diff --git a/pkg/epp/scheduling/plugins/filter/least_queue_filter.go b/pkg/epp/scheduling/plugins/queue/least_queue_filter.go similarity index 99% rename from pkg/epp/scheduling/plugins/filter/least_queue_filter.go rename to pkg/epp/scheduling/plugins/queue/least_queue_filter.go index 7a71d5191..71ca09105 100644 --- a/pkg/epp/scheduling/plugins/filter/least_queue_filter.go +++ b/pkg/epp/scheduling/plugins/queue/least_queue_filter.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package filter +package queue import ( "math" diff --git a/pkg/epp/scheduling/plugins/filter/low_queue_filter.go b/pkg/epp/scheduling/plugins/queue/low_queue_filter.go similarity index 99% rename from pkg/epp/scheduling/plugins/filter/low_queue_filter.go rename to pkg/epp/scheduling/plugins/queue/low_queue_filter.go index feb599b43..9ec949dd0 100644 --- a/pkg/epp/scheduling/plugins/filter/low_queue_filter.go +++ b/pkg/epp/scheduling/plugins/queue/low_queue_filter.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package filter +package queue import ( "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/config" diff --git a/pkg/epp/scheduling/plugins/scorer/queue.go b/pkg/epp/scheduling/plugins/queue/queue_scorer.go similarity index 99% rename from pkg/epp/scheduling/plugins/scorer/queue.go rename to pkg/epp/scheduling/plugins/queue/queue_scorer.go index bbe6b6961..70d6b7818 100644 --- a/pkg/epp/scheduling/plugins/scorer/queue.go +++ b/pkg/epp/scheduling/plugins/queue/queue_scorer.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package scorer +package queue import ( "math" diff --git a/pkg/epp/scheduling/plugins/scorer/queue_test.go b/pkg/epp/scheduling/plugins/queue/queue_scorer_test.go similarity index 99% rename from pkg/epp/scheduling/plugins/scorer/queue_test.go rename to pkg/epp/scheduling/plugins/queue/queue_scorer_test.go index b89bf71b5..1e2cbe10a 100644 --- a/pkg/epp/scheduling/plugins/scorer/queue_test.go +++ b/pkg/epp/scheduling/plugins/queue/queue_scorer_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package scorer +package queue import ( "context" diff --git a/pkg/epp/scheduling/scheduler.go b/pkg/epp/scheduling/scheduler.go index 29ffee897..1dcee8fbe 100644 --- a/pkg/epp/scheduling/scheduler.go +++ b/pkg/epp/scheduling/scheduler.go @@ -26,8 +26,12 @@ import ( backendmetrics "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/backend/metrics" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/metrics" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins/capacity" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins/filter" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins/kvcache" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins/lora" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins/picker" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins/queue" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/types" errutil "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/error" logutil "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/logging" @@ -38,12 +42,12 @@ func NewScheduler(datastore Datastore) *Scheduler { // When the scheduler is initialized with NewScheduler function, thw below config will be used as default. // it's possible to call NewSchedulerWithConfig to pass a different scheduler config. // For build time plugins changes, it's recommended to call in main.go to NewSchedulerWithConfig. - loraAffinityFilter := filter.NewLoraAffinityFilter() - leastQueueFilter := filter.NewLeastQueueFilter() - leastKvCacheFilter := filter.NewLeastKVCacheFilter() + loraAffinityFilter := lora.NewLoraAffinityFilter() + leastQueueFilter := queue.NewLeastQueueFilter() + leastKvCacheFilter := kvcache.NewLeastKVCacheFilter() lowLatencyFilter := &filter.DecisionTreeFilter{ - Current: filter.NewLowQueueFilter(), + Current: queue.NewLowQueueFilter(), NextOnSuccess: &filter.DecisionTreeFilter{ Current: loraAffinityFilter, NextOnSuccessOrFailure: &filter.DecisionTreeFilter{ @@ -66,7 +70,7 @@ func NewScheduler(datastore Datastore) *Scheduler { defaultConfig := &SchedulerConfig{ preSchedulePlugins: []plugins.PreSchedule{}, - filters: []plugins.Filter{filter.NewSheddableCapacityFilter(), lowLatencyFilter}, + filters: []plugins.Filter{capacity.NewSheddableCapacityFilter(), lowLatencyFilter}, scorers: map[plugins.Scorer]int{}, picker: &picker.RandomPicker{}, postSchedulePlugins: []plugins.PostSchedule{},