diff --git a/internal/usecase/smoke_selection.go b/internal/usecase/smoke_selection.go index 0bd91df..cfc99c4 100644 --- a/internal/usecase/smoke_selection.go +++ b/internal/usecase/smoke_selection.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "net/url" - "strings" "gitea.maximumdirect.net/eric/promptkit/internal/defaults" "gitea.maximumdirect.net/eric/promptkit/internal/domain" @@ -36,15 +35,12 @@ func (r *Runner) resolveSmokeTestTarget(ctx context.Context, req domain.SmokeTes return nil, fmt.Errorf("%w: %w", ErrInvalidRequest, err) } - promptID := strings.TrimSpace(req.PromptID) - profileID := strings.TrimSpace(req.ProfileID) - backendID := strings.TrimSpace(req.BackendID) - if promptID == "" && strings.TrimSpace(req.PromptVersion) != "" { + if req.PromptID == "" && req.PromptVersion != "" { return nil, fmt.Errorf("%w: prompt version requires a prompt id", ErrInvalidRequest) } var promptInspection *domain.PromptInspection - if promptID != "" { + if req.PromptID != "" { promptInspection, err = r.resolvePromptInspection(ctx, req.PromptID, req.PromptVersion) if err != nil { return nil, err @@ -54,13 +50,13 @@ func (r *Runner) resolveSmokeTestTarget(ctx context.Context, req domain.SmokeTes selection := &smokeTestSelection{transientRetries: transientRetries} var selectedProfileID string switch { - case profileID != "": + case req.ProfileID != "": selectedProfileID = req.ProfileID selection.target.SelectionSource = smokeSelectionSourceProfile case promptInspection != nil && (promptInspection.DefaultProfileID != "" || isInferenceSmokeTest(req.Kind)): selectedProfileID = promptInspection.DefaultProfileID selection.target.SelectionSource = smokeSelectionSourcePrompt - case backendID != "" && isInferenceSmokeTest(req.Kind): + case req.BackendID != "" && isInferenceSmokeTest(req.Kind): backend, err := r.resolveSmokeBackend(req.BackendID) if err != nil { return nil, err @@ -72,7 +68,7 @@ func (r *Runner) resolveSmokeTestTarget(ctx context.Context, req domain.SmokeTes selection.backend = backend selection.target.DefaultSourceBackendID = backend.ID selection.target.SelectionSource = smokeSelectionSourceBackendDefault - case backendID != "": + case req.BackendID != "": backend, err := r.resolveSmokeBackend(req.BackendID) if err != nil { return nil, err diff --git a/internal/usecase/smoke_selection_test.go b/internal/usecase/smoke_selection_test.go index c6becf1..84afb33 100644 --- a/internal/usecase/smoke_selection_test.go +++ b/internal/usecase/smoke_selection_test.go @@ -262,6 +262,27 @@ func TestResolveSmokeTestTargetSelectionAndSettingsErrors(t *testing.T) { }, wantErr: ErrProfileLoad, }, + { + name: "invalid prompt selection does not fall back", + request: domain.SmokeTestRequest{ + Kind: domain.SmokeTestTextInference, PromptID: "missing.prompt", BackendID: "epsilon", + }, + wantErr: ErrPromptLoad, + }, + { + name: "blank explicit profile does not fall back", + request: domain.SmokeTestRequest{ + Kind: domain.SmokeTestTextInference, ProfileID: " ", BackendID: "epsilon", + }, + wantErr: ErrInvalidRequest, + }, + { + name: "version cannot be supplied without prompt", + request: domain.SmokeTestRequest{ + Kind: domain.SmokeTestTextInference, PromptVersion: " ", BackendID: "epsilon", + }, + wantErr: ErrInvalidRequest, + }, { name: "dangling backend default fails only when selected", request: domain.SmokeTestRequest{Kind: domain.SmokeTestTextInference, BackendID: "delta"},