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// ProviderFunc is a function that returns a Provider.
 91type ProviderFunc func() catwalk.Provider
 92
 93var providerRegistry = []ProviderFunc{
 94	anthropicProvider,
 95	openAIProvider,
 96	geminiProvider,
 97	azureProvider,
 98	bedrockProvider,
 99	vertexAIProvider,
100	xAIProvider,
101	zAIProvider,
102	zhipuProvider,
103	zhipuCodingProvider,
104	kimiCodingProvider,
105	groqProvider,
106	openRouterProvider,
107	cerebrasProvider,
108	veniceProvider,
109	chutesProvider,
110	deepSeekProvider,
111	huggingFaceProvider,
112	aiHubMixProvider,
113	syntheticProvider,
114	copilotProvider,
115	vercelProvider,
116	miniMaxProvider,
117	miniMaxChinaProvider,
118	ioNetProvider,
119	qiniuCloudProvider,
120}
121
122// GetAll returns all registered providers.
123func GetAll() []catwalk.Provider {
124	providers := make([]catwalk.Provider, 0, len(providerRegistry))
125	for _, providerFunc := range providerRegistry {
126		providers = append(providers, providerFunc())
127	}
128	return providers
129}
130
131func loadProviderFromConfig(configData []byte) catwalk.Provider {
132	var p catwalk.Provider
133	if err := json.Unmarshal(configData, &p); err != nil {
134		log.Printf("Error loading provider config: %v", err)
135		return catwalk.Provider{}
136	}
137	return p
138}
139
140func openAIProvider() catwalk.Provider {
141	return loadProviderFromConfig(openAIConfig)
142}
143
144func syntheticProvider() catwalk.Provider {
145	return loadProviderFromConfig(syntheticConfig)
146}
147
148func anthropicProvider() catwalk.Provider {
149	return loadProviderFromConfig(anthropicConfig)
150}
151
152func geminiProvider() catwalk.Provider {
153	return loadProviderFromConfig(geminiConfig)
154}
155
156func azureProvider() catwalk.Provider {
157	return loadProviderFromConfig(azureConfig)
158}
159
160func bedrockProvider() catwalk.Provider {
161	return loadProviderFromConfig(bedrockConfig)
162}
163
164func vertexAIProvider() catwalk.Provider {
165	return loadProviderFromConfig(vertexAIConfig)
166}
167
168func xAIProvider() catwalk.Provider {
169	return loadProviderFromConfig(xAIConfig)
170}
171
172func zAIProvider() catwalk.Provider {
173	return loadProviderFromConfig(zAIConfig)
174}
175
176func zhipuProvider() catwalk.Provider {
177	return loadProviderFromConfig(zhipuConfig)
178}
179
180func zhipuCodingProvider() catwalk.Provider {
181	return loadProviderFromConfig(zhipuCodingConfig)
182}
183
184func openRouterProvider() catwalk.Provider {
185	return loadProviderFromConfig(openRouterConfig)
186}
187
188func groqProvider() catwalk.Provider {
189	return loadProviderFromConfig(groqConfig)
190}
191
192func cerebrasProvider() catwalk.Provider {
193	return loadProviderFromConfig(cerebrasConfig)
194}
195
196func veniceProvider() catwalk.Provider {
197	return loadProviderFromConfig(veniceConfig)
198}
199
200func chutesProvider() catwalk.Provider {
201	return loadProviderFromConfig(chutesConfig)
202}
203
204func deepSeekProvider() catwalk.Provider {
205	return loadProviderFromConfig(deepSeekConfig)
206}
207
208func huggingFaceProvider() catwalk.Provider {
209	return loadProviderFromConfig(huggingFaceConfig)
210}
211
212func aiHubMixProvider() catwalk.Provider {
213	return loadProviderFromConfig(aiHubMixConfig)
214}
215
216func kimiCodingProvider() catwalk.Provider {
217	return loadProviderFromConfig(kimiCodingConfig)
218}
219
220func copilotProvider() catwalk.Provider {
221	return loadProviderFromConfig(copilotConfig)
222}
223
224func vercelProvider() catwalk.Provider {
225	return loadProviderFromConfig(vercelConfig)
226}
227
228func miniMaxProvider() catwalk.Provider {
229	return loadProviderFromConfig(miniMaxConfig)
230}
231
232func miniMaxChinaProvider() catwalk.Provider {
233	return loadProviderFromConfig(miniMaxChinaConfig)
234}
235
236func ioNetProvider() catwalk.Provider {
237	return loadProviderFromConfig(ioNetConfig)
238}
239
240func qiniuCloudProvider() catwalk.Provider {
241	return loadProviderFromConfig(qiniuCloudConfig)
242}