mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-10 22:21:22 -07:00
77 lines
2.3 KiB
TypeScript
77 lines
2.3 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import { expect, describe, it, beforeEach, afterEach } from 'vitest';
|
|
import { TestRig } from './test-helper.js';
|
|
|
|
describe('Interactive Mode', () => {
|
|
let rig: TestRig;
|
|
|
|
beforeEach(() => {
|
|
rig = new TestRig();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await rig.cleanup();
|
|
});
|
|
|
|
// TODO(#11062): Make this test reliable by not using the actual Gemini model
|
|
// We could not rely on the following mechanisms that have already shown to be
|
|
// flakey:
|
|
// 1. Asking a prompt like "Output 1000 tokens and the inventor of the lightbulb"
|
|
// --> This was b/c the model occasionally did not output einstein and
|
|
// we are not able to trigger the compression piece
|
|
// 2. Asking it to out a specific output and waiting for that.
|
|
// --> The expect catches the input and thinks that is the output so the
|
|
// /compress gets called too early
|
|
it.skip('should trigger chat compression with /compress command', async () => {
|
|
rig.setup('interactive-compress-success');
|
|
|
|
const run = await rig.runInteractive();
|
|
|
|
// Generate a long context to make compression viable.
|
|
const longPrompt =
|
|
'Write a 200 word story about a robot. The story MUST end with the following output: THE_END';
|
|
|
|
await run.sendKeys(longPrompt);
|
|
await run.sendKeys('\r');
|
|
|
|
// Wait for the specific end marker.
|
|
await run.expectText('THE_END', 30000);
|
|
|
|
await run.type('/compress');
|
|
await run.sendKeys('\r');
|
|
|
|
const foundEvent = await rig.waitForTelemetryEvent(
|
|
'chat_compression',
|
|
90000,
|
|
);
|
|
expect(foundEvent, 'chat_compression telemetry event was not found').toBe(
|
|
true,
|
|
);
|
|
});
|
|
|
|
it('should handle /compress command on empty history', async () => {
|
|
rig.setup('interactive-compress-empty');
|
|
|
|
const run = await rig.runInteractive();
|
|
|
|
await run.type('/compress');
|
|
await run.type('\r');
|
|
await run.expectText('Nothing to compress.', 25000);
|
|
|
|
// Verify no telemetry event is logged for NOOP
|
|
const foundEvent = await rig.waitForTelemetryEvent(
|
|
'chat_compression',
|
|
5000, // Short timeout as we expect it not to happen
|
|
);
|
|
expect(
|
|
foundEvent,
|
|
'chat_compression telemetry event should not be found for NOOP',
|
|
).toBe(false);
|
|
});
|
|
});
|