Rust-native universal LLM model manager. Reach connects to three model platforms, handles acquiring and running models from each, and provides a unified interface so any downstream system sees one consistent API regardless of where the model lives or how it runs. Self-hosted. No cloud dependency. No Python wrapper.
The caller never needs to know which platform a model lives on — ask for a model by name or ID and Reach figures out the rest. Watch requests route to Ollama, HuggingFace, and GitHub, land in the registry, and stale models drain out through the cleanup scheduler.
Reach treats its three sources differently because they are fundamentally different things — a live runtime, a weight repository, and an architecture source.
Ollama is already running models locally. Reach calls Ollama's existing API to submit prompts and get responses. No downloading, no loading — the model is already live. If Ollama is not running, Reach reports it clearly rather than failing silently.
Reach downloads GGUF or SafeTensors files from HuggingFace repos, stores them locally, then loads and runs them. Authenticates via HF token, validates file integrity via hash check after download, reports progress.
GitHub hosts model architecture code and configs — not always runnable weights. Reach pulls repos, reads model configs, and where weights are referenced, retrieves them. The most complex source: it understands repo structure before running anything.
Caller → Reach Unified API → Platform Router → the three platforms → Model Registry → Cleanup Scheduler. Every stage is a real module in the Rust core.
Inspects the incoming request, determines which platform the model lives on, and routes accordingly. The caller just asks for a model by name or ID — dolphin-mixtral:8x7b or TheBloke/Mixtral-8x7B…GGUF — Reach figures out the rest.
Persists to ~/.reach/registry.json. Tracks every model: name, platform source, local path, size, format (GGUF / SafeTensors), last-used timestamp, and usage count. Source of truth for cleanup and for "what do I have available right now."
Runs on a configurable interval. Stale = not accessed within threshold (default 30 days). Reports stale models and optionally deletes them — always dry-runs first. Deletion requires explicit confirmation or --force.
GGUF loads via mmap — the model streams from disk, never fully in RAM. SafeTensors supported. Coordinates with Dash when present for automatic acceleration.
platforms::ollama · platforms::huggingface · platforms::github · manager::registry · manager::loader · cleanup::scanner · server — one module per responsibility, async Rust throughout.
reach serve --port 8766 exposes the full capability over local REST — OpenAI-compatible chat plus Reach-specific model-management endpoints. Non-Rust systems call it like any OpenAI endpoint.
Library mode for Rust systems, binary mode for the terminal, server mode for everything else — OpenAI-compatible out of the box.
POST /v1/chat/completions — chat with any modelGET /v1/models — list available modelsGET /reach/registry — full registry dumpPOST /reach/pull — pull from any platformDELETE /reach/model/:id — remove a modelPOST /reach/cleanup — trigger cleanup scanGET /reach/platforms — Ollama up? HF? GitHub?let reach = Reach::new().await?;// Reach figures out platform automaticallyreach.chat(ChatRequest{ model: "dolphin-mixtral:8x7b", messages, ..Default::default()}).await?;// or explicit: platform: Some(Platform::HuggingFace) // mmap loading · hash validation · dash accelIf Dash is present and running, Reach routes model execution through Dash automatically — library mode via crate, or API mode via dashd on localhost:8765. If neither, Reach runs without acceleration and logs a warning. Reach works either way.
Not an inference engine — that is Dash
Not an accelerator — that is Dash
Not a cloud service — fully self-hosted
Not a Python wrapper — Rust-native