diff --git a/packages/core/src/core/client.test.ts b/packages/core/src/core/client.test.ts index 50ee7f765a..11dc28a998 100644 --- a/packages/core/src/core/client.test.ts +++ b/packages/core/src/core/client.test.ts @@ -679,6 +679,34 @@ describe('Gemini Client (client.ts)', () => { }); }); + it('does not emit ModelInfo event if signal is aborted', async () => { + // Arrange + mockTurnRunFn.mockReturnValue( + (async function* () { + yield { type: 'content', value: 'Hello' }; + })(), + ); + + const controller = new AbortController(); + controller.abort(); + + // Act + const stream = client.sendMessageStream( + [{ text: 'Hi' }], + controller.signal, + 'prompt-id-1', + ); + + const events = await fromAsync(stream); + + // Assert + expect(events).not.toContainEqual( + expect.objectContaining({ + type: GeminiEventType.ModelInfo, + }), + ); + }); + it.each([ { compressionStatus: diff --git a/packages/core/src/core/client.ts b/packages/core/src/core/client.ts index dbf81aee2f..73445da67b 100644 --- a/packages/core/src/core/client.ts +++ b/packages/core/src/core/client.ts @@ -627,8 +627,9 @@ export class GeminiClient { modelToUse = finalModel; this.currentSequenceModel = modelToUse; - yield { type: GeminiEventType.ModelInfo, value: modelToUse }; - + if (!signal.aborted) { + yield { type: GeminiEventType.ModelInfo, value: modelToUse }; + } const resultStream = turn.run(modelConfigKey, request, linkedSignal); let isError = false; let isInvalidStream = false;