1package typesafe_test23import (4 "context"5 "os"6 "testing"7 "time"89 "github.com/FelineStateMachine/typesafe-go"10)1112// TestLiveAPI makes billable requests only when explicitly enabled.13func TestLiveAPI(t *testing.T) {14 if os.Getenv("TYPESAFE_LIVE_TEST") != "1" {15 t.Skip("set TYPESAFE_LIVE_TEST=1 and TYPESAFE_API_KEY to run live API checks")16 }17 client, err := typesafe.NewClient()18 if err != nil {19 t.Fatal(err)20 }21 ctx, cancel := context.WithTimeout(t.Context(), time.Minute)22 defer cancel()23 models, err := client.ListModels(ctx)24 if err != nil || len(models.Models) == 0 {25 t.Fatalf("list models: response=%v err=%v", models, err)26 }27 response, err := client.SystemOne(ctx, liveRequest())28 if err != nil {29 t.Fatal(err)30 }31 if _, err := response.Answer[typesafe.NoulAnswer]("greeting"); err != nil {32 t.Fatal(err)33 }34 if _, err := response.Choice("tone"); err != nil {35 t.Fatal(err)36 }37 if _, err := response.Score("urgency"); err != nil {38 t.Fatal(err)39 }40}4142func liveRequest() typesafe.SystemOneRequest {43 return typesafe.SystemOneRequest{44 State: "Hello! Could you send me a receipt whenever you have a moment?",45 Questions: map[string]typesafe.Question{46 "greeting": typesafe.NoulQuestion{Instructions: "Does the message contain a greeting?"},47 "tone": typesafe.ChoiceQuestion{48 Instructions: "What is the tone?", Criteria: map[string]any{"polite": nil, "hostile": nil},49 },50 "urgency": typesafe.ScoreQuestion{51 Instructions: "How urgent is the request?", Criteria: []any{"not urgent", "urgent"},52 },53 },54 }55}