47
server/providers/registry.go
Normal file
47
server/providers/registry.go
Normal file
@@ -0,0 +1,47 @@
|
||||
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{})
|
||||
}
|
||||
Reference in New Issue
Block a user