63 lines
1.6 KiB
Go
63 lines
1.6 KiB
Go
package promptkit_test
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/promptkit"
|
|
)
|
|
|
|
func TestPreparationRejectsInvalidOutputContractWithPublicError(t *testing.T) {
|
|
engine := newSimpleEngine(t, "message")
|
|
|
|
for _, tc := range []struct {
|
|
name string
|
|
contract promptkit.OutputContract
|
|
}{
|
|
{
|
|
name: "unsupported format",
|
|
contract: promptkit.OutputContract{
|
|
Format: promptkit.OutputFormat("binary"),
|
|
ValidationMode: promptkit.ValidationNone,
|
|
},
|
|
},
|
|
{
|
|
name: "repair attempts above maximum",
|
|
contract: promptkit.OutputContract{
|
|
Format: promptkit.FormatText,
|
|
ValidationMode: promptkit.ValidationBasic,
|
|
RepairAttempts: 4,
|
|
},
|
|
},
|
|
{
|
|
name: "none validation with repair attempts",
|
|
contract: promptkit.OutputContract{
|
|
Format: promptkit.FormatText,
|
|
ValidationMode: promptkit.ValidationNone,
|
|
RepairAttempts: 1,
|
|
},
|
|
},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
req := promptkit.RunRequest{PromptID: "prompt", Validation: &tc.contract}
|
|
|
|
prepared, err := engine.Prepare(context.Background(), req)
|
|
if prepared != nil {
|
|
t.Fatalf("expected no partial prepared run, got %+v", prepared)
|
|
}
|
|
if !errors.Is(err, promptkit.ErrInvalidRequest) {
|
|
t.Fatalf("prepare error = %v, want ErrInvalidRequest", err)
|
|
}
|
|
|
|
preparedExecution, err := engine.PrepareExecution(context.Background(), req)
|
|
if preparedExecution != nil {
|
|
t.Fatalf("expected no partial prepared execution, got %+v", preparedExecution)
|
|
}
|
|
if !errors.Is(err, promptkit.ErrInvalidRequest) {
|
|
t.Fatalf("prepare execution error = %v, want ErrInvalidRequest", err)
|
|
}
|
|
})
|
|
}
|
|
}
|