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		grokCodeFast1(),
 24		claudeSonnet4(),
 25	}
 26
 27	for _, model := range models {
 28		for _, provider := range model.providers {
 29			pairs = append(
 30				pairs,
 31				builderPair{
 32					model.name + "_" + provider,
 33					model.builderFunc,
 34					ai.ProviderOptions{
 35						openrouter.Name: &openrouter.ProviderOptions{
 36							Provider: &openrouter.Provider{
 37								Only: []string{provider},
 38							},
 39						},
 40					},
 41				})
 42		}
 43	}
 44
 45	testCommon(t, pairs)
 46}
 47
 48func kimiK2() openrouterModel {
 49	return openrouterModel{
 50		name: "kimi-k2",
 51		builderFunc: func(r *recorder.Recorder) (ai.LanguageModel, error) {
 52			provider := openrouter.New(
 53				openrouter.WithAPIKey(os.Getenv("OPENROUTER_API_KEY")),
 54				openrouter.WithHTTPClient(&http.Client{Transport: r}),
 55			)
 56			return provider.LanguageModel("moonshotai/kimi-k2-0905")
 57		},
 58		providers: []string{
 59			"chutes",
 60			"deepinfra",
 61			"siliconflow",
 62			"fireworks",
 63			"moonshotai",
 64			"novita",
 65			"baseten",
 66			"together",
 67			"groq",
 68			"moonshotai/turbo",
 69			"wandb",
 70		},
 71	}
 72}
 73
 74func grokCodeFast1() openrouterModel {
 75	return openrouterModel{
 76		name: "grok-code-fast-1",
 77		builderFunc: func(r *recorder.Recorder) (ai.LanguageModel, error) {
 78			provider := openrouter.New(
 79				openrouter.WithAPIKey(os.Getenv("OPENROUTER_API_KEY")),
 80				openrouter.WithHTTPClient(&http.Client{Transport: r}),
 81			)
 82			return provider.LanguageModel("x-ai/grok-code-fast-1")
 83		},
 84		providers: []string{
 85			"xai",
 86		},
 87	}
 88}
 89
 90func claudeSonnet4() openrouterModel {
 91	return openrouterModel{
 92		name: "claude-sonnet-4",
 93		builderFunc: func(r *recorder.Recorder) (ai.LanguageModel, error) {
 94			provider := openrouter.New(
 95				openrouter.WithAPIKey(os.Getenv("OPENROUTER_API_KEY")),
 96				openrouter.WithHTTPClient(&http.Client{Transport: r}),
 97			)
 98			return provider.LanguageModel("anthropic/claude-sonnet-4")
 99		},
100		providers: []string{
101			"google-vertex",
102			"google-vertex/global",
103			"anthropic",
104			"google-vertex/europe",
105			"amazon-bedrock",
106		},
107	}
108}