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}