Compare commits

8 Commits

Author SHA1 Message Date
7476e27e01 Refactor instructions to generate concise and informative git commit messages, removing redundant guidelines and emphasizing clarity and understandability 2024-08-09 18:31:44 -07:00
2268f9e401 Added option to use Groq API by adding --groq flag to GIT_EDITOR.
Added environment variable GROQ_API_KEY to store Groq API key.
Updated git commit example to include --groq flag.
2024-08-09 12:48:08 -07:00
e4d4abb082 Removed unnecessary variable ARGS and directly passed command line arguments to the editor. 2024-08-09 12:43:01 -07:00
32279b7fd5 Relocated echo statements. 2024-08-09 12:37:44 -07:00
a271e5624e Changed the shebang line from #!/bin/bash to #!/usr/bin/env bash.
Removed the `aicommit_groq` script and deleted the file.
Updated the `EDITOR` command to use the `ARGS` array.
Moved groq config into aicommit.
2024-08-09 12:34:29 -07:00
43b79b2914 Delete test file: remove This is a test. line from test.txt 2024-08-08 02:26:00 -07:00
baed3d5d17 Update README.md with new instructions on using aicommit
Replace outdated information about `aicommit_groq`
Clarify prerequisites for using Aicommit
Add setup and usage section to README.md
Document bypassing AI-generated commit messages using the `-m` flag
2024-08-08 02:22:20 -07:00
e3704b4e6e update README to reflect new feature and remove deprecated usage of aicommit_groq 2024-08-08 02:15:21 -07:00
3 changed files with 72 additions and 87 deletions

View File

@ -1,19 +1,34 @@
## use AI to draft commit messages # **Use AI to Draft Commit Messages with Aicommit**
aicommit injects a commit message draft written by RayAI before loading your default editor for review. Aicommit integrates with RayAI to generate a draft commit message, which is then loaded into your default editor for review and editing.
requires: jq ## **Prerequisites**
> aicommit_groq is broken. Don't use. To use Aicommit, you need to have the following tools installed:
### use - `curl`
- `jq`
Change your **Note**: Aicommit-groq is currently broken and should not be used.
## **Setup and Usage**
1. **Clone the repository**: Clone the Aicommit repository to your local machine.
2. **Configure your Git editor**: Add the following line to your `~/.bashrc` file, replacing `<path/to/>` with the actual path to the Aicommit executable:
```bash ```bash
export GIT_EDITOR="<path/to/>aicommit" export GIT_EDITOR="<path/to/>aicommit"
``` ```
Optionally you can add the `--groq` flag to use the Groq API.
```bash ```bash
git commit export GROQ_API_KEY=<groq-api-key>
``` ```
```bash
export GIT_EDITOR="<path/to/>aicommit --groq"
```
3. **Use Git as normal**: Once configured, you can use Git as you normally would. When you run `git commit`, Aicommit will generate a draft commit message using RayAI, which will then be loaded into your default editor for review and editing.
**Bypassing AI-generated messages**: If you prefer to write your own commit message, you can use the `-m` flag with `git commit`, like this: `git commit -m "your message here"`. This will bypass the AI-generated message and allow you to write your own message directly.

View File

@ -1,16 +1,16 @@
#!/bin/bash #!/usr/bin/env bash
set -e set -e
ARGS=("${@-}")
TMP_FILE="/tmp/aicommit_tmp" TMP_FILE="/tmp/aicommit_tmp"
system=$( system=$(
cat - <<EOF cat - <<EOF
You are an expert programmer that values clear, unambiguous communication and are specialized in generating concise and informative git commit messages. You are an expert programmer that values clear, unambiguous communication and are specialized in generating concise and informative git commit messages.
Your task is to generate a concise, informative git commit message based on the following git diff.
Be sure that the commit message reflects the entire diff.
It is very important that the entire commit is clear and understandable.
Only reply with the commit message and nothing else. Only reply with the commit message and nothing else.
Give detail for every change in the diff.
EOF EOF
) )
@ -20,29 +20,55 @@ if ! diff=$(git diff --cached); then
exit 1 exit 1
fi fi
message_cat="${system} diff: ${diff}"
message=$(
jq -n \
".message = $(jq -R -s '@json' <<<"${message_cat}")"
)
echo "" echo ""
echo "Please wait for AI reponse..." echo "Please wait for AI reponse..."
if ! curl -s -X POST https://infer.x64.world/reset-conversation >/dev/null; then if [[ "--groq" == "$1" ]]; then
shift
message=$(
jq -n \
".messages = [{role: \"system\", content: $(jq -R -s '@json' <<<"${system}")}, {role: \"user\", content: $(jq -R -s '@json' <<<"${diff}")}] |
.model = \"llama-3.1-70b-versatile\" |
.temperature = 1 |
.max_tokens = 1024 |
.top_p = 1 |
.stream = false |
.stop = null"
)
curl -s "https://api.groq.com/openai/v1/chat/completions" \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${GROQ_API_KEY}" \
-d "${message}" | jq -r '.choices[0].message.content | gsub("\""; "")' >"${TMP_FILE}"
if [[ 0 -ne $? ]]; then
echo "Failed to get response."
exit 1
fi
else
message_cat="${system} diff: ${diff}"
message=$(
jq -n \
".message = $(jq -R -s '@json' <<<"${message_cat}")"
)
if ! curl -s -X POST https://infer.x64.world/reset-conversation >/dev/null; then
echo "Failed to reset conversation." echo "Failed to reset conversation."
exit 1 exit 1
fi fi
curl -s "https://infer.x64.world/chat" \ curl -s "https://infer.x64.world/chat" \
-X POST \ -X POST \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d "${message}" | jq -r '.content | gsub("\""; "")' >"${TMP_FILE}" -d "${message}" | jq -r '.content | gsub("\""; "")' >"${TMP_FILE}"
if [[ 0 -ne $? ]]; then if [[ 0 -ne $? ]]; then
echo "Failed to get response." echo "Failed to get response."
exit 1 exit 1
fi
fi fi
cat ".git/COMMIT_EDITMSG" >>"${TMP_FILE}" cat ".git/COMMIT_EDITMSG" >>"${TMP_FILE}"
@ -50,4 +76,4 @@ cat "${TMP_FILE}" >".git/COMMIT_EDITMSG"
rm "${TMP_FILE}" rm "${TMP_FILE}"
"${EDITOR}" "$@" "${EDITOR}" "${@-}"

View File

@ -1,56 +0,0 @@
#!/bin/bash
set -e
set -o pipefail
ARGS=("${@-}")
TMP_FILE="/tmp/aicommit"
system=$(
cat - <<EOF
You are an expert programmer that values clear, unambiguous communication and are specialized in generating concise and informative git commit messages.
Only reply with the commit message and nothing else.
Give detail for every change in the diff.
EOF
)
pushd "$(pwd)" >/dev/null || exit 1
if [[ -z ${GROQ_API_KEY} ]]; then
echo "API key not set."
exit 1
fi
if ! diff=$(git diff --cached); then
echo "Failed to get diff."
exit 1
fi
message=$(
jq -n \
".messages = [{role: \"system\", content: $(jq -R -s '@json' <<<"${system}")}, {role: \"user\", content: $(jq -R -s '@json' <<<"${diff}")}] |
.model = \"llama-3.1-70b-versatile\" |
.temperature = 1 |
.max_tokens = 1024 |
.top_p = 1 |
.stream = false |
.stop = null"
)
# trunk-ignore(shellcheck/SC2312)
curl -s "https://api.groq.com/openai/v1/chat/completions" \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${GROQ_API_KEY}" \
-d "${message}" | jq -r '.choices[0].message.content | gsub("\""; "")' >"${TMP_FILE}"
if [[ 0 -ne $? ]]; then
echo "Failed to get response."
exit 1
fi
git commit -e -m "$(cat ${TMP_FILE})" && rm ${TMP_FILE}
popd >/dev/null || exit 1