Path: blob/main/extensions/copilot/src/extension/prompt/vscode-node/requestLoggerToolResult.tsx
13399 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { JSONTree, OutputMode, PromptElement, Raw, renderPrompt, UserMessage } from '@vscode/prompt-tsx';6import { LanguageModelDataPart, LanguageModelPromptTsxPart } from '../../../vscodeTypes';7import { ChatImageMimeType } from '../../conversation/common/languageModelChatMessageHelpers';89export async function renderToolResultToStringNoBudget(part: LanguageModelPromptTsxPart) {10const r = await renderPrompt(class extends PromptElement {11render() {12return <UserMessage>13<elementJSON data={part.value as JSONTree.PromptElementJSON} />14</UserMessage>;15}16}, {}, {17modelMaxPromptTokens: Infinity,18}, { mode: OutputMode.Raw, countMessageTokens: () => 0, tokenLength: () => 0 });1920const c = r.messages[0].content;21return typeof c === 'string' ? c : c.map(p => p.type === Raw.ChatCompletionContentPartKind.Text ? p.text : p.type === Raw.ChatCompletionContentPartKind.Image ? `<promptTsxImg src="${p.imageUrl}" />` : undefined).join('');22}2324export function renderDataPartToString(part: LanguageModelDataPart) {25const isImage = Object.values(ChatImageMimeType).includes(part.mimeType as ChatImageMimeType);2627if (isImage) {28// return a string of data uri schema29const base64 = btoa(String.fromCharCode(...part.data));30return `data:${part.mimeType};base64,${base64}`;31} else {32// return a string of the decoded data33try {34const nonImageStr = new TextDecoder().decode(part.data);35return nonImageStr;36} catch {37return `<decode error: ${part.data.length} bytes>`;38}39}40}414243