diff --git a/sdk/translator/registry.go b/sdk/translator/registry.go index ace97137..98909c10 100644 --- a/sdk/translator/registry.go +++ b/sdk/translator/registry.go @@ -3,6 +3,9 @@ package translator import ( "context" "sync" + + "github.com/tidwall/gjson" + "github.com/tidwall/sjson" ) // Registry manages translation functions across schemas. @@ -39,7 +42,9 @@ func (r *Registry) Register(from, to Format, request RequestTransform, response } // TranslateRequest converts a payload between schemas, returning the original payload -// if no translator is registered. +// if no translator is registered. When falling back to the original payload, the +// "model" field is still updated to match the resolved model name so that +// client-side prefixes (e.g. "copilot/gpt-5-mini") are not leaked upstream. func (r *Registry) TranslateRequest(from, to Format, model string, rawJSON []byte, stream bool) []byte { r.mu.RLock() defer r.mu.RUnlock() @@ -49,6 +54,11 @@ func (r *Registry) TranslateRequest(from, to Format, model string, rawJSON []byt return fn(model, rawJSON, stream) } } + if model != "" && gjson.GetBytes(rawJSON, "model").String() != model { + if updated, err := sjson.SetBytes(rawJSON, "model", model); err == nil { + return updated + } + } return rawJSON }