Preserve public error categories from collaborators
This commit is contained in:
@@ -915,6 +915,12 @@ func TestArtifactReaderFailuresPreserveArtifactLoadErrors(t *testing.T) {
|
|||||||
}},
|
}},
|
||||||
wantNested: context.Canceled,
|
wantNested: context.Canceled,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "public reader error",
|
||||||
|
ctx: context.Background(),
|
||||||
|
reader: &recordingArtifactReader{err: scriptorium.ErrInvalidRequest},
|
||||||
|
wantNested: scriptorium.ErrInvalidRequest,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range tests {
|
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) {
|
func TestPrepareWithoutProfileMatchesSpecificPublicError(t *testing.T) {
|
||||||
promptDir := t.TempDir()
|
promptDir := t.TempDir()
|
||||||
writePublicPromptFile(t, promptDir, "profile-required", "")
|
writePublicPromptFile(t, promptDir, "profile-required", "")
|
||||||
|
|||||||
25
errors.go
25
errors.go
@@ -13,9 +13,6 @@ func mapPublicError(err error) error {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if hasPublicError(err) {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
publicErr := publicErrorFor(err)
|
publicErr := publicErrorFor(err)
|
||||||
if publicErr == nil {
|
if publicErr == nil {
|
||||||
return err
|
return err
|
||||||
@@ -23,28 +20,6 @@ func mapPublicError(err error) error {
|
|||||||
return fmt.Errorf("%w: %w", publicErr, err)
|
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 {
|
func publicErrorFor(err error) error {
|
||||||
switch {
|
switch {
|
||||||
case errors.Is(err, promptdef.ErrPromptDefinitionNotFound):
|
case errors.Is(err, promptdef.ErrPromptDefinitionNotFound):
|
||||||
|
|||||||
Reference in New Issue
Block a user