Skip to main content

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

  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 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 a default workspace, 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, and GET /v1/models speak 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 /docs for 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


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.1.0.tar.gz (50.0 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.1.0-py3-none-any.whl (44.4 kB view details)

Uploaded Python 3

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

Hashes for outo_llms-0.1.0.tar.gz
Algorithm Hash digest
SHA256 21f4b4b0c84a0f95b3955d8f4248f70dadf5f68b79337e8988ea2870279462f0
MD5 5f764149192303c8b96712626ecfb841
BLAKE2b-256 5580f3fcfbaa4ad04d44425b843ce5f20a7ee6cea6bf606e9e6336b8c4db082c

See more details on using hashes here.

Provenance

The following attestation bundles were made for outo_llms-0.1.0.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.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

Hashes for outo_llms-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c8e91c3e2ae6998164730bcd4c7ddecbdb73da6827c646b65d41ddd79b0fcb9f
MD5 bf21b280f8d13f652fc84b20142f793a
BLAKE2b-256 2e929d2e3546f0c48b603a59d22a118ff45f00588bca059e552c90cac8515a40

See more details on using hashes here.

Provenance

The following attestation bundles were made for outo_llms-0.1.0-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.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page