Skip to content

Repository files navigation

omm — Open source Model Manager

omm is an apt/brew-style package manager for local LLMs (GGUF). It installs models into a central hub, links them into LM Studio and Ollama automatically, and can recommend a model that fits your hardware.

Install

curl -fsSL https://raw.githubusercontent.com/omm-hippo/omm/main/install.sh | sh

This bootstraps python3, git, and pipx if missing (Debian/Ubuntu via apt, or Homebrew on macOS), then installs omm as an isolated CLI via pipx. Open a new shell afterward so your PATH picks up omm.

Requirements: Python 3.10+. GPU detection extras (omm[nvidia]) are installed automatically on non-macOS platforms.

Usage

omm scan             # Print a hardware, runner, and model summary (RAM, VRAM, OS)
omm recommend        # Suggest a model that fits this machine, then offer to install it
omm tune <name>      # Recommend context, GPU offload, threads, and batch size
omm benchmark <name>  # Local quality + speed smoke evidence
omm search <query> [--json]  # Search curated models, cached candidates, and HuggingFace
omm install <name> [--skip-unfit] [--upload/--no-upload]  # Download a model and link it into LM Studio / Ollama
omm import [--yes]   # Adopt GGUF files already sitting in Ollama/LM Studio into the hub
omm uninstall <name> # Uninstall a model and clean up its symlinks/manifests
omm uninstall all [--yes]  # Uninstall every model installed via omm
omm list [--json]    # Show models installed via omm and their linked status
omm info <name> [--json]  # Show a model's name, version, size, and linked-program run commands
omm upgrade <name>   # Refresh a model against its source if it has changed since install
omm upgrade [--yes]  # Check every installed model for updates
omm link             # Re-verify and repair every installed model's LM Studio/Ollama links
omm link <directory> # Reuse central GGUF files in another app without copying them
omm autoremove       # Clean up broken symlinks and orphaned partial downloads
omm contribute [--yes]  # Repeatedly install/benchmark/upload hardware-fit models to grow the dataset
omm update           # Git-pull the latest source into ~/.omm/src, then refresh rules/model data
omm setting          # Interactive menu for UI mode, telemetry, upload policy, and catalog trust
omm setting ui compact          # Use short everyday tables (`detailed` for diagnostics)
omm setting telemetry --endpoint <url>  # Configure where benchmark telemetry is sent
omm setting upload --enable|--disable|--ask  # Configure the benchmark-upload send policy
omm setting calibrate <name>    # Locally correct predicted speed with an installed Ollama model
omm setting catalog-status      # Show signed recommendation data and rollback snapshots
omm help [command]   # Show help, same as --help

install, uninstall, info, and upgrade accept either a model name/reference or the numeric index shown by the last omm search or omm list run in that terminal. search/install mark models predicted not to run on this machine's hardware in red.

Scripting

All errors, warnings, and confirmation prompts print to stderr; --json output on search/list/info/benchmark is the only thing written to stdout, so it's safe to pipe (e.g. omm list --json | jq .). Any command that would otherwise prompt for confirmation fails fast with a non-zero exit code when there's no terminal attached instead of hanging — pass --yes/-y (uninstall all, upgrade, import, contribute) or the relevant flag (install --skip-unfit, install --upload/--no-upload) to run it unattended.

Localfit does not assume all installed memory belongs to the model. A live scan subtracts memory currently used by other applications, keeps at least 2 GB (or 10% of RAM) for the OS and newly opened apps, and applies total-memory caps. Recommendation fit and omm tune use this safe budget, so rerunning a command adapts after memory-heavy applications are opened or closed.

omm benchmark runs a versioned eight-item bilingual arithmetic smoke pack against models already installed in Ollama. It stores parsed answers, correctness, pinned model metadata, and fixed-length timings under ~/.omm/evaluations/; it stores no generated text. Opt-in v6 telemetry sends CPU model, architecture, and core counts so speed predictions can distinguish otherwise identical Linux x86_64 machines. Results are uploaded only after explicit opt-in. The pack is intentionally small and is not a leaderboard.

Self-hosted benchmark data

Benchmark uploads are disabled and have no server endpoint by default. To run the bundled FastAPI + SQLite collector locally:

pip install -e ".[server]"
export LOCALFIT_DB_PATH="$PWD/localfit.db"
export LOCALFIT_ADMIN_TOKEN="replace-with-a-long-random-token"
localfit-server

Explicitly configure the endpoint and opt in before uploading:

omm setting telemetry --endpoint http://127.0.0.1:8000/v1/benchmarks --enable

Training can consume the authenticated export directly:

export LOCALFIT_ADMIN_TOKEN="replace-with-a-long-random-token"
python scripts/train_model.py \
  --telemetry-url http://127.0.0.1:8000/v1/benchmarks/export

The old Firebase Realtime Database JSON endpoint remains supported only when explicitly configured. Its official *.firebaseio.com or *.firebasedatabase.app .json URL can be read without an admin token; self-hosted raw export requires LOCALFIT_ADMIN_TOKEN. Exact duplicate events are ignored.

Automated retraining is fail-closed. Configure LOCALFIT_TELEMETRY_EXPORT_URL; configure LOCALFIT_ADMIN_TOKEN as well for a self-hosted export (it is optional for an official Firebase JSON URL). The scheduled job otherwise stops without changing the published artifact. It requires at least 100 distinct valid v6 configurations with explicit runtime and CPU metadata metadata (legacy rows do not satisfy this minimum), rejects datasets with more than 25% invalid rows, and reserves a deterministic 20% holdout. A 64-tree v4 candidate replaces the incumbent only when both holdout RMSLE and P90 absolute percentage error stay within the configured regression limits. Selection is evaluated on whole hardware/request contexts, so sibling model variants never leak across training and holdout sets. Publishing also requires at least three multi-model selection groups plus complete top-1, regret, balanced-fit, and false-positive evidence. Missing evidence fails the gate. The artifact records the complete candidate/baseline evaluation report.

The same gate can validate an exported local dataset without contacting the collector:

python scripts/train_model.py --offline \
  --telemetry-file benchmarks.jsonl \
  --quality-gate --minimum-real-configurations 100 \
  --baseline published/recommend-model.json \
  --output candidate.json --quality-report quality-report.json

Synthetic bootstrap training remains available for local development, but the scheduled publishing workflow never uses it as a substitute for missing real benchmark data.

Signed recommendation data

omm setting catalog-trust --manifest-url <https-url> --public-key <base64-key> enables Ed25519 verification for future recommendation downloads. Existing artifacts are snapshotted before replacement and omm setting catalog-rollback restores the most recent different snapshot.

Development

pip install -e ".[dev]"
pytest

Contributing

Contributions are welcome. See CONTRIBUTING.md for setup, testing, and PR conventions, and CODE_OF_CONDUCT.md for community expectations. Report security issues per SECURITY.md rather than as a public issue.

License

MIT — see LICENSE. Third-party dependency licenses are listed in THIRD_PARTY_NOTICES.md.

About

go to https://github.com/omm-hippo/omm

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages