From fa4e213ba68699fc57201d3a7855b8f3175acfee Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Mon, 1 Dec 2025 10:05:21 +0100 Subject: [PATCH] inline2 - handle too large documents gracefully (#2284) --- .../inlineChat/node/inlineChatIntent.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/extensions/copilot/src/extension/inlineChat/node/inlineChatIntent.ts b/extensions/copilot/src/extension/inlineChat/node/inlineChatIntent.ts index 6b75ce6ff2d..070965584f6 100644 --- a/extensions/copilot/src/extension/inlineChat/node/inlineChatIntent.ts +++ b/extensions/copilot/src/extension/inlineChat/node/inlineChatIntent.ts @@ -4,7 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as l10n from '@vscode/l10n'; -import { Raw } from '@vscode/prompt-tsx'; +import { OutputMode, Raw, RenderPromptResult } from '@vscode/prompt-tsx'; +import { BudgetExceededError } from '@vscode/prompt-tsx/dist/base/materialized'; import type * as vscode from 'vscode'; import { IAuthenticationService } from '../../../platform/authentication/common/authentication'; import { CanceledResult, ChatFetchResponseType, ChatLocation, ChatResponse, getErrorDetailsFromChatFetchError } from '../../../platform/chat/common/commonTypes'; @@ -183,7 +184,19 @@ export class InlineChatIntent implements IIntent { exitToolName: INLINE_CHAT_EXIT_TOOL_NAME, }); - const renderResult = await renderer.render(undefined, token, { trace: true }); + let renderResult: RenderPromptResult; + try { + renderResult = await renderer.render(undefined, token, { trace: true }); + } catch (err) { + this._logService.error(err, 'InlineChatIntent: prompt rendering failed'); + return { + errorDetails: { + message: err instanceof BudgetExceededError + ? l10n.t('Sorry, this document is too large for inline chat.') + : toErrorMessage(err), + } + }; + } telemetry = chatTelemetry.makeRequest(this, ChatLocation.Editor, conversation, renderResult.messages, renderResult.tokenCount, renderResult.references, endpoint, [], availableTools.length);