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/aihubmix.json
 13var aiHubMixConfig []byte
 14
 15//go:embed configs/anthropic.json
 16var anthropicConfig []byte
 17
 18//go:embed configs/avian.json
 19var avianConfig []byte
 20
 21//go:embed configs/azure.json
 22var azureConfig []byte
 23
 24//go:embed configs/bedrock.json
 25var bedrockConfig []byte
 26
 27//go:embed configs/cerebras.json
 28var cerebrasConfig []byte
 29
 30//go:embed configs/chutes.json
 31var chutesConfig []byte
 32
 33//go:embed configs/copilot.json
 34var copilotConfig []byte
 35
 36//go:embed configs/cortecs.json
 37var cortecsConfig []byte
 38
 39//go:embed configs/deepseek.json
 40var deepSeekConfig []byte
 41
 42//go:embed configs/gemini.json
 43var geminiConfig []byte
 44
 45//go:embed configs/groq.json
 46var groqConfig []byte
 47
 48//go:embed configs/huggingface.json
 49var huggingFaceConfig []byte
 50
 51//go:embed configs/ionet.json
 52var ioNetConfig []byte
 53
 54//go:embed configs/kimi.json
 55var kimiCodingConfig []byte
 56
 57//go:embed configs/minimax.json
 58var miniMaxConfig []byte
 59
 60//go:embed configs/minimax-china.json
 61var miniMaxChinaConfig []byte
 62
 63//go:embed configs/nebius.json
 64var nebiusConfig []byte
 65
 66//go:embed configs/neuralwatt.json
 67var neuralwattConfig []byte
 68
 69//go:embed configs/openai.json
 70var openAIConfig []byte
 71
 72//go:embed configs/opencode-go.json
 73var openCodeGoConfig []byte
 74
 75//go:embed configs/opencode-zen.json
 76var openCodeZenConfig []byte
 77
 78//go:embed configs/openrouter.json
 79var openRouterConfig []byte
 80
 81//go:embed configs/qiniucloud.json
 82var qiniuCloudConfig []byte
 83
 84//go:embed configs/synthetic.json
 85var syntheticConfig []byte
 86
 87//go:embed configs/vercel.json
 88var vercelConfig []byte
 89
 90//go:embed configs/venice.json
 91var veniceConfig []byte
 92
 93//go:embed configs/vertexai.json
 94var vertexAIConfig []byte
 95
 96//go:embed configs/xai.json
 97var xAIConfig []byte
 98
 99//go:embed configs/zai.json
100var zAIConfig []byte
101
102//go:embed configs/zhipu.json
103var zhipuConfig []byte
104
105//go:embed configs/zhipu-coding.json
106var zhipuCodingConfig []byte
107
108// ProviderFunc is a function that returns a Provider.
109type ProviderFunc func() catwalk.Provider
110
111var providerRegistry = []ProviderFunc{
112	// Let's keep the main providers at the top.
113	anthropicProvider,
114	openAIProvider,
115	geminiProvider,
116	xAIProvider,
117	zAIProvider,
118	kimiCodingProvider,
119	miniMaxProvider,
120	miniMaxChinaProvider,
121	syntheticProvider,
122
123	// The remaining will be in alphabetical order.
124	aiHubMixProvider,
125	avianProvider,
126	azureProvider,
127	bedrockProvider,
128	cerebrasProvider,
129	chutesProvider,
130	copilotProvider,
131	cortecsProvider,
132	deepSeekProvider,
133	groqProvider,
134	huggingFaceProvider,
135	ioNetProvider,
136	nebiusProvider,
137	neuralwattProvider,
138	openCodeGoProvider,
139	openCodeZenProvider,
140	openRouterProvider,
141	qiniuCloudProvider,
142	vercelProvider,
143	veniceProvider,
144	vertexAIProvider,
145	zhipuProvider,
146	zhipuCodingProvider,
147}
148
149// GetAll returns all registered providers.
150func GetAll() []catwalk.Provider {
151	providers := make([]catwalk.Provider, 0, len(providerRegistry))
152	for _, providerFunc := range providerRegistry {
153		providers = append(providers, providerFunc())
154	}
155	return providers
156}
157
158func loadProviderFromConfig(configData []byte) catwalk.Provider {
159	var p catwalk.Provider
160	if err := json.Unmarshal(configData, &p); err != nil {
161		log.Printf("Error loading provider config: %v", err)
162		return catwalk.Provider{}
163	}
164	return p
165}
166
167func aiHubMixProvider() catwalk.Provider {
168	return loadProviderFromConfig(aiHubMixConfig)
169}
170
171func anthropicProvider() catwalk.Provider {
172	return loadProviderFromConfig(anthropicConfig)
173}
174
175func avianProvider() catwalk.Provider {
176	return loadProviderFromConfig(avianConfig)
177}
178
179func azureProvider() catwalk.Provider {
180	return loadProviderFromConfig(azureConfig)
181}
182
183func bedrockProvider() catwalk.Provider {
184	return loadProviderFromConfig(bedrockConfig)
185}
186
187func cerebrasProvider() catwalk.Provider {
188	return loadProviderFromConfig(cerebrasConfig)
189}
190
191func chutesProvider() catwalk.Provider {
192	return loadProviderFromConfig(chutesConfig)
193}
194
195func copilotProvider() catwalk.Provider {
196	return loadProviderFromConfig(copilotConfig)
197}
198
199func cortecsProvider() catwalk.Provider {
200	return loadProviderFromConfig(cortecsConfig)
201}
202
203func deepSeekProvider() catwalk.Provider {
204	return loadProviderFromConfig(deepSeekConfig)
205}
206
207func geminiProvider() catwalk.Provider {
208	return loadProviderFromConfig(geminiConfig)
209}
210
211func groqProvider() catwalk.Provider {
212	return loadProviderFromConfig(groqConfig)
213}
214
215func huggingFaceProvider() catwalk.Provider {
216	return loadProviderFromConfig(huggingFaceConfig)
217}
218
219func ioNetProvider() catwalk.Provider {
220	return loadProviderFromConfig(ioNetConfig)
221}
222
223func kimiCodingProvider() catwalk.Provider {
224	return loadProviderFromConfig(kimiCodingConfig)
225}
226
227func miniMaxProvider() catwalk.Provider {
228	return loadProviderFromConfig(miniMaxConfig)
229}
230
231func miniMaxChinaProvider() catwalk.Provider {
232	return loadProviderFromConfig(miniMaxChinaConfig)
233}
234
235func nebiusProvider() catwalk.Provider {
236	return loadProviderFromConfig(nebiusConfig)
237}
238
239func neuralwattProvider() catwalk.Provider {
240	return loadProviderFromConfig(neuralwattConfig)
241}
242
243func openAIProvider() catwalk.Provider {
244	return loadProviderFromConfig(openAIConfig)
245}
246
247func openCodeGoProvider() catwalk.Provider {
248	return loadProviderFromConfig(openCodeGoConfig)
249}
250
251func openCodeZenProvider() catwalk.Provider {
252	return loadProviderFromConfig(openCodeZenConfig)
253}
254
255func openRouterProvider() catwalk.Provider {
256	return loadProviderFromConfig(openRouterConfig)
257}
258
259func qiniuCloudProvider() catwalk.Provider {
260	return loadProviderFromConfig(qiniuCloudConfig)
261}
262
263func syntheticProvider() catwalk.Provider {
264	return loadProviderFromConfig(syntheticConfig)
265}
266
267func vercelProvider() catwalk.Provider {
268	return loadProviderFromConfig(vercelConfig)
269}
270
271func veniceProvider() catwalk.Provider {
272	return loadProviderFromConfig(veniceConfig)
273}
274
275func vertexAIProvider() catwalk.Provider {
276	return loadProviderFromConfig(vertexAIConfig)
277}
278
279func xAIProvider() catwalk.Provider {
280	return loadProviderFromConfig(xAIConfig)
281}
282
283func zAIProvider() catwalk.Provider {
284	return loadProviderFromConfig(zAIConfig)
285}
286
287func zhipuProvider() catwalk.Provider {
288	return loadProviderFromConfig(zhipuConfig)
289}
290
291func zhipuCodingProvider() catwalk.Provider {
292	return loadProviderFromConfig(zhipuCodingConfig)
293}