feat: add provider interface and registry
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
package provider
|
||||
|
||||
// Provider defines the interface for a transcription/LLM service provider
|
||||
type Provider interface {
|
||||
Name() string
|
||||
RequiresAPIKey() bool
|
||||
ValidateAPIKey(key string) bool
|
||||
SupportsTranscription() bool
|
||||
SupportsLLM() bool
|
||||
DefaultTranscriptionModel() string
|
||||
DefaultLLMModel() string
|
||||
TranscriptionModels() []string
|
||||
LLMModels() []string
|
||||
}
|
||||
|
||||
// ProviderConfig holds configuration for a single provider
|
||||
type ProviderConfig struct {
|
||||
APIKey string `toml:"api_key"`
|
||||
}
|
||||
|
||||
var registry = make(map[string]Provider)
|
||||
|
||||
func init() {
|
||||
Register(&OpenAIProvider{})
|
||||
Register(&GroqProvider{})
|
||||
Register(&MistralProvider{})
|
||||
Register(&ElevenLabsProvider{})
|
||||
}
|
||||
|
||||
// Register adds a provider to the registry
|
||||
func Register(p Provider) {
|
||||
registry[p.Name()] = p
|
||||
}
|
||||
|
||||
// GetProvider returns a provider by name, or nil if not found
|
||||
func GetProvider(name string) Provider {
|
||||
return registry[name]
|
||||
}
|
||||
|
||||
// ListProviders returns all registered provider names
|
||||
func ListProviders() []string {
|
||||
names := make([]string, 0, len(registry))
|
||||
for name := range registry {
|
||||
names = append(names, name)
|
||||
}
|
||||
return names
|
||||
}
|
||||
|
||||
// ListProvidersWithTranscription returns providers that support transcription
|
||||
func ListProvidersWithTranscription() []string {
|
||||
var names []string
|
||||
for name, p := range registry {
|
||||
if p.SupportsTranscription() {
|
||||
names = append(names, name)
|
||||
}
|
||||
}
|
||||
return names
|
||||
}
|
||||
|
||||
// ListProvidersWithLLM returns providers that support LLM
|
||||
func ListProvidersWithLLM() []string {
|
||||
var names []string
|
||||
for name, p := range registry {
|
||||
if p.SupportsLLM() {
|
||||
names = append(names, name)
|
||||
}
|
||||
}
|
||||
return names
|
||||
}
|
||||
Reference in New Issue
Block a user