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;