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/zhipu.json
 40var zhipuConfig []byte
 41
 42//go:embed configs/zhipu-coding.json
 43var zhipuCodingConfig []byte
 44
 45//go:embed configs/bedrock.json
 46var bedrockConfig []byte
 47
 48//go:embed configs/groq.json
 49var groqConfig []byte
 50
 51//go:embed configs/cerebras.json
 52var cerebrasConfig []byte
 53
 54//go:embed configs/venice.json
 55var veniceConfig []byte
 56
 57//go:embed configs/chutes.json
 58var chutesConfig []byte
 59
 60//go:embed configs/deepseek.json
 61var deepSeekConfig []byte
 62
 63//go:embed configs/huggingface.json
 64var huggingFaceConfig []byte
 65
 66//go:embed configs/aihubmix.json
 67var aiHubMixConfig []byte
 68
 69//go:embed configs/kimi.json
 70var kimiCodingConfig []byte
 71
 72//go:embed configs/copilot.json
 73var copilotConfig []byte
 74
 75//go:embed configs/vercel.json
 76var vercelConfig []byte
 77
 78//go:embed configs/minimax.json
 79var miniMaxConfig []byte
 80
 81//go:embed configs/minimax-china.json
 82var miniMaxChinaConfig []byte
 83
 84//go:embed configs/ionet.json
 85var ioNetConfig []byte
 86
 87//go:embed configs/qiniucloud.json
 88var qiniuCloudConfig []byte
 89
 90//go:embed configs/avian.json
 91var avianConfig []byte
 92
 93// ProviderFunc is a function that returns a Provider.
 94type ProviderFunc func() catwalk.Provider
 95
 96var providerRegistry = []ProviderFunc{
 97	anthropicProvider,
 98	openAIProvider,
 99	geminiProvider,
100	azureProvider,
101	bedrockProvider,
102	vertexAIProvider,
103	xAIProvider,
104	zAIProvider,
105	zhipuProvider,
106	zhipuCodingProvider,
107	kimiCodingProvider,
108	groqProvider,
109	openRouterProvider,
110	cerebrasProvider,
111	veniceProvider,
112	chutesProvider,
113	deepSeekProvider,
114	huggingFaceProvider,
115	aiHubMixProvider,
116	syntheticProvider,
117	copilotProvider,
118	vercelProvider,
119	miniMaxProvider,
120	miniMaxChinaProvider,
121	ioNetProvider,
122	qiniuCloudProvider,
123	avianProvider,
124}
125
126// GetAll returns all registered providers.
127func GetAll() []catwalk.Provider {
128	providers := make([]catwalk.Provider, 0, len(providerRegistry))
129	for _, providerFunc := range providerRegistry {
130		providers = append(providers, providerFunc())
131	}
132	return providers
133}
134
135func loadProviderFromConfig(configData []byte) catwalk.Provider {
136	var p catwalk.Provider
137	if err := json.Unmarshal(configData, &p); err != nil {
138		log.Printf("Error loading provider config: %v", err)
139		return catwalk.Provider{}
140	}
141	return p
142}
143
144func openAIProvider() catwalk.Provider {
145	return loadProviderFromConfig(openAIConfig)
146}
147
148func syntheticProvider() catwalk.Provider {
149	return loadProviderFromConfig(syntheticConfig)
150}
151
152func anthropicProvider() catwalk.Provider {
153	return loadProviderFromConfig(anthropicConfig)
154}
155
156func geminiProvider() catwalk.Provider {
157	return loadProviderFromConfig(geminiConfig)
158}
159
160func azureProvider() catwalk.Provider {
161	return loadProviderFromConfig(azureConfig)
162}
163
164func bedrockProvider() catwalk.Provider {
165	return loadProviderFromConfig(bedrockConfig)
166}
167
168func vertexAIProvider() catwalk.Provider {
169	return loadProviderFromConfig(vertexAIConfig)
170}
171
172func xAIProvider() catwalk.Provider {
173	return loadProviderFromConfig(xAIConfig)
174}
175
176func zAIProvider() catwalk.Provider {
177	return loadProviderFromConfig(zAIConfig)
178}
179
180func zhipuProvider() catwalk.Provider {
181	return loadProviderFromConfig(zhipuConfig)
182}
183
184func zhipuCodingProvider() catwalk.Provider {
185	return loadProviderFromConfig(zhipuCodingConfig)
186}
187
188func openRouterProvider() catwalk.Provider {
189	return loadProviderFromConfig(openRouterConfig)
190}
191
192func groqProvider() catwalk.Provider {
193	return loadProviderFromConfig(groqConfig)
194}
195
196func cerebrasProvider() catwalk.Provider {
197	return loadProviderFromConfig(cerebrasConfig)
198}
199
200func veniceProvider() catwalk.Provider {
201	return loadProviderFromConfig(veniceConfig)
202}
203
204func chutesProvider() catwalk.Provider {
205	return loadProviderFromConfig(chutesConfig)
206}
207
208func deepSeekProvider() catwalk.Provider {
209	return loadProviderFromConfig(deepSeekConfig)
210}
211
212func huggingFaceProvider() catwalk.Provider {
213	return loadProviderFromConfig(huggingFaceConfig)
214}
215
216func aiHubMixProvider() catwalk.Provider {
217	return loadProviderFromConfig(aiHubMixConfig)
218}
219
220func kimiCodingProvider() catwalk.Provider {
221	return loadProviderFromConfig(kimiCodingConfig)
222}
223
224func copilotProvider() catwalk.Provider {
225	return loadProviderFromConfig(copilotConfig)
226}
227
228func vercelProvider() catwalk.Provider {
229	return loadProviderFromConfig(vercelConfig)
230}
231
232func miniMaxProvider() catwalk.Provider {
233	return loadProviderFromConfig(miniMaxConfig)
234}
235
236func miniMaxChinaProvider() catwalk.Provider {
237	return loadProviderFromConfig(miniMaxChinaConfig)
238}
239
240func ioNetProvider() catwalk.Provider {
241	return loadProviderFromConfig(ioNetConfig)
242}
243
244func qiniuCloudProvider() catwalk.Provider {
245	return loadProviderFromConfig(qiniuCloudConfig)
246}
247
248func avianProvider() catwalk.Provider {
249	return loadProviderFromConfig(avianConfig)
250}