Skip to content

Commit 9cfe65f

Browse files
committed
Refactor director to split into smaller functions
1 parent c12dd26 commit 9cfe65f

File tree

1 file changed

+37
-19
lines changed

1 file changed

+37
-19
lines changed

pkg/epp/requestcontrol/director.go

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"strings"
2727
"time"
2828

29+
"github.com/go-logr/logr"
2930
"sigs.k8s.io/controller-runtime/pkg/log"
3031

3132
v1 "sigs.k8s.io/gateway-api-inference-extension/api/v1"
@@ -89,42 +90,59 @@ type Director struct {
8990
defaultPriority int
9091
}
9192

92-
// HandleRequest orchestrates the request lifecycle.
93-
// It always returns the requestContext even in the error case, as the request context is used in error handling.
94-
func (d *Director) HandleRequest(ctx context.Context, reqCtx *handlers.RequestContext) (*handlers.RequestContext, error) {
95-
logger := log.FromContext(ctx)
93+
// getInferenceObjective creates inferenceObjective based on reqCtx.
94+
func (d *Director) getInferenceObjective(logger logr.Logger, reqCtx *handlers.RequestContext) *v1alpha2.InferenceObjective {
95+
infObjective := d.datastore.ObjectiveGet(reqCtx.ObjectiveKey)
96+
if infObjective == nil {
97+
logger.V(logutil.VERBOSE).Info("No associated InferenceObjective found, using default", "objectiveKey", reqCtx.ObjectiveKey)
98+
infObjective = &v1alpha2.InferenceObjective{
99+
Spec: v1alpha2.InferenceObjectiveSpec{
100+
Priority: &d.defaultPriority,
101+
},
102+
}
103+
} else if infObjective.Spec.Priority == nil {
104+
// Default to 0 if not specified.
105+
infObjective.Spec.Priority = &d.defaultPriority
106+
}
107+
return infObjective
108+
}
96109

97-
// Parse Request, Resolve Target Models, and Determine Parameters
110+
// resolveTargetModel is a helper that resolves targetModel
111+
// and updates the reqCtx and ctx.
112+
func (d *Director) resolveTargetModel(reqCtx *handlers.RequestContext) error {
98113
requestBodyMap := reqCtx.Request.Body
99114
var ok bool
100115
reqCtx.IncomingModelName, ok = requestBodyMap["model"].(string)
101-
102116
if !ok {
103-
return reqCtx, errutil.Error{Code: errutil.BadRequest, Msg: "model not found in request body"}
117+
return errutil.Error{Code: errutil.BadRequest, Msg: "model not found in request body"}
104118
}
105119
if reqCtx.TargetModelName == "" {
106120
// Default to incoming model name
107121
reqCtx.TargetModelName = reqCtx.IncomingModelName
108122
}
109123
reqCtx.Request.Body["model"] = reqCtx.TargetModelName
124+
return nil
125+
}
126+
127+
// HandleRequest orchestrates the request lifecycle.
128+
// It always returns the requestContext even in the error case, as the request context is used in error handling.
129+
func (d *Director) HandleRequest(ctx context.Context, reqCtx *handlers.RequestContext) (*handlers.RequestContext, error) {
130+
logger := log.FromContext(ctx)
131+
132+
// Resolve target model and update req context.
133+
err := d.resolveTargetModel(reqCtx)
134+
if err != nil {
135+
return reqCtx, err
136+
}
110137

138+
// Parse request body.
111139
requestBody, err := requtil.ExtractRequestBody(reqCtx.Request.Body)
112140
if err != nil {
113141
return reqCtx, errutil.Error{Code: errutil.BadRequest, Msg: fmt.Errorf("failed to extract request data: %w", err).Error()}
114142
}
115143

116-
infObjective := d.datastore.ObjectiveGet(reqCtx.ObjectiveKey)
117-
if infObjective == nil {
118-
logger.V(logutil.VERBOSE).Info("No associated InferenceObjective found, using default", "objectiveKey", reqCtx.ObjectiveKey)
119-
infObjective = &v1alpha2.InferenceObjective{
120-
Spec: v1alpha2.InferenceObjectiveSpec{
121-
Priority: &d.defaultPriority,
122-
},
123-
}
124-
} else if infObjective.Spec.Priority == nil {
125-
// Default to 0 if not specified.
126-
infObjective.Spec.Priority = &d.defaultPriority
127-
}
144+
// Parse inference objective.
145+
infObjective := d.getInferenceObjective(logger, reqCtx)
128146

129147
// Prepare LLMRequest (needed for both saturation detection and Scheduler)
130148
reqCtx.SchedulingRequest = &schedulingtypes.LLMRequest{

0 commit comments

Comments
 (0)