Analisando commits com o ChatGPT
A base do prompt usada é explorada aqui em iuricode/padroes-de-commit.
De acordo com a documentação do Conventional Commits, commits semânticos são uma convenção simples para ser utilizada nas mensagens de commit. Essa convenção define um conjunto de regras para criar um histórico de commit explícito, o que facilita a criação de ferramentas automatizadas.
- Git/Git Bash
- MongoDB Atlas
- Chave de API da Open AI
-
Rode o projeto AI Commits Hooks API;
-
Configure um token autorizativo nas variáveis de ambiente e a string de conexão do MongoDB Atlas. Dessa forma, você pode gerar e aprovar seus tokens de consumo em
/q/api-docs
;
Criação do token de consumo
curl -X 'POST' \
'http://localhost:8080/token/novo' \
-H 'Token-Consumo: SEU_TOKEN_GERADO_NA_APLICACAO' \
-H 'Content-Type: application/json' \
-d '{"email": "[email protected]", "duration_days": 1, "limit_request": 1}'
Aprovação do token
curl -X 'PUT' http://localhost:8080/token/aprovar?tokenPending=XXXX
- Adicione o arquivo
prepare-commit-msg
no diretório.git/hooks/
.
#!/bin/sh
# Implemente o serviço em https://github.com/tiagolofi/ai-commit-hooks-api
# Mais detalhes em: https://github.com/tiagolofi/ai-commit-hooks
COMMIT_MSG_FILE=$1
GIT_DIFF=$(git diff --staged)
API_RESPONSE=$(
curl -X 'POST' \
'http://localhost:8080/commit/gpt-4o-mini' \
-H 'Token-Consumo: SEU_TOKEN_GERADO_NA_APLICACAO' \
-H 'Content-Type: text/plain' \
-d "$GIT_DIFF"
)
COMMIT=$(echo $API_RESPONSE | grep -o '"respostaGPT4oMini": *"[^"]*"' | awk -F'"' '{print $4}')
echo "$COMMIT" > temp_msg
cat "$COMMIT_MSG_FILE" >> temp_msg # dê um " " na mensagem de commit
mv temp_msg "$COMMIT_MSG_FILE"
COMMIT_MSG=$(cat "$COMMIT_MSG_FILE")
if [[ -z "$COMMIT_MSG" || "$COMMIT_MSG" =~ ^[[:space:]]*$ ]]; then
exit 1 # erro: mensagem vazia
fi
OBS: no vscode é possível stagear as alterações sem utilizar diretamente git add
. Este por sua vez, é acionado por trás dos panos.
Mensagem de erro 'arguments too large': commit normalmente, a chamada não será feita devido uma limitação do número de linhas que o curl pode receber
Duplo commit, ex: feat + fix: evite commitar muitos arquivos de uma vez só. Pode vir acontecer de dois commits nascerem ao mesmo tempo e API está configurada para devolver apenas 20 tokens;
Feature | O que é | Implementado |
---|---|---|
Acompanhar a evolução dos modelos | Trabalhar com outros tipos de contrato disponibilizados pela OpenAI | [ ] |
Quantidade de commits e palavras | Tornar mais personalizável essa parte do projeto | [ ] |
Retirar acoplamento ao Python | Construir um tratamento de texto do git diff (pode se mostrar bastante complexo), sem utilizar utilitários como o jq . |
[x] |
Serviço que gera os commits | Executa uma chamada via curl com um contrato muito simples (não será application/json). | [x] |