diff options
Diffstat (limited to 'packages/cli/src/config/config.ts')
| -rw-r--r-- | packages/cli/src/config/config.ts | 78 |
1 files changed, 43 insertions, 35 deletions
diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index 89b751bc..49004776 100644 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -14,6 +14,7 @@ import { setGeminiMdFilename as setServerGeminiMdFilename, getCurrentGeminiMdFilename, ApprovalMode, + ContentGeneratorConfig, } from '@gemini-cli/core'; import { Settings } from './settings.js'; import { getEffectiveModel } from '../utils/modelCheck.js'; @@ -121,29 +122,6 @@ export async function loadCliConfig( ): Promise<Config> { loadEnvironment(); - const geminiApiKey = process.env.GEMINI_API_KEY; - const googleApiKey = process.env.GOOGLE_API_KEY; - const googleCloudProject = process.env.GOOGLE_CLOUD_PROJECT; - const googleCloudLocation = process.env.GOOGLE_CLOUD_LOCATION; - - const hasGeminiApiKey = !!geminiApiKey; - const hasGoogleApiKey = !!googleApiKey; - const hasVertexProjectLocationConfig = - !!googleCloudProject && !!googleCloudLocation; - - if (!hasGeminiApiKey && !hasGoogleApiKey && !hasVertexProjectLocationConfig) { - logger.error( - 'No valid API authentication configuration found. Please set ONE of the following combinations in your environment variables or .env file:\n' + - '1. GEMINI_API_KEY (for Gemini API access).\n' + - '2. GOOGLE_API_KEY (for Gemini API or Vertex AI Express Mode access).\n' + - '3. GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION (for Vertex AI access).\n\n' + - 'For Gemini API keys, visit: https://ai.google.dev/gemini-api/docs/api-key\n' + - 'For Vertex AI authentication, visit: https://cloud.google.com/vertex-ai/docs/start/authentication\n' + - 'The GOOGLE_GENAI_USE_VERTEXAI environment variable can also be set to true/false to influence service selection when ambiguity exists.', - ); - process.exit(1); - } - const argv = await parseArguments(); const debugMode = argv.debug || false; @@ -164,18 +142,10 @@ export async function loadCliConfig( debugMode, ); - const userAgent = `GeminiCLI/${getCliVersion()}/(${process.platform}; ${process.arch})`; - const apiKeyForServer = geminiApiKey || googleApiKey || ''; - const useVertexAI = hasGeminiApiKey ? false : undefined; - - let modelToUse = argv.model || DEFAULT_GEMINI_MODEL; - if (apiKeyForServer) { - modelToUse = await getEffectiveModel(apiKeyForServer, modelToUse); - } + const contentGeneratorConfig = await createContentGeneratorConfig(argv); return new Config({ - apiKey: apiKeyForServer, - model: modelToUse, + contentGeneratorConfig, embeddingModel: DEFAULT_GEMINI_EMBEDDING_MODEL, sandbox: argv.sandbox ?? settings.sandbox ?? argv.yolo ?? false, targetDir: process.cwd(), @@ -187,11 +157,9 @@ export async function loadCliConfig( toolCallCommand: settings.toolCallCommand, mcpServerCommand: settings.mcpServerCommand, mcpServers: settings.mcpServers, - userAgent, userMemory: memoryContent, geminiMdFileCount: fileCount, approvalMode: argv.yolo || false ? ApprovalMode.YOLO : ApprovalMode.DEFAULT, - vertexai: useVertexAI, showMemoryUsage: argv.show_memory_usage || settings.showMemoryUsage || false, geminiIgnorePatterns, @@ -206,3 +174,43 @@ export async function loadCliConfig( settings.fileFiltering?.allowBuildArtifacts, }); } + +async function createContentGeneratorConfig( + argv: CliArgs, +): Promise<ContentGeneratorConfig> { + const geminiApiKey = process.env.GEMINI_API_KEY; + const googleApiKey = process.env.GOOGLE_API_KEY; + const googleCloudProject = process.env.GOOGLE_CLOUD_PROJECT; + const googleCloudLocation = process.env.GOOGLE_CLOUD_LOCATION; + + const hasGeminiApiKey = !!geminiApiKey; + const hasGoogleApiKey = !!googleApiKey; + const hasVertexProjectLocationConfig = + !!googleCloudProject && !!googleCloudLocation; + + if (!hasGeminiApiKey && !hasGoogleApiKey && !hasVertexProjectLocationConfig) { + logger.error( + 'No valid API authentication configuration found. Please set ONE of the following combinations in your environment variables or .env file:\n' + + '1. GEMINI_API_KEY (for Gemini API access).\n' + + '2. GOOGLE_API_KEY (for Gemini API or Vertex AI Express Mode access).\n' + + '3. GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION (for Vertex AI access).\n\n' + + 'For Gemini API keys, visit: https://ai.google.dev/gemini-api/docs/api-key\n' + + 'For Vertex AI authentication, visit: https://cloud.google.com/vertex-ai/docs/start/authentication\n' + + 'The GOOGLE_GENAI_USE_VERTEXAI environment variable can also be set to true/false to influence service selection when ambiguity exists.', + ); + process.exit(1); + } + + const config: ContentGeneratorConfig = { + model: argv.model || DEFAULT_GEMINI_MODEL, + apiKey: geminiApiKey || googleApiKey || '', + vertexai: hasGeminiApiKey ? false : undefined, + userAgent: `GeminiCLI/${getCliVersion()}/(${process.platform}; ${process.arch})`, + }; + + if (config.apiKey) { + config.model = await getEffectiveModel(config.apiKey, config.model); + } + + return config; +} |
