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