Isolate parsed provider parameters
This commit is contained in:
@@ -85,6 +85,7 @@ func (f ExecutionFlags[I]) bindings() []requestBinding[I] {
|
||||
}
|
||||
|
||||
// NewExecutionFlags binds execution controls to a field of the caller's input.
|
||||
// Parsed provider parameters are copied when the binding is applied.
|
||||
func NewExecutionFlags[I any](destination func(*I) *ExecutionInput) ExecutionFlags[I] {
|
||||
target := func(input *I) *promptkit.ExecutionTargetOverride {
|
||||
value := destination(input)
|
||||
@@ -104,7 +105,36 @@ func NewExecutionFlags[I any](destination func(*I) *ExecutionInput) ExecutionFla
|
||||
ReasoningEffort: executionFlag(requestFlags.ReasoningEffort.meta, parseDefinitionString, func(i *I, v string) { target(i).ReasoningEffort = &v }),
|
||||
APIKeyEnv: executionFlag(requestFlags.APIKeyEnv.meta, parseDefinitionString, func(i *I, v string) { target(i).APIKeyEnv = v }),
|
||||
TransientRetries: executionFlag(requestFlags.TransientRetries.meta, strconv.Atoi, func(i *I, v int) { destination(i).TransientRetries = &v }),
|
||||
ExtraParams: executionFlag(requestFlags.ExtraParams.meta, parseExtraParams, func(i *I, v map[string]any) { target(i).ExtraParams = v }),
|
||||
ExtraParams: executionFlag(requestFlags.ExtraParams.meta, parseExtraParams, func(i *I, v map[string]any) { target(i).ExtraParams = copyProviderParams(v) }),
|
||||
}
|
||||
}
|
||||
|
||||
func copyProviderParams(params map[string]any) map[string]any {
|
||||
if params == nil {
|
||||
return nil
|
||||
}
|
||||
result := make(map[string]any, len(params))
|
||||
for key, value := range params {
|
||||
result[key] = copyProviderValue(value)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func copyProviderValue(value any) any {
|
||||
switch value := value.(type) {
|
||||
case map[string]any:
|
||||
return copyProviderParams(value)
|
||||
case []any:
|
||||
if value == nil {
|
||||
return []any(nil)
|
||||
}
|
||||
result := make([]any, len(value))
|
||||
for i, element := range value {
|
||||
result[i] = copyProviderValue(element)
|
||||
}
|
||||
return result
|
||||
default:
|
||||
return value
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user