fix(core): thread AbortSignal to chat compression requests (#20405) (#20778)

Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
This commit is contained in:
Shaswat Raj
2026-03-25 22:27:59 +05:30
committed by GitHub
parent c06794b3c6
commit f11bd3d079
2 changed files with 6 additions and 2 deletions

View File

@@ -323,7 +323,7 @@ export class LocalAgentExecutor<TOutput extends z.ZodTypeAny> {
): Promise<AgentTurnResult> {
const promptId = `${this.agentId}#${turnCounter}`;
await this.tryCompressChat(chat, promptId);
await this.tryCompressChat(chat, promptId, combinedSignal);
const { functionCalls } = await promptIdContext.run(promptId, async () =>
this.callModel(chat, currentMessage, combinedSignal, promptId),
@@ -810,6 +810,7 @@ export class LocalAgentExecutor<TOutput extends z.ZodTypeAny> {
private async tryCompressChat(
chat: GeminiChat,
prompt_id: string,
abortSignal?: AbortSignal,
): Promise<void> {
const model = this.definition.modelConfig.model ?? DEFAULT_GEMINI_MODEL;
@@ -820,6 +821,7 @@ export class LocalAgentExecutor<TOutput extends z.ZodTypeAny> {
model,
this.context.config,
this.hasFailedCompressionAttempt,
abortSignal,
);
if (

View File

@@ -608,7 +608,7 @@ export class GeminiClient {
// Check for context window overflow
const modelForLimitCheck = this._getActiveModelForCurrentTurn();
const compressed = await this.tryCompressChat(prompt_id, false);
const compressed = await this.tryCompressChat(prompt_id, false, signal);
if (compressed.compressionStatus === CompressionStatus.COMPRESSED) {
yield { type: GeminiEventType.ChatCompressed, value: compressed };
@@ -1158,6 +1158,7 @@ export class GeminiClient {
async tryCompressChat(
prompt_id: string,
force: boolean = false,
abortSignal?: AbortSignal,
): Promise<ChatCompressionInfo> {
// If the model is 'auto', we will use a placeholder model to check.
// Compression occurs before we choose a model, so calling `count_tokens`
@@ -1171,6 +1172,7 @@ export class GeminiClient {
model,
this.config,
this.hasFailedCompressionAttempt,
abortSignal,
);
if (