Add reusable PromptKit request flags
This commit is contained in:
@@ -4,7 +4,6 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"strconv"
|
||||
|
||||
"go.maximumdirect.net/ckconfig"
|
||||
commandkit "go.maximumdirect.net/commandkit"
|
||||
@@ -15,6 +14,8 @@ type smokeCommandInput[I any] struct {
|
||||
selection ckconfig.Selection
|
||||
kind string
|
||||
request promptkit.SmokeTestRequest
|
||||
execution ExecutionInput
|
||||
resources ResourceInput
|
||||
captured commandkit.FlagValues[I]
|
||||
selected I
|
||||
}
|
||||
@@ -35,98 +36,13 @@ func newSmokeTestCommand[I, S any](suite Suite[I, S]) commandkit.Command {
|
||||
func(input **smokeCommandInput[I], value commandkit.Supplied[string]) {
|
||||
(*input).selection.Overlay = value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "backend", Usage: "PromptKit backend ID."}, (*string)(nil), parseDefinitionString,
|
||||
func(input **smokeCommandInput[I], value commandkit.Supplied[string]) {
|
||||
(*input).request.BackendID = value.Value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "prompt", Usage: "PromptKit prompt ID."}, (*string)(nil), parseDefinitionString,
|
||||
func(input **smokeCommandInput[I], value commandkit.Supplied[string]) {
|
||||
(*input).request.PromptID = value.Value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "profile", Usage: "PromptKit profile ID."}, (*string)(nil), parseDefinitionString,
|
||||
func(input **smokeCommandInput[I], value commandkit.Supplied[string]) {
|
||||
(*input).request.ProfileID = value.Value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "endpoint", Usage: "Execution endpoint override."}, (*string)(nil), parseDefinitionString,
|
||||
func(input **smokeCommandInput[I], value commandkit.Supplied[string]) {
|
||||
if !value.Set {
|
||||
return
|
||||
}
|
||||
execution := smokeExecution(input)
|
||||
execution.Endpoint = value.Value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "model", Usage: "Execution model override."}, (*string)(nil), parseDefinitionString,
|
||||
func(input **smokeCommandInput[I], value commandkit.Supplied[string]) {
|
||||
if !value.Set {
|
||||
return
|
||||
}
|
||||
execution := smokeExecution(input)
|
||||
execution.Model = value.Value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "temperature", Usage: "Execution temperature override."}, (*float64)(nil), parseSmokeFloat,
|
||||
func(input **smokeCommandInput[I], value commandkit.Supplied[float64]) {
|
||||
if !value.Set {
|
||||
return
|
||||
}
|
||||
execution := smokeExecution(input)
|
||||
execution.Temperature = &value.Value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "max-tokens", Usage: "Execution maximum tokens override."}, (*int)(nil), strconv.Atoi,
|
||||
func(input **smokeCommandInput[I], value commandkit.Supplied[int]) {
|
||||
if !value.Set {
|
||||
return
|
||||
}
|
||||
execution := smokeExecution(input)
|
||||
execution.MaxTokens = &value.Value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "top-p", Usage: "Execution top-p override."}, (*float64)(nil), parseSmokeFloat,
|
||||
func(input **smokeCommandInput[I], value commandkit.Supplied[float64]) {
|
||||
if !value.Set {
|
||||
return
|
||||
}
|
||||
execution := smokeExecution(input)
|
||||
execution.TopP = &value.Value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "timeout-seconds", Usage: "Execution timeout override."}, (*int)(nil), strconv.Atoi,
|
||||
func(input **smokeCommandInput[I], value commandkit.Supplied[int]) {
|
||||
if !value.Set {
|
||||
return
|
||||
}
|
||||
execution := smokeExecution(input)
|
||||
execution.TimeoutSeconds = &value.Value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "service-tier", Usage: "Execution service tier."}, (*string)(nil), parseDefinitionString,
|
||||
func(input **smokeCommandInput[I], value commandkit.Supplied[string]) {
|
||||
if !value.Set {
|
||||
return
|
||||
}
|
||||
execution := smokeExecution(input)
|
||||
execution.ServiceTier = value.Value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "reasoning-effort", Usage: "Execution reasoning effort override."}, (*string)(nil), parseDefinitionString,
|
||||
func(input **smokeCommandInput[I], value commandkit.Supplied[string]) {
|
||||
if !value.Set {
|
||||
return
|
||||
}
|
||||
execution := smokeExecution(input)
|
||||
execution.ReasoningEffort = &value.Value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "api-key-env", Usage: "Execution API key environment variable."}, (*string)(nil), parseDefinitionString,
|
||||
func(input **smokeCommandInput[I], value commandkit.Supplied[string]) {
|
||||
if !value.Set {
|
||||
return
|
||||
}
|
||||
execution := smokeExecution(input)
|
||||
execution.APIKeyEnv = value.Value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "transient-retries", Usage: "Inference transient retry count."}, (*int)(nil), strconv.Atoi,
|
||||
func(input **smokeCommandInput[I], value commandkit.Supplied[int]) {
|
||||
if value.Set {
|
||||
(*input).request.TransientRetries = &value.Value
|
||||
}
|
||||
}),
|
||||
)
|
||||
|
||||
resources := NewResourceFlags(func(input **smokeCommandInput[I]) *ResourceInput { return &(*input).resources })
|
||||
execution := NewExecutionFlags(func(input **smokeCommandInput[I]) *ExecutionInput { return &(*input).execution })
|
||||
flags = append(flags, resources.Backend, resources.Prompt, resources.Profile)
|
||||
flags = append(flags, execution.All()...)
|
||||
|
||||
return commandkit.NewCommand(commandkit.CommandSpec[*smokeCommandInput[I]]{
|
||||
Name: "test",
|
||||
Summary: "Run one PromptKit smoke test.",
|
||||
@@ -142,6 +58,11 @@ func newSmokeTestCommand[I, S any](suite Suite[I, S]) commandkit.Command {
|
||||
if input == nil {
|
||||
return errors.New("PromptKit smoke-test input must not be nil")
|
||||
}
|
||||
input.request.BackendID = input.resources.Backend.Value
|
||||
input.request.PromptID = input.resources.Prompt.Value
|
||||
input.request.ProfileID = input.resources.Profile.Value
|
||||
input.request.Execution = input.execution.Execution
|
||||
input.request.TransientRetries = input.execution.TransientRetries
|
||||
if input.kind != "all" {
|
||||
input.request.Kind = promptkit.SmokeTestKind(input.kind)
|
||||
}
|
||||
@@ -158,17 +79,6 @@ func newSmokeTestCommand[I, S any](suite Suite[I, S]) commandkit.Command {
|
||||
})
|
||||
}
|
||||
|
||||
func smokeExecution[I any](input **smokeCommandInput[I]) *promptkit.ExecutionTargetOverride {
|
||||
if (*input).request.Execution == nil {
|
||||
(*input).request.Execution = &promptkit.ExecutionTargetOverride{}
|
||||
}
|
||||
return (*input).request.Execution
|
||||
}
|
||||
|
||||
func parseSmokeFloat(value string) (float64, error) {
|
||||
return strconv.ParseFloat(value, 64)
|
||||
}
|
||||
|
||||
func runSmokeTest[I, S any](invocation commandkit.Invocation, suite Suite[I, S], input *smokeCommandInput[I]) commandkit.Outcome {
|
||||
if err := promptKitContextError(invocation.Context); err != nil {
|
||||
return definitionFailure("PromptKit smoke testing was canceled.", commandkit.Explanation{}, err)
|
||||
|
||||
Reference in New Issue
Block a user