Add reusable PromptKit request flags

This commit is contained in:
2026-11-07 04:16:09 +00:00
parent 6378ceb3c5
commit c3d5f551c3
17 changed files with 450 additions and 239 deletions

View File

@@ -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)