Skip to content

Commit c28ea9a

Browse files
extproc: update image generation processor metrics and handling
Signed-off-by: Hrushikesh Patil <[email protected]>
1 parent eb33b33 commit c28ea9a

File tree

1 file changed

+42
-25
lines changed

1 file changed

+42
-25
lines changed

internal/extproc/imagegeneration_processor.go

Lines changed: 42 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,7 @@ type imageGenerationProcessorUpstreamFilter struct {
190190
func (i *imageGenerationProcessorUpstreamFilter) selectTranslator(out filterapi.VersionedAPISchema) error {
191191
switch out.Name {
192192
case filterapi.APISchemaOpenAI:
193-
// i.translator = translator.NewImageGenerationOpenAIToOpenAITranslator(out.Version, i.modelNameOverride)
194-
i.translator = nil // Placeholder
193+
i.translator = translator.NewImageGenerationOpenAIToOpenAITranslator(out.Version, i.modelNameOverride)
195194
case filterapi.APISchemaAWSBedrock:
196195
// i.translator = translator.NewImageGenerationOpenAIToAWSBedrockTranslator(i.modelNameOverride)
197196
i.translator = nil // Placeholder
@@ -220,13 +219,18 @@ func (i *imageGenerationProcessorUpstreamFilter) ProcessRequestHeaders(ctx conte
220219

221220
// We force the body mutation in the following cases:
222221
// * The request is a retry request because the body mutation might have happened the previous iteration.
223-
// TODO: Implement proper translator request body transformation
224-
// forceBodyMutation := i.onRetry
225-
// headerMutation, bodyMutation, err := i.translator.RequestBody(i.originalRequestBodyRaw, i.originalRequestBody, forceBodyMutation)
226-
// if err != nil {
227-
// return nil, fmt.Errorf("failed to transform request: %w", err)
228-
// }
229-
headerMutation, bodyMutation := &extprocv3.HeaderMutation{}, (*extprocv3.BodyMutation)(nil)
222+
var headerMutation *extprocv3.HeaderMutation
223+
var bodyMutation *extprocv3.BodyMutation
224+
if i.translator != nil {
225+
forceBodyMutation := i.onRetry
226+
headerMutation, bodyMutation, err = i.translator.RequestBody(i.originalRequestBodyRaw, i.originalRequestBody, forceBodyMutation)
227+
if err != nil {
228+
return nil, fmt.Errorf("failed to transform request: %w", err)
229+
}
230+
}
231+
if headerMutation == nil {
232+
headerMutation = &extprocv3.HeaderMutation{}
233+
}
230234

231235
// Apply header mutations from the route and also restore original headers on retry.
232236
if h := i.headerMutator; h != nil {
@@ -280,12 +284,13 @@ func (i *imageGenerationProcessorUpstreamFilter) ProcessResponseHeaders(ctx cont
280284
if enc := i.responseHeaders["content-encoding"]; enc != "" {
281285
i.responseEncoding = enc
282286
}
283-
// TODO: Implement proper translator response headers transformation
284-
// headerMutation, err := i.translator.ResponseHeaders(i.responseHeaders)
285-
// if err != nil {
286-
// return nil, fmt.Errorf("failed to transform response headers: %w", err)
287-
// }
288-
headerMutation := (*extprocv3.HeaderMutation)(nil)
287+
var headerMutation *extprocv3.HeaderMutation
288+
if i.translator != nil {
289+
headerMutation, err = i.translator.ResponseHeaders(i.responseHeaders)
290+
if err != nil {
291+
return nil, fmt.Errorf("failed to transform response headers: %w", err)
292+
}
293+
}
289294

290295
var mode *extprocv3http.ProcessingMode
291296
if i.stream && i.responseHeaders[":status"] == "200" {
@@ -317,12 +322,18 @@ func (i *imageGenerationProcessorUpstreamFilter) ProcessResponseBody(ctx context
317322
if code, _ := strconv.Atoi(i.responseHeaders[":status"]); !isGoodStatusCode(code) {
318323
var headerMutation *extprocv3.HeaderMutation
319324
var bodyMutation *extprocv3.BodyMutation
320-
// TODO: Implement proper translator response error transformation
321-
// headerMutation, bodyMutation, err = i.translator.ResponseError(i.responseHeaders, bytes.NewReader(body.Body))
322-
// if err != nil {
323-
// return nil, fmt.Errorf("failed to transform response error: %w", err)
324-
// }
325-
headerMutation, bodyMutation = &extprocv3.HeaderMutation{}, &extprocv3.BodyMutation{}
325+
if i.translator != nil {
326+
headerMutation, bodyMutation, err = i.translator.ResponseError(i.responseHeaders, bytes.NewReader(body.Body))
327+
if err != nil {
328+
return nil, fmt.Errorf("failed to transform response error: %w", err)
329+
}
330+
}
331+
if headerMutation == nil {
332+
headerMutation = &extprocv3.HeaderMutation{}
333+
}
334+
if bodyMutation == nil {
335+
bodyMutation = &extprocv3.BodyMutation{}
336+
}
326337
if i.span != nil {
327338
b := bodyMutation.GetBody()
328339
if b == nil {
@@ -344,10 +355,16 @@ func (i *imageGenerationProcessorUpstreamFilter) ProcessResponseBody(ctx context
344355
}, nil
345356
}
346357

347-
// TODO: Implement proper translator response body transformation
348-
headerMutation, bodyMutation, tokenUsage, imageMetadata, err := i.translator.ResponseBody(i.responseHeaders, bytes.NewReader(body.Body), body.EndOfStream)
349-
if err != nil {
350-
return nil, fmt.Errorf("failed to transform response: %w", err)
358+
// Translator response body transformation (if available)
359+
var headerMutation *extprocv3.HeaderMutation
360+
var bodyMutation *extprocv3.BodyMutation
361+
var tokenUsage translator.LLMTokenUsage
362+
var imageMetadata translator.ImageGenerationMetadata
363+
if i.translator != nil {
364+
headerMutation, bodyMutation, tokenUsage, imageMetadata, err = i.translator.ResponseBody(i.responseHeaders, bytes.NewReader(body.Body), body.EndOfStream)
365+
if err != nil {
366+
return nil, fmt.Errorf("failed to transform response: %w", err)
367+
}
351368
}
352369

353370
// TODO: Implement gzip handling when bodyMutation is non-nil and response is gzipped

0 commit comments

Comments
 (0)