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/bedrock.json
40var bedrockConfig []byte
41
42//go:embed configs/groq.json
43var groqConfig []byte
44
45//go:embed configs/cerebras.json
46var cerebrasConfig []byte
47
48//go:embed configs/venice.json
49var veniceConfig []byte
50
51//go:embed configs/chutes.json
52var chutesConfig []byte
53
54//go:embed configs/deepseek.json
55var deepSeekConfig []byte
56
57//go:embed configs/huggingface.json
58var huggingFaceConfig []byte
59
60//go:embed configs/aihubmix.json
61var aiHubMixConfig []byte
62
63//go:embed configs/kimi.json
64var kimiCodingConfig []byte
65
66//go:embed configs/copilot.json
67var copilotConfig []byte
68
69//go:embed configs/vercel.json
70var vercelConfig []byte
71
72//go:embed configs/minimax.json
73var miniMaxConfig []byte
74
75//go:embed configs/minimax-china.json
76var miniMaxChinaConfig []byte
77
78//go:embed configs/ionet.json
79var ioNetConfig []byte
80
81// ProviderFunc is a function that returns a Provider.
82type ProviderFunc func() catwalk.Provider
83
84var providerRegistry = []ProviderFunc{
85 anthropicProvider,
86 openAIProvider,
87 geminiProvider,
88 azureProvider,
89 bedrockProvider,
90 vertexAIProvider,
91 xAIProvider,
92 zAIProvider,
93 kimiCodingProvider,
94 groqProvider,
95 openRouterProvider,
96 cerebrasProvider,
97 veniceProvider,
98 chutesProvider,
99 deepSeekProvider,
100 huggingFaceProvider,
101 aiHubMixProvider,
102 syntheticProvider,
103 copilotProvider,
104 vercelProvider,
105 miniMaxProvider,
106 miniMaxChinaProvider,
107 ioNetProvider,
108}
109
110// GetAll returns all registered providers.
111func GetAll() []catwalk.Provider {
112 providers := make([]catwalk.Provider, 0, len(providerRegistry))
113 for _, providerFunc := range providerRegistry {
114 providers = append(providers, providerFunc())
115 }
116 return providers
117}
118
119func loadProviderFromConfig(configData []byte) catwalk.Provider {
120 var p catwalk.Provider
121 if err := json.Unmarshal(configData, &p); err != nil {
122 log.Printf("Error loading provider config: %v", err)
123 return catwalk.Provider{}
124 }
125 return p
126}
127
128func openAIProvider() catwalk.Provider {
129 return loadProviderFromConfig(openAIConfig)
130}
131
132func syntheticProvider() catwalk.Provider {
133 return loadProviderFromConfig(syntheticConfig)
134}
135
136func anthropicProvider() catwalk.Provider {
137 return loadProviderFromConfig(anthropicConfig)
138}
139
140func geminiProvider() catwalk.Provider {
141 return loadProviderFromConfig(geminiConfig)
142}
143
144func azureProvider() catwalk.Provider {
145 return loadProviderFromConfig(azureConfig)
146}
147
148func bedrockProvider() catwalk.Provider {
149 return loadProviderFromConfig(bedrockConfig)
150}
151
152func vertexAIProvider() catwalk.Provider {
153 return loadProviderFromConfig(vertexAIConfig)
154}
155
156func xAIProvider() catwalk.Provider {
157 return loadProviderFromConfig(xAIConfig)
158}
159
160func zAIProvider() catwalk.Provider {
161 return loadProviderFromConfig(zAIConfig)
162}
163
164func openRouterProvider() catwalk.Provider {
165 return loadProviderFromConfig(openRouterConfig)
166}
167
168func groqProvider() catwalk.Provider {
169 return loadProviderFromConfig(groqConfig)
170}
171
172func cerebrasProvider() catwalk.Provider {
173 return loadProviderFromConfig(cerebrasConfig)
174}
175
176func veniceProvider() catwalk.Provider {
177 return loadProviderFromConfig(veniceConfig)
178}
179
180func chutesProvider() catwalk.Provider {
181 return loadProviderFromConfig(chutesConfig)
182}
183
184func deepSeekProvider() catwalk.Provider {
185 return loadProviderFromConfig(deepSeekConfig)
186}
187
188func huggingFaceProvider() catwalk.Provider {
189 return loadProviderFromConfig(huggingFaceConfig)
190}
191
192func aiHubMixProvider() catwalk.Provider {
193 return loadProviderFromConfig(aiHubMixConfig)
194}
195
196func kimiCodingProvider() catwalk.Provider {
197 return loadProviderFromConfig(kimiCodingConfig)
198}
199
200func copilotProvider() catwalk.Provider {
201 return loadProviderFromConfig(copilotConfig)
202}
203
204func vercelProvider() catwalk.Provider {
205 return loadProviderFromConfig(vercelConfig)
206}
207
208func miniMaxProvider() catwalk.Provider {
209 return loadProviderFromConfig(miniMaxConfig)
210}
211
212func miniMaxChinaProvider() catwalk.Provider {
213 return loadProviderFromConfig(miniMaxChinaConfig)
214}
215
216func ioNetProvider() catwalk.Provider {
217 return loadProviderFromConfig(ioNetConfig)
218}