Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
- Multi-channel packaging via GoReleaser: Homebrew Cask (`openhat-security/homebrew-tap`), Scoop (`openhat-security/scoop-bucket`), `.deb`/`.rpm` (nfpm), apt + dnf repos on GitHub Pages (`openhat-security/packages`), AUR `runhug-bin` PKGBUILD, winget manifest generator, npm under `packaging/npm`.
- Deploy-time **sampling best-practice** step (`--sampling recommended|none`, `--set key=value`): family table + quant-aware nudge (GGUF/AWQ/GPTQ) + Hub `generation_config.json`. Applied server-side on GCP llama-server; request-time via `runhug run` / Claude bridge on RunPod.
- README / hero: deploy **any** model, including heretic/abliterated builds (`runhug heretic make`).
- `runhug gpu list|set|clear|show` — vendored NVIDIA GPU index (Jr23xd23/gpu-database), `--filter all|local|runpod|gcp`, `--sort best|cheapest|value|vram|name`; preference wired into deploy / recommend / GCP. `gpus` aliases `gpu list`.
- `runhug local run` — start local runtime if needed, then chat. Host GPU probe via `nvidia-smi` / Apple Silicon for `--filter local`.
- `runhug gpu update` — refresh shipped NVIDIA + AMD + GCP catalogs into `~/.config/runhug/gpudb/` (HF index, curated GCP list, optional `gcloud` merge / GitHub Release assets `gpudb-*.json`).

### Changed
- `assets/hero.svg`: Claude Code, OpenCode, RunPod, and GCP marks; any-model / heretic copy.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ runhug start opencode # Use your model with OpenCode.
**QUEUE** OpenAI base: `https://api.runpod.ai/v2/{id}/openai/v1`
**Load balancer** OpenAI base: `https://{id}.api.runpod.ai/v1`

Other useful commands: `inspect`, `update` / `update --packs`, `gpus`, `url`, `status`, `local add` / `local setup`, `config get|set`. Env: `RUNPOD_API_KEY`, `HF_TOKEN`, `RUNHUG_CONFIG`, `NO_COLOR`.
Other useful commands: `inspect`, `update` / `update --packs`, `gpu list|set|clear|update`, `url`, `status`, `local add|start|stop|run|setup`, `config get|set`. Env: `RUNPOD_API_KEY`, `HF_TOKEN`, `RUNHUG_CONFIG`, `NO_COLOR`.

## Install

Expand Down
6 changes: 5 additions & 1 deletion internal/cli/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,11 @@ func cmdDeploy(args []string) error {
if err != nil {
return err
}
choice, err := runpod.Pick(gpus, est.RequiredGB, *gpu, *gpuCount)
preferGPU := applySavedRunpodGPU(*gpu)
if preferGPU != "" && strings.TrimSpace(*gpu) == "" {
fmt.Fprintf(os.Stderr, "%s using saved GPU preference %s\n", dim("note:"), preferGPU)
}
choice, err := runpod.Pick(gpus, est.RequiredGB, preferGPU, *gpuCount)
if err != nil {
return err
}
Expand Down
10 changes: 7 additions & 3 deletions internal/cli/gcp.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ func cmdGCPDeploy(args []string) error {
project := fs.String("project", "", "GCP project id (no hardcoded default)")
zone := fs.String("zone", "", "GCE zone")
region := fs.String("region", "", "GCE region")
gpu := fs.String("gpu", "", "L4 (default) or T4")
gpu := fs.String("gpu", "", "L4 (default) or T4; default: gpu preference if gcp")
idle := fs.Int("idle-timeout", 600, "seconds before stop-on-idle")
keepUpFlag := fs.Bool("keep-up", false, "disable stop-on-idle (bills until gcp stop)")
name := fs.String("name", "", "instance name")
Expand Down Expand Up @@ -212,9 +212,13 @@ func cmdGCPDeploy(args []string) error {
}

keepUp := *keepUpFlag
preferGPU := applySavedGCPGPU(*gpu)
if preferGPU != "" && strings.TrimSpace(*gpu) == "" {
fmt.Fprintf(os.Stderr, "%s using saved GPU preference %s\n", dim("note:"), preferGPU)
}
if !*dry && !*yes && promptOK() {
rate := gcp.SpotHourlyL4
if strings.EqualFold(strings.TrimSpace(*gpu), "T4") {
if strings.EqualFold(strings.TrimSpace(preferGPU), "T4") {
rate = gcp.SpotHourlyT4
}
warn := fmt.Sprintf("Keep Spot VM up with NO stop-on-idle? Bills ~$%.2f/hr until you run runhug gcp stop", rate)
Expand Down Expand Up @@ -249,7 +253,7 @@ func cmdGCPDeploy(args []string) error {
Name: *name,
ModelID: modelID,
GGUFFile: ggufFile,
GPU: *gpu,
GPU: preferGPU,
IdleSeconds: *idle,
KeepUp: keepUp,
DiskGB: *disk,
Expand Down
Loading
Loading