summaryrefslogtreecommitdiff
path: root/packages/cli/src/config
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src/config')
-rw-r--r--packages/cli/src/config/config.test.ts16
-rw-r--r--packages/cli/src/config/config.ts46
-rw-r--r--packages/cli/src/config/settings.ts2
3 files changed, 51 insertions, 13 deletions
diff --git a/packages/cli/src/config/config.test.ts b/packages/cli/src/config/config.test.ts
index 9f288372..a39278bc 100644
--- a/packages/cli/src/config/config.test.ts
+++ b/packages/cli/src/config/config.test.ts
@@ -82,29 +82,29 @@ describe('loadCliConfig', () => {
it('should set showMemoryUsage to true when --memory flag is present', async () => {
process.argv = ['node', 'script.js', '--show_memory_usage'];
const settings: Settings = {};
- const config = await loadCliConfig(settings);
- expect(config.getShowMemoryUsage()).toBe(true);
+ const result = await loadCliConfig(settings);
+ expect(result.config.getShowMemoryUsage()).toBe(true);
});
it('should set showMemoryUsage to false when --memory flag is not present', async () => {
process.argv = ['node', 'script.js'];
const settings: Settings = {};
- const config = await loadCliConfig(settings);
- expect(config.getShowMemoryUsage()).toBe(false);
+ const result = await loadCliConfig(settings);
+ expect(result.config.getShowMemoryUsage()).toBe(false);
});
it('should set showMemoryUsage to false by default from settings if CLI flag is not present', async () => {
process.argv = ['node', 'script.js'];
const settings: Settings = { showMemoryUsage: false };
- const config = await loadCliConfig(settings);
- expect(config.getShowMemoryUsage()).toBe(false);
+ const result = await loadCliConfig(settings);
+ expect(result.config.getShowMemoryUsage()).toBe(false);
});
it('should prioritize CLI flag over settings for showMemoryUsage (CLI true, settings false)', async () => {
process.argv = ['node', 'script.js', '--show_memory_usage'];
const settings: Settings = { showMemoryUsage: false };
- const config = await loadCliConfig(settings);
- expect(config.getShowMemoryUsage()).toBe(true);
+ const result = await loadCliConfig(settings);
+ expect(result.config.getShowMemoryUsage()).toBe(true);
});
});
diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts
index ee1c9d36..2429ad64 100644
--- a/packages/cli/src/config/config.ts
+++ b/packages/cli/src/config/config.ts
@@ -19,6 +19,10 @@ import {
} from '@gemini-code/core';
import { Settings } from './settings.js';
import { readPackageUp } from 'read-package-up';
+import {
+ getEffectiveModel,
+ type EffectiveModelCheckResult,
+} from '../utils/modelCheck.js';
// Simple console logger for now - replace with actual logger if available
const logger = {
@@ -30,7 +34,8 @@ const logger = {
error: (...args: any[]) => console.error('[ERROR]', ...args),
};
-const DEFAULT_GEMINI_MODEL = 'gemini-2.5-pro-preview-05-06';
+export const DEFAULT_GEMINI_MODEL = 'gemini-2.5-pro-preview-05-06';
+export const DEFAULT_GEMINI_FLASH_MODEL = 'gemini-2.5-flash-preview-05-20';
interface CliArgs {
model: string | undefined;
@@ -114,7 +119,16 @@ export async function loadHierarchicalGeminiMemory(
return loadServerHierarchicalMemory(currentWorkingDirectory, debugMode);
}
-export async function loadCliConfig(settings: Settings): Promise<Config> {
+export interface LoadCliConfigResult {
+ config: Config;
+ modelWasSwitched: boolean;
+ originalModelBeforeSwitch?: string;
+ finalModel: string;
+}
+
+export async function loadCliConfig(
+ settings: Settings,
+): Promise<LoadCliConfigResult> {
loadEnvironment();
const geminiApiKey = process.env.GEMINI_API_KEY;
@@ -164,9 +178,27 @@ export async function loadCliConfig(settings: Settings): Promise<Config> {
const apiKeyForServer = geminiApiKey || googleApiKey || '';
const useVertexAI = hasGeminiApiKey ? false : undefined;
+ let modelToUse = argv.model || DEFAULT_GEMINI_MODEL;
+ let modelSwitched = false;
+ let originalModel: string | undefined = undefined;
+
+ if (apiKeyForServer) {
+ const checkResult: EffectiveModelCheckResult = await getEffectiveModel(
+ apiKeyForServer,
+ modelToUse,
+ );
+ if (checkResult.switched) {
+ modelSwitched = true;
+ originalModel = checkResult.originalModelIfSwitched;
+ modelToUse = checkResult.effectiveModel;
+ }
+ } else {
+ // logger.debug('API key not available during config load. Skipping model availability check.');
+ }
+
const configParams: ConfigParameters = {
apiKey: apiKeyForServer,
- model: argv.model || DEFAULT_GEMINI_MODEL,
+ model: modelToUse,
sandbox: argv.sandbox ?? settings.sandbox ?? argv.yolo ?? false,
targetDir: process.cwd(),
debugMode,
@@ -186,7 +218,13 @@ export async function loadCliConfig(settings: Settings): Promise<Config> {
argv.show_memory_usage || settings.showMemoryUsage || false,
};
- return createServerConfig(configParams);
+ const config = createServerConfig(configParams);
+ return {
+ config,
+ modelWasSwitched: modelSwitched,
+ originalModelBeforeSwitch: originalModel,
+ finalModel: modelToUse,
+ };
}
async function createUserAgent(): Promise<string> {
diff --git a/packages/cli/src/config/settings.ts b/packages/cli/src/config/settings.ts
index 5d51ba15..6c14a6dc 100644
--- a/packages/cli/src/config/settings.ts
+++ b/packages/cli/src/config/settings.ts
@@ -7,7 +7,7 @@
import * as fs from 'fs';
import * as path from 'path';
import { homedir } from 'os';
-import { MCPServerConfig } from '@gemini-code/core/src/config/config.js';
+import { MCPServerConfig } from '@gemini-code/core';
import stripJsonComments from 'strip-json-comments';
import { DefaultLight } from '../ui/themes/default-light.js';
import { DefaultDark } from '../ui/themes/default.js';