edge-ai-lab
A lab for edge AI — the exploration engine for the mesh's edge and local-model work: designs, runs and compares experiments across edge hardware and model stacks, then hands proven configurations to lobes-cli, which is the runtime that serves them.
Where it sits
lobes-cli(binarylobes) is the runtime this lab feeds.lobesruns, assesses, and switches the local vLLM fleet the Culture mesh consumes, tuned per card by machine profiles and composed per box by deployment shapes. A configuration this lab proves lands there — as a profile/shape value, a catalog entry, a per-model doc, a deployment lock, or an evidence transcript — via a PR or issue on that repo.sparkrunis the recipe-driven launcher for inference workloads on one or more NVIDIA DGX Sparks (vLLM / SGLang / llama.cpp, multi-node tensor parallelism). It is the experiment runner for Spark-class arms: an arm is a recipe YAML. Jetson-class arms (Thor, AGX Orin, Orin NX, Orin Nano) run through lobes profile/shape overrides instead.dgx-spark-cli/rtx-spark-clioperate the boxes themselves (setup, health, monitoring).
Why it matters
- Baselines are lost the moment a model is swapped. lobes' own playbook
(
../lobes-cli/docs/model-switch-playbook.md, rule 1) opens with it: benchmark the incumbent first, on today's engine, because that number is unrecoverable once the checkpoint is gone. Without a lab that owns the arms, the Dockerfiles and the transcripts, every new box or checkpoint is re-derived ad hoc and the incumbent's number goes with it. - Experiments and serving are separate layers. The lab is where things are allowed to break, be re-flagged and re-measured; lobes is where only proven configurations run. Keeping them apart means an experiment can never destabilise the fleet the mesh depends on, and every served configuration has a traceable experiment behind it.
Who consumes the lab
| Consumer | The one path in |
|---|---|
lobes-cli |
A PR or issue on lobes-cli carrying a profile/shape TOML, a deployment lock (deployments/<variation-id>/VARIATION.md), or an evidence transcript — never an edit from this checkout. |
jetson-arena |
Statistics exported in the ingest format agreed with jetson-arena (as an issue there); the lab emits, arena stores and publishes — the lab never posts results itself. |
| sparkrun users | sparkrun registry add <this repo> — the lab publishes a sparkrun registry so Spark arms resolve as @edge-ai-lab/<recipe>. |
Current state (as of 2026-08-29)
This is the before-state the spec was written against, and it is still true until the plan's tasks land:
- This repository holds the mesh-agent scaffold — identity, agent-first CLI,
vendored skill kit, CI/publish baseline — plus the rulebook
docs/lab-conventions.md. There is nosetup/tree, nodocs/evidence/, and no Dockerfile yet; thearmnoun is being built. lobes-cli's built-in profiles are exactlyspark,thor,orin(AGX 64GB) andbase; Orin NX, Orin Nano and AGX Orin 32GB have none. Itsdeployments/variation catalog holds no real variation — capture needs physical hardware.jetson-arenais a scaffold with a scope sketch, not a running store.
The converged spec and build plan live at
docs/specs/2026-08-29-edge-arms-across-nvidia-boxes.md
and
docs/plans/2026-08-29-edge-arms-across-nvidia-boxes.md.
What you get
- An agent-first CLI cited from teken
(
afi-cli) — the runtime package has no third-party dependencies. - A mesh identity —
culture.yaml(suffix: edge-ai-lab,backend: colleague) and the matching resident prompt fileAGENTS.colleague.md. - The lab rulebook —
docs/lab-conventions.md: arm layout, evidence discipline, the shared-box budget rule, pins, rollback, secrets, hand-off. - The canonical guildmaster skill kit under
.claude/skills/, vendored cite-don't-import. Seedocs/skill-sources.md. - A build + deploy baseline — pytest, lint, the agent-first rubric gate, and PyPI Trusted Publishing wired into GitHub Actions.
Quickstart
uv sync
uv run pytest -n auto # run the test suite
uv run lab whoami # identity from culture.yaml
uv run lab learn # self-teaching prompt (add --json)
uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
The console script is lab (python -m edge_ai_lab is equivalent).
CLI
| Verb | What it does |
|---|---|
whoami |
Report this agent's nick, version, backend, and model from culture.yaml. |
learn |
Print a structured self-teaching prompt. |
explain <path> |
Markdown docs for any noun/verb path. |
overview |
Read-only descriptive snapshot of the agent. |
doctor |
Check the agent-identity invariants (prompt-file-present, backend-consistency). |
cli overview |
Describe the CLI surface itself. |
Every command supports --json. Results go to stdout, errors/diagnostics to
stderr (never mixed). Exit codes: 0 success, 1 user error, 2 environment
error, 3+ reserved.
Contributing
Every PR bumps the version (python3 .claude/skills/version-bump/scripts/bump.py <patch|minor|major> — one bump type per run; CI blocks merge otherwise) and goes through the cicd
skill (devex pr + SonarCloud gate). Lint is black / isort / flake8 (line
length 100) / bandit / markdownlint plus teken cli doctor . --strict. Full
conventions — worktree placement, memory discipline, the ask-colleague
reflex, the hand-off contract to lobes-cli — are in CLAUDE.md;
the lab's own rules are in docs/lab-conventions.md.
License
Apache 2.0 — see LICENSE.
Metadata
Release files for edge-ai-lab 0.8.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 | Provenance | |
|---|---|---|---|---|
| edge_ai_lab-0.8.0.tar.gz | 259.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| edge_ai_lab-0.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 311.8 kB
Release files / edge_ai_lab-0.8.0.tar.gz
| Download URL | edge_ai_lab-0.8.0.tar.gz |
|---|---|
| Size | 259.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7fae5e89ae3574bb7a14052a2824a15f680cfba4f6ce34ea62a33c82a168e536
|
|
BLAKE2b-256 checksum How to use checksums |
1027806b0a11f1cd04a3d1d8c47812e4ba50adb5fa663fb15de0bf210610c9c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / edge_ai_lab-0.8.0-py3-none-any.whl
| Download URL | edge_ai_lab-0.8.0-py3-none-any.whl |
|---|---|
| Size | 52.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
108309a828c35f0e1b5a6ffb97e656ae666b002b6e69d961267fb7bb3bc07205
|
|
BLAKE2b-256 checksum How to use checksums |
d78e5c43379dbeeaa83bcc40158cd1c18bd7110d993a4db0fe4fd56fad710c8d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for edge-ai-lab 0.8.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.