Skip to main content

outo-llms

outo-llms

Deploy local LLMs behind your own managed, OpenAI-compatible API server.

vLLM or llama.cpp runs in an isolated environment managed by outo-llms, kept apart from the Python environments you already have. Users sign up with a username and password, receive both an outo_st_ session token for account management and an outo_sk_ API key for inference, organize work into workspaces, and every request is metered per workspace. Open the built-in web GUI to sign up or log in, manage workspaces and API keys, and inspect server status, then point your OpenAI SDK at the URL for an HTTP call.

Full documentation lives in docs/.

Principles

  1. Fragmentation - small, single-purpose modules.
  2. Fluidity - features can be added or removed as needs change.
  3. Simplicity - a handful of commands and a small API cover the common workflow.
  4. Automation - one guided command gets you a working deployment.
  5. Explicitness - every automated action is announced and logged; the system is never touched without your knowledge.

Features

  • Isolated engine virtualenvs. vLLM, llama.cpp, and SGLang install into their own virtual environments, never into the system interpreter.
  • Choice of engines. Bring Hugging Face models through vLLM or SGLang, or GGUF models through llama.cpp, and switch between them with one command.
  • Accounts with passwords and sessions. Signup takes a username and password, creates a default workspace, and returns both an outo_st_ session token (for management, 14-day expiry) and an outo_sk_ API key (for inference). Login re-issues a session token from the same credentials.
  • Per-workspace usage metering. Token usage is recorded by workspace and surfaced at GET /v1/usage, with an optional ?workspace= query parameter to scope to one workspace.
  • Per-key and per-workspace token limits. Set independent token budgets on each API key and each workspace across four periods: total (all time), monthly (UTC calendar month), weekly (ISO week, UTC), and five_hour (rolling 5-hour window). Both the key's own limits and its workspace's limits are enforced; exceeding either returns an OpenAI-style 429 error. Configure with POST /v1/workspaces/{name}/keys, PATCH /v1/workspaces/{name}/keys/{key_id}, PATCH /v1/workspaces/{name}, or the outo-llms limits command group.
  • OpenAI-compatible proxy. POST /v1/chat/completions, POST /v1/completions, and GET /v1/models speak the same shapes clients already know. API keys authenticate the inference endpoints; session tokens authenticate management and usage.
  • Optional HTTPS. A local outo-llms CA is created under data/certs/ and signs the server certificate. Setup can install the CA into the system trust store so clients trust it without warnings.
  • Explicit automation with an action log. Every setup step is announced, confirmed when destructive, and appended to actions.log.
  • Built-in web GUI. Visit the root URL for signup and login, a read-only model catalog, workspace and API-key management, and server status. Visit /docs for the full OpenAPI explorer.
  • Pre-downloaded weights. outo-llms models add fetches the model's weights into the shared Hugging Face cache immediately, so the first inference request only has to start the engine instead of downloading the model too.

Install

uv tool install outo-llms

Or with pip / pipx:

pip install outo-llms
pipx install outo-llms

Quickstart

outo-llms setup defaults to a public HTTPS deployment on port 443: the API server binds 0.0.0.0:443, a server certificate signed by the local outo-llms CA covers the auto-detected server IP, the CA is installed into the system trust store, and the firewall port is opened on the supported Linux toolchain. Substitute <your-server-ip-or-domain> with the address printed by outo-llms status (the example below uses the documentation placeholder 203.0.113.10):

After setup, open https://<your-server-ip-or-domain>/ in a browser. The built-in web GUI supports signup and login, shows a read-only model catalog, manages workspaces and API keys, and reports server status. The API flow below uses curl instead, and model registration remains CLI-only.

outo-llms setup                              # interactive, fully explicit setup
curl -s -X POST https://<your-server-ip-or-domain>/v1/account/signup \
  -H 'Content-Type: application/json' \
  -d '{"username": "me", "password": "..."}' # returns api_key + session_token + default workspace
outo-llms models add tinyllama               # register a model and download its weights
curl -s https://<your-server-ip-or-domain>/v1/chat/completions \
  -H "Authorization: Bearer outo_sk_..." \
  -H 'Content-Type: application/json' \
  -d '{"model": "tinyllama", "messages": [{"role": "user", "content": "hi"}]}'
curl -s https://<your-server-ip-or-domain>/v1/usage \
  -H "Authorization: Bearer outo_st_..."    # per-workspace token accounting (session token)

The CA installed by setup is trusted on the server itself, so plain curl https://... works there. Other machines need to install data/certs/ca.crt once; until they do, keep -k. The setup wizard prints the exact base URL it configured, the path to the action log, and writes a short summary you can copy into your shell history.

Commands

Command Purpose
outo-llms setup Automated, explicit server setup (engine, HTTPS, firewall, launch)
outo-llms models add <name> Register a model and download its weights
outo-llms models download <name> (Re)download weights for a registered model
outo-llms models list Show every registered model
outo-llms models remove <name> Unregister a model (asks first)
outo-llms engine list List known engines and their installed state
outo-llms engine use <name> Switch the active engine (llamacpp, vllm, or sglang)
outo-llms engine install [name] Install an engine into its isolated virtualenv
outo-llms engine status Show the active engine's runtime status
outo-llms limits key <user>/<workspace> <key_id> [--set ...] [--clear ...] Show or update an API key's token limits
outo-llms limits workspace <user>/<workspace> [--set ...] [--clear ...] Show or update a workspace's token limits
outo-llms start Start the API server in the background
outo-llms stop Stop the background API server
outo-llms restart Restart the API server
outo-llms status Show server, engine, and path status
outo-llms reset Wipe everything back to factory state (asks twice)
outo-llms version Print the version

How it works

The outo-llms server (python -m outo_llms.server) binds 0.0.0.0:443 with HTTPS by default and exposes an OpenAI-compatible API at https://<your-server-ip-or-domain>/. Engines are internal services that bind their own loopback ports (llama.cpp on 8612, vLLM on 8613, SGLang on 8614); clients never reach them directly.

When a request hits POST /v1/chat/completions or POST /v1/completions, the server authenticates the caller with the outo_sk_ API key, looks up the requested model in the registry, asks the engine manager to ensure the right engine is running with that model, then forwards the request. The active engine streams or returns its response unchanged, and the server records prompt and completion tokens against the calling workspace. Account and workspace management requests use the outo_st_ session token from the same user.

Every state change, install step, and external command goes through outo_llms.core.consent, which announces what is about to happen, asks for confirmation on destructive actions, and writes a timestamped line to logs/actions.log. The built-in web GUI at the root URL and Swagger UI at /docs round out the picture.

Documentation

  • docs/index.md — entry point for installation, API, configuration, operations, and testing guides.

License

Apache License 2.0. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

outo_llms-0.10.1.tar.gz (128.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

outo_llms-0.10.1-py3-none-any.whl (109.6 kB view details)

Uploaded Python 3

File details

Details for the file outo_llms-0.10.1.tar.gz.

File metadata

  • Download URL: outo_llms-0.10.1.tar.gz
  • Upload date:
  • Size: 128.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for outo_llms-0.10.1.tar.gz
Algorithm Hash digest
SHA256 1955da33c88a1c2864b77e01fb17b87cea22a63247f542e702c9d00ac7576dd7
MD5 2950bc3c994f8ee648d8e2c2bdd3bcee
BLAKE2b-256 c036755af1abc93ca7af2fbee92e5adc469749ae20f4bcbb96155f4043c8df73

See more details on using hashes here.

Provenance

The following attestation bundles were made for outo_llms-0.10.1.tar.gz:

Publisher: release.yml on llaa33219/outo-llms

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file outo_llms-0.10.1-py3-none-any.whl.

File metadata

  • Download URL: outo_llms-0.10.1-py3-none-any.whl
  • Upload date:
  • Size: 109.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for outo_llms-0.10.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f778a119ce631b49a04c2175c4a10eb49c1b4275ba838d546512d32b7c5b50cf
MD5 60cd2046d244b2ac7efe08ab544833ae
BLAKE2b-256 d23eb2dcb29d4a96379513de2f7cf66addb299232cb3a1bf787cfa5c368e4df8

See more details on using hashes here.

Provenance

The following attestation bundles were made for outo_llms-0.10.1-py3-none-any.whl:

Publisher: release.yml on llaa33219/outo-llms

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.10.1 This release

2 files

0.10.0

2 files

0.9.7

2 files

0.9.6

2 files

0.9.5

2 files

0.9.4

2 files

0.9.3

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.1

2 files

0.8.0

2 files

0.7.6

2 files

0.7.5

2 files

0.7.4

2 files

0.7.3

2 files

0.7.2

2 files

0.7.1

2 files

0.7.0

2 files

0.6.2

2 files

0.6.1

2 files

0.6.0

2 files

0.5.1

2 files

0.5.0

2 files

0.4.0

2 files

0.3.11

2 files

0.3.10

2 files

0.3.9

2 files

0.3.8

2 files

0.3.7

2 files

0.3.6

2 files

0.3.5

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.7

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page