A bash script `ci` to help you write commit message and commit with OPEN AI/Groq API
Writing commit message could be time-consuming if you want a good summrize. ChatGPT just released their cheapest but still powerful model gpt-4o-mini, we can use it to save our time and keep the commit message accurate.
You need to put your API KEY in environment variable OPENAI_API_KEY before running this script.
You need to run git add
first before running this ci
script.
If you don't want to bother adding first, change git diff --cached -w -b
to git diff -w -b
and add -a
option in the commit command (the last line of the script)
#!/bin/bash
# Get git changes
changes=$(git diff --cached -w -b)
# Exit if no changes
if [ -z "$changes" ]; then
echo "No changes to commit."
exit 0
fi
# Set prompt template
prompt_template=$(cat <<-END
You are good at writing git commit messages;
You follow the conventional commits specification:
feat: for new features
chore: for maintenance work
fix: for bug fixes
Please help write a commit message for the following changes from a `git diff` command.
Please try to summerize all meaningful changes while keep the result short.
THE RESULT SHOULD ONLY BE NO MORE THEN 100 CHARACTERS.
please do not respond any other information/text rather than the commit message itself.
and here're the changes:
END
)
prompt_template+="$changes"
# Build JSON request body using jq
request_body=$(jq -n --arg model "gpt-4o-mini-2024-07-18" --arg prompt "$prompt_template" \
'{model: $model, messages: [{role:"system",content:"You are a programmer"},{role: "user", content: $prompt}], max_tokens: 32768, seed: 45, temperature: 0}')
# Use curl to request the OpenAI API to generate a commit message
response=$(curl -s --request POST \
--url https://api.openai.com/v1/chat/completions \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-Type: application/json" \
--data "$request_body")
# Extract commit message from the response
commit_message=$(echo "$response" | jq -r '.choices[0].message.content')
# Exit if the commit message is empty
if [ -z "$commit_message" ]; then
echo 'failed to generate a commit message'
exit 1
fi
# Commit changes
git commit -m "$commit_message"
2024-07-24 update
Free alternative provided by Groq
If you don't want to pay for the ChatGPT API, you can opt for the free alternative provided by Groq. To get started, simply sign up for a Groq account using Google Login. Once you've created your account, you can generate an API key by following this link: https://console.groq.com/keys. Finally, make a minor modification to your script, as outlined below.
# Build JSON request body using jq
#request_body=$(jq -n --arg model "gpt-4o-mini-2024-07-18" --arg prompt "$prompt_template" \
# '{model: $model, messages: [{role:"system",content:"You are a programmer"},{role: "user", content: $prompt}], max_tokens: 50, seed: 45, temperature: 0}')
#response=$(curl -s --request POST \
# --url https://api.openai.com/v1/chat/completions \
# --header "Authorization: Bearer $OPENAI_API_KEY" \
# --header "Content-Type: application/json" \
# --data "$request_body")
request_body=$(jq -n --arg model "mixtral-8x7b-32768" --arg prompt "$prompt_template" \
'{model: $model, messages: [{role:"system",content:"You are a programmer"},{role: "user", content: $prompt}], max_tokens: 32768, stream: false, temperature: 0, top_p: 1, stop: null}')
# Use curl to request the OpenAI API to generate a commit message
response=$(curl -s --request POST \
--url https://api.groq.com/openai/v1/chat/completions \
--header "Authorization: Bearer $GROQ_API_KEY" \
--header "Content-Type: application/json" \
--data "$request_body")