providers.go

  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}