diff --git a/client/cody/package.json b/client/cody/package.json index 1f24fb546d7a..378ff29c9718 100644 --- a/client/cody/package.json +++ b/client/cody/package.json @@ -139,8 +139,8 @@ "title": "Cody: Sign out" }, { - "command": "cody.experimental.suggest", - "title": "Cody: View Suggestions" + "command": "cody.manual-completions", + "title": "Cody: Open Completions Panel" }, { "command": "cody.settings", @@ -263,6 +263,10 @@ { "command": "cody.comment.load", "when": "false" + }, + { + "command": "cody.manual-completions", + "when": "config.cody.experimental.suggestions" } ], "editor/context": [ @@ -395,7 +399,7 @@ "cody.experimental.suggestions": { "order": 5, "type": "boolean", - "markdownDescription": "Enables Cody inline autocompletion in your editor.", + "markdownDescription": "Enables experimental Cody completions in your editor.", "default": false }, "cody.experimental.chatPredictions": { diff --git a/client/cody/src/completions/index.ts b/client/cody/src/completions/index.ts index e7b48fd766cb..cffecee7fbe0 100644 --- a/client/cody/src/completions/index.ts +++ b/client/cody/src/completions/index.ts @@ -11,10 +11,10 @@ import { CompletionsCache } from './cache' import { getContext } from './context' import { CompletionsDocumentProvider } from './docprovider' import { History } from './history' -import { CompletionProvider, EndOfLineCompletionProvider, MultilineCompletionProvider } from './provider' +import { CompletionProvider, InlineCompletionProvider, ManualCompletionProvider } from './provider' const LOG_INLINE = { type: 'inline' } -const LOG_MULTILINE = { type: 'multiline' } +const LOG_MANUAL = { type: 'manual' } function lastNLines(text: string, n: number): string { const lines = text.split('\n') @@ -28,7 +28,7 @@ export class CodyCompletionItemProvider implements vscode.InlineCompletionItemPr private maxPrefixTokens: number private maxSuffixTokens: number private abortOpenInlineCompletions: () => void = () => {} - private abortOpenMultilineCompletion: () => void = () => {} + private abortOpenManualCompletion: () => void = () => {} private lastContentChanges: LRUCache = new LRUCache({ max: 10, }) @@ -128,7 +128,7 @@ export class CodyCompletionItemProvider implements vscode.InlineCompletionItemPr const remainingChars = this.tokToChar(this.promptTokens) - const completionNoSnippets = new EndOfLineCompletionProvider( + const completionNoSnippets = new InlineCompletionProvider( this.completionsClient, remainingChars, this.responseTokens, @@ -174,7 +174,7 @@ export class CodyCompletionItemProvider implements vscode.InlineCompletionItemPr ) { timeout = 500 completers.push( - new EndOfLineCompletionProvider( + new InlineCompletionProvider( this.completionsClient, remainingChars, this.responseTokens, @@ -190,7 +190,7 @@ export class CodyCompletionItemProvider implements vscode.InlineCompletionItemPr // Start of line: medium debounce timeout = 200 completers.push( - new EndOfLineCompletionProvider( + new InlineCompletionProvider( this.completionsClient, remainingChars, this.responseTokens, @@ -208,7 +208,7 @@ export class CodyCompletionItemProvider implements vscode.InlineCompletionItemPr // End of line: long debounce, complete until newline timeout = 500 completers.push( - new EndOfLineCompletionProvider( + new InlineCompletionProvider( this.completionsClient, remainingChars, this.responseTokens, @@ -220,7 +220,7 @@ export class CodyCompletionItemProvider implements vscode.InlineCompletionItemPr ), // Create a completion request for the current prefix with a new line added. This // will make for faster recommendations when the user presses enter. - new EndOfLineCompletionProvider( + new InlineCompletionProvider( this.completionsClient, remainingChars, this.responseTokens, @@ -257,10 +257,10 @@ export class CodyCompletionItemProvider implements vscode.InlineCompletionItemPr return [] } - public async fetchAndShowCompletions(): Promise { - this.abortOpenMultilineCompletion() + public async fetchAndShowManualCompletions(): Promise { + this.abortOpenManualCompletion() const abortController = new AbortController() - this.abortOpenMultilineCompletion = () => abortController.abort() + this.abortOpenManualCompletion = () => abortController.abort() const currentEditor = vscode.window.activeTextEditor if (!currentEditor || currentEditor?.document.uri.scheme === 'cody') { @@ -292,7 +292,7 @@ export class CodyCompletionItemProvider implements vscode.InlineCompletionItemPr const remainingChars = this.tokToChar(this.promptTokens) - const completionNoSnippets = new MultilineCompletionProvider( + const completionNoSnippets = new ManualCompletionProvider( this.completionsClient, remainingChars, this.responseTokens, @@ -314,7 +314,7 @@ export class CodyCompletionItemProvider implements vscode.InlineCompletionItemPr contextChars ) - const completer = new MultilineCompletionProvider( + const completer = new ManualCompletionProvider( this.completionsClient, remainingChars, this.responseTokens, @@ -325,14 +325,14 @@ export class CodyCompletionItemProvider implements vscode.InlineCompletionItemPr ) try { - logEvent('CodyVSCodeExtension:completion:started', LOG_MULTILINE, LOG_MULTILINE) + logEvent('CodyVSCodeExtension:completion:started', LOG_MANUAL, LOG_MANUAL) const completions = await completer.generateCompletions(abortController.signal, 3) this.documentProvider.addCompletions(completionsUri, ext, completions, { suffix: '', elapsedMillis: 0, llmOptions: null, }) - logEvent('CodyVSCodeExtension:completion:suggested', LOG_MULTILINE, LOG_MULTILINE) + logEvent('CodyVSCodeExtension:completion:suggested', LOG_MANUAL, LOG_MANUAL) } catch (error) { if (error.message === 'aborted') { return diff --git a/client/cody/src/completions/provider.ts b/client/cody/src/completions/provider.ts index 38e3adc3c696..3f699ac25a08 100644 --- a/client/cody/src/completions/provider.ts +++ b/client/cody/src/completions/provider.ts @@ -101,7 +101,7 @@ export abstract class CompletionProvider { public abstract generateCompletions(abortSignal: AbortSignal, n?: number): Promise } -export class MultilineCompletionProvider extends CompletionProvider { +export class ManualCompletionProvider extends CompletionProvider { protected createPromptPrefix(): Message[] { // TODO(beyang): escape 'Human:' and 'Assistant:' const prefix = this.prefix.trim() @@ -203,7 +203,7 @@ export class MultilineCompletionProvider extends CompletionProvider { } } -export class EndOfLineCompletionProvider extends CompletionProvider { +export class InlineCompletionProvider extends CompletionProvider { constructor( completionsClient: SourcegraphNodeCompletionsClient, promptChars: number, diff --git a/client/cody/src/main.ts b/client/cody/src/main.ts index 5249684fb41e..825039cba7dc 100644 --- a/client/cody/src/main.ts +++ b/client/cody/src/main.ts @@ -221,8 +221,8 @@ const register = async ( history ) disposables.push( - vscode.commands.registerCommand('cody.experimental.suggest', async () => { - await completionsProvider.fetchAndShowCompletions() + vscode.commands.registerCommand('cody.manual-completions', async () => { + await completionsProvider.fetchAndShowManualCompletions() }), vscode.commands.registerCommand('cody.completions.inline.accepted', () => { const params = { type: 'inline' }