From d5bce5a0356657ff5c0eea203bdac4dbf2ba4b1f Mon Sep 17 00:00:00 2001 From: Gavin Gu Date: Tue, 10 Sep 2024 14:24:03 +0800 Subject: [PATCH 1/3] refactor: remove proposal api --- packages/vscode-extension/package.json | 3 --- .../officeChat/common/skills/codeGenerator.ts | 10 ++++------ .../common/skills/codeIssueCorrector.ts | 6 +++--- .../src/officeChat/dynamicPrompt/index.ts | 1 - .../src/officeChat/officePrompts.ts | 8 ++++---- .../vscode-extension/src/officeChat/utils.ts | 2 +- .../common/skills/codeIssueCorrector.test.ts | 20 +++++++++---------- .../officeChat/dynamicPrompt/index.test.ts | 2 +- 8 files changed, 23 insertions(+), 29 deletions(-) diff --git a/packages/vscode-extension/package.json b/packages/vscode-extension/package.json index 39a74f656d..48d2a161cf 100644 --- a/packages/vscode-extension/package.json +++ b/packages/vscode-extension/package.json @@ -62,9 +62,6 @@ "workspaceContains:/**/manifest.json", "workspaceContains:/manifest*.xml" ], - "enabledApiProposals": [ - "languageModelSystem" - ], "capabilities": { "untrustedWorkspaces": { "supported": "limited", diff --git a/packages/vscode-extension/src/officeChat/common/skills/codeGenerator.ts b/packages/vscode-extension/src/officeChat/common/skills/codeGenerator.ts index e2ec94f39f..2db3dfd169 100644 --- a/packages/vscode-extension/src/officeChat/common/skills/codeGenerator.ts +++ b/packages/vscode-extension/src/officeChat/common/skills/codeGenerator.ts @@ -209,7 +209,7 @@ ${spec.appendix.codeExplanation // Perform the desired operation const messages: LanguageModelChatMessage[] = [ new LanguageModelChatMessage(LanguageModelChatMessageRole.User, userPrompt), - new LanguageModelChatMessage(LanguageModelChatMessageRole.System, defaultSystemPrompt), + new LanguageModelChatMessage(LanguageModelChatMessageRole.User, defaultSystemPrompt), ]; let copilotResponse = await getCopilotResponseAsString( "copilot-gpt-3.5-turbo", // "copilot-gpt-4", // "copilot-gpt-3.5-turbo", @@ -317,7 +317,7 @@ ${spec.appendix.codeExplanation if (sampleCode.length > 0) { messages.push( new LanguageModelChatMessage( - LanguageModelChatMessageRole.System, + LanguageModelChatMessageRole.User, getCodeSamplePrompt(sampleCode) ) ); @@ -429,7 +429,7 @@ ${spec.appendix.codeExplanation referenceUserPrompt = customFunctionSystemPrompt; } messages.push( - new LanguageModelChatMessage(LanguageModelChatMessageRole.System, referenceUserPrompt) + new LanguageModelChatMessage(LanguageModelChatMessageRole.User, referenceUserPrompt) ); break; default: @@ -462,9 +462,7 @@ ${spec.appendix.codeExplanation Let's think step by step. `; - messages.push( - new LanguageModelChatMessage(LanguageModelChatMessageRole.System, samplePrompt) - ); + messages.push(new LanguageModelChatMessage(LanguageModelChatMessageRole.User, samplePrompt)); } // Because of the token window limitation, we have to cut off the messages if it exceeds the limitation msgCount = countMessagesTokens(messages); diff --git a/packages/vscode-extension/src/officeChat/common/skills/codeIssueCorrector.ts b/packages/vscode-extension/src/officeChat/common/skills/codeIssueCorrector.ts index 4c29aacea2..b6548f8a7e 100644 --- a/packages/vscode-extension/src/officeChat/common/skills/codeIssueCorrector.ts +++ b/packages/vscode-extension/src/officeChat/common/skills/codeIssueCorrector.ts @@ -146,7 +146,7 @@ export class CodeIssueCorrector implements ISkill { const sampleMessage: LanguageModelChatMessage | null = spec.appendix.codeSample.length > 0 ? new LanguageModelChatMessage( - LanguageModelChatMessageRole.System, + LanguageModelChatMessageRole.User, getCodeSamplePrompt(spec.appendix.codeSample) ) : null; @@ -331,7 +331,7 @@ export class CodeIssueCorrector implements ISkill { // The order in array is matter, don't change it unless you know what you are doing const messages: LanguageModelChatMessage[] = [ new LanguageModelChatMessage(LanguageModelChatMessageRole.User, tempUserInput), - new LanguageModelChatMessage(LanguageModelChatMessageRole.System, defaultSystemPrompt), + new LanguageModelChatMessage(LanguageModelChatMessageRole.User, defaultSystemPrompt), ]; if (!!sampleMessage) { @@ -343,7 +343,7 @@ export class CodeIssueCorrector implements ISkill { // } messages.push( - new LanguageModelChatMessage(LanguageModelChatMessageRole.System, referenceUserPrompt) + new LanguageModelChatMessage(LanguageModelChatMessageRole.User, referenceUserPrompt) ); let msgCount = countMessagesTokens(messages); diff --git a/packages/vscode-extension/src/officeChat/dynamicPrompt/index.ts b/packages/vscode-extension/src/officeChat/dynamicPrompt/index.ts index 6503a83fb7..447bfb8538 100644 --- a/packages/vscode-extension/src/officeChat/dynamicPrompt/index.ts +++ b/packages/vscode-extension/src/officeChat/dynamicPrompt/index.ts @@ -38,7 +38,6 @@ export function buildDynamicPrompt(format: IDynamicPromptFormat, args: T): function createMessage(role: MessageRole, prompt: string): LanguageModelChatMessage { switch (role) { case "system": - return new LanguageModelChatMessage(LanguageModelChatMessageRole.System, prompt); case "user": return new LanguageModelChatMessage(LanguageModelChatMessageRole.User, prompt); case "assistant": diff --git a/packages/vscode-extension/src/officeChat/officePrompts.ts b/packages/vscode-extension/src/officeChat/officePrompts.ts index 98bc7b9016..56f455f9ab 100644 --- a/packages/vscode-extension/src/officeChat/officePrompts.ts +++ b/packages/vscode-extension/src/officeChat/officePrompts.ts @@ -31,7 +31,7 @@ export function getOfficeProjectMatchSystemPrompt( const messages = [ new vscode.LanguageModelChatMessage( - vscode.LanguageModelChatMessageRole.System, + vscode.LanguageModelChatMessageRole.User, ` You're an assistant designed to find matched Office Add-in projects based on user's input and a list of existing application descriptions. Follow the instructions and think step by step. You'll respond a JSON object containing the addin ID you choose with a float number between 0-1.0 representing confidence. Here's an example of your output format: { "id": "", "score": 1.0 } @@ -78,7 +78,7 @@ export const defaultOfficeSystemPrompt = () => { ); return new vscode.LanguageModelChatMessage( - vscode.LanguageModelChatMessageRole.System, + vscode.LanguageModelChatMessageRole.User, `You are an expert in Office JavaScript add-in development area. Your job is to answer general conceputal question related with Office JavaScript add-in development. Follow the and think step by step. @@ -104,7 +104,7 @@ export const defaultOfficeSystemPrompt = () => { export const describeOfficeProjectSystemPrompt = () => new vscode.LanguageModelChatMessage( - vscode.LanguageModelChatMessageRole.System, + vscode.LanguageModelChatMessageRole.User, `You are an advisor for Office Add-in developers. You need to describe the project based on the name and description field of user's JSON content. You should control the output between 50 and 80 words.` ); @@ -830,6 +830,6 @@ class ${className} extends OfficeExtension.ClientObject { export const describeOfficeStepSystemPrompt = () => new vscode.LanguageModelChatMessage( - vscode.LanguageModelChatMessageRole.System, + vscode.LanguageModelChatMessageRole.User, `You are an advisor for Office Add-ins developers. You need to reorganize the content. You should control the output between 30 and 50 words. Don't split the content into multiple sentences.` ); diff --git a/packages/vscode-extension/src/officeChat/utils.ts b/packages/vscode-extension/src/officeChat/utils.ts index 6094c8072d..f8c2544e8d 100644 --- a/packages/vscode-extension/src/officeChat/utils.ts +++ b/packages/vscode-extension/src/officeChat/utils.ts @@ -31,8 +31,8 @@ export async function purifyUserMessage( The rephrased message should be clear and concise for developer. `; const purifyUserMessage = [ + new LanguageModelChatMessage(LanguageModelChatMessageRole.User, systemPrompt), new LanguageModelChatMessage(LanguageModelChatMessageRole.User, userMessagePrompt), - new LanguageModelChatMessage(LanguageModelChatMessageRole.System, systemPrompt), ]; const purifiedResult = await getCopilotResponseAsString( "copilot-gpt-4", diff --git a/packages/vscode-extension/test/officeChat/common/skills/codeIssueCorrector.test.ts b/packages/vscode-extension/test/officeChat/common/skills/codeIssueCorrector.test.ts index 409caacb34..9f7cf458b4 100644 --- a/packages/vscode-extension/test/officeChat/common/skills/codeIssueCorrector.test.ts +++ b/packages/vscode-extension/test/officeChat/common/skills/codeIssueCorrector.test.ts @@ -145,12 +145,12 @@ describe("CodeIssueCorrector", () => { `.repeat(20); const corrector = new CodeIssueCorrector(); const fakeLanguageModelChatSystemMessage: LanguageModelChatMessage = { - role: LanguageModelChatMessageRole.System, + role: LanguageModelChatMessageRole.User, content: "some sample message", name: undefined, }; const fakeSampleCodeLanguageModelChatSystemMessage: LanguageModelChatMessage = { - role: LanguageModelChatMessageRole.System, + role: LanguageModelChatMessageRole.User, content: sampleCodeLong, name: undefined, }; @@ -193,12 +193,12 @@ describe("CodeIssueCorrector", () => { `.repeat(20); const corrector = new CodeIssueCorrector(); const fakeLanguageModelChatSystemMessage: LanguageModelChatMessage = { - role: LanguageModelChatMessageRole.System, + role: LanguageModelChatMessageRole.User, content: "some sample message", name: undefined, }; const fakeSampleCodeLanguageModelChatSystemMessage: LanguageModelChatMessage = { - role: LanguageModelChatMessageRole.System, + role: LanguageModelChatMessageRole.User, content: sampleCodeLong, name: undefined, }; @@ -251,12 +251,12 @@ describe("CodeIssueCorrector", () => { `.repeat(20); const corrector = new CodeIssueCorrector(); const fakeLanguageModelChatSystemMessage: LanguageModelChatMessage = { - role: LanguageModelChatMessageRole.System, + role: LanguageModelChatMessageRole.User, content: "some sample message", name: undefined, }; const fakeSampleCodeLanguageModelChatSystemMessage: LanguageModelChatMessage = { - role: LanguageModelChatMessageRole.System, + role: LanguageModelChatMessageRole.User, content: sampleCodeLong, name: undefined, }; @@ -309,12 +309,12 @@ describe("CodeIssueCorrector", () => { `.repeat(20); const corrector = new CodeIssueCorrector(); const fakeLanguageModelChatSystemMessage: LanguageModelChatMessage = { - role: LanguageModelChatMessageRole.System, + role: LanguageModelChatMessageRole.User, content: "some sample message", name: undefined, }; const fakeSampleCodeLanguageModelChatSystemMessage: LanguageModelChatMessage = { - role: LanguageModelChatMessageRole.System, + role: LanguageModelChatMessageRole.User, content: sampleCodeLong, name: undefined, }; @@ -360,7 +360,7 @@ describe("CodeIssueCorrector", () => { it("fixIssueAsync error with code length reduced too much", async () => { const corrector = new CodeIssueCorrector(); const fakeLanguageModelChatSystemMessage: LanguageModelChatMessage = { - role: LanguageModelChatMessageRole.System, + role: LanguageModelChatMessageRole.User, content: "some sample message", name: undefined, }; @@ -402,7 +402,7 @@ describe("CodeIssueCorrector", () => { it("fixIssueAsync return newCodeStr", async () => { const corrector = new CodeIssueCorrector(); const fakeLanguageModelChatSystemMessage: LanguageModelChatMessage = { - role: LanguageModelChatMessageRole.System, + role: LanguageModelChatMessageRole.User, content: "some sample message", name: undefined, }; diff --git a/packages/vscode-extension/test/officeChat/dynamicPrompt/index.test.ts b/packages/vscode-extension/test/officeChat/dynamicPrompt/index.test.ts index 8ce669be0f..f54454a0e6 100644 --- a/packages/vscode-extension/test/officeChat/dynamicPrompt/index.test.ts +++ b/packages/vscode-extension/test/officeChat/dynamicPrompt/index.test.ts @@ -39,7 +39,7 @@ describe("File: dynamicPrompt/index", () => { chai .expect(result.messages[0]) .deep.equal( - new vscode.LanguageModelChatMessage(vscode.LanguageModelChatMessageRole.System, "test") + new vscode.LanguageModelChatMessage(vscode.LanguageModelChatMessageRole.User, "test") ); }); From ab106db810d8c249112c3463fdc5f752556e8918 Mon Sep 17 00:00:00 2001 From: Gavin Gu Date: Tue, 10 Sep 2024 14:43:13 +0800 Subject: [PATCH 2/3] refactor: remove proposed files --- .../vscode.proposed.languageModelSystem.d.ts | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 packages/vscode-extension/src/chat/api/vscode.proposed.languageModelSystem.d.ts diff --git a/packages/vscode-extension/src/chat/api/vscode.proposed.languageModelSystem.d.ts b/packages/vscode-extension/src/chat/api/vscode.proposed.languageModelSystem.d.ts deleted file mode 100644 index 54e1da27a5..0000000000 --- a/packages/vscode-extension/src/chat/api/vscode.proposed.languageModelSystem.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -declare module 'vscode' { - - // https://github.com/microsoft/vscode/issues/206265 - - // TODO@API don't have this dedicated type but as property, e.g anthropic doesn't have a system-role, see - // https://github.com/anthropics/anthropic-sdk-typescript/blob/c2da9604646ff103fbdbca016a9a9d49b03b387b/src/resources/messages.ts#L384 - // So, we could have `LanguageModelChatRequestOptions#system` which would be more limiting but also more natural? - - export enum LanguageModelChatMessageRole { - System = 3 - } -} From 87d594f273b3b5c8add6fe7cf565df3c4c0eafb7 Mon Sep 17 00:00:00 2001 From: Gavin Gu Date: Tue, 10 Sep 2024 15:06:57 +0800 Subject: [PATCH 3/3] fix: fix ut --- packages/vscode-extension/test/mocks/vsc/chat.ts | 5 ----- packages/vscode-extension/test/mocks/vscode-mock.ts | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/vscode-extension/test/mocks/vsc/chat.ts b/packages/vscode-extension/test/mocks/vsc/chat.ts index d5f40febc6..aeb137423c 100644 --- a/packages/vscode-extension/test/mocks/vsc/chat.ts +++ b/packages/vscode-extension/test/mocks/vsc/chat.ts @@ -58,9 +58,4 @@ export enum LanguageModelChatMessageRole { * The assistant role. */ Assistant = 2, - - /** - * The system role. - */ - System = 3, } diff --git a/packages/vscode-extension/test/mocks/vscode-mock.ts b/packages/vscode-extension/test/mocks/vscode-mock.ts index 3dc381b735..c8930c5205 100644 --- a/packages/vscode-extension/test/mocks/vscode-mock.ts +++ b/packages/vscode-extension/test/mocks/vscode-mock.ts @@ -104,8 +104,8 @@ mockedVSCode.Task = vscodeMocks.vscMockExtHostedTypes.Task; (mockedVSCode as any).CancellationError = vscodeMocks.vscMockExtHostedTypes.CancellationError; (mockedVSCode as any).LSPCancellationError = vscodeMocks.vscMockExtHostedTypes.LSPCancellationError; mockedVSCode.TaskRevealKind = vscodeMocks.vscMockExtHostedTypes.TaskRevealKind; -mockedVSCode.LanguageModelChatMessage = vscodeMocks.chat.LanguageModelChatMessage; -mockedVSCode.LanguageModelChatMessageRole = vscodeMocks.chat.LanguageModelChatMessageRole; +(mockedVSCode as any).LanguageModelChatMessage = vscodeMocks.chat.LanguageModelChatMessage; +(mockedVSCode as any).LanguageModelChatMessageRole = vscodeMocks.chat.LanguageModelChatMessageRole; mockedVSCode.TextDocumentSaveReason = vscodeMocks.TextDocumentSaveReason; (mockedVSCode as any).version = "test";