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 GitHub
parent ec7413456e
commit 52fadba9f2
2 changed files with 7 additions and 8 deletions

View File

@@ -1827,7 +1827,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' },
]);
@@ -1915,13 +1914,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,10 +626,10 @@ export class GeminiClient {
);
modelToUse = finalModel;
this.currentSequenceModel = modelToUse;
if (!signal.aborted) {
if (!signal.aborted && !this.currentSequenceModel) {
yield { type: GeminiEventType.ModelInfo, value: modelToUse };
}
this.currentSequenceModel = modelToUse;
const resultStream = turn.run(modelConfigKey, request, linkedSignal);
let isError = false;
let isInvalidStream = false;