Compare commits
4 Commits
43b79b2914
...
2268f9e401
Author | SHA1 | Date | |
---|---|---|---|
2268f9e401 | |||
e4d4abb082 | |||
32279b7fd5 | |||
a271e5624e |
@ -19,6 +19,15 @@ To use Aicommit, you need to have the following tools installed:
|
||||
```bash
|
||||
export GIT_EDITOR="<path/to/>aicommit"
|
||||
```
|
||||
Optionally you can add the `--groq` flag to use the Groq API.
|
||||
|
||||
```bash
|
||||
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.
|
||||
|
||||
|
61
aicommit
61
aicommit
@ -1,8 +1,6 @@
|
||||
#!/bin/bash
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
ARGS=("${@-}")
|
||||
|
||||
TMP_FILE="/tmp/aicommit_tmp"
|
||||
|
||||
system=$(
|
||||
@ -10,7 +8,12 @@ system=$(
|
||||
|
||||
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.
|
||||
Give description for every change.
|
||||
Do not include quotes from the diff.
|
||||
Description should not include a reason only a description.
|
||||
Description should be one sentence per difference.
|
||||
Do not include urls.
|
||||
Do not include headings. for example: 'URLS:'
|
||||
|
||||
EOF
|
||||
)
|
||||
@ -20,29 +23,55 @@ if ! diff=$(git diff --cached); then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
message_cat="${system} diff: ${diff}"
|
||||
|
||||
message=$(
|
||||
jq -n \
|
||||
".message = $(jq -R -s '@json' <<<"${message_cat}")"
|
||||
)
|
||||
|
||||
echo ""
|
||||
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."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
curl -s "https://infer.x64.world/chat" \
|
||||
curl -s "https://infer.x64.world/chat" \
|
||||
-X POST \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "${message}" | jq -r '.content | gsub("\""; "")' >"${TMP_FILE}"
|
||||
|
||||
if [[ 0 -ne $? ]]; then
|
||||
if [[ 0 -ne $? ]]; then
|
||||
echo "Failed to get response."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
cat ".git/COMMIT_EDITMSG" >>"${TMP_FILE}"
|
||||
@ -50,4 +79,4 @@ cat "${TMP_FILE}" >".git/COMMIT_EDITMSG"
|
||||
|
||||
rm "${TMP_FILE}"
|
||||
|
||||
"${EDITOR}" "$@"
|
||||
"${EDITOR}" "${@-}"
|
||||
|
@ -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
|
Loading…
Reference in New Issue
Block a user