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}