Deploy local LLMs behind your own managed API server - vLLM or llama.cpp in isolated environments, with API keys, workspaces, and usage tracking.
Project description
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, receive API keys, organize work into workspaces, and every request is metered per workspace. Open the dashboard, point your OpenAI SDK at the URL, and the rest is just an HTTP call.
Full documentation lives in docs/.
Principles
- Fragmentation - small, single-purpose modules.
- Fluidity - features can be added or removed as needs change.
- Simplicity - a handful of commands and a small API cover the common workflow.
- Automation - one guided command gets you a working deployment.
- Explicitness - every automated action is announced and logged; the system is never touched without your knowledge.
Features
- Isolated engine virtualenvs. vLLM and llama.cpp install into their own virtual environments, never into the system interpreter.
- Choice of engines. Bring Hugging Face models through vLLM, or GGUF models through llama.cpp, and switch between them with one command.
- Account, keys, and workspaces. Open signup issues an
outo_sk_API key, creates adefaultworkspace, and lets each user create more. - Per-workspace usage metering. Token usage is recorded by workspace
and surfaced at
GET /v1/usage. - OpenAI-compatible proxy.
POST /v1/chat/completions,POST /v1/completions, andGET /v1/modelsspeak the same shapes clients already know. - Optional HTTPS. A self-signed certificate is generated under
data/certs/when you ask for it. - Explicit automation with an action log. Every setup step is
announced, confirmed when destructive, and appended to
actions.log. - Dashboard and Swagger UI. Visit the root URL for a tiny status
page, or
/docsfor the full OpenAPI explorer.
Install
pip install outo-llms
Prefer an isolated install? pipx install outo-llms works too.
Quickstart
outo-llms setup # interactive, fully explicit setup
curl -s -X POST http://127.0.0.1:8611/v1/account/signup \
-H 'Content-Type: application/json' \
-d '{"username": "me"}' # returns an api_key + default workspace
outo-llms models add tinyllama # register a Hugging Face model
curl -s http://127.0.0.1:8611/v1/chat/completions \
-H "Authorization: Bearer outo_sk_..." \
-H 'Content-Type: application/json' \
-d '{"model": "tinyllama", "messages": [{"role": "user", "content": "hi"}]}'
curl -s http://127.0.0.1:8611/v1/usage \
-H "Authorization: Bearer outo_sk_..." # per-workspace token accounting
The setup wizard prints the exact base URL it configured (HTTP or HTTPS), along with 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 in the registry |
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 or vllm) |
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 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 127.0.0.1:8611
by default and exposes an OpenAI-compatible HTTP API. Engines are
internal services that bind their own loopback ports (llama.cpp on 8612,
vLLM on 8613); clients never reach them directly.
When a request hits POST /v1/chat/completions or POST /v1/completions,
the server 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.
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 dashboard 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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file outo_llms-0.1.0.tar.gz.
File metadata
- Download URL: outo_llms-0.1.0.tar.gz
- Upload date:
- Size: 50.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21f4b4b0c84a0f95b3955d8f4248f70dadf5f68b79337e8988ea2870279462f0
|
|
| MD5 |
5f764149192303c8b96712626ecfb841
|
|
| BLAKE2b-256 |
5580f3fcfbaa4ad04d44425b843ce5f20a7ee6cea6bf606e9e6336b8c4db082c
|
Provenance
The following attestation bundles were made for outo_llms-0.1.0.tar.gz:
Publisher:
release.yml on llaa33219/outo-llms
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
outo_llms-0.1.0.tar.gz -
Subject digest:
21f4b4b0c84a0f95b3955d8f4248f70dadf5f68b79337e8988ea2870279462f0 - Sigstore transparency entry: 2194747332
- Sigstore integration time:
-
Permalink:
llaa33219/outo-llms@b20f137310879432efe1c8e98e0a35ad11da43bf -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/llaa33219
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b20f137310879432efe1c8e98e0a35ad11da43bf -
Trigger Event:
push
-
Statement type:
File details
Details for the file outo_llms-0.1.0-py3-none-any.whl.
File metadata
- Download URL: outo_llms-0.1.0-py3-none-any.whl
- Upload date:
- Size: 44.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c8e91c3e2ae6998164730bcd4c7ddecbdb73da6827c646b65d41ddd79b0fcb9f
|
|
| MD5 |
bf21b280f8d13f652fc84b20142f793a
|
|
| BLAKE2b-256 |
2e929d2e3546f0c48b603a59d22a118ff45f00588bca059e552c90cac8515a40
|
Provenance
The following attestation bundles were made for outo_llms-0.1.0-py3-none-any.whl:
Publisher:
release.yml on llaa33219/outo-llms
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
outo_llms-0.1.0-py3-none-any.whl -
Subject digest:
c8e91c3e2ae6998164730bcd4c7ddecbdb73da6827c646b65d41ddd79b0fcb9f - Sigstore transparency entry: 2194747336
- Sigstore integration time:
-
Permalink:
llaa33219/outo-llms@b20f137310879432efe1c8e98e0a35ad11da43bf -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/llaa33219
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b20f137310879432efe1c8e98e0a35ad11da43bf -
Trigger Event:
push
-
Statement type: