add prompt header field on the prompt parsers

This commit is contained in:
Oleg Solomko
2025-04-15 15:27:51 -07:00
parent 911ab816c7
commit df7e033dc7
3 changed files with 18 additions and 16 deletions
@@ -58,12 +58,14 @@ export class BasePromptParser<TContentsProvider extends IPromptContentsProvider>
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<TContentsProvider extends IPromptContentsProvider>
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<TContentsProvider extends IPromptContentsProvider>
delete this._errorCondition;
this.receivedTokens = [];
// cleanup current prompt header object
this.promptHeader?.dispose();
delete this.promptHeader;
@@ -268,6 +271,7 @@ export class BasePromptParser<TContentsProvider extends IPromptContentsProvider>
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();
@@ -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,
) { }
}
@@ -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}`;
}
}