From 0acee0a694ce45bada3f9fdc5cc5f792caeea4fd Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Tue, 18 Aug 2026 14:32:41 -0400 Subject: [PATCH] fix: restore Groq default model with bundled crush provider openrouter/qwen/qwen3.6-27b is not resolvable in Crush; the qwen model only exists on Groq. Re-apply the 735229b provider fix: default to groq/openai/gpt-oss-120b (verified live on Groq /openai/v1/models) via the bundled crush-provider config, applied through CRUSH_GLOBAL_CONFIG only when the default model is in use. --- README.md | 7 ++++--- crush-provider/crush.json | 18 ++++++++++++++++++ gh-commit.tar.gz | Bin 11853 -> 12304 bytes smartcommit.py | 13 +++++++++---- 4 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 crush-provider/crush.json diff --git a/README.md b/README.md index 53955e0..3e16333 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,10 @@ gh extension install prdlk/gh-commit ### Requirements - [uv](https://docs.astral.sh/uv) — Python package runner (handles dependencies automatically) -- [Crush](https://github.com/charmbracelet/crush) — configured with an authenticated model provider +- [Crush](https://github.com/charmbracelet/crush) — non-interactive AI runner +- `GROQ_API_KEY` — authenticates the default Groq model -By default, gh-commit uses `openrouter/qwen/qwen3.6-27b`. Configure OpenRouter in Crush or override the model with `GH_COMMIT_CRUSH_MODEL`. +By default, gh-commit uses Groq's `openai/gpt-oss-120b` via the bundled `crush-provider` config. Override the model with `GH_COMMIT_CRUSH_MODEL`. ## Usage @@ -52,7 +53,7 @@ Flags: `--auto` (skip confirmations), `--push` (auto-push). | `GH_COMMIT_PUSH=1` | Auto-push after commits | | `GH_COMMIT_NO_AUTO_REFRESH=1` | Don't auto-regenerate scopes when `.gitignore` changes | | `GH_COMMIT_CRUSH_CMD` | Override the Crush command (default `crush`) | -| `GH_COMMIT_CRUSH_MODEL` | Override the Crush model (default `openrouter/qwen/qwen3.6-27b`) | +| `GH_COMMIT_CRUSH_MODEL` | Override the Crush model (default `groq/openai/gpt-oss-120b`) | | `GH_COMMIT_CRUSH_TIMEOUT` | Per-prompt timeout in seconds (default `120`) | | `GH_COMMIT_DEBUG=1` | Show scope-response parse diagnostics | diff --git a/crush-provider/crush.json b/crush-provider/crush.json new file mode 100644 index 0000000..67a528a --- /dev/null +++ b/crush-provider/crush.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://charm.land/crush.json", + "providers": { + "groq": { + "type": "openai-compat", + "base_url": "https://api.groq.com/openai/v1", + "api_key": "$GROQ_API_KEY", + "models": [ + { + "id": "openai/gpt-oss-120b", + "name": "GPT-OSS 120B on Groq", + "context_window": 131072, + "default_max_tokens": 8192 + } + ] + } + } +} diff --git a/gh-commit.tar.gz b/gh-commit.tar.gz index 2ada48b0a4f2cbe25620fb6197ce5a87ad97b658..006530906af7fad9552035bf238a807213bf5444 100644 GIT binary patch literal 12304 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 literal 11853 zcmV-TF0#=diwFP!000001MFP=a@$6d_uqJm33OhASrU|F%dS$E&Qc^~ahD%Dl5*nG zsYnnQl88V6!GMxkj<@!&eSoWdn|qr)$#u^RfB{HJcA{)2eGCiWJ~gcweR9PS?;k#ktKrk&Gx2vNS2i7BRN8^a3(Ibea#C9wxvzv)=QS*Iw3J- zN$fdDqe{HM@z*ZSA#L_O(0RcDhx1i44T!E8tN`a(C9BZ&=J=QLWku_m@3Cc-xE_+8 ztrK|3@Ff>t71vP@W5THKYe2z+dGodAv*Uem>JbVwks@OF=5`sbiYxJ$Hebg9u%vv9 z8-mC<$M2|<;2Z2d4}Cwp#ico6;Ci?scC2Y*XtHPF4drVQn;L`(OjS$)Hz3M)RW`Au z?fYa#rNDqMh}Tw@6C-=Dm>}_NpG0BI`IVPx0{=6Mj0UIUZ<<4kbVlTSIC$G>TWz8@ zNARpy$v2(x+2CSKpvSP;AHO4mQ_}3eBY*Am+f`zHdp@*ABQh9jo!)u3W5K&lztz2H zclvM035@FxKyy2wzd&?6AjnXX>R2Nr*0YAKGk9#Cbh@4KyQ+5D8TXOq>0n5jaD{iodJ7L^bk^*4k(JiGfY}dmexx-x ze>d#BIUAF+LAPze%M%M`);#H2f)y;P)opfqRnl(unr|#VY5-J*8g>)2Bj21^_zL+o z;lI|nGw9i5qt_Q~V_&}z1OmbrTTDEC18fB91^)QFsf{-6ae>KKxlgkP@v7LNrA1H(qkKo`FB>5c)oWxX0tG z8+$i2AOH#=3}~0Fc+Hkq#xhAFc3iImk>z@30-ZWSgw-sz9qQAh?qI(P5;MsN88Wi6 zBhm^3poWnJ;(Lp87xN*3y`nr?Ms~6!QB3FFd&*1#(QZR9W-e$zV~!%`v5coNjY8%n zVZ6~0OOOQ63Pe$OA;TN-LkEIcd+l7ePl#(L_RN;yoY?Cmti?1X3sD-r-OyN@ny@Nw z5df7b0-s=k^Jwuet^_T7LUFi8L4s(+5|FBpD9$nrs3zYhFq6bv2?V1oWSVRuYVb~# zW56Pe*$dz)VE}_zySGO=0jM#=X>B^4vZc0I=DP!H*T1gk+YMcD>>e4?@7G>T z5pyw3tC7p~O}=@6#+YdX;IVy^E$i!>3i++O=hHP>;3cZ^IymH})`LgV`Pw>04YJU3s~4qwftChDJHMF!As$orwD@L3}U z0$3Htz=i9V;LGPUeRDQx4SIk{CavMc=xov(w5{$`Y|#boTe?AxOE%#;uAy?`ZpqmJ zPEH6Rd)f92rD1^bVu9I81LS8feU_TIrFQ9N6Er8-BiQF3((mL4azdB(jR!n_(0-`Z zYW#oDVVW_TLZ{O;D3S0BsWj&RJ&y%5$vV~jlyNm*ik&Ji0#7lhDz-IVRVAM)K*>3@ zqKTuhi?iVJ!Ku6{izhYq%)-fyXNwK{imbc^c4ow<3)|U9RbpSI%o*R%+t>qwC5GT( zAdy%i&(SixCC)mILFFXhDp6enY5;u?xdDQ4IWh2=z$5`<%$7>*DDpRDMr;!}$fXri zAXZ;TF4C0V*0*QWm#dV74JY(rzZ$UOm?h*TBxUb;0>;63uYHta^4xJ&$~+;P;nE!2 zGhZZdxs7FB6Abv653h2kTa^Tza1CPElGX|&i6q--zQR6Iks-x=qf$3Z>^WMOl#NKp zN>trh4LKv(^VkDQh4FmHc{nHygDpk(mk*ofUf@r%@%6MkYDxVFhn&G*HE%?o5FI!p zv>6)QcySn@&m=c?>~RsIuLOeHsc$bpYSUT`UEh=#?AnV8Yh;kYLNn?(H1jBf-z&mZ zSUGXD)3+&olq+*$FG|H!%Rb82)Od4e1j)*valn-rCxXGCAaHP+t0-ZlH0&H)m>AYf zCzx%QfCQxh{Q+k+8Cs{1yveccFnE@11yZTT7*ENrSXw46{AsJ#Mv?>7{|c|{NMB}1 zpHHSdc1$a~2?@u%o0M?qIidT4#U13wot_2B7}q@-*Mxj|bjR8Qgc3$ETW1QFgTwu8 zYHjP};*H!nbU$2bAVwB}3ZdG^@UQFHAUkk7Lis>{Mqsx**ho<213E*l)BpJJZTron z-5fV3XM>(~T>D$y^%K)-F zSoXknI5*yWC)?s@58-FpgfUq_1zf)$E=a8gr~|gB@$4y(#qMA$-W)Lg4nUgW(F|#{ z0Vn%mB%BzQqZCAnnFM(6B}BG$;4Be2=H401AX(a66#%NSl^rKi6Qj*k6F_Ty!!@N= z6Yg;O6~Q-@h5ijD2uoCV--Fc^fT-bu7P~VD+n%$mYTvIxb1=(@H$^Z$c=$o0$l|BL4bFMiMe{}rFTFY0R+*JoZ(2S`I|BT_OgZI9H! z`D72VNETU5nnr`@uN%+Jg99BJ3)a>km+%Tdy0E*~jRSMv+}Eq=YcxZ6`Mmg6G0WGD z!>sK}%tX_5J-3q@xwmEkc6<_ozi4(K;inPfD@&FT&A}%Mgn+N6#}d^_|BIH#D8}bv z0pS_TO9&G0uV&PBQ{FWI5|EG1F(XYg?|9A6AXrt&{A&@pS z4r*0|v?KsiIhf^eU#e{EsAp(tJ!5O3B*$b~c>_hSY2FIU{$vSG&i7{NBgXmkd&tsn z5b)(U2oHdQ99VbuW|MtI_<*!{c7Vv<@ok2Qx@^y0RRIrB-_1HwUNFgf@n_MBNF8XV zjpy(v8X$V1$mRP%B~8RM3CR60a<01z@`4G&6V!m+$; zGS5zr%mBAR(WA8~Wg}=(2f{vumo8vQ}Et#mzfM<1-tpNLJ!D?1;6CR$31vSVT!A!uq zZbX@f7a9vThlQCHjr|P}lqE$-`JpeknlP;aW+n_-Jc9U8lyZ_V^bra%>d$LfC9nao zxTcn+IxzpTSau{tARL{0GQDE5$oCRZ9VN;61R}g2lDQ|-(Nm%_wE?mqovm%VBN0O4 zkl?^hX&TQETZ8^-XV|-Ua@Y|E!Z6Z+Far^WkHxg~-htSmG_aJJ-aEY1w?v7jWcQBe zJxZgrx7KikM{)3Y#6y~<*f$m%0Py{G3|!OxocU~x|4T4WJk~J4d+ssn4*!l`8iH>U z^Cv7bi6>2i#27=f;jExLR;n)H{Z*AXc9g7R=r%+1X^?Te#shmq(1mvuQhTjL9TOsE zgf%JmT)Yr-i75~Z)P9m@#%Kce5UrDje5?{I<~0tgRkpShpwO{yz^B`>(urct*BEIgG`pVFcA|k9z@^*y?NRox;fyTP}lYe1p)-) zG@p*gCctKbk=@{vK?xO>uFge|=}nCn74V@}^BA~52B4;P8^+f)ggts`s%8GE7^q-6 ziNi1voYP2qiLU%g&H-9M9w@XjZ?+6?Ye@)u25F>T5D5<$I8?|1Y4BC|@iay7m*p*E z#TNNS$X8rB-dgv%yXVgZB76qlD4_(iwdcDNOdimP3@%6E`%oK- zZUPxWJHT|`=Fo%Z9KJkQz~Ucu_*Vs@8wuc)Yna;~1#sbS-Abk^X|uF7pVfFtPVPD^ z_KtRLiU5ruI*IS}J---K!#hB(9lMf(DDX7^+r;2vjSq8vVl_u)Q>Lc>SD?e6j9m&? z@IANX`Nx9F;d}GD&1HP9V%69>O^>)s*H5yjFZcAerjse7kb875S) zGyWzM8w3JOW53M67W&9_AVdLXO%wepHAMwWDMknc{s5(~7?$MGQZZJE=#&Sl;^14i0kSdRFJ7Y)HR(nHuH^&7cEF}%ZS)j20X)cQ zxDH%y8HjbMGIul&)rtyy=Xxt#`!07`A`PdC<1jvCGQQlu`Xc_w`^}M6#Uy%xk}glX z#qcV>l|~b?0~_KA#JUuY~u*Kq|{xH%|-F!PebNkgj z_9MA{j*tR~o$f4+oFZW~dFkH(ID&T~q&@Mo-AQ;Yg1shVELOlo%>a=>0Iu0U>yjyG zCGQ6@l{%1H8G37IHOCeiS^s%q^;;I{obtTP5dRKIq{LFW3eLE%>{SGXQv+rMYyTxvpyoheQ+p}Oj!O|J; zS#r$$=--{#2|+&rvgw^?GjClChgN?)$y$nI#eIQK9b0nmAnKpK0qK2&&l0^Dbf3^U zLQ=^5G@1V#k&4YWF zWt*Z8!&~e_i|`V+7|}hm05Avl0g40?Z|3fENcT=bM%Y^sxLwDdk=mkQM{L zn*ej^0o6osyGkL^MLLmU4e3rhlbhBWT=d7rmld&N(o3_f*Ix#meo;;_8T1Jx8`AMM zNNjp;)?e&vY;tGOAYZ52S|yj+8m{Dyh5Gnu$os1uO2~u%oLa2Sj5+yH9w9xd4Dwku!#4M%*;(e3i#j#;Ab#wgW{jO+d1Pq zb||;GtsN3eJKiZ)^eDne(SL}U=2rvJLWOv98aoANdzC5+d~488;Mt%cH6St$?OQAdaowtJAIBfWmtM6SJ_{2g(|QkwhWWPO;n|B zhH)UT_I$d(DCtDO@`WH$JAJ@IX1-4?0c9>Db(2}!!-gO$HsC_<(yLB?WI@&iFlbOp zpTq@UaaZ_lvwLBUi1Brmd|fFlLfI)r+45OGzNAnBce)*x858)+gsxbr2!6-P)4ZjK z@9$VPw.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 str: cmd = [*CRUSH_CMD, "run", "--quiet"] if CRUSH_MODEL: cmd += ["--model", CRUSH_MODEL] + env = os.environ.copy() + if CRUSH_MODEL == DEFAULT_CRUSH_MODEL: + env.setdefault("CRUSH_GLOBAL_CONFIG", str(CRUSH_CONFIG_DIR)) try: result = subprocess.run( - cmd, input=text, capture_output=True, text=True, + cmd, input=text, capture_output=True, text=True, env=env, cwd=str(cwd), timeout=CRUSH_TIMEOUT, ) except FileNotFoundError as e: @@ -672,7 +677,7 @@ def cmd_help(): console.print(" GH_COMMIT_PUSH=1 Auto-push after commits") console.print(" GH_COMMIT_NO_AUTO_REFRESH=1 Don't auto-regenerate scopes on .gitignore change") console.print(" GH_COMMIT_CRUSH_CMD=... Override the Crush command") - console.print(" GH_COMMIT_CRUSH_MODEL=... Override the Crush model (default: openrouter/qwen/qwen3.6-27b)") + console.print(f" GH_COMMIT_CRUSH_MODEL=... Override the Crush model (default: {DEFAULT_CRUSH_MODEL})") console.print(" GH_COMMIT_CRUSH_TIMEOUT=... Per-prompt timeout in seconds (default: 120)") console.print(" GH_COMMIT_DEBUG=1 Show parse diagnostics\n") console.print("[cyan]Scopes auto-refresh whenever .gitignore changes.[/]")