From df7e033dc76943190e46f281e6400f2eaaade344 Mon Sep 17 00:00:00 2001 From: Oleg Solomko Date: Tue, 15 Apr 2025 14:08:49 -0700 Subject: [PATCH] add prompt header field on the prompt parsers --- .../common/promptSyntax/parsers/basePromptParser.ts | 10 +++++++--- .../metadata/{metadataToken.ts => record.ts} | 12 +++++++++--- .../parsers/promptHeader/metadata/tools.ts | 12 ++---------- 3 files changed, 18 insertions(+), 16 deletions(-) rename src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/{metadataToken.ts => record.ts} (71%) diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.ts index 873f1a1dd8b..0a1e6aa0dac 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.ts @@ -58,12 +58,14 @@ export class BasePromptParser private readonly _references: IPromptReference[] = []; /** - * TODO: @legomushroom + * Reference to the prompt header object that holds metadata associated + * with the prompt. */ private promptHeader?: PromptHeader; /** - * TODO: @legomushroom + * Reference to the prompt header object that holds metadata associated + * with the prompt. */ public get header(): PromptHeader | undefined { return this.promptHeader; @@ -144,7 +146,7 @@ export class BasePromptParser await this.stream.settled; - // TODO: @legomushroom + // if prompt header exists, also wait for it to be settled if (this.promptHeader) { await this.promptHeader.settled; } @@ -240,6 +242,7 @@ export class BasePromptParser delete this._errorCondition; this.receivedTokens = []; + // cleanup current prompt header object this.promptHeader?.dispose(); delete this.promptHeader; @@ -268,6 +271,7 @@ export class BasePromptParser this.receivedTokens.push(token); } + // if a prompt header token received, create a new prompt header instance if (token instanceof FrontMatterHeader) { this.promptHeader = new PromptHeader(token.contentToken); this.promptHeader.start(); diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/metadataToken.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/record.ts similarity index 71% rename from src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/metadataToken.ts rename to src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/record.ts index 1907c037fbd..6ce25ed616b 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/metadataToken.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/record.ts @@ -4,15 +4,21 @@ *--------------------------------------------------------------------------------------------*/ import { PromptMetadataDiagnostic } from '../diagnostics.js'; -import { FrontMatterToken } from '../../../../../../../../editor/common/codecs/frontMatterCodec/tokens/index.js'; +import { Range } from '../../../../../../../../editor/common/core/range.js'; /** * Abstract class for all metadata records in the prompt header. */ -// TODO: @legomushroom - can drop the extension of `FrontMatterToken`? -export abstract class PromptMetadataToken extends FrontMatterToken { +export abstract class PromptMetadataRecord { /** * List of diagnostic objects related to this metadata record. */ abstract readonly diagnostics: readonly PromptMetadataDiagnostic[]; + + constructor( + /** + * Full range of the metadata's record text in the prompt header. + */ + public readonly range: Range, + ) { } } diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/tools.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/tools.ts index 26129500ae3..29c82114493 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/tools.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/tools.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { PromptMetadataToken } from './metadataToken.js'; +import { PromptMetadataRecord } from './record.js'; import { localize2 } from '../../../../../../../../nls.js'; import { assert } from '../../../../../../../../base/common/assert.js'; import { PromptMetadataDiagnostic, PromptMetadataError, PromptMetadataWarning } from '../diagnostics.js'; @@ -17,7 +17,7 @@ const TOOLS_NAME = 'tools'; /** * Prompt `tools` metadata record inside the prompt header. */ -export class PromptTools extends PromptMetadataToken { +export class PromptTools extends PromptMetadataRecord { /** * Private field for tracking all diagnostic issues * related to this metadata record. @@ -171,12 +171,4 @@ export class PromptTools extends PromptMetadataToken { return false; } - - public override get text(): string { - return this.recordToken.text; - } - - public override toString(): string { - return `prompt - tools(${this.shortText()})${this.range}`; - } }