fix(core): deduplicate ModelInfo emission in GeminiClient (#17075)

This commit is contained in:
N. Taylor Mullen
2026-01-19 20:29:45 -08:00
committed by Sandy Tao
parent f6a5fa0e03
commit ea0e3de430
2 changed files with 8 additions and 8 deletions

View File

@@ -1649,7 +1649,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' },
]);
@@ -1737,13 +1736,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);

View File

@@ -626,9 +626,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;