diff --git a/Copilot/Service/CopilotActions/CopilotActionsBase.ts b/Copilot/Service/CopilotActions/CopilotActionsBase.ts index 0a4f973bb1..967f7d9060 100644 --- a/Copilot/Service/CopilotActions/CopilotActionsBase.ts +++ b/Copilot/Service/CopilotActions/CopilotActionsBase.ts @@ -15,9 +15,19 @@ export interface CopilotActionRunResult { files: Dictionary; } +export enum PromptRole { + System = "system", + User = "user", + Assistant = "assistant", +} + +export interface Prompt { + content: string; + role: PromptRole; +} + export interface CopilotActionPrompt { - prompt: string; - systemPrompt: string; + messages: Array; } export interface CopilotActionVars { diff --git a/Copilot/Service/CopilotActions/FixGrammarAndSpelling.ts b/Copilot/Service/CopilotActions/FixGrammarAndSpelling.ts index 1a003866cd..7f47ee6ad4 100644 --- a/Copilot/Service/CopilotActions/FixGrammarAndSpelling.ts +++ b/Copilot/Service/CopilotActions/FixGrammarAndSpelling.ts @@ -2,6 +2,7 @@ import CopilotActionType from "Common/Types/Copilot/CopilotActionType"; import CopilotActionBase, { CopilotActionPrompt, CopilotProcess, + PromptRole, } from "./CopilotActionsBase"; import CodeRepositoryUtil from "../../Utils/CodeRepository"; @@ -34,8 +35,16 @@ export default class FixGrammarAndSpelling extends CopilotActionBase { - You will not change the code unnecessarily. For example you will not change the code structure, logic, quotes around strings, or functionality.`; return { - prompt: prompt, - systemPrompt: systemPrompt, + messages: [ + { + content: systemPrompt, + role: PromptRole.System, + }, + { + content: prompt, + role: PromptRole.User, + }, + ], }; } } diff --git a/Copilot/Service/CopilotActions/ImproveComments.ts b/Copilot/Service/CopilotActions/ImproveComments.ts index ff618fad52..4a8f8c0245 100644 --- a/Copilot/Service/CopilotActions/ImproveComments.ts +++ b/Copilot/Service/CopilotActions/ImproveComments.ts @@ -2,6 +2,7 @@ import CopilotActionType from "Common/Types/Copilot/CopilotActionType"; import CopilotActionBase, { CopilotActionPrompt, CopilotProcess, + PromptRole, } from "./CopilotActionsBase"; import CodeRepositoryUtil from "../../Utils/CodeRepository"; import ServiceLanguage from "Common/Types/ServiceCatalog/ServiceLanguage"; @@ -97,8 +98,7 @@ export default class ImproveComments extends CopilotActionBase { const oldCode: string = data.oldCode; const newCode: string = data.newCode; - const prompt: CopilotActionPrompt = { - prompt: ` + const prompt: string = ` I've asked to improve comments in the code. This is the old code: @@ -115,11 +115,22 @@ export default class ImproveComments extends CopilotActionBase { If the code was NOT changed EXCEPT comments, please reply with the following text: --no-- - `, - systemPrompt: await this.getSystemPrompt(), - }; + `; - return prompt; + const systemPrompt: string = await this.getSystemPrompt(); + + return { + messages: [ + { + content: systemPrompt, + role: PromptRole.System, + }, + { + content: prompt, + role: PromptRole.User, + }, + ], + }; } public override async getPrompt( @@ -144,8 +155,16 @@ export default class ImproveComments extends CopilotActionBase { const systemPrompt: string = await this.getSystemPrompt(); return { - prompt: prompt, - systemPrompt: systemPrompt, + messages: [ + { + content: systemPrompt, + role: PromptRole.System, + }, + { + content: prompt, + role: PromptRole.User, + }, + ], }; } diff --git a/Copilot/Service/CopilotActions/ImproveVariableNames.ts b/Copilot/Service/CopilotActions/ImproveVariableNames.ts index 4eedcedfef..2f5b523df2 100644 --- a/Copilot/Service/CopilotActions/ImproveVariableNames.ts +++ b/Copilot/Service/CopilotActions/ImproveVariableNames.ts @@ -2,6 +2,7 @@ import CopilotActionType from "Common/Types/Copilot/CopilotActionType"; import CopilotActionBase, { CopilotActionPrompt, CopilotProcess, + PromptRole, } from "./CopilotActionsBase"; import CodeRepositoryUtil from "../../Utils/CodeRepository"; @@ -31,8 +32,16 @@ export default class ImproveVariableNames extends CopilotActionBase { - You will not change the code unnecessarily. For example you will not change the code structure, logic, quotes around strings, or functionality.`; return { - prompt: prompt, - systemPrompt: systemPrompt, + messages: [ + { + content: systemPrompt, + role: PromptRole.System, + }, + { + content: prompt, + role: PromptRole.User, + }, + ], }; } } diff --git a/Copilot/Service/CopilotActions/ImroveReadme.ts b/Copilot/Service/CopilotActions/ImroveReadme.ts index ada6e32335..cc8a048f53 100644 --- a/Copilot/Service/CopilotActions/ImroveReadme.ts +++ b/Copilot/Service/CopilotActions/ImroveReadme.ts @@ -2,6 +2,7 @@ import CopilotActionType from "Common/Types/Copilot/CopilotActionType"; import CopilotActionBase, { CopilotActionPrompt, CopilotProcess, + PromptRole, } from "./CopilotActionsBase"; import CodeRepositoryUtil from "../../Utils/CodeRepository"; @@ -31,8 +32,16 @@ export default class ImproveReadme extends CopilotActionBase { - You will not change the code unnecessarily. For example you will not change the code structure, logic, quotes around strings, or functionality.`; return { - prompt: prompt, - systemPrompt: systemPrompt, + messages: [ + { + content: systemPrompt, + role: PromptRole.System, + }, + { + content: prompt, + role: PromptRole.User, + }, + ], }; } } diff --git a/Copilot/Service/CopilotActions/RefactorCode.ts b/Copilot/Service/CopilotActions/RefactorCode.ts index 56ada96826..39daec4782 100644 --- a/Copilot/Service/CopilotActions/RefactorCode.ts +++ b/Copilot/Service/CopilotActions/RefactorCode.ts @@ -2,6 +2,7 @@ import CopilotActionType from "Common/Types/Copilot/CopilotActionType"; import CopilotActionBase, { CopilotActionPrompt, CopilotProcess, + PromptRole, } from "./CopilotActionsBase"; import CodeRepositoryUtil from "../../Utils/CodeRepository"; @@ -31,8 +32,16 @@ export default class RefactorCode extends CopilotActionBase { - You will not change the code unnecessarily. For example you will not change the logic, quotes around strings, or functionality.`; return { - prompt: prompt, - systemPrompt: systemPrompt, + messages: [ + { + content: systemPrompt, + role: PromptRole.System, + }, + { + content: prompt, + role: PromptRole.User, + }, + ], }; } } diff --git a/Copilot/Service/CopilotActions/WriteUnitTests.ts b/Copilot/Service/CopilotActions/WriteUnitTests.ts index 23ee498e14..f8bbe806e3 100644 --- a/Copilot/Service/CopilotActions/WriteUnitTests.ts +++ b/Copilot/Service/CopilotActions/WriteUnitTests.ts @@ -1,5 +1,8 @@ import CopilotActionType from "Common/Types/Copilot/CopilotActionType"; -import CopilotActionBase, { CopilotActionPrompt } from "./CopilotActionsBase"; +import CopilotActionBase, { + CopilotActionPrompt, + PromptRole, +} from "./CopilotActionsBase"; import CodeRepositoryUtil from "../../Utils/CodeRepository"; export default class WriteUnitTests extends CopilotActionBase { @@ -23,8 +26,16 @@ export default class WriteUnitTests extends CopilotActionBase { - You will not change the code unnecessarily. For example you will not change the logic, quotes around strings, or functionality.`; return { - prompt: prompt, - systemPrompt: systemPrompt, + messages: [ + { + content: systemPrompt, + role: PromptRole.System, + }, + { + content: prompt, + role: PromptRole.User, + }, + ], }; } } diff --git a/Copilot/Service/LLM/Llama.ts b/Copilot/Service/LLM/Llama.ts index b46827c02b..449c3efe7a 100644 --- a/Copilot/Service/LLM/Llama.ts +++ b/Copilot/Service/LLM/Llama.ts @@ -8,7 +8,7 @@ import { JSONArray, JSONObject } from "Common/Types/JSON"; import BadRequestException from "Common/Types/Exception/BadRequestException"; import Sleep from "Common/Types/Sleep"; import logger from "CommonServer/Utils/Logger"; -import { CopilotActionPrompt } from "../CopilotActions/CopilotActionsBase"; +import { CopilotActionPrompt, Prompt } from "../CopilotActions/CopilotActionsBase"; import ErrorGettingResponseFromLLM from "../../Exceptions/ErrorGettingResponseFromLLM"; enum LlamaPromptStatus { @@ -27,10 +27,12 @@ export default class Llama extends LlmBase { await API.post( URL.fromString(serverUrl.toString()).addRoute("/prompt/"), { - messages: [ - { role: "system", content: data.systemPrompt }, - { role: "user", content: data.prompt }, - ], + messages: data.messages.map((message: Prompt) => { + return { + content: message.content, + role: message.role, + }; + }), secretkey: GetRepositorySecretKey(), }, );