Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add prompt snippets support #234220

Merged
merged 77 commits into from
Dec 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
160c21c
[prompt snippets]: working on recursive file references
legomushroom Nov 5, 2024
6851e91
[prompt snippets]: working on file contents codec
legomushroom Nov 5, 2024
eb75714
[prompt snippets]: implement the `LinesCodecDecoder`
legomushroom Nov 6, 2024
6a59277
[prompt snippets]: working on the `SimpleTokensCodecDecoder`
legomushroom Nov 6, 2024
a51afcb
[prompt snippets]: implement first version of `PromptSyntaxCodec`
legomushroom Nov 6, 2024
fa22b83
[prompt snippets]: add `Range` attributes to all the tokens
legomushroom Nov 7, 2024
b657e9c
[prompt snippets]: refactoring components to standalone files
legomushroom Nov 7, 2024
c248332
[prompt snippets]: move out components to separate files, working on …
legomushroom Nov 7, 2024
bab2460
[prompt snippets]: add the first unit test for `LinesDecoder`
legomushroom Nov 8, 2024
93d31c9
[prompt snippets]: add first unit test for the `SimpleDecoder`
legomushroom Nov 8, 2024
85ff657
[prompt snippets]: refactor `SimpleDecoder` logic
legomushroom Nov 8, 2024
f729d4c
[prompt snippets]: make `SimpleDecoder` handle `\t` characters and im…
legomushroom Nov 8, 2024
9500511
[prompt snippets]: add unit tests for the `ChatbotPromptCodec` codec
legomushroom Nov 8, 2024
c9bd431
[prompt snippets]: add unit test for the `ChatbotPromptReference`
legomushroom Nov 9, 2024
1bf4049
[prompt snippets]: working on enhancing prompt context
legomushroom Nov 11, 2024
fc0beae
[prompt snippets]: enahnce working set file references on submit
legomushroom Nov 11, 2024
a64fead
[prompt snippets]: cleanup
legomushroom Nov 11, 2024
1211fa7
[prompt snippets]: implement automatic references resolution on file …
legomushroom Nov 12, 2024
1570d2c
[prompt snippets]: implement prompt snippets for implicit context files
legomushroom Nov 12, 2024
c99cd9f
[prompt snippets]: improve implicit context file rendering
legomushroom Nov 13, 2024
833efd4
[prompt snippets]: remove redundant `ChatReference` class
legomushroom Nov 13, 2024
eeb2a2f
[prompt snippets]: `PromptReference` can now subscribe to filesystem …
legomushroom Nov 13, 2024
f9b4ff8
[prompt snippets]: make `LinesDecoder` to also emit `NewLine` tokens,…
legomushroom Nov 13, 2024
0696dfa
[prompt snippets]: resolve nested references for dynamic variables an…
legomushroom Nov 14, 2024
02c65fd
[prompt snippets]: add nested file references to implicit context of …
legomushroom Nov 14, 2024
37b1557
[prompt snippets]: variable hover label now includes nested file refe…
legomushroom Nov 14, 2024
9f99306
[prompt snippets]: add the `TestDecoder` and `TestLinesDecoder` reusa…
legomushroom Nov 14, 2024
46480da
[prompt snippets]: add unit tests for `ChatbotPromptDecoder` decoder
legomushroom Nov 15, 2024
9ac9fa2
[prompt snippets]: refactor decoders to eliminate static type hacks
legomushroom Nov 15, 2024
a475982
[prompt snippets]: improve `BaseDecoder` logic and docs
legomushroom Nov 15, 2024
d580fd7
[prompt snippets]: add unit tests for the new reduce-less logic of th…
legomushroom Nov 15, 2024
c195eb8
[prompt snippets]: improve doc comments, finish the basic unit test f…
legomushroom Nov 15, 2024
047a640
[prompt snippets]: finish the main unit test for the `PromptFileRefer…
legomushroom Nov 15, 2024
4f02c29
[prompt snippets]: make the `PromptFileReference` class ininite-refer…
legomushroom Nov 16, 2024
f22ee9c
[prompt snippets]: cleanup
legomushroom Nov 16, 2024
2c4aee4
[prompt snippets]: ensure codecs work well with UTF16 codepoints
legomushroom Nov 18, 2024
435664c
[prompt snippets]: add `randomInt()` utility and related tests
legomushroom Nov 18, 2024
ff1761c
[prompt snippets]: refactor and add more unit tests
legomushroom Nov 19, 2024
6c690dc
[prompt snippets]: fix unresolved `Buffer` import reference
legomushroom Nov 19, 2024
d1946c8
[prompt snippets]: refactor `LinesDecoder` to use `VSBuffer` as under…
legomushroom Nov 19, 2024
3d7df9c
[prompt snippets]: make the `ImplicitContext` to create prompt file r…
legomushroom Nov 19, 2024
f1265b2
[prompt snippets]: make the `ChatDynamicVariable` to resolve prompt f…
legomushroom Nov 19, 2024
45c0087
[prompt snippets]: localize (+N more) labels
legomushroom Nov 19, 2024
def4809
[prompt snippets]: pre PR cleanups
legomushroom Nov 19, 2024
1688f11
[prompt snippets]: minor cleanups
legomushroom Nov 19, 2024
4f88053
[prompt snippets]: address some PR feedback, fix an unit test issue
legomushroom Nov 21, 2024
528d364
[prompt snippets]: move file to common layers
legomushroom Nov 22, 2024
406b4e5
[prompt snippets]: move base codec types to base/common
legomushroom Nov 22, 2024
ca59a71
[prompt snippets]: move more codec files around
legomushroom Nov 22, 2024
3fde89e
[prompt snippets]: update a code comment
legomushroom Nov 22, 2024
55d20ff
[prompt snippets]: fix `assert.throws()` API incompatibility issue
legomushroom Nov 22, 2024
eedf169
[prompt snippets]: minor cleanup
legomushroom Nov 22, 2024
bf6c595
[prompt snippets]: improve unit tests for the `PromptFileReference`
legomushroom Nov 22, 2024
db4e30f
[prompt snippets]: skip unit tests of `PromptFileReference` on Window…
legomushroom Nov 22, 2024
167e28b
[prompt snippets]: address PR feedback
legomushroom Nov 22, 2024
1f18219
[prompt snippets]: add `PromptFileReference.isPromptSnippetFile` getter
legomushroom Nov 22, 2024
6ca57cf
[prompt snippets]: move the `assertDefined` utility to `types.ts`
legomushroom Nov 22, 2024
a9b226d
use service injection in `PromptFileReference` class
legomushroom Nov 23, 2024
892ede6
[prompt snippets]: remove formatting changes
legomushroom Nov 25, 2024
68f945b
[prompt snippets]: remove more formatting changes
legomushroom Nov 25, 2024
d66d461
[prompt snippets]: revert more formatting changes
legomushroom Nov 25, 2024
ec547ab
[prompt snippets]: add logic to dispose existing variables in `ChatDy…
legomushroom Nov 25, 2024
35b001e
[prompt snippets]: cleanup
legomushroom Nov 25, 2024
e0afe66
[prompt snippets]: minor cleanup
legomushroom Nov 25, 2024
d823e28
[prompt snippets]: remove redundant disposable registrations, cleanup…
legomushroom Nov 27, 2024
70ed883
Merge branch 'main' of https://github.com/microsoft/vscode into legom…
legomushroom Nov 27, 2024
f947da7
[prompt snippets]: improve cross-platform newline handling, add `vert…
legomushroom Nov 28, 2024
9fe322e
[prompt snippets]: minor types naming cleanup
legomushroom Nov 28, 2024
9b68369
[prompt snippets]: make `ChatPromptCodec` to be a global singleton ob…
legomushroom Nov 28, 2024
3c2c45f
[prompt snippets]: address PR feedback
legomushroom Dec 2, 2024
bff4eae
[prompt snippets]: remove (+N more) label, ensure that `ChatFileRefer…
legomushroom Dec 3, 2024
f29ed30
[prompt snippets]: revert changes for the `ImplicitContext`
legomushroom Dec 11, 2024
7e8cc5e
[prompt snippets]: cleanup changes in `ChatDynamicVariableModel`
legomushroom Dec 11, 2024
d86cfdf
[prompt snippets]: revert changes in the `ChatRequestParser`
legomushroom Dec 12, 2024
d28b027
[prompt snippets]: improve history navigation
legomushroom Dec 12, 2024
783c3eb
address PR feedback
legomushroom Dec 16, 2024
d923ebf
[prompt snippets]: allow non-prompt-snippet files to be referenced, b…
legomushroom Dec 16, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 85 additions & 0 deletions src/vs/base/common/codecs/asyncDecoder.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import { Disposable } from '../lifecycle.js';
import { BaseDecoder } from './baseDecoder.js';

/**
* Asynchronous interator wrapper for a decoder.
*/
export class AsyncDecoder<T extends NonNullable<unknown>, K extends NonNullable<unknown> = NonNullable<unknown>> extends Disposable {
// Buffer of messages that have been decoded but not yet consumed.
private readonly messages: T[] = [];

/**
* A transient promise that is resolved when a new event
* is received. Used in the situation when there is no new
* data avaialble and decoder stream did not finish yet,
* hence we need to wait until new event is received.
*/
private resolveOnNewEvent?: (value: void) => void;

/**
* @param decoder The decoder instance to wrap.
*
* Note! Assumes ownership of the `decoder` object, hence will `dipose`
* it when the decoder stream is ended.
*/
constructor(
private readonly decoder: BaseDecoder<T, K>,
) {
super();

this._register(decoder);
}

/**
* Async iterator implementation.
*/
async *[Symbol.asyncIterator](): AsyncIterator<T | null> {
// callback is called when `data` or `end` event is received
const callback = (data?: T) => {
if (data !== undefined) {
this.messages.push(data);
} else {
this.decoder.removeListener('data', callback);
this.decoder.removeListener('end', callback);
}

// is the promise resolve callback is present,
// then call it and remove the reference
if (this.resolveOnNewEvent) {
this.resolveOnNewEvent();
delete this.resolveOnNewEvent;
}
};
this.decoder.on('data', callback);
this.decoder.on('end', callback);

// start flowing the decoder stream
this.decoder.start();

while (true) {
const maybeMessage = this.messages.shift();
if (maybeMessage !== undefined) {
yield maybeMessage;
continue;
}

// if no data available and stream ended, we're done
if (this.decoder.isEnded) {
this.dispose();

return null;
}

// stream isn't ended so wait for the new
// `data` or `end` event to be received
await new Promise((resolve) => {
this.resolveOnNewEvent = resolve;
});
}
}
}
Loading
Loading