openrouter_test.go

 1package providertests
 2
 3import (
 4	"net/http"
 5	"os"
 6	"testing"
 7
 8	"github.com/charmbracelet/fantasy/ai"
 9	"github.com/charmbracelet/fantasy/openrouter"
10	"gopkg.in/dnaeon/go-vcr.v4/pkg/recorder"
11)
12
13type openrouterModel struct {
14	name        string
15	builderFunc builderFunc
16	providers   []string
17}
18
19func TestOpenRouterCommon(t *testing.T) {
20	var pairs []builderPair
21	models := []openrouterModel{
22		kimiK2(),
23	}
24
25	for _, model := range models {
26		for _, provider := range model.providers {
27			pairs = append(
28				pairs,
29				builderPair{
30					model.name + "_" + provider,
31					model.builderFunc,
32					ai.ProviderOptions{
33						openrouter.Name: &openrouter.ProviderOptions{
34							Provider: &openrouter.Provider{
35								Only: []string{provider},
36							},
37						},
38					},
39				})
40		}
41	}
42
43	testCommon(t, pairs)
44}
45
46func kimiK2() openrouterModel {
47	return openrouterModel{
48		name: "kimi-k2",
49		builderFunc: func(r *recorder.Recorder) (ai.LanguageModel, error) {
50			provider := openrouter.New(
51				openrouter.WithAPIKey(os.Getenv("OPENROUTER_API_KEY")),
52				openrouter.WithHTTPClient(&http.Client{Transport: r}),
53			)
54			return provider.LanguageModel("moonshotai/kimi-k2-0905")
55		},
56		providers: []string{
57			"chutes",
58			"deepinfra",
59			"siliconflow",
60			"fireworks",
61			"moonshotai",
62			"novita",
63			"baseten",
64			"together",
65			// "groq",
66			"moonshotai/turbo",
67			"wandb",
68		},
69	}
70}
71
72func builderOpenrouterGLM45(r *recorder.Recorder) (ai.LanguageModel, error) {
73	provider := openrouter.New(
74		openrouter.WithAPIKey(os.Getenv("OPENROUTER_API_KEY")),
75		openrouter.WithHTTPClient(&http.Client{Transport: r}),
76	)
77	return provider.LanguageModel("z-ai/glm-4.5")
78}