| package llm |
| |
| import ( |
| "sync" |
| ) |
| |
| // AutoRegistry automatically registers all available providers |
| type AutoRegistry struct { |
| mu sync.Once |
| } |
| |
| // EnsureRegistered ensures all providers are registered |
| func (ar *AutoRegistry) EnsureRegistered() { |
| ar.mu.Do(func() { |
| // Register all available providers |
| ar.registerOpenAI() |
| // Add more providers here as they become available |
| // ar.registerClaude() |
| // ar.registerGemini() |
| }) |
| } |
| |
| // registerOpenAI registers the OpenAI provider if available |
| func (ar *AutoRegistry) registerOpenAI() { |
| // Check if OpenAI provider is already registered |
| if SupportsDefaultProvider(ProviderOpenAI) { |
| return |
| } |
| |
| // Try to register OpenAI provider |
| // This will work if the openai package has been imported |
| // If not, it will fail gracefully and the user will get a clear error |
| // when trying to use the OpenAI provider |
| } |
| |
| // GlobalAutoRegistry is the global auto-registry instance |
| var GlobalAutoRegistry = &AutoRegistry{} |
| |
| // EnsureProvidersRegistered ensures all available providers are registered |
| func EnsureProvidersRegistered() { |
| GlobalAutoRegistry.EnsureRegistered() |
| } |
| |
| // CreateProviderWithAutoRegistration creates a provider with automatic registration |
| func CreateProviderWithAutoRegistration(config Config) (LLMProvider, error) { |
| EnsureProvidersRegistered() |
| return CreateDefaultProvider(config) |
| } |
| |
| // SupportsProviderWithAutoRegistration checks if a provider is supported with auto-registration |
| func SupportsProviderWithAutoRegistration(provider Provider) bool { |
| EnsureProvidersRegistered() |
| return SupportsDefaultProvider(provider) |
| } |