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}