Skip to content

Hyperloom v1.1.1

Choose a tag to compare

@xiaofei-zheng xiaofei-zheng released this 16 Sep 09:13
· 1471 commits to main since this release
424d00c

Hyperloom v1.1.1

This is a patch release on top of 1.1.0. The session record does not move, so a session recorded by 1.1.0 resumes on this build.

Most of it is the Recipe knowledge base telling the truth: the prior work a session had actually earned was not reaching the model at all — an exact warm-start hit printed "first session for this workload/hw", and the lessons and pitfalls sections rendered (none) no matter how much a prior session had learned. The other corrections are in agent-backend selection, which three places answered differently, and in the supervisor watchdog, whose restarts are now resumable and bounded.

The command line and the environment contract do move: one optimizer option, one console script and eight environment variables that 1.1.0 accepted are gone, one variable's accepted values narrow, and one option is added. The ones that need a plan before upgrading are listed under Breaking changes; the full per-change list is in CHANGELOG.md.

Highlights

1. The warm-start block, the KB's lessons, and its pitfalls reach the model again

All three read field shapes no writer produces. An exact hit carrying a full config printed (no recipe text — first session for this workload/hw), and sections 5b and 5c rendered (none) regardless of what a prior session had recorded (#1466, #1464). The block now renders warm_start_context, the view recipe_kb_t0 already persists on every anchor, and a borrowed config is labelled with the model it came from. No recorded knowledge was lost; until now none of it was being shown. A losing operator's progress is also banked rather than discarded, and a warm start is picked by measurement (#1448).

2. One rule picks the agent backend across both packages

A configured credential first, then an installed SDK, with Claude ahead of Codex. Four places answered this and three disagreed, so forge-loop on an OpenAI-only host could resolve to Claude and then fail to authenticate (#1472). The Robustness Agent's RCA engine follows the same precedence instead of checking the OpenAI side unconditionally. One consequence worth naming: a deployment whose runtime is logged in by other means is no longer refused up front — forge-fuse dropped its --agent-backend auto usage error and forge-fusion dropped the llm_provider_unconfigured result, leaving the real authentication failure to the preflight that can see it.

Forge also stops naming its own settings: it reads Hyperloom's environment contract (CLAUDE_MODEL / CODEX_MODEL) and nothing above it, and reasoning effort falls back to the project-wide HYPERLOOM_REASONING_EFFORT (#1442). One reasoning-effort ladder now covers both surfaces — see Breaking changes.

3. Supervisor watchdog restarts are resumable and bounded

A wedged coordinator takes SIGHUP and keeps its interrupted phase segment rather than recording a session outcome; three restart attempts, counted durably before the signal goes out, make the wedge terminal (#1462). Separately, the robustness monitor now reads the real stop-reason vocabulary — it had been importing a module that does not exist and silently falling back to a subset missing 16 terminal reasons, so a finished session could be relaunched. Long executor subprocesses also move off the event loop (#1471).

4. --extend-hours grants a resumed session more budget

Elapsed time is summed forward across every leg and never reset, so this is the only way to continue a run that has already spent its budget. The grant is applied on --resume-from and recorded in the session state with its reason; it defaults to 0.0, so an invocation that does not pass it behaves as before.

5. The collective lane becomes part of the rewrite controller

A communication operator and a dense operator are the same rewrite job; the only thing separating them was the measurement harness, which belongs to a task's driver rather than to a lane of its own (#1424). The entry gate, apply checkpoint, recovery module, SharedState campaign ledger and breakdown section go with it, along with five environment variables (see Breaking changes). The nccl_summary extractor stays, and the row it produces remains in kernel_candidates.json for opportunity analysis to read like any other candidate. The rewrite lane itself is fixed to reach an operator, measure it and land it (#1420), on one speedup metric against one baseline (#1497).

6. Forge token spend is attributed, then cut

The run's token spend is published at one fixed path (#1479), the nested forge-loop ledger is recovered or reported as partial rather than silently short (#1477), FlyDSL rewrite LLM usage is reported complete (#1474), and the context itself is cut once the spend is attributable (#1443).

7. Bare-metal vllm default is 0.29.0+rocm723, up from 0.27.1

install_baremetal.sh, the compatibility matrix, the install guide, the example SKILL.md recipes, and assets/slurm/models.tsv all name it (#1476, #1510), with v2 runner patches for vLLM 29 (#1487) and the matching TraceLens profiler-config patch verified to apply against the upstream tag. VLLM_VERSION and VLLM_ROCM_VARIANT override it as before. The bare-metal framework install also works on pip-packaged ROCm (#1503), and an unknown GPU arch is no longer reported as MI300X (#1460).

8. Dead surfaces are removed

The pre-rename KernelForge console script kept as an alias since v1.0.0b2, superseded by kernelforge; and its learning/ tuning database with the tracker's superseded scoring layer and a closed fusion reachability island — about 1.4k lines of production code whose writes had already been disabled (#1439). The one observable difference: a forge-loop run no longer writes lesson markdown under the writable knowledge base's learned/ directory and no longer prints Lessons learned: N. Nothing read that directory.

Breaking changes

An operator upgrading from 1.1.0 has to plan for these. The removed option is refused loudly; everything else on this list is silent.

  • --breakdown-include-transcripts is removed, along with the exported specialist_runs section it inlined into. Recording the breakdown at author time retired that section outright (#1455), so there is nothing left for the option to inline. The parser is strict, so a launch or resume command that still carries it exits with unrecognized arguments before the session starts. Transcripts are unaffected: they are still written to disk and travel as transcript_path, which is what a reader of the exported breakdown follows instead.
  • The deprecated kernel-agents console script is gone. The rename to kernelforge shipped in v1.0.0b2 and the alias was kept for one release. A script invoking it fails with command not found. The kernel_agents.agent_providers entry-point group stays — it is how third-party provider plugins published before the rename are still discovered, and it is not a CLI surface.
  • Eight environment variables 1.1.0 read are gone, and nothing refuses them. A box that still exports them starts normally and behaves as though they were never set, so they have to be found by reading launch scripts and .env rather than by watching a run fail.
    • FORGE_CLAUDE_MODEL, FORGE_CODEX_MODEL, FORGE_AGENT_MODEL — set CLAUDE_MODEL / CODEX_MODEL instead. A box left on the old names falls through to the provider default.
    • HYPERLOOM_SKIP_COLLECTIVE, HYPERLOOM_COLLECTIVE_ONLY, HYPERLOOM_COLLECTIVE_KEEP_PCT, FORGE_COLLECTIVE_TIMEOUT, FORGE_COLLECTIVE_AGENT_TIMEOUT — delete them. They steered the collective optimization lane, which is now part of the rewrite controller; communication operators are picked up as ordinary rewrite candidates and need no separate switches.
  • HYPERLOOM_REASONING_EFFORT no longer takes minimal or none. The ladder is low | medium | high | xhigh | max, and the two sides that read it disagree about a value outside it: Forge refuses at startup ('minimal' is not a reasoning effort), while Hyperloom's own chat.completions drops the field and takes the gateway default — deeper and more expensive than minimal was. A deployment sitting on either value has to move to low by hand, and only one half of the run will say so.
  • KernelForge's same-provider model fallback is removed (#1437), and the Codex default no longer names a deployment the gateway does not serve.

What's included

Recipe knowledge base and warm start

  • fix(state): stop the warm-start block claiming a cold start on a KB hit - #1466
  • fix(prompts): render locally recorded lessons and pitfalls - #1464
  • fix(kb): bank a losing operator's progress, and pick a warm start by measurement - #1448

Agent backend, models and reasoning effort

  • fix(agents): unify agent backend selection on credentials, then SDK - #1472
  • Forge takes its model and effort from the runtime, and Hyperloom's env names - #1442
  • Remove KernelForge same-provider model fallback - #1437

Supervisor and session lifecycle

  • fix(supervisor): make a watchdog restart resumable, bounded, and sized by the backend it interrupts - #1462
  • fix(orchestrator): run long executor subprocesses off the event loop - #1471
  • [Stepping] Stateless orchestration: one full projection per turn - #1410
  • [Refactor] Rework the enablement / bring-up round lifecycle - #1409
  • [Stepping] Make the source scope advisory, not a permission set - #1418
  • Fix/controller patch integration and pump liveness - #1501

Kernel optimization: rewrite lane and GEMM tuning

  • refactor(kernel): merge the collective lane into the rewrite controller - #1424
  • fix(kernel): make the rewrite lane able to reach an operator, measure it, and land it - #1420
  • Rewrite layer: one speedup metric, one baseline, and KB ports admitted on evidence - #1497
  • gemm-tune: actually open the tier3 path, and let it reach fused MoE - #1452
  • fix(gemm-tune): stop the demand ranking from deciding whether decode is tuned - #1454
  • fix(aiter): rebuild serving .so when tuned CSV kernels miss the JIT registry - #1457
  • Retain validated GEAK changes through recheck, sweep and export - #1428
  • Publish the AgentX workload identity in the GEAK handoff - #1365
  • [FIX] KernelForge: exempt the loop's own aiter cache from the workspace guard - #1412

Forge token accounting

  • Forge token efficiency: attribute the spend, then cut the context - #1443
  • feat(forge): publish the run's token spend at one fixed path - #1479
  • fix(forge): recover the nested forge-loop token ledger, or say it is partial - #1477
  • fix(forge): report complete FlyDSL rewrite LLM usage - #1474
  • fix(forge): let a hookless provider run concurrent lanes - #1473

Agentic replay (AgentX)

  • [Feat] Grade AgentX on the axis InferenceX ranks - #1444
  • fix(agentx): align Hyperloom measurement and integration contracts - #1447
  • feat(agentx): support cross-GPU reference comparisons - #1484
  • fix(agentx): isolate aiperf in a compatible Python environment - #1441

Measurement and telemetry

  • fix(telemetry): record each round's GPU telemetry instead of losing it to a name mismatch - #1445
  • feat(kv): collect KV cache occupancy and pressure from the engine - #1446
  • fix(profile): recognize SGLang graph capture directories - #1488
  • Remove Trace Analysis Routes that Replicates TraceLens Features - #1368
  • Honor --no-eval on Magpie explore rematerialization - #1438

Session Breakdown

  • refactor(breakdown): record the Session Breakdown at author time, and retire the read side it replaced - #1455
  • fix(sbd-v6): name the copies an enablement round left in the archive - #1415

Dead-surface removal

  • refactor(kernelforge): remove three superseded subsystems (-1.4k production lines) - #1439
  • refactor: compact Python comments and docstrings - #1421

Framework and deployment coverage

  • chore(vllm): bump bare-metal default to 0.29.0 - #1510
  • feat(baremetal): bump vLLM default to 0.28.0 with glibc gate - #1476
  • Feat/vllm v29 patch - #1487
  • Make the bare-metal framework install work on pip-packaged ROCm - #1503
  • Move TraceLens SHA - #1463
  • fix(sglang): stop forcing --moe-runner-backend, let sglang auto pick it - #1459
  • Stop reporting unknown GPU archs as MI300X (baremetal) - #1460
  • minor fix for NODE_EXTRA_CA_CERTS and NODE_TLS_REJECT_UNAUTHORIZED - #1500

CI

  • ci: balance six test shards and remove redundant coverage work - #1475
  • fix(ci): overwrite stale shard artifacts on reruns - #1502
  • ci(e2e): let one PR opt into a different runner, instead of all of them - #1485
  • ci: let the e2e job name its runner pool - #1453

Release

  • chore(release): cut 1.1.1 - #1519

Three changes that merged during this cycle were reverted before the cut and are not in this release: #1520 (sbd-v6 grading axis, reverted by #1523), #1511 (roofline capture-failure classification, reverted by #1524) and #1495 (KB partition-key guard, reverted by #1525).

Requirements

ROCm platform with a supported AMD Instinct GPU (MI355X / MI325X / MI300X; MI308X detection); Docker with AMD ROCm support, Kubernetes with AMD GPU nodes, or the supported bare-metal setup; Claude Code IDE with Remote SSH; an Anthropic API key or compatible Anthropic gateway, or an OpenAI-compatible gateway; tmux, jq, Node.js >= 18, and Claude CLI.

The recommended stack uses the official upstream images: lmsysorg/sglang-rocm:v0.5.18-rocm724-mi30x-20260825 and lmsysorg/sglang-rocm:v0.5.18-rocm724-mi35x-20260825 for SGLang, and vllm/vllm-openai-rocm:v0.29.0 for vLLM. The vLLM image entrypoint is vllm serve, so a long-running Hyperloom container has to override it (for example --entrypoint tail).

Validated component versions are listed in the compatibility matrix: TraceLens 1.0.0, GEAK 4.0.0, IntelliKit 0.1.1, AgentKernelArena 0.2.0, Magpie 0.2.0.

The wheel is published on PyPI:

pip install hyperloom-inference-optimizer==1.1.1 --target .

Bare-metal installs read HYPERLOOM_WHEEL_TAG, which now defaults to v1.1.1, so this release must carry the rocm-profiler-hotfix-libs.tar.gz asset.

Stability

v1.1.1 is a patch release under semantic versioning. Nothing in the session record moves, so a 1.1.0 session resumes on this build. The breaking changes listed above are confined to the CLI surface and the environment contract; the wheel's public Python API and the installation workflow are unchanged.