From 6227ba73a73b3e78ce584624077d482fbf9b1533 Mon Sep 17 00:00:00 2001 From: Aishanee Shah Date: Fri, 6 Feb 2026 20:28:45 +0000 Subject: [PATCH] feat: implement late-binding tool updates in GeminiChat --- packages/core/src/core/client.ts | 7 +++++++ packages/core/src/core/geminiChat.ts | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/packages/core/src/core/client.ts b/packages/core/src/core/client.ts index c793ed0bd7..fdfa1defce 100644 --- a/packages/core/src/core/client.ts +++ b/packages/core/src/core/client.ts @@ -256,7 +256,14 @@ export class GeminiClient { this.forceFullIdeContext = true; } + private lastUsedModelId?: string; + async setTools(modelId?: string): Promise { + if (modelId && modelId === this.lastUsedModelId) { + return; + } + this.lastUsedModelId = modelId; + const toolRegistry = this.config.getToolRegistry(); const toolDeclarations = toolRegistry.getFunctionDeclarations(modelId); const tools: Tool[] = [{ functionDeclarations: toolDeclarations }]; diff --git a/packages/core/src/core/geminiChat.ts b/packages/core/src/core/geminiChat.ts index df98e3ebd7..de9dd6c6b0 100644 --- a/packages/core/src/core/geminiChat.ts +++ b/packages/core/src/core/geminiChat.ts @@ -240,6 +240,7 @@ export class GeminiChat { private sendPromise: Promise = Promise.resolve(); private readonly chatRecordingService: ChatRecordingService; private lastPromptTokenCount: number; + private lastUsedModel?: string; constructor( private readonly config: Config, @@ -581,6 +582,10 @@ export class GeminiChat { } // Track final request parameters for AfterModel hooks + if (modelToUse !== this.lastUsedModel) { + await this.config.getGeminiClient().setTools(modelToUse); + this.lastUsedModel = modelToUse; + } lastModelToUse = modelToUse; lastConfig = config; lastContentsToUse = contentsToUse;