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}