Skip to content

Commit a7354ca

Browse files
committed
Update interface names based on suggestions
1 parent 9d38b44 commit a7354ca

File tree

4 files changed

+63
-57
lines changed

4 files changed

+63
-57
lines changed

pkg/epp/requestcontrol/director.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ func (d *Director) resolveTargetModel(reqCtx *handlers.RequestContext) (*handler
119119
var ok bool
120120
reqCtx.IncomingModelName, ok = requestBodyMap["model"].(string)
121121
if !ok {
122-
return nil, errutil.Error{Code: errutil.BadRequest, Msg: "model not found in request body"}
122+
return reqCtx, errutil.Error{Code: errutil.BadRequest, Msg: "model not found in request body"}
123123
}
124124
if reqCtx.TargetModelName == "" {
125125
// Default to incoming model name
@@ -347,14 +347,14 @@ func (d *Director) runPreRequestPlugins(ctx context.Context, request *scheduling
347347
}
348348
}
349349

350-
// prepareData runs the PrepareData plugin with retries and timeout.
351-
func prepareData(plugin PrepareData, ctx context.Context, request *schedulingtypes.LLMRequest, pods []types.Pod) {
350+
// prepareData executes the PrepareRequestData plugins with retries and timeout.
351+
func prepareData(plugin DataProducer, ctx context.Context, request *schedulingtypes.LLMRequest, pods []types.Pod) {
352352
currentTimeout := prepareDataTimeout
353353
for i := 0; i <= prepareDataMaxRetries; i++ {
354354
done := make(chan struct{})
355355
go func() {
356356
defer close(done)
357-
plugin.PrepareData(ctx, request, pods)
357+
plugin.PrepareRequestData(ctx, request, pods)
358358
}()
359359

360360
select {
@@ -377,10 +377,10 @@ func (d *Director) runPrepareDataPlugins(ctx context.Context,
377377
// Parallely execute PrepareData for all the plugins. Some plugins might take time to prepare data e.g. latency predictor.
378378
// Failure in any prepareData doesn't block the request processing.
379379
var wg sync.WaitGroup
380-
for _, plugin := range d.requestControlPlugins.prepareDataPlugins {
380+
for _, plugin := range d.requestControlPlugins.dataProducerPlugins {
381381
loggerDebug.Info("Running PrepareData plugin", "plugin", plugin.TypedName())
382382
wg.Add(1)
383-
go func(p PrepareData) {
383+
go func(p DataProducer) {
384384
defer wg.Done()
385385
prepareData(p, ctx, request, pods)
386386
}(plugin)
@@ -393,8 +393,8 @@ func (d *Director) runAdmitRequestPlugins(ctx context.Context,
393393
loggerDebug := log.FromContext(ctx).V(logutil.DEBUG)
394394
for _, plugin := range d.requestControlPlugins.admitRequestPlugins {
395395
loggerDebug.Info("Running AdmitRequest plugin", "plugin", plugin.TypedName())
396-
if denyReason := plugin.Admit(ctx, request, pods); denyReason != "" {
397-
loggerDebug.Info("AdmitRequest plugin denied the request", "plugin", plugin.TypedName(), "reason", denyReason)
396+
if denyReason := plugin.AdmitRequest(ctx, request, pods); denyReason != nil {
397+
loggerDebug.Info("AdmitRequest plugin denied the request", "plugin", plugin.TypedName(), "reason", denyReason.Error())
398398
return false
399399
}
400400
loggerDebug.Info("Completed running AdmitRequest plugin successfully", "plugin", plugin.TypedName())

pkg/epp/requestcontrol/director_test.go

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -93,23 +93,27 @@ func (ds *mockDatastore) PodList(predicate func(backendmetrics.PodMetrics) bool)
9393
return res
9494
}
9595

96-
type mockPrepareRequestDataPlugin struct {
97-
tn plugins.TypedName
98-
prepareDataCalled bool
96+
type mockDataProducerPlugin struct {
97+
tn plugins.TypedName
98+
prepareRequestDataCalled bool
9999
}
100100

101-
func newmockPrepareRequestDataPlugin(name string) *mockPrepareRequestDataPlugin {
102-
return &mockPrepareRequestDataPlugin{
101+
func newmockDataProducerPlugin(name string) *mockDataProducerPlugin {
102+
return &mockDataProducerPlugin{
103103
tn: plugins.TypedName{Type: "mock-prepare-request-data", Name: name},
104104
}
105105
}
106106

107-
func (m *mockPrepareRequestDataPlugin) TypedName() plugins.TypedName {
107+
func (m *mockDataProducerPlugin) TypedName() plugins.TypedName {
108108
return m.tn
109109
}
110110

111-
func (m *mockPrepareRequestDataPlugin) PrepareData(ctx context.Context, request *schedulingtypes.LLMRequest, pods []schedulingtypes.Pod) {
112-
m.prepareDataCalled = true
111+
func (m *mockDataProducerPlugin) Produces() map[string]any {
112+
return map[string]any{}
113+
}
114+
115+
func (m *mockDataProducerPlugin) PrepareRequestData(ctx context.Context, request *schedulingtypes.LLMRequest, pods []schedulingtypes.Pod) {
116+
m.prepareRequestDataCalled = true
113117
}
114118

115119
type mockAdmitRequestPlugins struct {
@@ -127,9 +131,9 @@ func (m *mockAdmitRequestPlugins) TypedName() plugins.TypedName {
127131
return m.tn
128132
}
129133

130-
func (m *mockAdmitRequestPlugins) Admit(ctx context.Context, request *schedulingtypes.LLMRequest, pods []schedulingtypes.Pod) string {
134+
func (m *mockAdmitRequestPlugins) AdmitRequest(ctx context.Context, request *schedulingtypes.LLMRequest, pods []schedulingtypes.Pod) error {
131135
m.admitRequestCalled = true
132-
return ""
136+
return nil
133137
}
134138

135139
func TestDirector_HandleRequest(t *testing.T) {
@@ -241,19 +245,19 @@ func TestDirector_HandleRequest(t *testing.T) {
241245
}
242246

243247
tests := []struct {
244-
name string
245-
reqBodyMap map[string]any
246-
mockAdmissionController *mockAdmissionController
247-
inferenceObjectiveName string
248-
schedulerMockSetup func(m *mockScheduler)
249-
wantErrCode string // Expected errutil code string
250-
wantReqCtx *handlers.RequestContext // Fields to check in the returned RequestContext
251-
wantMutatedBodyModel string // Expected model in reqCtx.Request.Body after PostDispatch
252-
targetModelName string // Expected model name after target model resolution
253-
prepareDataCalled bool
254-
admitRequestCalled bool
255-
prepareDataPlugins *mockPrepareRequestDataPlugin
256-
admitRequestPlugins *mockAdmitRequestPlugins
248+
name string
249+
reqBodyMap map[string]any
250+
mockAdmissionController *mockAdmissionController
251+
inferenceObjectiveName string
252+
schedulerMockSetup func(m *mockScheduler)
253+
wantErrCode string // Expected errutil code string
254+
wantReqCtx *handlers.RequestContext // Fields to check in the returned RequestContext
255+
wantMutatedBodyModel string // Expected model in reqCtx.Request.Body after PostDispatch
256+
targetModelName string // Expected model name after target model resolution
257+
prepareRequestDataCalled bool
258+
admitRequestCalled bool
259+
dataProducerPlugins *mockDataProducerPlugin
260+
admitRequestPlugins *mockAdmitRequestPlugins
257261
}{
258262
{
259263
name: "successful completions request",
@@ -333,10 +337,10 @@ func TestDirector_HandleRequest(t *testing.T) {
333337
},
334338
TargetEndpoint: "192.168.1.100:8000,192.168.2.100:8000,192.168.4.100:8000",
335339
},
336-
wantMutatedBodyModel: model,
337-
targetModelName: model,
338-
prepareDataCalled: true,
339-
prepareDataPlugins: newmockPrepareRequestDataPlugin("test-plugin"),
340+
wantMutatedBodyModel: model,
341+
targetModelName: model,
342+
prepareRequestDataCalled: true,
343+
dataProducerPlugins: newmockDataProducerPlugin("test-plugin"),
340344
},
341345
{
342346
name: "successful chat completions request with admit request plugins",
@@ -518,8 +522,8 @@ func TestDirector_HandleRequest(t *testing.T) {
518522
test.schedulerMockSetup(mockSched)
519523
}
520524
config := NewConfig()
521-
if test.prepareDataPlugins != nil {
522-
config = config.WithPrepareDataPlugins(test.prepareDataPlugins)
525+
if test.dataProducerPlugins != nil {
526+
config = config.WithDataProducers(test.dataProducerPlugins)
523527
}
524528
if test.admitRequestPlugins != nil {
525529
config = config.WithAdmitRequestPlugins(test.admitRequestPlugins)
@@ -569,10 +573,10 @@ func TestDirector_HandleRequest(t *testing.T) {
569573
"Mutated reqCtx.Request.Body model mismatch")
570574
}
571575
if test.admitRequestPlugins != nil {
572-
assert.True(t, test.admitRequestPlugins.admitRequestCalled, "AdmitRequestPlugins not called")
576+
assert.True(t, test.admitRequestPlugins.admitRequestCalled, "AdmitRequest not called")
573577
}
574-
if test.prepareDataPlugins != nil {
575-
assert.True(t, test.prepareDataPlugins.prepareDataCalled, "PrepareDataPlugins not called")
578+
if test.dataProducerPlugins != nil {
579+
assert.True(t, test.dataProducerPlugins.prepareRequestDataCalled, "PrepareRequestData not called")
576580
}
577581
})
578582
}

pkg/epp/requestcontrol/plugins.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,19 @@ type ResponseComplete interface {
5858
ResponseComplete(ctx context.Context, request *types.LLMRequest, response *Response, targetPod *backend.Pod)
5959
}
6060

61-
// PrepareData is called by the director before scheduling requests.
62-
// PrepareData plugin is implemented by data producers which produce data from different sources.
63-
type PrepareData interface {
64-
plugins.Plugin
65-
PrepareData(ctx context.Context, request *types.LLMRequest, pods []types.Pod)
61+
// PrepareRequestData is called by the director before scheduling requests.
62+
// DataProducer plugin is implemented by data producers which produce data from different sources.
63+
type DataProducer interface {
64+
plugins.ProducerPlugin
65+
PrepareRequestData(ctx context.Context, request *types.LLMRequest, pods []types.Pod)
6666
}
6767

68-
// AdmitRequest is called by the director after the PrepareData plugins and before scheduling.
69-
// AdmitRequest plugin is implemented by plugins for admission control. These plugins need to implement Admit method.
70-
type AdmitRequest interface {
68+
// AdmissionPlugin is called by the director after the prepare data phase and before scheduling.
69+
// When a request has to go through multiple AdmissionPlugin,
70+
// the request is admitted only if all plugins say that the request should be admitted.
71+
type AdmissionPlugin interface {
7172
plugins.Plugin
72-
// Admit returns the denial reason if the request is denied. If the request is allowed, it returns an empty string.
73-
Admit(ctx context.Context, request *types.LLMRequest, pods []types.Pod) string
73+
// AdmitRequest returns the denial reason, wrapped as error if the request is denied.
74+
// If the request is allowed, it returns nil.
75+
AdmitRequest(ctx context.Context, request *types.LLMRequest, pods []types.Pod) error
7476
}

pkg/epp/requestcontrol/request_control_config.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ import (
2323
// NewConfig creates a new Config object and returns its pointer.
2424
func NewConfig() *Config {
2525
return &Config{
26-
admitRequestPlugins: []AdmitRequest{},
27-
prepareDataPlugins: []PrepareData{},
26+
admitRequestPlugins: []AdmissionPlugin{},
27+
dataProducerPlugins: []DataProducer{},
2828
preRequestPlugins: []PreRequest{},
2929
responseReceivedPlugins: []ResponseReceived{},
3030
responseStreamingPlugins: []ResponseStreaming{},
@@ -34,8 +34,8 @@ func NewConfig() *Config {
3434

3535
// Config provides a configuration for the requestcontrol plugins.
3636
type Config struct {
37-
admitRequestPlugins []AdmitRequest
38-
prepareDataPlugins []PrepareData
37+
admitRequestPlugins []AdmissionPlugin
38+
dataProducerPlugins []DataProducer
3939
preRequestPlugins []PreRequest
4040
responseReceivedPlugins []ResponseReceived
4141
responseStreamingPlugins []ResponseStreaming
@@ -71,13 +71,13 @@ func (c *Config) WithResponseCompletePlugins(plugins ...ResponseComplete) *Confi
7171
}
7272

7373
// WithPrepareDataPlugins sets the given plugins as the PrepareData plugins.
74-
func (c *Config) WithPrepareDataPlugins(plugins ...PrepareData) *Config {
75-
c.prepareDataPlugins = plugins
74+
func (c *Config) WithDataProducers(plugins ...DataProducer) *Config {
75+
c.dataProducerPlugins = plugins
7676
return c
7777
}
7878

7979
// WithAdmitRequestPlugins sets the given plugins as the AdmitRequest plugins.
80-
func (c *Config) WithAdmitRequestPlugins(plugins ...AdmitRequest) *Config {
80+
func (c *Config) WithAdmitRequestPlugins(plugins ...AdmissionPlugin) *Config {
8181
c.admitRequestPlugins = plugins
8282
return c
8383
}

0 commit comments

Comments
 (0)