From e43774e1bdecbae95c13b1f6729e4f72ec6cd5df Mon Sep 17 00:00:00 2001 From: SilasMarvin <19626586+SilasMarvin@users.noreply.github.com> Date: Sun, 2 Jun 2024 11:52:11 -0700 Subject: [PATCH] Revert "Clean up vscode plugin" This reverts commit 41289af4b48406d78bedf6adee26bf32b37d593f. --- editors/vscode/package.json | 7 +++++++ editors/vscode/src/index.ts | 22 ++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/editors/vscode/package.json b/editors/vscode/package.json index a75d4d9..0e75093 100644 --- a/editors/vscode/package.json +++ b/editors/vscode/package.json @@ -40,6 +40,13 @@ "type": "object", "default": {}, "description": "JSON configuration for LSP-AI generation" + }, + "lsp-ai.inlineCompletionConfiguration": { + "type": "object", + "default": { + "maxCompletionsPerSecond": 1 + }, + "description": "JSON configuration for LSP-AI generation" } } } diff --git a/editors/vscode/src/index.ts b/editors/vscode/src/index.ts index 780bc57..7e062c1 100644 --- a/editors/vscode/src/index.ts +++ b/editors/vscode/src/index.ts @@ -180,6 +180,8 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push(vscode.commands.registerTextEditorCommand(generateCommand, generateCommandHandler)); // Register as an inline completion provider + let lastInlineCompletion = Date.now(); + let inlineCompletionRequestCounter = 0; vscode.languages.registerInlineCompletionItemProvider({ pattern: '**' }, { provideInlineCompletionItems: async (document: vscode.TextDocument, position: vscode.Position) => { @@ -191,8 +193,24 @@ export function activate(context: vscode.ExtensionContext) { model: generationConfiguration.model, parameters: generationConfiguration.parameters }; - const result = await client.sendRequest("textDocument/generation", params); - return [new vscode.InlineCompletionItem(result["generatedText"])]; + + inlineCompletionRequestCounter += 1; + let localInlineCompletionRequestCounter = inlineCompletionRequestCounter; + + if ((Date.now() - lastInlineCompletion) / 1000 < 1 / inlineCompletionConfiguration["maxCompletionsPerSecond"]) { + await new Promise(r => setTimeout(r, ((1 / inlineCompletionConfiguration["maxCompletionsPerSecond"]) - ((Date.now() - lastInlineCompletion) / 1000 )) * 1000)); + if (inlineCompletionRequestCounter == localInlineCompletionRequestCounter) { + lastInlineCompletion = Date.now(); + const result = await client.sendRequest("textDocument/generation", params); + return [new vscode.InlineCompletionItem(result["generatedText"])]; + } else { + return []; + } + } else { + lastInlineCompletion = Date.now(); + const result = await client.sendRequest("textDocument/generation", params); + return [new vscode.InlineCompletionItem(result["generatedText"])]; + } } } );