From 735229b1508d6dad663e9aa45522a2a06e7963e5 Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Fri, 17 Jul 2026 23:14:08 -0400 Subject: [PATCH] fix: provider --- README.md | 7 ++++--- crush-provider/crush.json | 18 ++++++++++++++++++ gh-commit.tar.gz | Bin 11722 -> 12435 bytes smartcommit.py | 11 ++++++++--- 4 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 crush-provider/crush.json diff --git a/README.md b/README.md index 6698bd1..fda600e 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,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`. Override the model with `GH_COMMIT_CRUSH_MODEL`. ## Usage @@ -77,7 +78,7 @@ The former Mods roles now live directly in `smartcommit.py`, so gh-commit no lon | `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 0ec1df67fe7bd7d2c55ce5649c08c31143840eba..0f12509465de3b39c3e6891879c04c6953e8841c 100644 GIT binary patch literal 12435 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

N8XMTvY9Sj72 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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.[/]")