Skip to content

Environment: lab, corpus, knowledge base and GPU arms move here from inference-server - #3

Merged
AdvayMonga merged 6 commits into
mainfrom
feat/environment
Oct 6, 2026
Merged

AdvayMonga merged 6 commits into
mainfrom
feat/environment

Conversation

@AdvayMonga

Copy link
Copy Markdown
Owner

The other half of AdvayMonga/inference-server#100. After both merge, inference-server is the engine and its stack, and this repo is the whole environment. Stacked on #2 (regimes): merge #2 first, or retarget this PR to main.

Moved in, as-is

From inference-server main (ef9ce63) plus its open PRs #97 (mixed corpus classes) and #99 (knowledge entries):

  • lab/: session loop, agent, tools, ledger, workspace, budget, sandbox/grader, canaries, profiler, vm.py with the Verda/Nebius/Crusoe providers, vm-setup.sh
  • corpus/ with build_corpus.py and fetch_traces.py
  • knowledge/, ENVIRONMENT.md, tests/test_lab_*.py
  • validity/roofline.py

Rewired for two repos

  • lab/engine.py: the engine repo is LAB_ENGINE_REPO (default ../inference-server); its interpreter is LAB_ENGINE_PYTHON, or that repo's .venv/bin/python.
  • The grader's lint and tests, both jails, and the agent's shell all run the engine's interpreter.
  • profile stages only its harness (__init__, profile, bundle, gpu) into the pristine tree under _harness/. The jail therefore never opens this repo, which holds .env and the ledger.
  • lab.vm pushes both trees: the engine to LAB_VM_DIR (its .venv is on PATH) and this repo to LAB_VM_ENV_DIR (default ~/BlameGraph). run --env runs here; setup builds the engine's venv.
  • regimes defaults to the local corpus/ and pools every manifest class.
  • New: pyproject.toml (optional extras plus pytest/ruff config), tests/conftest.py (finds the engine; tests that drive engine code skip without it), CI (lab pytest + ruff, referee/regime scripts, weekly corpus provenance).
  • lab/ledger/ and lab/runs/ are gitignored.

Verified

  • Lab suite: 131 passed, 4 skipped without engine deps. The 4 pass (6 tests) with the engine's interpreter.
  • All referee and regime script tests pass. ruff check . is clean (this also removed 2 pre-existing unused imports in logs/ so CI lint passes).
  • End to end against the inference-server#100 branch: test tool gives PASS (lint, 360 engine tests); profile tool writes a bundle.
  • The new CI workflow hasn't run yet; this PR is its first run.

For you

  • Move lab/ledger/ from your inference-server checkout into this repo's lab/ledger/ if you want the history.
  • Set the lab env vars (LAB_VM_*, provider credentials, ANTHROPIC_API_KEY) here, plus LAB_ENGINE_REPO if the engine isn't at ../inference-server.

🤖 Generated with Claude Code

AdvayMonga and others added 4 commits October 6, 2026 16:01
…rom inference-server

From inference-server main (ef9ce63) plus open PRs #97 (mixed corpus classes) and #99 (knowledge entries), as-is:
lab/ (session loop, agent, tools, ledger, workspace, budget, sandbox/grader, canaries, profiler, VM + providers),
corpus/ with its builder, knowledge/, ENVIRONMENT.md, the lab tests; roofline.py into validity/.

Rewiring for the split: lab/engine.py locates the engine (LAB_ENGINE_REPO, default ../inference-server) and its
python (LAB_ENGINE_PYTHON or its .venv); the grader's lint/tests, the jails and the agent's shell use the engine's
interpreter; profile stages only its harness into the pristine tree so the jail never opens this repo; lab.vm
pushes both trees (engine to LAB_VM_DIR, this repo to LAB_VM_ENV_DIR, run --env runs here). regimes default to
the local corpus and pool every manifest class. pyproject (extras, pytest/ruff config), conftest (engine path,
skips without it), CI (lab, referee scripts, weekly corpus provenance). Lab ledger and runs are gitignored.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nference-server)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ts pin theirs; README examples use --env

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
regimes: corpus loads go through lab.corpus (hashes verified, a changed trace refuses); a stream that dies or a
client-side failure is a crash row, never a lost request; 4xx/503 are explicit rejections, other 5xx are crashes;
a one-token answer never meets the limits; the load search stops below start/16 and probe durations are capped
at 4x the tier length; closed-loop schedules are generated lazily; saturated confirms up to three levels.
lab: profile bundles copied into the workspace (lab/runs/) are ignored by the audit, so a > 5 MB trace no
longer ends the run as a violation the agent never committed. roofline.py docstring says what it is.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@AdvayMonga
AdvayMonga changed the base branch from feat/regimes to main October 6, 2026 21:06
AdvayMonga and others added 2 commits October 6, 2026 17:06
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@AdvayMonga
AdvayMonga merged commit e91c983 into main Oct 6, 2026
3 checks passed
@AdvayMonga
AdvayMonga deleted the feat/environment branch October 8, 2026 23:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant