@@ -7,6 +7,7 @@ package extproc
77
88import  (
99	"bytes" 
10+ 	"cmp" 
1011	"context" 
1112	"encoding/json" 
1213	"fmt" 
@@ -164,7 +165,7 @@ type imageGenerationProcessorUpstreamFilter struct {
164165	requestHeaders          map [string ]string 
165166	responseHeaders         map [string ]string 
166167	responseEncoding        string 
167- 	modelNameOverride       string 
168+ 	modelNameOverride       internalapi. ModelNameOverride 
168169	backendName             string 
169170	handler                 backendauth.Handler 
170171	headerMutator           * headermutator.HeaderMutator 
@@ -188,7 +189,7 @@ type imageGenerationProcessorUpstreamFilter struct {
188189func  (i  * imageGenerationProcessorUpstreamFilter ) selectTranslator (out  filterapi.VersionedAPISchema ) error  {
189190	switch  out .Name  {
190191	case  filterapi .APISchemaOpenAI :
191- 		i .translator  =  translator .NewImageGenerationOpenAIToOpenAITranslator (out .Version , i .modelNameOverride )
192+ 		i .translator  =  translator .NewImageGenerationOpenAIToOpenAITranslator (out .Version , i .modelNameOverride ,  i . span )
192193	case  filterapi .APISchemaAWSBedrock :
193194		// i.translator = translator.NewImageGenerationOpenAIToAWSBedrockTranslator(i.modelNameOverride) 
194195		i .translator  =  nil  // Placeholder 
@@ -213,12 +214,12 @@ func (i *imageGenerationProcessorUpstreamFilter) ProcessRequestHeaders(ctx conte
213214
214215	// Start tracking metrics for this request. 
215216	i .metrics .StartRequest (i .requestHeaders )
216- 	// For image generation we generally expect  request and response model to match.  
217- 	// If a backend override occurs, response model may be updated downstream via headers but we keep 
218- 	// metrics consistent with  the selected  model header . 
219- 	m  :=  i .requestHeaders [i .config .modelNameHeaderKey ]
220- 	i .metrics .SetRequestModel (internalapi .RequestModel (m ))
221- 	i .metrics .SetResponseModel (internalapi .ResponseModel (m ))
217+ 	// Set the original model from the  request body before any overrides  
218+ 	i . metrics . SetOriginalModel ( internalapi . OriginalModel ( i . originalRequestBody . Model )) 
219+ 	// Set the request model for metrics from  the original  model or override if applied . 
220+ 	reqModel  :=  cmp . Or ( i .requestHeaders [i .config .modelNameHeaderKey ],  string ( i . originalRequestBody . Model )) 
221+ 	i .metrics .SetRequestModel (internalapi .RequestModel (reqModel ))
222+ 	i .metrics .SetResponseModel (internalapi .ResponseModel (reqModel ))
222223
223224	// We force the body mutation in the following cases: 
224225	// * The request is a retry request because the body mutation might have happened the previous iteration. 
@@ -470,7 +471,9 @@ func (i *imageGenerationProcessorUpstreamFilter) SetBackend(ctx context.Context,
470471	i .headerMutator  =  headermutator .NewHeaderMutator (b .HeaderMutation , rp .requestHeaders )
471472	// Sync header with backend model so header-derived labels/CEL use the actual model. 
472473	if  i .modelNameOverride  !=  ""  {
473- 		i .requestHeaders [i .config .modelNameHeaderKey ] =  i .modelNameOverride 
474+ 		i .requestHeaders [i .config .modelNameHeaderKey ] =  string (i .modelNameOverride )
475+ 		// Update metrics with the overridden model 
476+ 		i .metrics .SetRequestModel (internalapi .RequestModel (i .modelNameOverride ))
474477	}
475478	i .originalRequestBody  =  rp .originalRequestBody 
476479	i .originalRequestBodyRaw  =  rp .originalRequestBodyRaw 
0 commit comments