diff --git a/internal/api/server.go b/internal/api/server.go index cf5328de..0c636cc7 100644 --- a/internal/api/server.go +++ b/internal/api/server.go @@ -233,6 +233,11 @@ func (s *Server) UpdateClients(clients []interfaces.Client, cfg *config.Config) // - gin.HandlerFunc: The authentication middleware handler func AuthMiddleware(cfg *config.Config) gin.HandlerFunc { return func(c *gin.Context) { + if cfg.AllowLocalhostUnauthenticated && strings.HasPrefix(c.Request.RemoteAddr, "127.0.0.1:") { + c.Next() + return + } + if len(cfg.APIKeys) == 0 { c.Next() return diff --git a/internal/client/gemini-cli_client.go b/internal/client/gemini-cli_client.go index d1c6bdf9..1fa01f65 100644 --- a/internal/client/gemini-cli_client.go +++ b/internal/client/gemini-cli_client.go @@ -73,7 +73,7 @@ func NewGeminiCLIClient(httpClient *http.Client, ts *geminiAuth.GeminiTokenStora // Initialize model registry and register Gemini models client.InitializeModelRegistry(clientID) - client.RegisterModels("gemini-cli", registry.GetGeminiModels()) + client.RegisterModels("gemini-cli", registry.GetGeminiCLIModels()) return client } diff --git a/internal/config/config.go b/internal/config/config.go index 3fd40f42..a4b09990 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -40,10 +40,14 @@ type Config struct { // RequestRetry defines the retry times when the request failed. RequestRetry int `yaml:"request-retry"` + // ClaudeKey defines a list of Claude API key configurations as specified in the YAML configuration file. ClaudeKey []ClaudeKey `yaml:"claude-api-key"` // OpenAICompatibility defines OpenAI API compatibility configurations for external providers. OpenAICompatibility []OpenAICompatibility `yaml:"openai-compatibility"` + + // AllowLocalhostUnauthenticated allows unauthenticated requests from localhost. + AllowLocalhostUnauthenticated bool `yaml:"allow-localhost-unauthenticated"` } // QuotaExceeded defines the behavior when API quota limits are exceeded. diff --git a/internal/registry/model_definitions.go b/internal/registry/model_definitions.go index 2ee4cd2d..2a4c2880 100644 --- a/internal/registry/model_definitions.go +++ b/internal/registry/model_definitions.go @@ -53,6 +53,54 @@ func GetClaudeModels() []*ModelInfo { // GetGeminiModels returns the standard Gemini model definitions func GetGeminiModels() []*ModelInfo { + return []*ModelInfo{ + { + ID: "gemini-2.5-flash", + Object: "model", + Created: time.Now().Unix(), + OwnedBy: "google", + Type: "gemini", + Name: "models/gemini-2.5-flash", + Version: "001", + DisplayName: "Gemini 2.5 Flash", + Description: "Stable version of Gemini 2.5 Flash, our mid-size multimodal model that supports up to 1 million tokens, released in June of 2025.", + InputTokenLimit: 1048576, + OutputTokenLimit: 65536, + SupportedGenerationMethods: []string{"generateContent", "countTokens", "createCachedContent", "batchGenerateContent"}, + }, + { + ID: "gemini-2.5-pro", + Object: "model", + Created: time.Now().Unix(), + OwnedBy: "google", + Type: "gemini", + Name: "models/gemini-2.5-pro", + Version: "2.5", + DisplayName: "Gemini 2.5 Pro", + Description: "Stable release (June 17th, 2025) of Gemini 2.5 Pro", + InputTokenLimit: 1048576, + OutputTokenLimit: 65536, + SupportedGenerationMethods: []string{"generateContent", "countTokens", "createCachedContent", "batchGenerateContent"}, + }, + { + ID: "gemini-2.5-flash-lite", + Object: "model", + Created: time.Now().Unix(), + OwnedBy: "google", + Type: "gemini", + Name: "models/gemini-2.5-flash-lite", + Version: "2.5", + DisplayName: "Gemini 2.5 Flash Lite", + Description: "Stable release (June 17th, 2025) of Gemini 2.5 Flash Lite", + InputTokenLimit: 1048576, + OutputTokenLimit: 65536, + SupportedGenerationMethods: []string{"generateContent", "countTokens", "createCachedContent", "batchGenerateContent"}, + }, + } +} + +// GetGeminiCLIModels returns the standard Gemini model definitions +func GetGeminiCLIModels() []*ModelInfo { return []*ModelInfo{ { ID: "gemini-2.5-flash",