Skip to main content

awpool — a model stays warm across your own devices

Docs · Source · pip install awpool · The Aither World

The Aither World is an operating system for agents — a Linux you can hand to one, the runtimes it works in, and the tools it works with. awnix is the Linux underneath it; awpool is one of its bricks — each installs on its own, runs offline, and needs no account.

Start here: Have a model stay warm and servable across your own devices — pick which of your reachable peers should serve it.

Laptop, desktop, phone: your own devices, one pool. Each runs a local backend; a model loaded on one of them should serve whichever device is on right now — and a model nobody is using should be parked, not sitting on a GPU it does not need. awpool is the small client that decides and asks: which reachable peer should serve this model, and will you warm or park it?

pip install awpool
awpool peers                       # who is reachable right now
awpool status                      # per-peer model state (warm/cold/unknown)
awpool pick qwen3-8b               # where should it serve from NOW
awpool warm qwen3-8b               # ask that peer to load it
awpool park qwen3-8b               # ask that peer to unload it

What it is

A client over awnet's peer registry — peers are discovered the way awnet discovers them (a registry file of names and endpoints, three-valued reachability: answers / does not answer / could not judge). awpool layers the two things awnet deliberately does not do: placement (which peer should serve a model right now) and warm-keeping (asking a peer to load or park a model through its own HTTP API).

The placement logic is pure: peers go in as data, a decision comes out, no network. The scoring ladder:

  1. Warm beats cold beats unknown — a reachable peer holding the model warm wins; a peer that can load it (reported a catalog without it) beats a peer whose state we cannot see.
  2. Capacity breaks ties — a peer that can hold more models warm wins; unknown capacity ranks last, never first.
  3. Names break ties — the same pool always picks the same peer.
  4. The honest fallback — if NO peer is confirmed reachable, the pick is still made (the least-bad candidate that could not be ruled out), but it is labelled unverified and printed as a guess, not a decision. A pick built on no evidence must say so.

A model's state on a peer is three-valued: warm (loaded), cold (not loaded), unknown (the peer did not say). A peer that answers but reports no catalog is not a peer without models — its state is unknown, and "cannot see" is never reported as "cold".

What it is NOT

  • NOT the platform's shared compute market. This pools YOUR devices — laptop, desktop, phone — with no settlement, no marketplace, no tenant plane. aithernet-provider is the different shape that joins the platform's community pool.
  • NOT the ggml-RPC tensor-split fleet stack. That stack splits ONE model too large for any single box across fleet GPUs, hand-tuned per model. awpool is placement + warm/park lifecycle for models that fit one device each — a different problem, at personal scale, packaged as a client.
  • NOT a fleet manager. warm/park are best-effort REQUESTS to the peer's own HTTP API. A refusal or a sleeping peer is a reported outcome, never a retry loop and never a crash.

Commands

command what it does exit
awpool peers [registry] reachability per peer endpoint (ok / unreachable / unknown), via awnet 0 any reachable · 1 none · 2 could not judge
awpool status [registry] per-peer model state from each reachable peer's /v1/models 0
awpool pick <model> [registry] the placement decision, with the evidence basis it rests on 0 decided · 1 nothing reachable · 2 could not judge
awpool warm <model> [--peer NAME] ask the chosen (or named) peer to load the model 0 accepted · 1 refused
awpool park <model> [--peer NAME] ask the chosen (or named) peer to unload the model 0 accepted · 1 refused

registry defaults to ~/.config/aither/peers.json — the same registry file awnet writes:

awnet add ~/.config/aither/peers.json laptop laptop.local:8080
awnet add ~/.config/aither/peers.json desktop desktop.local:8080
awpool pick qwen3-8b

The peer HTTP API awpool speaks to is deliberately small: GET /v1/models returns the catalog ({"models": [{"id": "...", "state": "warm"|"cold"}]}, or {"models": {"id": "warm"}}, or a bare list, with an optional "capacity": N), and POST /v1/models/<id>/warm and POST /v1/models/<id>/park accept the model id. awnode is the local gateway that would serve that API on each device; awpool only ever calls it.

awnet absent is a real state

awpool imports awnet lazily, inside the commands. On a machine without awnet, awpool peers prints that awnet is missing and how to install it, and exits 2 — an absent dependency is reported honestly, never as a feature that is switched off. The placement logic itself (awpool.pick_peer, pure, no I/O) works anywhere.

Status

Registered in the Aither World ecosystem as planned (the personal-mesh-pool stack: awnet + awnode + awdk). The registry entry for id: awpool predates this package and describes a different concept (dispatcher onto public mirror runners); this package implements the placement/warm-keeping client described by the personal-mesh-pool stack entry. Reconcile the registry entry with that stack when the package ships.

Development

python -m pytest tests/ -q

Stdlib only — no dependencies to install to run, pytest for the tests. Placement, parsing and request building are pure functions; the only I/O is urllib against a peer's own API, so the whole decision plane is testable without a network.

Metadata

Release files for awpool 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for awpool 0.1.0
File Size Uploaded Provenance
awpool-0.1.0.tar.gz 21.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for awpool 0.1.0
File Interpreter ABI Platform
awpool-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 39.4 kB

Release files / awpool-0.1.0.tar.gz

Download URL awpool-0.1.0.tar.gz
Size 21.4 kB
Tags Source
SHA-256 checksum
How to use checksums
fcbe9385b332f93cc1b327eb34bab9405209aacdd48a1f29bde9488144f847cb
BLAKE2b-256 checksum
How to use checksums
344927f59818d0e418b5a90c4b0289ac344fafdd6fa2988b04205037b688763c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / awpool-0.1.0-py3-none-any.whl

Download URL awpool-0.1.0-py3-none-any.whl
Size 18.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4dc82eaa7b62bb161e9bc665775790ad809b72a0591cf47f790c4f8b79893f11
BLAKE2b-256 checksum
How to use checksums
f5a53923821687cca0025a4fb2d87e04a9809f3ae62d9ec1f092441df7d070e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Security for awpool 0.1.0

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.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

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