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.
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 edge_ai_lab-0.8.0.tar.gz.
File metadata
- Download URL: edge_ai_lab-0.8.0.tar.gz
- Upload date:
- Size: 259.4 kB
- Tags: Source
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7fae5e89ae3574bb7a14052a2824a15f680cfba4f6ce34ea62a33c82a168e536
|
|
| MD5 |
ec06ccd552cdf41bb69e67a0289c4823
|
|
| BLAKE2b-256 |
1027806b0a11f1cd04a3d1d8c47812e4ba50adb5fa663fb15de0bf210610c9c6
|
File details
Details for the file edge_ai_lab-0.8.0-py3-none-any.whl.
File metadata
- Download URL: edge_ai_lab-0.8.0-py3-none-any.whl
- Upload date:
- Size: 52.4 kB
- Tags: Python 3
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
108309a828c35f0e1b5a6ffb97e656ae666b002b6e69d961267fb7bb3bc07205
|
|
| MD5 |
b84217a3ec20ed77c5d9cd14ad1280a1
|
|
| BLAKE2b-256 |
d78e5c43379dbeeaa83bcc40158cd1c18bd7110d993a4db0fe4fd56fad710c8d
|