providers.go

  1// Package providers provides a registry of inference providers
  2package providers
  3
  4import (
  5	_ "embed"
  6	"encoding/json"
  7	"log"
  8
  9	"github.com/charmbracelet/catwalk/pkg/catwalk"
 10)
 11
 12//go:embed configs/openai.json
 13var openAIConfig []byte
 14
 15//go:embed configs/anthropic.json
 16var anthropicConfig []byte
 17
 18//go:embed configs/gemini.json
 19var geminiConfig []byte
 20
 21//go:embed configs/openrouter.json
 22var openRouterConfig []byte
 23
 24//go:embed configs/azure.json
 25var azureConfig []byte
 26
 27//go:embed configs/vertexai.json
 28var vertexAIConfig []byte
 29
 30//go:embed configs/xai.json
 31var xAIConfig []byte
 32
 33//go:embed configs/zai.json
 34var zAIConfig []byte
 35
 36//go:embed configs/zai-coding.json
 37var zAICodingConfig []byte
 38
 39//go:embed configs/bedrock.json
 40var bedrockConfig []byte
 41
 42//go:embed configs/groq.json
 43var groqConfig []byte
 44
 45//go:embed configs/lambda.json
 46var lambdaConfig []byte
 47
 48//go:embed configs/cerebras.json
 49var cerebrasConfig []byte
 50
 51//go:embed configs/venice.json
 52var veniceConfig []byte
 53
 54//go:embed configs/chutes.json
 55var chutesConfig []byte
 56
 57//go:embed configs/deepseek.json
 58var deepSeekConfig []byte
 59
 60// ProviderFunc is a function that returns a Provider.
 61type ProviderFunc func() catwalk.Provider
 62
 63var providerRegistry = []ProviderFunc{
 64	anthropicProvider,
 65	openAIProvider,
 66	geminiProvider,
 67	azureProvider,
 68	bedrockProvider,
 69	vertexAIProvider,
 70	xAIProvider,
 71	zAIProvider,
 72	groqProvider,
 73	openRouterProvider,
 74	lambdaProvider,
 75	cerebrasProvider,
 76	veniceProvider,
 77	chutesProvider,
 78	deepSeekProvider,
 79	zAICodingProvider,
 80}
 81
 82// GetAll returns all registered providers.
 83func GetAll() []catwalk.Provider {
 84	providers := make([]catwalk.Provider, 0, len(providerRegistry))
 85	for _, providerFunc := range providerRegistry {
 86		providers = append(providers, providerFunc())
 87	}
 88	return providers
 89}
 90
 91func loadProviderFromConfig(configData []byte) catwalk.Provider {
 92	var p catwalk.Provider
 93	if err := json.Unmarshal(configData, &p); err != nil {
 94		log.Printf("Error loading provider config: %v", err)
 95		return catwalk.Provider{}
 96	}
 97	return p
 98}
 99
100func openAIProvider() catwalk.Provider {
101	return loadProviderFromConfig(openAIConfig)
102}
103
104func anthropicProvider() catwalk.Provider {
105	return loadProviderFromConfig(anthropicConfig)
106}
107
108func geminiProvider() catwalk.Provider {
109	return loadProviderFromConfig(geminiConfig)
110}
111
112func azureProvider() catwalk.Provider {
113	return loadProviderFromConfig(azureConfig)
114}
115
116func bedrockProvider() catwalk.Provider {
117	return loadProviderFromConfig(bedrockConfig)
118}
119
120func vertexAIProvider() catwalk.Provider {
121	return loadProviderFromConfig(vertexAIConfig)
122}
123
124func xAIProvider() catwalk.Provider {
125	return loadProviderFromConfig(xAIConfig)
126}
127
128func zAIProvider() catwalk.Provider {
129	return loadProviderFromConfig(zAIConfig)
130}
131
132func zAICodingProvider() catwalk.Provider {
133	return loadProviderFromConfig(zAICodingConfig)
134}
135
136func openRouterProvider() catwalk.Provider {
137	return loadProviderFromConfig(openRouterConfig)
138}
139
140func groqProvider() catwalk.Provider {
141	return loadProviderFromConfig(groqConfig)
142}
143
144func lambdaProvider() catwalk.Provider {
145	return loadProviderFromConfig(lambdaConfig)
146}
147
148func cerebrasProvider() catwalk.Provider {
149	return loadProviderFromConfig(cerebrasConfig)
150}
151
152func veniceProvider() catwalk.Provider {
153	return loadProviderFromConfig(veniceConfig)
154}
155
156func chutesProvider() catwalk.Provider {
157	return loadProviderFromConfig(chutesConfig)
158}
159
160func deepSeekProvider() catwalk.Provider {
161	return loadProviderFromConfig(deepSeekConfig)
162}