mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-13 23:51:16 -07:00
feat(core): experimental in-progress steering hints (2 of 2) (#19307)
This commit is contained in:
84
packages/cli/src/integration-tests/modelSteering.test.tsx
Normal file
84
packages/cli/src/integration-tests/modelSteering.test.tsx
Normal file
@@ -0,0 +1,84 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2026 Google LLC
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
import { describe, it, afterEach } from 'vitest';
|
||||
import { AppRig } from '../test-utils/AppRig.js';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { PolicyDecision } from '@google/gemini-cli-core';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
describe('Model Steering Integration', () => {
|
||||
let rig: AppRig | undefined;
|
||||
|
||||
afterEach(async () => {
|
||||
await rig?.unmount();
|
||||
});
|
||||
|
||||
it('should steer the model using a hint during a tool turn', async () => {
|
||||
const fakeResponsesPath = path.join(
|
||||
__dirname,
|
||||
'../test-utils/fixtures/steering.responses',
|
||||
);
|
||||
rig = new AppRig({
|
||||
fakeResponsesPath,
|
||||
configOverrides: { modelSteering: true },
|
||||
});
|
||||
await rig.initialize();
|
||||
rig.render();
|
||||
await rig.waitForIdle();
|
||||
|
||||
rig.setToolPolicy('list_directory', PolicyDecision.ASK_USER);
|
||||
rig.setToolPolicy('read_file', PolicyDecision.ASK_USER);
|
||||
|
||||
rig.setMockCommands([
|
||||
{
|
||||
command: /list_directory/,
|
||||
result: {
|
||||
output: 'file1.txt\nfile2.js\nfile3.md',
|
||||
exitCode: 0,
|
||||
},
|
||||
},
|
||||
{
|
||||
command: /read_file file1.txt/,
|
||||
result: {
|
||||
output: 'This is file1.txt content.',
|
||||
exitCode: 0,
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
// Start a long task
|
||||
await rig.type('Start long task');
|
||||
await rig.pressEnter();
|
||||
|
||||
// Wait for the model to call 'list_directory' (Confirming state)
|
||||
await rig.waitForOutput('ReadFolder');
|
||||
|
||||
// Injected a hint while the model is in a tool turn
|
||||
await rig.addUserHint('focus on .txt');
|
||||
|
||||
// Resolve list_directory (Proceed)
|
||||
await rig.resolveTool('ReadFolder');
|
||||
|
||||
// Wait for the model to process the hint and output the next action
|
||||
// Based on steering.responses, it should first acknowledge the hint
|
||||
await rig.waitForOutput('ACK: I will focus on .txt files now.');
|
||||
|
||||
// Then it should proceed with the next action
|
||||
await rig.waitForOutput(
|
||||
/Since you want me to focus on .txt files,[\s\S]*I will read file1.txt/,
|
||||
);
|
||||
await rig.waitForOutput('ReadFile');
|
||||
|
||||
// Resolve read_file (Proceed)
|
||||
await rig.resolveTool('ReadFile');
|
||||
|
||||
// Wait for final completion
|
||||
await rig.waitForOutput('Task complete.');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user