Preserve public error categories from collaborators
This commit is contained in:
@@ -915,6 +915,12 @@ func TestArtifactReaderFailuresPreserveArtifactLoadErrors(t *testing.T) {
|
||||
}},
|
||||
wantNested: context.Canceled,
|
||||
},
|
||||
{
|
||||
name: "public reader error",
|
||||
ctx: context.Background(),
|
||||
reader: &recordingArtifactReader{err: scriptorium.ErrInvalidRequest},
|
||||
wantNested: scriptorium.ErrInvalidRequest,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
@@ -936,6 +942,26 @@ func TestArtifactReaderFailuresPreserveArtifactLoadErrors(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestRunAddsLLMGenerateToCollaboratorPublicError(t *testing.T) {
|
||||
engine := newContractEngineWithOptions(t, frameworkSchemaDir,
|
||||
scriptorium.WithLLMClient(&fakeLLMClient{err: scriptorium.ErrArtifactLoad}),
|
||||
)
|
||||
|
||||
_, err := engine.Run(context.Background(), scriptorium.RunRequest{
|
||||
PromptID: frameworkMarkdownSummaryPromptID,
|
||||
Inputs: map[string]scriptorium.ArtifactRef{
|
||||
"transcript": scriptorium.Inline("Rin opens the gate."),
|
||||
"glossary": scriptorium.Inline("gate: A guarded passage."),
|
||||
},
|
||||
})
|
||||
if !errors.Is(err, scriptorium.ErrLLMGenerate) {
|
||||
t.Fatalf("expected ErrLLMGenerate, got %v", err)
|
||||
}
|
||||
if !errors.Is(err, scriptorium.ErrArtifactLoad) {
|
||||
t.Fatalf("expected preserved ErrArtifactLoad, got %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPrepareWithoutProfileMatchesSpecificPublicError(t *testing.T) {
|
||||
promptDir := t.TempDir()
|
||||
writePublicPromptFile(t, promptDir, "profile-required", "")
|
||||
|
||||
25
errors.go
25
errors.go
@@ -13,9 +13,6 @@ func mapPublicError(err error) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
if hasPublicError(err) {
|
||||
return err
|
||||
}
|
||||
publicErr := publicErrorFor(err)
|
||||
if publicErr == nil {
|
||||
return err
|
||||
@@ -23,28 +20,6 @@ func mapPublicError(err error) error {
|
||||
return fmt.Errorf("%w: %w", publicErr, err)
|
||||
}
|
||||
|
||||
func hasPublicError(err error) bool {
|
||||
for _, publicErr := range []error{
|
||||
ErrInvalidConfig,
|
||||
ErrInvalidRequest,
|
||||
ErrPromptNotFound,
|
||||
ErrProfileNotFound,
|
||||
ErrProfileRequired,
|
||||
ErrPromptLoad,
|
||||
ErrProfileLoad,
|
||||
ErrAPIKeyEnvMissing,
|
||||
ErrArtifactLoad,
|
||||
ErrPromptRender,
|
||||
ErrLLMGenerate,
|
||||
ErrValidation,
|
||||
} {
|
||||
if errors.Is(err, publicErr) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func publicErrorFor(err error) error {
|
||||
switch {
|
||||
case errors.Is(err, promptdef.ErrPromptDefinitionNotFound):
|
||||
|
||||
Reference in New Issue
Block a user