Refactor aicommit.mjs to include verbose output and confirmation prompt for AI commit message

This commit is contained in:
Hassan El Mghari
2023-02-12 00:15:46 -05:00
parent a5eb750611
commit 1ade6dd1d9

View File

@@ -1,10 +1,12 @@
#!/usr/bin/env zx #!/usr/bin/env zx
$.verbose = false;
console.log(chalk.white("▲ ") + chalk.green("Welcome to AICommit!"));
let { OPENAI_API_KEY } = await fs.readJson("./.env.json"); let { OPENAI_API_KEY } = await fs.readJson("./.env.json");
let diff = await quiet($`git diff --cached`); let diff = await quiet($`git diff --cached`);
let prompt = `Write one detailed commit message based on the following commit: ${diff}`; let prompt = `Write one detailed commit message based on the following commit. Do not preface the commit with anything, write it right away: ${diff}`;
echo(prompt);
const payload = { const payload = {
model: "text-davinci-003", model: "text-davinci-003",
@@ -18,6 +20,10 @@ const payload = {
n: 1, n: 1,
}; };
console.log(
chalk.white("▲ ") + chalk.black("Generating your AI commit message...")
);
const response = await fetch("https://api.openai.com/v1/completions", { const response = await fetch("https://api.openai.com/v1/completions", {
headers: { headers: {
"Content-Type": "application/json", "Content-Type": "application/json",
@@ -28,4 +34,19 @@ const response = await fetch("https://api.openai.com/v1/completions", {
}); });
const json = await response.json(); const json = await response.json();
echo(json.choices[0].text); const aiCommit = json.choices[0].text;
echo(aiCommit);
let confirmationMessage = await question(
"\nWould you like to use this commit message? " + chalk.yellow("(Y/n) "),
{
choices: ["Y", "n"],
}
);
$.verbose = true;
if (confirmationMessage !== "n") {
await $`git commit -m ${aiCommit}`;
}