Maison  >  Article  >  interface Web  >  GenAI Git valide

GenAI Git valide

WBOY
WBOYoriginal
2024-08-28 06:08:33930parcourir

GenAI Git Commits

Générer un message de commit git est rapidement devenu une application GenAI classique pour les développeurs.

Pour vous aider, nous allons créer un script GenAIScript.

Le script agit comme un script d'automatisation node.js classique et utilise runPrompt
pour émettre des appels au LLM et demander à l'utilisateur de confirmer le texte généré.

? Expliquer le script

Le script commence par importer les fonctions nécessaires depuis @inquirer/prompts :

import { select, input, confirm } from "@inquirer/prompts"

Ces fonctions seront utilisées pour interagir avec l'utilisateur, lui demandant de confirmer des actions ou de saisir des données.

Ensuite, nous vérifions s'il y a des modifications par étapes dans le référentiel Git :

let { stdout } = await host.exec("git", ["diff", "--cached"])

Si aucune modification n'est effectuée, nous demandons à l'utilisateur s'il souhaite organiser toutes les modifications. Si l'utilisateur confirme, nous effectuons toutes les modifications. Sinon, nous renflouons.

    const stage = await confirm({
        message: "No staged changes. Stage all changes?",
        default: true,
    })
    if (stage) {
        await host.exec("git", ["add", "."])
        stdout = (await host.exec("git", ["diff", "--cached"])).stdout
    }
    if (!stdout) cancel("no staged changes")

Nous générons un message de validation initial en utilisant les modifications échelonnées :

message = (
    await runPrompt(
        (_) => {
            _.def("GIT_DIFF", stdout, { maxTokens: 20000 })
            _.$`GIT_DIFF is a diff of all staged changes, coming from the command:
\`\`\`
git diff --cached
\`\`\`
Please generate a concise, one-line commit message for these changes.
- do NOT add quotes`
        },
        { cache: false, temperature: 0.8 }
    )
).text

La configuration de l'invite ci-dessus indique que le message doit être concis,
lié à la sortie "git diff --cached", et ne doit pas inclure de guillemets.

L'utilisateur choisit comment procéder avec le message généré :

    choice = await select({
        message,
        choices: [
            { name: "commit", value: "commit", description: "accept message and commit" },
            ...
        ],
    })

Des options sont proposées pour modifier ou régénérer le message. Si l'utilisateur choisit de modifier le message, nous lui demandons de saisir un nouveau message :

    if (choice === "edit") {
        message = await input({
            message: "Edit commit message",
            required: true,
        })
        choice = "commit"
    }

Si l'utilisateur choisit de valider le message, nous validons les modifications :

    if (choice === "commit" && message) {
        console.log((await host.exec("git", ["commit", "-m", message])).stdout)
    }

? Exécuter le script

Vous pouvez exécuter ce script à l'aide de la CLI.

genaiscript run gcm

Comme il utilise le package @inquirer/prompts, vous devrez d'abord installer ce package :

npm install --save-dev @inquirer/prompts

Si vous utilisez npx,

npx -p @inquirer/prompts genaiscript -p genaiscript  -- genaiscript run gcm

Cette commande exécutera le script et vous guidera tout au long du processus de génération et de validation d'un message Git à l'aide de l'IA, rendant vos validations plus informatives et cohérentes.

Vous pouvez envelopper cette commande dans un fichier gcm.sh ou dans la section de script de votre package dans package.json :

{
    "devDependencies": {
        "@inquirer/prompts": "...",
        "genaiscript": "..."
    },
    "scripts": {
        "gcm": "genaiscript run gcm"
    }
}

Ensuite, vous pouvez exécuter le script en utilisant :

npm run gcm

Remerciements

Ce script a été inspiré du générateur de messages de commit de Karpathy.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn