From 02f47512197845ff65e9ce453cb749586a285cc5 Mon Sep 17 00:00:00 2001 From: Frank Kloeker Date: Fri, 14 Feb 2025 20:44:10 +0100 Subject: [PATCH 1/9] Update README.md --- README.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2f4b33a..a8749ff 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,23 @@ # ai-commit -A Git Commit Hook with AI Support + +Are you tired to think about a commit message at the end of making changes on your code? +Have you often `Update README.md` or `test` as message in your git log? Let create AI for you a meanful message based on last `git diff`. Here is a Git Commit Hook with AI Support + +# preparation + +* A running [Ollama](https://ollama.com/) instance running with API access, probably on your computer on `127.0.0.1:11434` +* Loaded LLM to use, e.g. [deepseek-coder-v2-lite-base-q4_k_m-gguf:latest](https://ollama.com/networkjohnny/deepseek-coder-v2-lite-base-q4_k_m-gguf), a DeepSeek-Coder-V2-Lite-Base with only 2GB + + ```bash + # ollama pull networkjohnny/deepseek-coder-v2-lite-base-q4_k_m-gguf:latest + # ollama serve + ``` + +* copy `commit-msg` to `.git/hooks/commit-msg` in your Git repo +* make changes and review AI's work. If you are unhappy, just edit the message with `git commit --amend` bevore push + +# super lazy mode + +``` +alias ac='git add . && git commit -m ""' +``` From 4e464c22c7193beb64d2d0bcacabdfb8ad01a4dc Mon Sep 17 00:00:00 2001 From: Frank Kloeker Date: Fri, 14 Feb 2025 20:46:23 +0100 Subject: [PATCH 2/9] Create commit-msg --- commit-msg | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 commit-msg diff --git a/commit-msg b/commit-msg new file mode 100644 index 0000000..c75f3ac --- /dev/null +++ b/commit-msg @@ -0,0 +1,51 @@ +#!/bin/bash +# write commit message by ai + +# File containing the commit message +COMMIT_MSG_FILE=$1 + +# Get the Git diff +DIFF=$(git diff --cached) + +# If there's no diff (e.g., an empty commit), exit +if [ -z "$DIFF" ]; then + exit 0 +fi + +# Define the Ollama API URL +OLLAMA_API="http://127.0.0.1:11434/api/chat" +MODEL="networkjohnny/deepseek-coder-v2-lite-base-q4_k_m-gguf:latest" + +# Define the prompt for generating commit messages +PROMPT=$(jq -n --arg diff "$DIFF" \ + '{ + "model": "'$MODEL'", + "messages": [ + {"role": "system", "content": "You are an expert software engineer."}, + {"role": "user", "content": ("Based on the following Git diff, generate a concise, meaningful commit message.\n\nKeep it within 50 characters and ensure it clearly describes the change.\n\nGit diff:\n" + $diff + "Hint: Answer only with the commit message and it should take maximal 10 seconds")} + ] + }' +) + +# Make the API request to Ollama +RESPONSE=$(curl -s -X POST "$OLLAMA_API" -H "Content-Type: application/json" -d "$PROMPT") + +# Extract **only** the commit message content from JSON +COMMIT_MSG=$(echo "$RESPONSE" | jq -r '.message.content // ""') + +# **More cleaning**: Remove all unwanted prefixes +COMMIT_MSG=$(echo "$COMMIT_MSG" | sed -E 's/^(`|")//g') + +# Remove newlines, trim extra spaces, and enforce single-line output +COMMIT_MSG=$(echo "$COMMIT_MSG" | tr -d '\n' | sed 's/ */ /g') + +# Truncate to 50 characters (safety limit) +COMMIT_MSG=$(echo "$COMMIT_MSG" | sed -E 's/^(.{1,50})([[:space:]]|$)/\1 /') + +# If the AI response is empty, do nothing +if [ -z "$COMMIT_MSG" ]; then + exit 0 +fi + +# Write the AI-generated commit message to the commit message file +echo "$COMMIT_MSG" > "$COMMIT_MSG_FILE" From 13817033f46525f15cd8031899280ad12a7bbe75 Mon Sep 17 00:00:00 2001 From: Frank Kloeker Date: Fri, 14 Feb 2025 20:48:13 +0100 Subject: [PATCH 3/9] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a8749ff..fb6b14f 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,8 @@ Have you often `Update README.md` or `test` as message in your git log? Let crea # ollama serve ``` -* copy `commit-msg` to `.git/hooks/commit-msg` in your Git repo +* required tools on your computer: curl, jq, sed +* copy `commit-msg` to `.git/hooks/commit-msg` in your Git repo and make it executable (`chmod +x`) * make changes and review AI's work. If you are unhappy, just edit the message with `git commit --amend` bevore push # super lazy mode From 4108b64f5e535858aa51a9c0bb92f3d91dd47983 Mon Sep 17 00:00:00 2001 From: Frank Kloeker Date: Fri, 14 Feb 2025 21:10:33 +0100 Subject: [PATCH 4/9] add recording --- recording.html | 4163 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 4163 insertions(+) create mode 100644 recording.html diff --git a/recording.html b/recording.html new file mode 100644 index 0000000..d9d48f7 --- /dev/null +++ b/recording.html @@ -0,0 +1,4163 @@ + + + + + + + + + + + + +
+ + + + + + From d4333d089b84b4ef94dc8c1dbdb746ba8c6679a0 Mon Sep 17 00:00:00 2001 From: Frank Kloeker Date: Fri, 14 Feb 2025 21:42:56 +0100 Subject: [PATCH 5/9] change username --- recording.html | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/recording.html b/recording.html index d9d48f7..2b6c1f0 100644 --- a/recording.html +++ b/recording.html @@ -20,11 +20,11 @@ ],[ 0.325064, "o", - "\u001B]7;file://T001c00ae8/Users/A11873341/git/eumel8/tf-kubeadm-otc\u0007" + "\u001B]7;file://wsl-ubuntu/Users/eumel/git/eumel8/tf-kubeadm-otc\u0007" ],[ 0.325110, "o", - "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[JA11873341@T001c00ae8 tf-kubeadm-otc % " + "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[Jeumel@wsl-ubuntu tf-kubeadm-otc % " ],[ 0.325125, "o", @@ -52,11 +52,11 @@ ],[ 2.660730, "o", - "\u001B]7;file://T001c00ae8/Users/A11873341/git/eumel8/tf-kubeadm-otc\u0007" + "\u001B]7;file://wsl-ubuntu/Users/eumel/git/eumel8/tf-kubeadm-otc\u0007" ],[ 2.660823, "o", - "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[JA11873341@T001c00ae8 tf-kubeadm-otc % " + "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[Jeumel@wsl-ubuntu tf-kubeadm-otc % " ],[ 2.660858, "o", @@ -212,11 +212,11 @@ ],[ 12.961110, "o", - "\u001B]7;file://T001c00ae8/Users/A11873341/git/eumel8/tf-kubeadm-otc\u0007" + "\u001B]7;file://wsl-ubuntu/Users/eumel/git/eumel8/tf-kubeadm-otc\u0007" ],[ 12.961175, "o", - "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[JA11873341@T001c00ae8 tf-kubeadm-otc % " + "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[Jeumel@wsl-ubuntu tf-kubeadm-otc % " ],[ 12.961203, "o", @@ -432,11 +432,11 @@ ],[ 21.992529, "o", - "\u001B]7;file://T001c00ae8/Users/A11873341/git/eumel8/tf-kubeadm-otc\u0007" + "\u001B]7;file://wsl-ubuntu/Users/eumel/git/eumel8/tf-kubeadm-otc\u0007" ],[ 21.992695, "o", - "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[JA11873341@T001c00ae8 tf-kubeadm-otc % \u001B[K" + "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[Jeumel@wsl-ubuntu tf-kubeadm-otc % \u001B[K" ],[ 21.992742, "o", @@ -524,11 +524,11 @@ ],[ 26.266382, "o", - "\u001B]7;file://T001c00ae8/Users/A11873341/git/eumel8/tf-kubeadm-otc\u0007" + "\u001B]7;file://wsl-ubuntu/Users/eumel/git/eumel8/tf-kubeadm-otc\u0007" ],[ 26.266471, "o", - "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[JA11873341@T001c00ae8 tf-kubeadm-otc % \u001B[K\u001B[?2004h" + "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[Jeumel@wsl-ubuntu tf-kubeadm-otc % \u001B[K\u001B[?2004h" ],[ 26.811588, "o", @@ -612,11 +612,11 @@ ],[ 47.782595, "o", - "\u001B]7;file://T001c00ae8/Users/A11873341/git/eumel8/tf-kubeadm-otc\u0007" + "\u001B]7;file://wsl-ubuntu/Users/eumel/git/eumel8/tf-kubeadm-otc\u0007" ],[ 47.782677, "o", - "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[JA11873341@T001c00ae8 tf-kubeadm-otc % " + "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[Jeumel@wsl-ubuntu tf-kubeadm-otc % " ],[ 47.782713, "o", @@ -996,11 +996,11 @@ ],[ 60.682447, "o", - "\u001B]7;file://T001c00ae8/Users/A11873341/git/eumel8/tf-kubeadm-otc\u0007" + "\u001B]7;file://wsl-ubuntu/Users/eumel/git/eumel8/tf-kubeadm-otc\u0007" ],[ 60.682632, "o", - "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[JA11873341@T001c00ae8 tf-kubeadm-otc % \u001B[K\u001B[?2004h" + "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[Jeumel@wsl-ubuntu tf-kubeadm-otc % \u001B[K\u001B[?2004h" ],[ 61.135360, "o", @@ -1084,11 +1084,11 @@ ],[ 64.651066, "o", - "\u001B]7;file://T001c00ae8/Users/A11873341/git/eumel8/tf-kubeadm-otc\u0007" + "\u001B]7;file://wsl-ubuntu/Users/eumel/git/eumel8/tf-kubeadm-otc\u0007" ],[ 64.651161, "o", - "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[JA11873341@T001c00ae8 tf-kubeadm-otc % \u001B[K" + "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[Jeumel@wsl-ubuntu tf-kubeadm-otc % \u001B[K" ],[ 64.651183, "o", @@ -1176,11 +1176,11 @@ ],[ 83.699443, "o", - "\u001B]7;file://T001c00ae8/Users/A11873341/git/eumel8/tf-kubeadm-otc\u0007" + "\u001B]7;file://wsl-ubuntu/Users/eumel/git/eumel8/tf-kubeadm-otc\u0007" ],[ 83.699522, "o", - "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[JA11873341@T001c00ae8 tf-kubeadm-otc % " + "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[Jeumel@wsl-ubuntu tf-kubeadm-otc % " ],[ 83.699544, "o", @@ -1244,11 +1244,11 @@ ],[ 97.053340, "o", - "\u001B]7;file://T001c00ae8/Users/A11873341/git/eumel8/tf-kubeadm-otc\u0007" + "\u001B]7;file://wsl-ubuntu/Users/eumel/git/eumel8/tf-kubeadm-otc\u0007" ],[ 97.053492, "o", - "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[JA11873341@T001c00ae8 tf-kubeadm-otc % " + "\u000D\u001B[0m\u001B[27m\u001B[24m\u001B[Jeumel@wsl-ubuntu tf-kubeadm-otc % " ],[ 97.053522, "o", From 6bec639276f720a1a353769aca3e11933153bec5 Mon Sep 17 00:00:00 2001 From: Frank Kloeker Date: Fri, 14 Feb 2025 21:44:02 +0100 Subject: [PATCH 6/9] add demo file --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index fb6b14f..4f92d70 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ Are you tired to think about a commit message at the end of making changes on your code? Have you often `Update README.md` or `test` as message in your git log? Let create AI for you a meanful message based on last `git diff`. Here is a Git Commit Hook with AI Support +[demo](https://eumel8.github.io/ai-commit/recording.html) + # preparation * A running [Ollama](https://ollama.com/) instance running with API access, probably on your computer on `127.0.0.1:11434` From 750529c09bba8aa09acc968f713bf199ceb33acd Mon Sep 17 00:00:00 2001 From: Frank Kloeker Date: Sat, 15 Feb 2025 00:02:21 +0100 Subject: [PATCH 7/9] add icon --- ai-commit.png | Bin 0 -> 2926 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ai-commit.png diff --git a/ai-commit.png b/ai-commit.png new file mode 100644 index 0000000000000000000000000000000000000000..9bc277014c0e72a65c80ef17275da4e1ccb2959c GIT binary patch literal 2926 zcmV-!3z77RP)^OE3%%n~T2?>O5w-j2+vYoQq-5E-!rL@r5 z9z#1RJu=gUS*9>7!`*E|p(OpEy@K){B8 zQuf#Rk(td2BGeUr4>vRL)&m&ftCuXFF2tFv5rlQ?DHbeL6)}!StiU#Q%F_PAW0A; zhKMB5L*2DaB-F|!ePbQg1TiL|tO63*LJjzLuR5On3F>HH$`@mQKgFDW*_Mq{2ze*& zj|aNAqsK#SZK&66q7k73;;tQG!sZ-=Ie+r})JEw&-eV{Vgycc+*L7y^`J+D~U;VAT z76r4{j0^8WnddBHwf-H==k(9-KPQ=}qt>GdB>{U0u| z&N|&tQ4a3v{puqR8l_C+=g+g(W8u+#9uty6GjKBR`|-CqX&Verz%Nax)iNnm_|;|Y z>1SfGZG#~ER$AIIo?2UW0TPFLYA(Oobzt{}mOZrLhxCI_X{TSevFy0pAu+y=aL4dq z*I$-4vy|IvHnZNKucgb0l-Hj>nY@0L?C96;IC}SiF}xQ2_~fsTeDR)TWKP_O((_l! zio%9Ejbo3fr(O&BEyW#UdCF(Ia2i@dBLI;|$RB4p6%tDV9j_Sv?!my$J7h(PFGMWf z`u;l)b@qne{KZpTI@80q@HoC5C5m^Z?iZv6> ztxwiPUbODQZNnU2@rLTD#CnRiJm){q#z%yWWdcBm<)W5}bE|U}E_HOMJs1dfPsb;5t>-O#NS?*vVua8Bw-)IdeLA5Vpjj=V~67v^Frk6vWV0l zJ`FxP1fKgLRmk`ial;<~`HJ1GU0;e6Z$-Q#IiC=s0h!8)Ny!r<5>E}ynNRQ#l z24Qt(lDV#(YH8|2yrW+n?Ii2!$V+GPBy!w)NY9qxOD|Xm@zD6b1etn&feG?yS9U8g z&&MJ&*|Gtt-~evuBMsf$(k`pA&F-qN%I!9koc-|HVwxCy4C}WL>GLTcbo&z#de`*!Z&_doi|zA@wNNf23b_x0pw7GSApjP61;tmbX^ z&F#M5pfr6op(U2qZcJ}iIZQdBlqECQwBhgRc8{`fnu8V(U;H{Z_m;Kc;?BF^t+|h6 znWcB)e)TuQ~!t1rUdAq>@Zw}_mf zT)^d`A*%GtFQ?VauM4<6G3$N&+t?F2l`KvZK_(faWC;pRr13=zIl}<@2k!>bMgQ;t zVxldZdsg1M*mU#|4h3ueDD9 zZ;OXnj4XORd4sO=7FJnUiss4K$}IZ-Vt^n?v1CIG<8G*~EDVetnSB1deRYYit?lRz zkM;Ciot%uCSxY9)oH$JA zI+0c&47rST4HyOiadQ6RJHPrbB&8&^>C3;5VrT!_TqM0+%;&`3{{F_%iS9!5JMTXA zfqvp{X}RjE)f8U2dA*t}oQrQ|uy)-bCbvr@mr0hLGf9vtaaa|Qp_B=;9a5w!3u5XP zg4VT&h4vo=i8NP8%Y;yob)SQzq0QEL=OD^Y#C~N()hm2+OY~O$>ZM_K?mv#?9y+W3 z=JjO2?fyo<`UgcH3pab!t@LJY{U#)^CSgScSl4t-Q+XCifjaN_7wRwm_Ip*eY{-hL zV*^8iGA*7v8?D>B5#ApuS}Cb?a&$V>%#e1sh{-0e*WvQG9JasT`4yhBY!q)a4>b4~ z0PHmgW8Kh1LSq3*+I@|!yY|Z_w$|-vxN|g_Q-Gn%lEPI$HZN%D^-tdXeD&T(8-~6c zbY4~cA9RJjGWF5a(}|w`zCdJSEwXsa$i9fo*3}dpdvj(Z9wl8K1OdRB1XW2#ZeG$W zxs<{Hlf~+B*Cy5?0IFrhn7TX{o%$D;^FBpYVp%*e8Jz+y_v^q z?>HVlZeE%u#A4?_``PO=5DGxC5tw2OO;+Tp2`dg#;c}Vc%GC?+y|Weh09h?Imc&9% zWLSH5Q?T9X+*({W*{4QSD^anU~-0Yyl^GzX=;}WTiyGQxjF|SqIE@v4w7~6dx zz_0>E5d@m?H#P(Z4W<;P~ioEt7zpyDRIM4WF1SO{bBc!@A|40VePg;Sloez0$Y>k6XAi* z=AEtc@BUvkv$dR@B^j5t9fLl*EnDURWC3JISG`_ZstJV=Tcd~-3`tGZG)2+mil$1I z{=+(9F><19;6ab0-O0G11*?XdOvYt~Km4UZkCUGK%`c;8{)oEv88`ljA%n3BnfkD_ zxd0);fF`X$U5pbzH`zjfFzJe@%Vk65pt*(||4&-UV4;Z3btaufjI*RUoK6p{>7?7e zdqy3&n4kRF6UD?jwfkO>xvhQnO074fD78@@w`;#BOVfb52|8^2bF5==kCTNS@ zg{lVf=a!%YnoJgvbP6(oRT%&sm?`8QfcAPoF@QjTKma1L_Yk27xRM1z9?M0oQUdu6 zF@8Y=01!cR Date: Sat, 15 Feb 2025 00:05:47 +0100 Subject: [PATCH 8/9] add icon --- ai-commit-64.png | Bin 0 -> 10362 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ai-commit-64.png diff --git a/ai-commit-64.png b/ai-commit-64.png new file mode 100644 index 0000000000000000000000000000000000000000..aefc62416c42b1a75a5db000fb413e30dde298cc GIT binary patch literal 10362 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 Y9|JOMTR$;!W&i*H07*qoM6N<$g4T3E3;+NC literal 0 HcmV?d00001 From cc28fcd39309df0cae9a8d54bd26c431c57c7a54 Mon Sep 17 00:00:00 2001 From: Frank Kloeker Date: Sat, 15 Feb 2025 19:30:01 +0100 Subject: [PATCH 9/9] Update README.md --- README.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4f92d70..0cc4814 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Are you tired to think about a commit message at the end of making changes on your code? Have you often `Update README.md` or `test` as message in your git log? Let create AI for you a meanful message based on last `git diff`. Here is a Git Commit Hook with AI Support -[demo](https://eumel8.github.io/ai-commit/recording.html) +Look at the [demo](https://eumel8.github.io/ai-commit/recording.html) how to work on a Terraform manifest for OpenTelekomCloud # preparation @@ -18,9 +18,25 @@ Have you often `Update README.md` or `test` as message in your git log? Let crea * required tools on your computer: curl, jq, sed * copy `commit-msg` to `.git/hooks/commit-msg` in your Git repo and make it executable (`chmod +x`) * make changes and review AI's work. If you are unhappy, just edit the message with `git commit --amend` bevore push - + + +# customization + +ai-commit works out of the bos with a local Ollama instance. Nevertheless you can customize such things in the `commit-msg` file: + +* OLLAMA_API: API endpoint of OLLAMA instance +* MODEL: Name of the usesd LLM (available on the OLLAMA host, can be any LLM such llamam, mistral, deepseek-r1) +* PROMPT: exact task explained to the AI +* COMMIT_MSG: Lots of magic to modify the output and make a conform Git commit message + # super lazy mode ``` alias ac='git add . && git commit -m ""' ``` + +# Credits + +Frank Kloeker f.kloeker@telekom.de + +Life is for sharing. If you have an issue with the code or want to improve it, feel free to open an issue or an pull request.