48 lines
830 B
Go
48 lines
830 B
Go
package providers
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
)
|
|
|
|
// registry holds all registered providers.
|
|
var (
|
|
registry = make(map[string]Provider)
|
|
mu sync.RWMutex
|
|
)
|
|
|
|
// Register adds a provider to the registry.
|
|
func Register(p Provider) {
|
|
mu.Lock()
|
|
defer mu.Unlock()
|
|
registry[p.ID()] = p
|
|
}
|
|
|
|
// Get returns a provider by ID.
|
|
func Get(id string) (Provider, error) {
|
|
mu.RLock()
|
|
defer mu.RUnlock()
|
|
p, ok := registry[id]
|
|
if !ok {
|
|
return nil, fmt.Errorf("unknown provider: %s", id)
|
|
}
|
|
return p, nil
|
|
}
|
|
|
|
// List returns all registered provider IDs.
|
|
func List() []string {
|
|
mu.RLock()
|
|
defer mu.RUnlock()
|
|
ids := make([]string, 0, len(registry))
|
|
for id := range registry {
|
|
ids = append(ids, id)
|
|
}
|
|
return ids
|
|
}
|
|
|
|
// Init registers all built-in providers.
|
|
func Init() {
|
|
Register(&OpenAIProvider{})
|
|
Register(&AnthropicProvider{})
|
|
}
|