41 lines
1.5 KiB
Go
41 lines
1.5 KiB
Go
|
|
package promptkit_test
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"errors"
|
||
|
|
"testing"
|
||
|
|
"testing/synctest"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"go.maximumdirect.net/promptkit"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestRunOperationTimeoutAttribution(t *testing.T) {
|
||
|
|
synctest.Test(t, func(t *testing.T) {
|
||
|
|
engine := observationEngine(t, observationClientFunc(func(ctx context.Context, _ promptkit.GenerateRequest) (*promptkit.GenerateResponse, error) {
|
||
|
|
<-ctx.Done()
|
||
|
|
return nil, ctx.Err()
|
||
|
|
}))
|
||
|
|
var terminal promptkit.ExecutionEvent
|
||
|
|
_, err := engine.Run(context.Background(), promptkit.RunRequest{PromptID: "prompt", OperationTimeout: time.Second,
|
||
|
|
Observer: func(event promptkit.ExecutionEvent) {
|
||
|
|
if event.Kind == promptkit.ExecutionFinished {
|
||
|
|
terminal = event
|
||
|
|
}
|
||
|
|
}})
|
||
|
|
if !errors.Is(err, promptkit.ErrOperationTimeout) || !errors.Is(err, context.DeadlineExceeded) || !errors.Is(err, promptkit.ErrLLMGenerate) || terminal.Failure != promptkit.ExecutionFailureDeadline {
|
||
|
|
t.Fatalf("error=%v terminal=%+v", err, terminal)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRunProviderDeadlineIsNotOperationTimeout(t *testing.T) {
|
||
|
|
engine := observationEngine(t, observationClientFunc(func(context.Context, promptkit.GenerateRequest) (*promptkit.GenerateResponse, error) {
|
||
|
|
return nil, context.DeadlineExceeded
|
||
|
|
}))
|
||
|
|
_, err := engine.Run(context.Background(), promptkit.RunRequest{PromptID: "prompt", OperationTimeout: time.Minute})
|
||
|
|
if !errors.Is(err, context.DeadlineExceeded) || errors.Is(err, promptkit.ErrOperationTimeout) {
|
||
|
|
t.Fatalf("provider deadline attribution: %v", err)
|
||
|
|
}
|
||
|
|
}
|