From 3441b88375b67964f3211e2f4fd2f43cc3902b33 Mon Sep 17 00:00:00 2001 From: "N. Taylor Mullen" Date: Mon, 19 Jan 2026 20:29:45 -0800 Subject: [PATCH] fix(core): deduplicate ModelInfo emission in GeminiClient (#17075) --- packages/core/src/core/client.test.ts | 11 +++++------ packages/core/src/core/client.ts | 5 +++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/core/src/core/client.test.ts b/packages/core/src/core/client.test.ts index 6045088c04..fe65b5d701 100644 --- a/packages/core/src/core/client.test.ts +++ b/packages/core/src/core/client.test.ts @@ -1624,7 +1624,6 @@ ${JSON.stringify( expect(events).toEqual([ { type: GeminiEventType.ModelInfo, value: 'default-routed-model' }, { type: GeminiEventType.InvalidStream }, - { type: GeminiEventType.ModelInfo, value: 'default-routed-model' }, { type: GeminiEventType.Content, value: 'Continued content' }, ]); @@ -1712,13 +1711,13 @@ ${JSON.stringify( const events = await fromAsync(stream); // Assert - // We expect 4 events (model_info + original + model_info + 1 retry) - expect(events.length).toBe(4); + // We expect 3 events (model_info + original + 1 retry) + expect(events.length).toBe(3); expect( events - .filter((e) => e.type !== GeminiEventType.ModelInfo) - .every((e) => e.type === GeminiEventType.InvalidStream), - ).toBe(true); + .filter((e) => e.type === GeminiEventType.ModelInfo) + .map((e) => e.value), + ).toEqual(['default-routed-model']); // Verify that turn.run was called twice expect(mockTurnRunFn).toHaveBeenCalledTimes(2); diff --git a/packages/core/src/core/client.ts b/packages/core/src/core/client.ts index 48da7e43e7..7e861f79e9 100644 --- a/packages/core/src/core/client.ts +++ b/packages/core/src/core/client.ts @@ -628,9 +628,10 @@ export class GeminiClient { ); modelToUse = finalModel; + if (!signal.aborted && !this.currentSequenceModel) { + yield { type: GeminiEventType.ModelInfo, value: modelToUse }; + } this.currentSequenceModel = modelToUse; - yield { type: GeminiEventType.ModelInfo, value: modelToUse }; - const resultStream = turn.run(modelConfigKey, request, linkedSignal); let isError = false; let isInvalidStream = false;