LLM-Launchpad
Spin up LLM endpoints on Modal for local and personal use
- Deploy any open-source models from the Hugging Face model hub.
- OpenAI-compatible endpoints via llama.cpp (preferred) and vLLM backends.
- Direct integration with OpenCode.
Prerequisites
- uv for Python, environment, and CLI tool management (install with
curl -LsSf https://astral.sh/uv/install.sh | sh) - Modal account
- Hugging Face account
- Optional: OpenCode (install with
curl -fsSL https://opencode.ai/install | bash)
Quickstart
Get up and running in four steps:
-
Install the CLI so
llm-launchpadis available in your shell:uv tool install llm-launchpad llm-launchpad --help
-
Authenticate Modal:
modal setup -
Authenticate Hugging Face:
huggingface-cli login -
Launch the TUI:
llm-launchpad
Why a TUI?
Setting up LLM endpoints usually means juggling model names, container images, GPU choices, warmup checks, logs, and endpoint details across several commands. The TUI keeps that flow in one place.
From the TUI you can:
- Launch any open-source model on the Hugging Face model hub without memorizing Modal or backend-specific commands
- Manage multiple deployed instances and inspect their status
- Integrate the final OpenAI-compatible base URL and model ID into your workflows like OpenCode after deployment.
Headless CLI examples
The TUI is the recommended path for interactive use, but the same workflows are available from the command line for scripts and repeatable operations.
Deploy a vLLM endpoint and wait until it is ready:
llm-launchpad deploy \
--backend vllm \
--model-name Qwen/Qwen3-4B \
--instance-name qwen3 \
--do-warmup
Switch a llama.cpp instance to a Hugging Face GGUF model, redeploy it, and warm it up:
llm-launchpad switch \
--backend llamacpp \
--repo-id unsloth/Qwen3-4B-GGUF \
--quant '*Q4_K_M.gguf' \
--instance-name qwen3
Inspect and manage deployed apps:
llm-launchpad list
llm-launchpad status --backend llamacpp --instance-name qwen3
llm-launchpad logs --backend llamacpp --instance-name qwen3
llm-launchpad stop --backend llamacpp --instance-name qwen3 --yes
Sync existing Launchpad deployments into OpenCode without changing files first:
llm-launchpad opencode sync --dry-run
Storage and cleanup
Downloaded model weights are cached in the Modal huggingface-cache volume so repeated deploys can start faster. Use the TUI Storage screen to refresh the cache inventory, predownload a model, or delete selected cached weights when they are no longer needed.
Stopping an app and deleting cached weights are separate operations: llm-launchpad stop stops a deployed Modal app, while the Storage screen manages cached model files. If storage size looks stale after a deployment or delete, refresh the Storage screen to reload the Modal volume snapshot.
Costs and scaledown
GPU costs are controlled by the Modal resources selected for each deployment and by how long containers stay warm. LLM-Launchpad defaults the scaledown window to 1800 seconds, and you can change it in the Settings screen or with SCALEDOWN_WINDOW before deploying.
For predictable costs:
- Stop apps you no longer need with
llm-launchpad stop. - Prefer smaller GPU layouts for quick tests before moving to larger models.
- Use the warmup command only when you actually need the endpoint ready immediately.
- Treat displayed cost estimates as guidance and confirm current pricing in Modal for production workloads.
OpenCode integration
LLM-Launchpad automatically detects local installation of OpenCode and will set up your OpenCode config with the final OpenAI-compatible base URL and model ID after deployment.
Troubleshooting
Modal CLI not found: reinstall or upgrade the package, then confirmmodal --helpworks in the same shell.Modal authentication missing: runmodal setup.- Hugging Face download errors: run
huggingface-cli loginand verify the model license or gated-repo access in your Hugging Face account. - Warmup stays queued: Modal may still be scheduling the requested GPU. Try a smaller GPU configuration or wait for capacity.
- Endpoint status fails after deploy: inspect
llm-launchpad logs --backend <backend> --instance-name <name>for backend startup errors. - SSH copy or selection feels wrong in the TUI: start with
llm-launchpad tui --no-mouseto let the terminal handle native text selection.
Development setup
If you are working from a clone and want the command available directly while editing the source:
git clone https://github.com/ThomasRochefortB/llm-launchpad.git
cd llm-launchpad
uv tool install --editable .
llm-launchpad --help
If you need the full project environment for tests or local development workflows:
uv sync
uv run pytest
Metadata
Release files for llm-launchpad 1.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| llm_launchpad-1.1.1.tar.gz | 200.2 kB | Without provenance | Details for llm_launchpad-1.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| llm_launchpad-1.1.1-py3-none-any.whl | Python 3 | none | any | Details for llm_launchpad-1.1.1-py3-none-any.whl |
Total release size: 352.7 kB
Release files / llm_launchpad-1.1.1.tar.gz
| Download URL | llm_launchpad-1.1.1.tar.gz |
|---|---|
| Size | 200.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1f7a2fe38af956144257482975716141a28f67fbb31535317a5b0948f0fed641
|
|
BLAKE2b-256 checksum How to use checksums |
30a803ee98eb04d772aa877b225623644a53f83b6d30c79c5419f088465de88a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.7.4
|
Release files / llm_launchpad-1.1.1-py3-none-any.whl
| Download URL | llm_launchpad-1.1.1-py3-none-any.whl |
|---|---|
| Size | 152.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
25b8cbdceb8332284c4b2cfdc4cfb43cc0e5588bde80fae9b7c9f05d4cc3440b
|
|
BLAKE2b-256 checksum How to use checksums |
4f210aee9176e95961264314355279d08f8014c9e58ec73668e54d68f369c641
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.7.4
|
Security for llm-launchpad 1.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.