summaryrefslogtreecommitdiff
path: root/packages/cli/src
diff options
context:
space:
mode:
authorRichie Foreman <[email protected]>2025-08-04 16:41:58 -0400
committerGitHub <[email protected]>2025-08-04 20:41:58 +0000
commit11808ef7ed3735b848ed23ef8b3eb0f8cdb95775 (patch)
tree5041b8d8eac2cdc29ca44fb68b4c157008c611dd /packages/cli/src
parent8da6d23688646dde2011fc3577faea1093077a3e (diff)
fix(core): Allow model to be set from `settings.json` (#5527)
Diffstat (limited to 'packages/cli/src')
-rw-r--r--packages/cli/src/config/config.test.ts62
-rw-r--r--packages/cli/src/config/config.ts4
-rw-r--r--packages/cli/src/config/settings.ts2
3 files changed, 66 insertions, 2 deletions
diff --git a/packages/cli/src/config/config.test.ts b/packages/cli/src/config/config.test.ts
index d8d463c2..431b1375 100644
--- a/packages/cli/src/config/config.test.ts
+++ b/packages/cli/src/config/config.test.ts
@@ -917,6 +917,68 @@ describe('loadCliConfig extensions', () => {
});
});
+describe('loadCliConfig model selection', () => {
+ it('selects a model from settings.json if provided', async () => {
+ process.argv = ['node', 'script.js'];
+ const argv = await parseArguments();
+ const config = await loadCliConfig(
+ {
+ model: 'gemini-9001-ultra',
+ },
+ [],
+ 'test-session',
+ argv,
+ );
+
+ expect(config.getModel()).toBe('gemini-9001-ultra');
+ });
+
+ it('uses the default gemini model if nothing is set', async () => {
+ process.argv = ['node', 'script.js']; // No model set.
+ const argv = await parseArguments();
+ const config = await loadCliConfig(
+ {
+ // No model set.
+ },
+ [],
+ 'test-session',
+ argv,
+ );
+
+ expect(config.getModel()).toBe('gemini-2.5-pro');
+ });
+
+ it('always prefers model from argvs', async () => {
+ process.argv = ['node', 'script.js', '--model', 'gemini-8675309-ultra'];
+ const argv = await parseArguments();
+ const config = await loadCliConfig(
+ {
+ model: 'gemini-9001-ultra',
+ },
+ [],
+ 'test-session',
+ argv,
+ );
+
+ expect(config.getModel()).toBe('gemini-8675309-ultra');
+ });
+
+ it('selects the model from argvs if provided', async () => {
+ process.argv = ['node', 'script.js', '--model', 'gemini-8675309-ultra'];
+ const argv = await parseArguments();
+ const config = await loadCliConfig(
+ {
+ // No model provided via settings.
+ },
+ [],
+ 'test-session',
+ argv,
+ );
+
+ expect(config.getModel()).toBe('gemini-8675309-ultra');
+ });
+});
+
describe('loadCliConfig ideModeFeature', () => {
const originalArgv = process.argv;
const originalEnv = { ...process.env };
diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts
index 9274b65e..38d59a4f 100644
--- a/packages/cli/src/config/config.ts
+++ b/packages/cli/src/config/config.ts
@@ -79,7 +79,7 @@ export async function parseArguments(): Promise<CliArgs> {
alias: 'm',
type: 'string',
description: `Model`,
- default: process.env.GEMINI_MODEL || DEFAULT_GEMINI_MODEL,
+ default: process.env.GEMINI_MODEL,
})
.option('prompt', {
alias: 'p',
@@ -444,7 +444,7 @@ export async function loadCliConfig(
cwd: process.cwd(),
fileDiscoveryService: fileService,
bugCommand: settings.bugCommand,
- model: argv.model!,
+ model: argv.model || settings.model || DEFAULT_GEMINI_MODEL,
extensionContextFilePaths,
maxSessionTurns: settings.maxSessionTurns ?? -1,
experimentalAcp: argv.experimentalAcp || false,
diff --git a/packages/cli/src/config/settings.ts b/packages/cli/src/config/settings.ts
index 05d4313f..20a7b14a 100644
--- a/packages/cli/src/config/settings.ts
+++ b/packages/cli/src/config/settings.ts
@@ -86,6 +86,8 @@ export interface Settings {
bugCommand?: BugCommandSettings;
checkpointing?: CheckpointingSettings;
autoConfigureMaxOldSpaceSize?: boolean;
+ /** The model name to use (e.g 'gemini-9.0-pro') */
+ model?: string;
// Git-aware file filtering settings
fileFiltering?: {