From 344066fd1147d823dfefcc7f0e25dfafadc2de33 Mon Sep 17 00:00:00 2001 From: Luis Pater Date: Wed, 17 Dec 2025 02:58:14 +0800 Subject: [PATCH] refactor(api): remove unused OpenAI compatibility provider logic Simplify handler logic by removing OpenAI compatibility provider management, including related mutex handling and configuration updates. --- internal/api/server.go | 6 ----- internal/watcher/watcher.go | 20 +++++++-------- sdk/api/handlers/handlers.go | 49 +----------------------------------- 3 files changed, 11 insertions(+), 64 deletions(-) diff --git a/internal/api/server.go b/internal/api/server.go index f7672109..970371e0 100644 --- a/internal/api/server.go +++ b/internal/api/server.go @@ -934,12 +934,6 @@ func (s *Server) UpdateClients(cfg *config.Config) { // Save YAML snapshot for next comparison s.oldConfigYaml, _ = yaml.Marshal(cfg) - providerNames := make([]string, 0, len(cfg.OpenAICompatibility)) - for _, p := range cfg.OpenAICompatibility { - providerNames = append(providerNames, p.Name) - } - s.handlers.SetOpenAICompatProviders(providerNames) - s.handlers.UpdateClients(&cfg.SDKConfig) if !cfg.RemoteManagement.DisableControlPanel { diff --git a/internal/watcher/watcher.go b/internal/watcher/watcher.go index e5d99f76..b3330cf7 100644 --- a/internal/watcher/watcher.go +++ b/internal/watcher/watcher.go @@ -21,8 +21,8 @@ import ( "time" "github.com/fsnotify/fsnotify" - "github.com/router-for-me/CLIProxyAPI/v6/internal/config" kiroauth "github.com/router-for-me/CLIProxyAPI/v6/internal/auth/kiro" + "github.com/router-for-me/CLIProxyAPI/v6/internal/config" "github.com/router-for-me/CLIProxyAPI/v6/internal/runtime/geminicli" "github.com/router-for-me/CLIProxyAPI/v6/internal/watcher/diff" "gopkg.in/yaml.v3" @@ -203,7 +203,7 @@ func (w *Watcher) watchKiroIDETokenFile() { // Kiro IDE stores tokens in ~/.aws/sso/cache/ kiroTokenDir := filepath.Join(homeDir, ".aws", "sso", "cache") - + // Check if directory exists if _, statErr := os.Stat(kiroTokenDir); os.IsNotExist(statErr) { log.Debugf("Kiro IDE token directory does not exist: %s", kiroTokenDir) @@ -657,16 +657,16 @@ func (w *Watcher) handleEvent(event fsnotify.Event) { normalizedAuthDir := w.normalizeAuthPath(w.authDir) isConfigEvent := normalizedName == normalizedConfigPath && event.Op&configOps != 0 authOps := fsnotify.Create | fsnotify.Write | fsnotify.Remove | fsnotify.Rename - isAuthJSON := strings.HasPrefix(normalizedName, normalizedAuthDir) && strings.HasSuffix(normalizedName, ".json") && event.Op&authOps != 0 - + isAuthJSON := strings.HasPrefix(normalizedName, normalizedAuthDir) && strings.HasSuffix(normalizedName, ".json") && event.Op&authOps != 0 + // Check for Kiro IDE token file changes isKiroIDEToken := w.isKiroIDETokenFile(event.Name) && event.Op&authOps != 0 - + if !isConfigEvent && !isAuthJSON && !isKiroIDEToken { // Ignore unrelated files (e.g., cookie snapshots *.cookie) and other noise. return } - + // Handle Kiro IDE token file changes if isKiroIDEToken { w.handleKiroIDETokenChange(event) @@ -765,7 +765,7 @@ func (w *Watcher) handleKiroIDETokenChange(event fsnotify.Event) { log.Infof("Kiro IDE token file updated, access token refreshed (provider: %s)", tokenData.Provider) // Trigger auth state refresh to pick up the new token - w.refreshAuthState() + w.refreshAuthState(true) // Notify callback if set w.clientsMutex.RLock() @@ -1381,7 +1381,7 @@ func (w *Watcher) SnapshotCoreAuths() []*coreauth.Auth { continue } t, _ := metadata["type"].(string) - + // Detect Kiro auth files by auth_method field (they don't have "type" field) if t == "" { if authMethod, _ := metadata["auth_method"].(string); authMethod == "builder-id" || authMethod == "social" { @@ -1389,7 +1389,7 @@ func (w *Watcher) SnapshotCoreAuths() []*coreauth.Auth { log.Debugf("SnapshotCoreAuths: detected Kiro auth by auth_method: %s", name) } } - + if t == "" { log.Debugf("SnapshotCoreAuths: skipping file without type: %s", name) continue @@ -1452,7 +1452,7 @@ func (w *Watcher) SnapshotCoreAuths() []*coreauth.Auth { a.NextRefreshAfter = expiresAt.Add(-30 * time.Minute) } } - + // Apply global preferred endpoint setting if not present in metadata if cfg.KiroPreferredEndpoint != "" { // Check if already set in metadata (which takes precedence in executor) diff --git a/sdk/api/handlers/handlers.go b/sdk/api/handlers/handlers.go index c1c27080..839f060b 100644 --- a/sdk/api/handlers/handlers.go +++ b/sdk/api/handlers/handlers.go @@ -9,7 +9,6 @@ import ( "fmt" "net/http" "strings" - "sync" "github.com/gin-gonic/gin" "github.com/router-for-me/CLIProxyAPI/v6/internal/interfaces" @@ -50,27 +49,6 @@ type BaseAPIHandler struct { // Cfg holds the current application configuration. Cfg *config.SDKConfig - - // OpenAICompatProviders is a list of provider names for OpenAI compatibility. - openAICompatProviders []string - openAICompatMutex sync.RWMutex -} - -// GetOpenAICompatProviders safely returns a copy of the provider names -func (h *BaseAPIHandler) GetOpenAICompatProviders() []string { - h.openAICompatMutex.RLock() - defer h.openAICompatMutex.RUnlock() - result := make([]string, len(h.openAICompatProviders)) - copy(result, h.openAICompatProviders) - return result -} - -// SetOpenAICompatProviders safely sets the provider names -func (h *BaseAPIHandler) SetOpenAICompatProviders(providers []string) { - h.openAICompatMutex.Lock() - defer h.openAICompatMutex.Unlock() - h.openAICompatProviders = make([]string, len(providers)) - copy(h.openAICompatProviders, providers) } // NewBaseAPIHandlers creates a new API handlers instance. @@ -82,12 +60,11 @@ func (h *BaseAPIHandler) SetOpenAICompatProviders(providers []string) { // // Returns: // - *BaseAPIHandler: A new API handlers instance -func NewBaseAPIHandlers(cfg *config.SDKConfig, authManager *coreauth.Manager, openAICompatProviders []string) *BaseAPIHandler { +func NewBaseAPIHandlers(cfg *config.SDKConfig, authManager *coreauth.Manager) *BaseAPIHandler { h := &BaseAPIHandler{ Cfg: cfg, AuthManager: authManager, } - h.SetOpenAICompatProviders(openAICompatProviders) return h } @@ -392,30 +369,6 @@ func (h *BaseAPIHandler) getRequestDetails(modelName string) (providers []string return providers, normalizedModel, metadata, nil } -func (h *BaseAPIHandler) parseDynamicModel(modelName string) (providerName, model string, isDynamic bool) { - var providerPart, modelPart string - for _, sep := range []string{"://"} { - if parts := strings.SplitN(modelName, sep, 2); len(parts) == 2 { - providerPart = parts[0] - modelPart = parts[1] - break - } - } - - if providerPart == "" { - return "", modelName, false - } - - // Check if the provider is a configured openai-compatibility provider - for _, pName := range h.GetOpenAICompatProviders() { - if pName == providerPart { - return providerPart, modelPart, true - } - } - - return "", modelName, false -} - func cloneBytes(src []byte) []byte { if len(src) == 0 { return nil