providers.go

  1// Package providers provides a registry of inference providers
  2package providers
  3
  4import (
  5	_ "embed"
  6	"encoding/json"
  7	"log"
  8
  9	"charm.land/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/synthetic.json
 19var syntheticConfig []byte
 20
 21//go:embed configs/gemini.json
 22var geminiConfig []byte
 23
 24//go:embed configs/openrouter.json
 25var openRouterConfig []byte
 26
 27//go:embed configs/azure.json
 28var azureConfig []byte
 29
 30//go:embed configs/vertexai.json
 31var vertexAIConfig []byte
 32
 33//go:embed configs/xai.json
 34var xAIConfig []byte
 35
 36//go:embed configs/zai.json
 37var zAIConfig []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/cerebras.json
 46var cerebrasConfig []byte
 47
 48//go:embed configs/venice.json
 49var veniceConfig []byte
 50
 51//go:embed configs/chutes.json
 52var chutesConfig []byte
 53
 54//go:embed configs/deepseek.json
 55var deepSeekConfig []byte
 56
 57//go:embed configs/huggingface.json
 58var huggingFaceConfig []byte
 59
 60//go:embed configs/aihubmix.json
 61var aiHubMixConfig []byte
 62
 63//go:embed configs/kimi.json
 64var kimiCodingConfig []byte
 65
 66//go:embed configs/copilot.json
 67var copilotConfig []byte
 68
 69//go:embed configs/vercel.json
 70var vercelConfig []byte
 71
 72//go:embed configs/minimax.json
 73var miniMaxConfig []byte
 74
 75//go:embed configs/minimax-china.json
 76var miniMaxChinaConfig []byte
 77
 78//go:embed configs/ionet.json
 79var ioNetConfig []byte
 80
 81// ProviderFunc is a function that returns a Provider.
 82type ProviderFunc func() catwalk.Provider
 83
 84var providerRegistry = []ProviderFunc{
 85	anthropicProvider,
 86	openAIProvider,
 87	geminiProvider,
 88	azureProvider,
 89	bedrockProvider,
 90	vertexAIProvider,
 91	xAIProvider,
 92	zAIProvider,
 93	kimiCodingProvider,
 94	groqProvider,
 95	openRouterProvider,
 96	cerebrasProvider,
 97	veniceProvider,
 98	chutesProvider,
 99	deepSeekProvider,
100	huggingFaceProvider,
101	aiHubMixProvider,
102	syntheticProvider,
103	copilotProvider,
104	vercelProvider,
105	miniMaxProvider,
106	miniMaxChinaProvider,
107	ioNetProvider,
108}
109
110// GetAll returns all registered providers.
111func GetAll() []catwalk.Provider {
112	providers := make([]catwalk.Provider, 0, len(providerRegistry))
113	for _, providerFunc := range providerRegistry {
114		providers = append(providers, providerFunc())
115	}
116	return providers
117}
118
119func loadProviderFromConfig(configData []byte) catwalk.Provider {
120	var p catwalk.Provider
121	if err := json.Unmarshal(configData, &p); err != nil {
122		log.Printf("Error loading provider config: %v", err)
123		return catwalk.Provider{}
124	}
125	return p
126}
127
128func openAIProvider() catwalk.Provider {
129	return loadProviderFromConfig(openAIConfig)
130}
131
132func syntheticProvider() catwalk.Provider {
133	return loadProviderFromConfig(syntheticConfig)
134}
135
136func anthropicProvider() catwalk.Provider {
137	return loadProviderFromConfig(anthropicConfig)
138}
139
140func geminiProvider() catwalk.Provider {
141	return loadProviderFromConfig(geminiConfig)
142}
143
144func azureProvider() catwalk.Provider {
145	return loadProviderFromConfig(azureConfig)
146}
147
148func bedrockProvider() catwalk.Provider {
149	return loadProviderFromConfig(bedrockConfig)
150}
151
152func vertexAIProvider() catwalk.Provider {
153	return loadProviderFromConfig(vertexAIConfig)
154}
155
156func xAIProvider() catwalk.Provider {
157	return loadProviderFromConfig(xAIConfig)
158}
159
160func zAIProvider() catwalk.Provider {
161	return loadProviderFromConfig(zAIConfig)
162}
163
164func openRouterProvider() catwalk.Provider {
165	return loadProviderFromConfig(openRouterConfig)
166}
167
168func groqProvider() catwalk.Provider {
169	return loadProviderFromConfig(groqConfig)
170}
171
172func cerebrasProvider() catwalk.Provider {
173	return loadProviderFromConfig(cerebrasConfig)
174}
175
176func veniceProvider() catwalk.Provider {
177	return loadProviderFromConfig(veniceConfig)
178}
179
180func chutesProvider() catwalk.Provider {
181	return loadProviderFromConfig(chutesConfig)
182}
183
184func deepSeekProvider() catwalk.Provider {
185	return loadProviderFromConfig(deepSeekConfig)
186}
187
188func huggingFaceProvider() catwalk.Provider {
189	return loadProviderFromConfig(huggingFaceConfig)
190}
191
192func aiHubMixProvider() catwalk.Provider {
193	return loadProviderFromConfig(aiHubMixConfig)
194}
195
196func kimiCodingProvider() catwalk.Provider {
197	return loadProviderFromConfig(kimiCodingConfig)
198}
199
200func copilotProvider() catwalk.Provider {
201	return loadProviderFromConfig(copilotConfig)
202}
203
204func vercelProvider() catwalk.Provider {
205	return loadProviderFromConfig(vercelConfig)
206}
207
208func miniMaxProvider() catwalk.Provider {
209	return loadProviderFromConfig(miniMaxConfig)
210}
211
212func miniMaxChinaProvider() catwalk.Provider {
213	return loadProviderFromConfig(miniMaxChinaConfig)
214}
215
216func ioNetProvider() catwalk.Provider {
217	return loadProviderFromConfig(ioNetConfig)
218}