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{}) Register(&VeniceProvider{}) Register(&OpenRouterProvider{}) }