vasted
vasted is a CLI that launches on-demand Vast.ai GPU workers for llama.cpp GGUF inference and exposes a stable OpenAI-compatible /v1 endpoint.
Built by deeflect.com · Follow on X: x.com/deeflectcom
Demo
Why vasted
- Stable client endpoint while worker URLs rotate.
- Setup wizard for local machine and VPS deployments.
- Non-interactive automation mode for agents/CI.
- OpenAI-compatible proxy for tools that expect
/v1APIs. - Session usage and cost tracking.
- Optional Telegram bot control commands.
Requirements
- Python
3.12+ uv- Vast.ai account + API key
- Optional: Telegram bot token (
telegramextra)
Install
Use from source (recommended while iterating)
git clone https://github.com/deeflect/vasted.git
cd vasted
uv sync --extra dev
Run CLI commands from the repo:
uv run vasted --help
Install as a tool
uv tool install "git+https://github.com/deeflect/vasted.git"
Upgrade later:
uv tool upgrade vasted
Quick Start
uv run vasted setup
uv run vasted up
uv run vasted status --verbose
Client connection values after setup:
- Base URL:
http://<host>:<port>/v1 - Auth header:
Authorization: Bearer <token>
When proxy_host is 0.0.0.0, use your real machine/VPS IP or domain in clients.
Automation / Unattended Mode
Use non-interactive commands to avoid prompts:
uv run vasted setup --non-interactive \
--vast-api-key "$VASTED_API_KEY" \
--bearer-token "$VASTED_BEARER_TOKEN" \
--client openclaw \
--deployment-mode local_pc \
--model qwen3-coder-30b \
--quality balanced \
--gpu-mode auto
uv run vasted up --non-interactive --yes --jinja --model qwen3-coder-30b --quality balanced --gpu-mode auto --no-serve
uv run vasted status --verbose
uv run vasted usage
uv run vasted down --force
Environment variables accepted by setup --non-interactive:
VASTED_API_KEYVASTED_BEARER_TOKENVASTED_CLIENT(openclaw,opencode,custom)VASTED_LLAMA_JINJA(true/false)VASTED_MODEL,VASTED_QUALITY,VASTED_GPU_MODE,VASTED_GPU_PRESETVASTED_DEPLOYMENT_MODE,VASTED_PROXY_HOST,VASTED_PROXY_PORT,VASTED_PUBLIC_HOST
Client Profiles and Jinja Behavior
setup supports client presets that define default llama.cpp --jinja behavior:
--client openclaw: jinja on by default--client opencode: jinja off by default--client custom: keep/manual behavior
Per launch override is still available:
uv run vasted up --jinja
uv run vasted up --no-jinja
Command Reference
vasted setup [--non-interactive] [--manual] [--client openclaw|opencode|custom]
vasted up [--model ...] [--quality ...] [--gpu-mode auto|manual] [--gpu-preset ...] [--profile ...] [--max-price ...] [--jinja|--no-jinja] [--yes] [--non-interactive] [--serve|--no-serve]
vasted down [--force]
vasted status [--verbose]
vasted logs [--instance-id N] [--tail N]
vasted usage
vasted token show [--full]
vasted token rotate
vasted rotate-token
vasted config show
vasted profile list|add|use|remove
vasted completions <bash|zsh|fish>
Telegram Bot (Optional)
Install telegram extra and run:
uv sync --extra telegram
uv run python bot.py
Development
uv run ruff check .
uv run mypy app tests bot.py
uv run pytest -q
Project Layout
app/commands/*: CLI command handlersapp/service.py: worker lifecycle + launch policyapp/proxy.py: OpenAI-compatible reverse proxyapp/vast.py: Vast API integration + startup script generationapp/usage.py: token/time/cost accountingapp/user_config.py: persistent config + keyring integrationapp/state.py: runtime state persistencebot.py: optional Telegram control plane
Security
- Keep Vast API keys and bearer tokens private.
- Prefer localhost binds unless remote access is required.
- See SECURITY.md for disclosure policy.
Contributing
See CONTRIBUTING.md and run the validation commands before opening a PR.
License
MIT — see LICENSE.
Metadata
Release files for vasted 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vasted-0.1.0.tar.gz | 21.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vasted-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.6 MB
Release files / vasted-0.1.0.tar.gz
| Download URL | vasted-0.1.0.tar.gz |
|---|---|
| Size | 21.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3e1c45d47e371ad4f646fea79f863b04342aad2d1fc54948e25c618eb63dfdb7
|
|
BLAKE2b-256 checksum How to use checksums |
f0dc01fd428c01390cc4d77918d52b7d093c5158a50f488cacbb392ef7208fbd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 1, 2026.
Transparency logRelease files / vasted-0.1.0-py3-none-any.whl
| Download URL | vasted-0.1.0-py3-none-any.whl |
|---|---|
| Size | 51.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1e85287fec1d35a6ba8a1a42a55a7ec1fa6ba9fbfdadf1984999e21841802354
|
|
BLAKE2b-256 checksum How to use checksums |
ce251c01e0156b0aee1328aa3be66a5d5a8861f780f72c0ca8f83a8adb33d3c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 1, 2026.
Transparency log