36 lines
1.4 KiB
Go
36 lines
1.4 KiB
Go
|
|
package promptkit_test
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"errors"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"go.maximumdirect.net/promptkit"
|
||
|
|
)
|
||
|
|
|
||
|
|
type nestedErrorReader struct{ cause error }
|
||
|
|
|
||
|
|
func (r nestedErrorReader) Read(context.Context, promptkit.ArtifactRef) (*promptkit.Artifact, error) {
|
||
|
|
return nil, r.cause
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestNestedEngineErrorKeepsOwningOperation(t *testing.T) {
|
||
|
|
child := newSimpleEngine(t, "child")
|
||
|
|
_, childErr := child.Run(context.Background(), promptkit.RunRequest{PromptID: "missing"})
|
||
|
|
if !errors.Is(childErr, promptkit.ErrPromptNotFound) {
|
||
|
|
t.Fatalf("child error = %v", childErr)
|
||
|
|
}
|
||
|
|
client := &fakeLLMClient{err: childErr}
|
||
|
|
parent := newSimpleEngine(t, "hello", promptkit.WithLLMClient(client))
|
||
|
|
_, err := parent.Run(context.Background(), promptkit.RunRequest{PromptID: "prompt"})
|
||
|
|
if !errors.Is(err, promptkit.ErrLLMGenerate) || !errors.Is(err, childErr) || !errors.Is(err, promptkit.ErrPromptNotFound) {
|
||
|
|
t.Fatalf("generation error = %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
readerParent := newSimpleEngine(t, "hello", promptkit.WithArtifactReader(nestedErrorReader{cause: childErr}))
|
||
|
|
_, err = readerParent.Prepare(context.Background(), promptkit.RunRequest{PromptID: "prompt", Inputs: map[string]promptkit.ArtifactRef{"extra": promptkit.Inline("data")}})
|
||
|
|
if !errors.Is(err, promptkit.ErrArtifactLoad) || !errors.Is(err, childErr) || !errors.Is(err, promptkit.ErrPromptNotFound) {
|
||
|
|
t.Fatalf("artifact error = %v", err)
|
||
|
|
}
|
||
|
|
}
|