azure_test.go

 1package providertests
 2
 3import (
 4	"cmp"
 5	"net/http"
 6	"os"
 7	"testing"
 8
 9	"charm.land/fantasy"
10	"charm.land/fantasy/providers/azure"
11	"charm.land/fantasy/providers/openai"
12	"github.com/stretchr/testify/require"
13	"gopkg.in/dnaeon/go-vcr.v4/pkg/recorder"
14)
15
16const defaultBaseURL = "https://fantasy-playground-resource.openai.azure.com"
17
18func TestAzureCommon(t *testing.T) {
19	testCommon(t, []builderPair{
20		{"azure-o4-mini", builderAzureO4Mini, nil, nil},
21		{"azure-gpt-5-mini", builderAzureGpt5Mini, nil, nil},
22		{"azure-grok-3-mini", builderAzureGrok3Mini, nil, nil},
23	})
24}
25
26func TestAzureThinking(t *testing.T) {
27	opts := fantasy.ProviderOptions{
28		openai.Name: &openai.ProviderOptions{
29			ReasoningEffort: openai.ReasoningEffortOption(openai.ReasoningEffortHigh),
30		},
31	}
32	testThinking(t, []builderPair{
33		{"azure-gpt-5-mini", builderAzureGpt5Mini, opts, nil},
34		{"azure-grok-3-mini", builderAzureGrok3Mini, opts, nil},
35	}, testAzureThinking)
36}
37
38func testAzureThinking(t *testing.T, result *fantasy.AgentResult) {
39	require.Greater(t, result.Response.Usage.ReasoningTokens, int64(0), "expected reasoning tokens, got none")
40}
41
42func builderAzureO4Mini(t *testing.T, r *recorder.Recorder) (fantasy.LanguageModel, error) {
43	provider, err := azure.New(
44		azure.WithBaseURL(cmp.Or(os.Getenv("FANTASY_AZURE_BASE_URL"), defaultBaseURL)),
45		azure.WithAPIKey(cmp.Or(os.Getenv("FANTASY_AZURE_API_KEY"), "(missing)")),
46		azure.WithHTTPClient(&http.Client{Transport: r}),
47	)
48	if err != nil {
49		return nil, err
50	}
51	return provider.LanguageModel(t.Context(), "o4-mini")
52}
53
54func builderAzureGpt5Mini(t *testing.T, r *recorder.Recorder) (fantasy.LanguageModel, error) {
55	provider, err := azure.New(
56		azure.WithBaseURL(cmp.Or(os.Getenv("FANTASY_AZURE_BASE_URL"), defaultBaseURL)),
57		azure.WithAPIKey(cmp.Or(os.Getenv("FANTASY_AZURE_API_KEY"), "(missing)")),
58		azure.WithHTTPClient(&http.Client{Transport: r}),
59	)
60	if err != nil {
61		return nil, err
62	}
63	return provider.LanguageModel(t.Context(), "gpt-5-mini")
64}
65
66func builderAzureGrok3Mini(t *testing.T, r *recorder.Recorder) (fantasy.LanguageModel, error) {
67	provider, err := azure.New(
68		azure.WithBaseURL(cmp.Or(os.Getenv("FANTASY_AZURE_BASE_URL"), defaultBaseURL)),
69		azure.WithAPIKey(cmp.Or(os.Getenv("FANTASY_AZURE_API_KEY"), "(missing)")),
70		azure.WithHTTPClient(&http.Client{Transport: r}),
71	)
72	if err != nil {
73		return nil, err
74	}
75	return provider.LanguageModel(t.Context(), "grok-3-mini")
76}