Files
promptkit/response_read_contract_test.go

37 lines
1.4 KiB
Go

package promptkit_test
import (
"context"
"errors"
"io"
"net/http"
"strings"
"testing"
"go.maximumdirect.net/promptkit"
)
type failingResponseReader struct{ cause error }
func (r failingResponseReader) Read([]byte) (int, error) { return 0, r.cause }
func TestSuccessfulResponseReadFailurePublicClassification(t *testing.T) {
cause := errors.New("private response read marker")
cfg := simpleConfig("message")
cfg.HTTPClient = &http.Client{Transport: roundTripFunc(func(*http.Request) (*http.Response, error) {
return &http.Response{StatusCode: 200, Header: make(http.Header), Body: io.NopCloser(io.MultiReader(strings.NewReader(`{"choices":[{"message":{"content":"ok"}}]}`), failingResponseReader{cause}))}, nil
})}
engine, err := promptkit.NewEngine(cfg)
if err != nil {
t.Fatal(err)
}
_, err = engine.Run(context.Background(), simpleGenerationRequest())
if !errors.Is(err, promptkit.ErrTransport) || !errors.Is(err, cause) || errors.Is(err, promptkit.ErrMalformedResponse) || strings.Contains(err.Error(), cause.Error()) {
t.Fatalf("generation error = %v", err)
}
report, err := engine.SmokeTest(context.Background(), promptkit.SmokeTestRequest{Kind: promptkit.SmokeTestTextInference, ProfileID: "profile"})
if err != nil || report == nil || !report.Completed || report.Failure != promptkit.ExecutionFailureTransport {
t.Fatalf("smoke report = %+v, %v", report, err)
}
}