Fix provider resitration
Change-Id: I21f223922b60648b5ad9cf0bd61a64a53d4d5aaa
diff --git a/server/llm/providers/providers.go b/server/llm/providers/providers.go
new file mode 100644
index 0000000..87015aa
--- /dev/null
+++ b/server/llm/providers/providers.go
@@ -0,0 +1,19 @@
+package providers
+
+import (
+ _ "github.com/iomodo/staff/llm/openai" // Register OpenAI provider
+)
+
+// RegisterAll registers all available LLM providers
+func RegisterAll() {
+ // Import all provider packages to trigger their init() functions
+ // This ensures all providers are registered when this package is imported
+ _ = "import all providers"
+}
+
+// EnsureRegistered ensures all providers are registered
+// This function can be called from anywhere to ensure providers are available
+func EnsureRegistered() {
+ // The blank imports below will trigger the init() functions
+ // which register the providers with the LLM factory
+}
diff --git a/server/llm/registry.go b/server/llm/registry.go
new file mode 100644
index 0000000..f41ffe6
--- /dev/null
+++ b/server/llm/registry.go
@@ -0,0 +1,54 @@
+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)
+}
diff --git a/server/server/server.go b/server/server/server.go
index 920d180..b9fcfc7 100644
--- a/server/server/server.go
+++ b/server/server/server.go
@@ -13,7 +13,7 @@
"github.com/iomodo/staff/agent"
"github.com/iomodo/staff/git"
"github.com/iomodo/staff/llm"
- _ "github.com/iomodo/staff/llm/openai" // Register OpenAI provider
+ _ "github.com/iomodo/staff/llm/providers" // Auto-register all providers
"github.com/iomodo/staff/tm/git_tm"
"github.com/joho/godotenv"
"golang.org/x/text/cases"