1// Package providers provides a registry of inference providers
2package providers
3
4import (
5 _ "embed"
6 "encoding/json"
7 "log"
8
9 "github.com/charmbracelet/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/gemini.json
19var geminiConfig []byte
20
21//go:embed configs/openrouter.json
22var openRouterConfig []byte
23
24//go:embed configs/azure.json
25var azureConfig []byte
26
27//go:embed configs/vertexai.json
28var vertexAIConfig []byte
29
30//go:embed configs/xai.json
31var xAIConfig []byte
32
33//go:embed configs/zai.json
34var zAIConfig []byte
35
36//go:embed configs/bedrock.json
37var bedrockConfig []byte
38
39//go:embed configs/groq.json
40var groqConfig []byte
41
42//go:embed configs/cerebras.json
43var cerebrasConfig []byte
44
45//go:embed configs/venice.json
46var veniceConfig []byte
47
48//go:embed configs/chutes.json
49var chutesConfig []byte
50
51//go:embed configs/deepseek.json
52var deepSeekConfig []byte
53
54//go:embed configs/huggingface.json
55var huggingFaceConfig []byte
56
57//go:embed configs/aihubmix.json
58var aiHubMixConfig []byte
59
60//go:embed configs/minimax.json
61var miniMaxConfig []byte
62
63// ProviderFunc is a function that returns a Provider.
64type ProviderFunc func() catwalk.Provider
65
66var providerRegistry = []ProviderFunc{
67 anthropicProvider,
68 openAIProvider,
69 geminiProvider,
70 azureProvider,
71 bedrockProvider,
72 vertexAIProvider,
73 xAIProvider,
74 zAIProvider,
75 groqProvider,
76 openRouterProvider,
77 cerebrasProvider,
78 veniceProvider,
79 chutesProvider,
80 deepSeekProvider,
81 huggingFaceProvider,
82 aiHubMixProvider,
83 miniMaxProvider,
84}
85
86// GetAll returns all registered providers.
87func GetAll() []catwalk.Provider {
88 providers := make([]catwalk.Provider, 0, len(providerRegistry))
89 for _, providerFunc := range providerRegistry {
90 providers = append(providers, providerFunc())
91 }
92 return providers
93}
94
95func loadProviderFromConfig(configData []byte) catwalk.Provider {
96 var p catwalk.Provider
97 if err := json.Unmarshal(configData, &p); err != nil {
98 log.Printf("Error loading provider config: %v", err)
99 return catwalk.Provider{}
100 }
101 return p
102}
103
104func openAIProvider() catwalk.Provider {
105 return loadProviderFromConfig(openAIConfig)
106}
107
108func anthropicProvider() catwalk.Provider {
109 return loadProviderFromConfig(anthropicConfig)
110}
111
112func geminiProvider() catwalk.Provider {
113 return loadProviderFromConfig(geminiConfig)
114}
115
116func azureProvider() catwalk.Provider {
117 return loadProviderFromConfig(azureConfig)
118}
119
120func bedrockProvider() catwalk.Provider {
121 return loadProviderFromConfig(bedrockConfig)
122}
123
124func vertexAIProvider() catwalk.Provider {
125 return loadProviderFromConfig(vertexAIConfig)
126}
127
128func xAIProvider() catwalk.Provider {
129 return loadProviderFromConfig(xAIConfig)
130}
131
132func zAIProvider() catwalk.Provider {
133 return loadProviderFromConfig(zAIConfig)
134}
135
136func openRouterProvider() catwalk.Provider {
137 return loadProviderFromConfig(openRouterConfig)
138}
139
140func groqProvider() catwalk.Provider {
141 return loadProviderFromConfig(groqConfig)
142}
143
144func cerebrasProvider() catwalk.Provider {
145 return loadProviderFromConfig(cerebrasConfig)
146}
147
148func veniceProvider() catwalk.Provider {
149 return loadProviderFromConfig(veniceConfig)
150}
151
152func chutesProvider() catwalk.Provider {
153 return loadProviderFromConfig(chutesConfig)
154}
155
156func deepSeekProvider() catwalk.Provider {
157 return loadProviderFromConfig(deepSeekConfig)
158}
159
160func huggingFaceProvider() catwalk.Provider {
161 return loadProviderFromConfig(huggingFaceConfig)
162}
163
164func aiHubMixProvider() catwalk.Provider {
165 return loadProviderFromConfig(aiHubMixConfig)
166}
167
168func miniMaxProvider() catwalk.Provider {
169 return loadProviderFromConfig(miniMaxConfig)
170}