Skip to content

S25-I: verl Harbor agent loop on boat sandboxes - #277

Draft
michaellchung wants to merge 1 commit into
s25-n108b-miles-boatfrom
s25-n108c-verl-boat
Draft

michaellchung wants to merge 1 commit into
s25-n108b-miles-boatfrom
s25-n108c-verl-boat

Conversation

@michaellchung

Copy link
Copy Markdown
Contributor
  • Per-event-loop admission gate and boat quota (LoopLocal); env-driven provider/machine/concurrency config with a fail-fast cap check.
  • Real run via HarborAgentLoop.run(): fix-git, regex-log oracle=1, nop=0.

Testing: Full remote test suite on the stack tip: 0 failures. Not validated on PPU/NPU hardware (machines busy).

Part of the S25 stack (NPU+PPU heterogeneous GLM5.3-Flash full-param RL). Draft; do not merge before the S24 stack (#262–#268).

🤖 Generated with Claude Code

Keep the admission gate and the boat quota per running event loop
(LoopLocal): both hold asyncio primitives, which bind to the first loop
that waits on them. verl's AgentLoopWorker is a Ray async actor, so this
stays one per worker process; a process with several loops no longer
fails with 'bound to a different event loop'. The Miles gate uses the
same helper.

HarborAgentLoop takes the provider from HARBOR_ENV_TYPE when the row has
none, and refuses a boat task when YETO_HARBOR_MAX_IN_FLIGHT exceeds the
boat active-sandbox cap. BoatEnvironment accepts an explicit quota.

New CPU test drives HarborAgentLoop.run() through the real Harbor Trial
and boat provider on a fake boat account (VM created and deleted, tokens
assembled, ABORTED on a failed container start).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

2 participants