Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/extension/prompt/vscode-node/requestLoggerToolResult.tsx
13399 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { JSONTree, OutputMode, PromptElement, Raw, renderPrompt, UserMessage } from '@vscode/prompt-tsx';
7
import { LanguageModelDataPart, LanguageModelPromptTsxPart } from '../../../vscodeTypes';
8
import { ChatImageMimeType } from '../../conversation/common/languageModelChatMessageHelpers';
9
10
export async function renderToolResultToStringNoBudget(part: LanguageModelPromptTsxPart) {
11
const r = await renderPrompt(class extends PromptElement {
12
render() {
13
return <UserMessage>
14
<elementJSON data={part.value as JSONTree.PromptElementJSON} />
15
</UserMessage>;
16
}
17
}, {}, {
18
modelMaxPromptTokens: Infinity,
19
}, { mode: OutputMode.Raw, countMessageTokens: () => 0, tokenLength: () => 0 });
20
21
const c = r.messages[0].content;
22
return 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('');
23
}
24
25
export function renderDataPartToString(part: LanguageModelDataPart) {
26
const isImage = Object.values(ChatImageMimeType).includes(part.mimeType as ChatImageMimeType);
27
28
if (isImage) {
29
// return a string of data uri schema
30
const base64 = btoa(String.fromCharCode(...part.data));
31
return `data:${part.mimeType};base64,${base64}`;
32
} else {
33
// return a string of the decoded data
34
try {
35
const nonImageStr = new TextDecoder().decode(part.data);
36
return nonImageStr;
37
} catch {
38
return `<decode error: ${part.data.length} bytes>`;
39
}
40
}
41
}
42
43