Protect retained metadata from custom JSON encoders

This commit is contained in:
2026-11-06 01:15:55 +00:00
parent d8c98ac575
commit c9663ec63c
4 changed files with 145 additions and 10 deletions

View File

@@ -17,6 +17,7 @@ import (
"go.maximumdirect.net/promptkit/internal/defaults"
"go.maximumdirect.net/promptkit/internal/domain"
"go.maximumdirect.net/promptkit/internal/jsonvalue"
)
var (
@@ -125,6 +126,9 @@ func (c *OpenAICompatibleClient) PrepareGeneration(req domain.GenerateRequest) (
return nil, fmt.Errorf("%w: invalid endpoint path: %v", ErrInvalidRequest, err)
}
// Custom JSON encoders may mutate their receivers. Both payload encoding
// and encoding-failure diagnostics must use values detached from metadata.
req.Target.ExtraParams = jsonvalue.CloneTrusted(req.Target.ExtraParams).(map[string]any)
wirePayload, err := openAIChatRequestPayload(req)
if err != nil {
return nil, fmt.Errorf("%w: %v", ErrInvalidRequest, err)