agentcore-rl-toolkit 0.1.3__tar.gz → 0.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/.gitignore +18 -0
  2. agentcore_rl_toolkit-0.1.4/NOTICE +29 -0
  3. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/PKG-INFO +66 -9
  4. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/README.md +22 -0
  5. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/async-rl-performance-optimization/async_rl.png +0 -0
  6. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/async-rl-performance-optimization/inference_throughput_and_concurrency.png +0 -0
  7. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/async-rl-performance-optimization/reward_curve.png +0 -0
  8. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/async-rl-performance-optimization/rollout_corr_eff_sample_size.png +0 -0
  9. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/async-rl-performance-optimization/sync_rl.png +0 -0
  10. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/data-synthesis-v0/fig_action_difficulty_depth.png +0 -0
  11. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/data-synthesis-v0/fig_cost_vs_performance.png +0 -0
  12. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/data-synthesis-v0/fig_rl_buckets_telecom.png +0 -0
  13. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/data-synthesis-v0/fig_system_workflow.png +0 -0
  14. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/variable-rows-linear-mode/linear-efficiency.png +0 -0
  15. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/variable-rows-linear-mode/optimizer-reward.png +0 -0
  16. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/examples/openhands-swegym-agent/latency_breakdown.png +0 -0
  17. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/examples/openhands-swegym-agent/reward_curve.png +0 -0
  18. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/examples/openhands-swegym-agent/setup_run_pipeline.png +0 -0
  19. agentcore_rl_toolkit-0.1.4/docs/site/src/assets/examples/openhands-swegym-agent/swe_agent_design.png +0 -0
  20. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/api/backends/slime/runner.md +26 -0
  21. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/api/core/client.md +1 -1
  22. agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/blog/async-rl-performance-optimization.md +111 -0
  23. agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/blog/data-synthesis-v0.mdx +439 -0
  24. agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/blog/index.mdx +19 -0
  25. agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/blog/training-multi-step-agents-rl.mdx +410 -0
  26. agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/blog/variable-rows-linear-mode.mdx +312 -0
  27. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/examples/index.mdx +2 -0
  28. agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/examples/openhands-swegym-agent.md +277 -0
  29. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/guides/overview.mdx +11 -0
  30. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/guides/rllm-backend-setup.md +1 -1
  31. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/guides/slime-backend-setup.md +39 -36
  32. agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/guides/verl-backend-setup.md +141 -0
  33. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/index.mdx +1 -1
  34. agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/troubleshooting/slime.md +32 -0
  35. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/styles/custom.css +25 -0
  36. agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/app.py +62 -0
  37. agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/evaluation.py +156 -0
  38. agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/noop_agent.py +43 -0
  39. agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/observability.py +312 -0
  40. agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/open_hands_agent.py +247 -0
  41. agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/oracle_agent.py +55 -0
  42. agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/prompts/benchmarks_r2.j2 +64 -0
  43. agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/prompts/system_prompt.j2 +1 -0
  44. agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/rollout.py +87 -0
  45. agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/strands_agent.py +263 -0
  46. agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/utils.py +15 -0
  47. agentcore_rl_toolkit-0.1.4/pyproject.toml +267 -0
  48. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/__init__.py +5 -0
  49. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/app.py +11 -0
  50. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/__init__.py +6 -0
  51. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/agentcore_control.py +366 -0
  52. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/agentcore_tools.py +265 -0
  53. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/boto3_tools.py +273 -0
  54. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/dynamodb_control.py +162 -0
  55. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/dynamodb_tools.py +154 -0
  56. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/ec2_monitor.py +230 -0
  57. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/ec2_tools.py +83 -0
  58. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/ecr_control.py +200 -0
  59. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/iam_control.py +184 -0
  60. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/persistent_dict.py +197 -0
  61. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/s3_tools.py +12 -0
  62. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/__init__.py +6 -0
  63. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/slime/examples/math_agent/SETUP.md +36 -0
  64. {agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends → agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental}/slime/examples/math_agent/config.yaml.example +9 -6
  65. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/slime/examples/math_agent/train.sh +132 -0
  66. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/slime/integration/__init__.py +0 -0
  67. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/slime/integration/rewards.py +49 -0
  68. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/slime/integration/rollout.py +202 -0
  69. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/slime/scripts/install_slime.sh +86 -0
  70. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/verl/__init__.py +6 -0
  71. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/verl/config.py +51 -0
  72. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/verl/rollout_session_agent_loop.py +595 -0
  73. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/verl/rollout_session_resources.py +125 -0
  74. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/verl/task_runner.py +30 -0
  75. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/SETUP.md +65 -94
  76. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/slime/examples/math_agent/config.yaml.example +46 -0
  77. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/slime/examples/math_agent/train.sh +153 -0
  78. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/slime/integration/__init__.py +0 -0
  79. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/integration/gateway.py +49 -1
  80. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/integration/rollout.py +191 -54
  81. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/slime/integration/traces.py +288 -0
  82. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/runner.py +68 -3
  83. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/slime/scripts/install_slime.sh +118 -0
  84. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/README.md +102 -0
  85. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/__init__.py +1 -0
  86. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/data.py +114 -0
  87. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/examples/math_agent/config.json.example +27 -0
  88. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/examples/math_agent/prepare_data.py +26 -0
  89. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/.gitignore +4 -0
  90. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/README.md +133 -0
  91. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/aws_setup.py +238 -0
  92. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/backend_config.json +32 -0
  93. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/deploy.py +205 -0
  94. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/endpoint.yaml +22 -0
  95. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/environment.sh +22 -0
  96. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/pyproject.toml +13 -0
  97. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/serve.sh +20 -0
  98. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/setup.sh +27 -0
  99. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/train.py +434 -0
  100. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/README.md +306 -0
  101. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/__init__.py +24 -0
  102. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/agent_loop.py +448 -0
  103. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/dataset.py +70 -0
  104. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/math_agent/agentcore_agent.yaml +33 -0
  105. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/math_agent/fsdp_fft_sync_grpo.sh +109 -0
  106. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/math_agent/fsdp_lora_sync_grpo.sh +82 -0
  107. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/math_agent/megatron_lora_sync_grpo.sh +96 -0
  108. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/verl/examples/math_agent/preprocess_gsm8k.py +20 -14
  109. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/migration_agent/README.md +44 -0
  110. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/migration_agent/agentcore_agent.yaml +16 -0
  111. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/migration_agent/megatron_lora_sync_grpo_qwen3-coder-30b-a3b.sh +154 -0
  112. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/migration_agent/megatron_lora_sync_grpo_qwen3.6-27b.sh +128 -0
  113. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/migration_agent/preprocess_migrationbench.py +127 -0
  114. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/README.md +213 -0
  115. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/async_separate_b1.yaml +10 -0
  116. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/async_separate_b2.yaml +10 -0
  117. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/cluster_hybrid.yaml +5 -0
  118. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/cluster_trainer2_rollout1.yaml +15 -0
  119. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/cluster_trainer_rollout_n1.yaml +12 -0
  120. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/cluster_trainer_rollout_n2.yaml +15 -0
  121. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/cluster_trainer_rollout_n4.yaml +15 -0
  122. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/dataset_swe_gym.yaml +15 -0
  123. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/lora.yaml +14 -0
  124. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/main.yaml +33 -0
  125. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/megatron.yaml +6 -0
  126. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/megatron_offload.yaml +8 -0
  127. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/megatron_recompute.yaml +11 -0
  128. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/qwen3_30b_p5.yaml +36 -0
  129. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/qwen3_30b_p6.yaml +39 -0
  130. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/rollout_correction_decoupled.yaml +9 -0
  131. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/rollout_session_agent_loop.yaml +57 -0
  132. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/smart_ppo.yaml +58 -0
  133. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/sync_b1.yaml +9 -0
  134. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/sync_b2.yaml +9 -0
  135. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/main.py +44 -0
  136. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/gateway_host.py +202 -0
  137. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/sampling_backend.py +124 -0
  138. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/trainer.py +89 -0
  139. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/trainer_mixins/__init__.py +13 -0
  140. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/trainer_mixins/advantage_metrics.py +107 -0
  141. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/trainer_mixins/agent_loop_metrics.py +101 -0
  142. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/trainer_mixins/base.py +25 -0
  143. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/trainer_mixins/round_robin_agent_loop_dispatch.py +53 -0
  144. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/trainer_mixins/variable_row_batching.py +149 -0
  145. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/client.py +5 -56
  146. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/concurrency/__init__.py +5 -0
  147. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/concurrency/priority_assigner.py +31 -0
  148. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/concurrency/priority_semaphore.py +124 -0
  149. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/concurrency/rate_limiter.py +65 -0
  150. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/concurrency/ray_adapters.py +88 -0
  151. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/__init__.py +54 -0
  152. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/adapters/__init__.py +7 -0
  153. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/adapters/anthropic.py +357 -0
  154. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/adapters/common.py +537 -0
  155. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/adapters/openai.py +382 -0
  156. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/gateway.py +152 -0
  157. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/linear.py +316 -0
  158. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/parsing.py +100 -0
  159. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/render.py +395 -0
  160. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/response_schemas.py +270 -0
  161. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/sampling_backends/__init__.py +14 -0
  162. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/sampling_backends/base.py +36 -0
  163. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/sampling_backends/sglang_http.py +89 -0
  164. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/sampling_backends/tinker_sdk.py +66 -0
  165. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/sampling_backends/vllm_http.py +133 -0
  166. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/server.py +118 -0
  167. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/trace.py +81 -0
  168. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/trajectory.py +427 -0
  169. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/__init__.py +5 -0
  170. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/a2a_client.py +284 -0
  171. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/a2a_executor.py +124 -0
  172. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/a2a_protocol.py +109 -0
  173. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/agentcore_a2a_session.py +82 -0
  174. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/agentcore_http_session.py +70 -0
  175. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/agentcore_s3_session.py +376 -0
  176. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/docker_a2a_session.py +139 -0
  177. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/errors.py +31 -0
  178. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/exception_utils.py +53 -0
  179. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/factory.py +89 -0
  180. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/lifecycle.py +120 -0
  181. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/wire.py +29 -0
  182. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/runtime/__init__.py +6 -0
  183. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/runtime/app.py +132 -0
  184. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/runtime/client.py +213 -0
  185. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/runtime/protocol.py +53 -0
  186. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/runtime/store.py +54 -0
  187. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/sandbox/__init__.py +18 -0
  188. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/sandbox/client.py +430 -0
  189. agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/sandbox/types.py +36 -0
  190. agentcore_rl_toolkit-0.1.3/NOTICE +0 -1
  191. agentcore_rl_toolkit-0.1.3/docs/site/src/content/docs/api/backends/slime/patches.md +0 -68
  192. agentcore_rl_toolkit-0.1.3/docs/site/src/content/docs/guides/verl-backend-setup.md +0 -159
  193. agentcore_rl_toolkit-0.1.3/docs/site/src/content/docs/troubleshooting/slime.md +0 -72
  194. agentcore_rl_toolkit-0.1.3/docs/site/src/content/docs/troubleshooting/verl.md +0 -14
  195. agentcore_rl_toolkit-0.1.3/pyproject.toml +0 -112
  196. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/slime/examples/math_agent/train.sh +0 -120
  197. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/slime/integration/traces.py +0 -127
  198. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/slime/patches/sglang_token_ids.py +0 -696
  199. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/slime/patches/verify_sglang_token_ids.py +0 -539
  200. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/__init__.py +0 -44
  201. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/config/agentcore_grpo.yaml +0 -71
  202. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/config.py +0 -64
  203. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/dataset.py +0 -26
  204. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/examples/math_agent/run_agentcore_grpo.sh +0 -89
  205. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/llm_server.py +0 -164
  206. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/loop_manager.py +0 -556
  207. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/main.py +0 -132
  208. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/scripts/install_megatron.sh +0 -41
  209. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/trainer.py +0 -681
  210. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/frameworks/strands/__init__.py +0 -3
  211. agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/frameworks/strands/vllm_model.py +0 -110
  212. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/LICENSE +0 -0
  213. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/assets/houston.webp +0 -0
  214. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/api/core/app.md +0 -0
  215. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/api/core/reward.md +0 -0
  216. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/api/index.md +0 -0
  217. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/examples/strands-appworld-agent.md +0 -0
  218. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/examples/strands-math-agent.md +0 -0
  219. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/examples/strands-migration-agent.md +0 -0
  220. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/examples/strands-officebench-agent.md +0 -0
  221. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/guides/agent-adaptation.mdx +0 -0
  222. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/troubleshooting/rllm.md +0 -0
  223. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content.config.ts +0 -0
  224. /agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/__init__.py → /agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/prompts/empty.j2 +0 -0
  225. {agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/slime/integration → agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends}/__init__.py +0 -0
  226. {agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/slime/patches → agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/slime}/__init__.py +0 -0
  227. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/__init__.py +0 -0
  228. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/examples/math_agent/.wandb.env.example +0 -0
  229. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/examples/math_agent/eval.sh +0 -0
  230. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/examples/math_agent/train.py +0 -0
  231. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/integration/rewards.py +0 -0
  232. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/logging.py +0 -0
  233. {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/reward_function.py +0 -0
@@ -5,6 +5,7 @@
5
5
  # Python cache
6
6
  __pycache__/
7
7
  .ruff_cache/
8
+ .pytest_cache/
8
9
 
9
10
  # Build artifacts
10
11
  *.egg-info/
@@ -15,8 +16,23 @@ build/
15
16
  .env
16
17
  .wandb.env
17
18
 
19
+ # Logs and experiment tracking
20
+ wandb/
21
+ *.log
22
+
18
23
  # Local slime backend config (contains ARN/bucket; commit config.yaml.example only)
19
24
  src/agentcore_rl_toolkit/backends/slime/examples/**/config.yaml
25
+ src/agentcore_rl_toolkit/backends/experimental/slime/examples/**/config.yaml
26
+
27
+ # Training/example run artifacts, wherever generated. Convention-level patterns:
28
+ # hydra run dirs, verl checkpoint dirs (scripts use CKPTS_DIR=exp_*), wandb run
29
+ # dirs, and generated datasets (reproducible via the example preprocess scripts).
30
+ outputs/
31
+ checkpoints/
32
+ exp_*/
33
+ wandb/
34
+ *.parquet
35
+ local/
20
36
 
21
37
  # Config files
22
38
  config.toml
@@ -27,5 +43,7 @@ config.toml
27
43
  !.claude/skills/
28
44
  .claude/skills/*
29
45
  !.claude/skills/check-cloudwatch-session-logs/
46
+ # Personal per-project Claude instructions (loaded alongside CLAUDE.md, never committed)
47
+ CLAUDE.local.md
30
48
 
31
49
  .bedrock_agentcore.yaml
@@ -0,0 +1,29 @@
1
+ Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+
3
+ ------------------------------------------------------------------------------
4
+
5
+ This product includes software developed as part of the slime project
6
+ (https://github.com/THUDM/slime), licensed under the Apache License, Version 2.0.
7
+
8
+ The rollout gateway (src/agentcore_rl_toolkit/rollout_gateway/) adapts code from
9
+ slime, notably:
10
+ - trajectory.py — TrajectoryManager, TurnRecord, MessageNode, and the
11
+ CLEAN/FORK drift classification, adapted from
12
+ slime/agent/trajectory.py (made torch-free).
13
+ - adapters/ — OpenAIAdapter, AnthropicAdapter, and the shared BaseAdapter
14
+ pipeline, adapted from slime/agent/adapters/.
15
+ - parsing.py — output-parsing helpers, adapted from slime/agent/parsing.py.
16
+ - server.py — background-thread serving mechanics and FilteredAccessLogger,
17
+ adapted from slime/agent/aiohttp_threaded.py.
18
+
19
+ ------------------------------------------------------------------------------
20
+
21
+ This product includes data developed as part of the TRL project
22
+ (https://github.com/huggingface/trl), licensed under the Apache License,
23
+ Version 2.0.
24
+
25
+ The rollout gateway's response-schema registry
26
+ (src/agentcore_rl_toolkit/rollout_gateway/response_schemas.py) vendors the
27
+ response-schema dicts from trl/chat_template_utils.py and derives its
28
+ chat-template hash table from trl/chat_templates/*.jinja (baseline commit
29
+ 7073af94).
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: agentcore-rl-toolkit
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: Toolkit for Seamlessly Enabling RL Training with Bedrock AgentCore.
5
5
  Project-URL: Homepage, https://github.com/awslabs/agentcore-rl-toolkit
6
6
  Author-email: Amazon Web Services - Labs <opensource@amazon.com>
@@ -10,35 +10,70 @@ License-File: NOTICE
10
10
  Classifier: Development Status :: 3 - Alpha
11
11
  Classifier: License :: OSI Approved :: Apache Software License
12
12
  Classifier: Programming Language :: Python :: 3
13
- Classifier: Programming Language :: Python :: 3.10
14
13
  Classifier: Programming Language :: Python :: 3.11
15
14
  Classifier: Programming Language :: Python :: 3.12
16
15
  Classifier: Programming Language :: Python :: 3.13
17
- Requires-Python: >=3.10
16
+ Requires-Python: >=3.11
18
17
  Requires-Dist: bedrock-agentcore-starter-toolkit>=0.2.0
19
- Requires-Dist: bedrock-agentcore>=1.0.3
18
+ Requires-Dist: bedrock-agentcore>=1.23.1
20
19
  Requires-Dist: boto3>=1.40.55
21
20
  Requires-Dist: python-dotenv>=1.0.0
21
+ Provides-Extra: a2a
22
+ Requires-Dist: a2a-sdk[http-server]<2.0,>=1.0.1; extra == 'a2a'
23
+ Requires-Dist: aioboto3>=15.5.0; extra == 'a2a'
24
+ Requires-Dist: aiohttp>=3.9; extra == 'a2a'
25
+ Requires-Dist: backoff; extra == 'a2a'
26
+ Requires-Dist: httpx>=0.27.0; extra == 'a2a'
27
+ Requires-Dist: pydantic; extra == 'a2a'
28
+ Provides-Extra: a2a-server
29
+ Requires-Dist: a2a-sdk[http-server]<2.0,>=1.0.1; extra == 'a2a-server'
22
30
  Provides-Extra: dev
31
+ Requires-Dist: a2a-sdk[http-server]<2.0,>=1.0.1; extra == 'dev'
32
+ Requires-Dist: aioboto3>=15.5.0; extra == 'dev'
33
+ Requires-Dist: aiohttp>=3.9; extra == 'dev'
34
+ Requires-Dist: backoff; extra == 'dev'
35
+ Requires-Dist: httpx>=0.27.0; extra == 'dev'
23
36
  Requires-Dist: mypy>=1.0; extra == 'dev'
37
+ Requires-Dist: openai>=1.0; extra == 'dev'
24
38
  Requires-Dist: pre-commit>=3.0; extra == 'dev'
39
+ Requires-Dist: pydantic; extra == 'dev'
25
40
  Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
26
41
  Requires-Dist: pytest>=7.0; extra == 'dev'
42
+ Requires-Dist: tokenizers>=0.22.2; extra == 'dev'
43
+ Requires-Dist: transformers>=5.0; extra == 'dev'
44
+ Provides-Extra: gateway
45
+ Requires-Dist: aiohttp>=3.9; extra == 'gateway'
46
+ Requires-Dist: jmespath>=1.0; extra == 'gateway'
47
+ Requires-Dist: tokenizers>=0.22.2; extra == 'gateway'
48
+ Requires-Dist: transformers>=5.0; extra == 'gateway'
27
49
  Provides-Extra: rllm
28
50
  Requires-Dist: rllm; extra == 'rllm'
51
+ Provides-Extra: rollout
52
+ Requires-Dist: aioboto3>=15.5.0; extra == 'rollout'
53
+ Requires-Dist: aiohttp>=3.9; extra == 'rollout'
54
+ Requires-Dist: backoff; extra == 'rollout'
55
+ Requires-Dist: httpx>=0.27.0; extra == 'rollout'
56
+ Requires-Dist: pydantic; extra == 'rollout'
29
57
  Provides-Extra: slime
30
58
  Requires-Dist: rllm-model-gateway>=0.1.0; extra == 'slime'
59
+ Provides-Extra: tinker-api
60
+ Requires-Dist: tinker==0.30.1; extra == 'tinker-api'
61
+ Provides-Extra: tinker-skyrl
62
+ Requires-Dist: tinker==0.24.1; extra == 'tinker-skyrl'
31
63
  Provides-Extra: verl
64
+ Requires-Dist: aiohttp>=3.9; extra == 'verl'
32
65
  Requires-Dist: flash-attn==2.8.3; extra == 'verl'
66
+ Requires-Dist: flash-linear-attention>=0.5.2; extra == 'verl'
33
67
  Requires-Dist: numpy; extra == 'verl'
68
+ Requires-Dist: orjson; extra == 'verl'
34
69
  Requires-Dist: qwen-vl-utils; extra == 'verl'
35
70
  Requires-Dist: ray; extra == 'verl'
36
- Requires-Dist: rllm-model-gateway>=0.1.0; extra == 'verl'
37
71
  Requires-Dist: torch>=2.10.0; extra == 'verl'
38
72
  Requires-Dist: torchvision>=0.23.0; extra == 'verl'
39
- Requires-Dist: transformers>=5.5.3; extra == 'verl'
40
- Requires-Dist: verl==0.8.0; extra == 'verl'
41
- Requires-Dist: vllm==0.21.0; extra == 'verl'
73
+ Requires-Dist: transferqueue==0.1.8; extra == 'verl'
74
+ Requires-Dist: transformers==5.12.1; extra == 'verl'
75
+ Requires-Dist: verl==0.9.0; extra == 'verl'
76
+ Requires-Dist: vllm==0.24.0; extra == 'verl'
42
77
  Description-Content-Type: text/markdown
43
78
 
44
79
 
@@ -88,6 +123,7 @@ While session routing is valuable for multi-turn production agents, RL rollouts
88
123
  - **Async end-to-end**: Fire-and-forget server + future-based client — no long-lived TCP connections needed for long-running agent rollouts
89
124
  - **Simplified rollout collection**: `RolloutClient` manages concurrency, rate limiting, and S3 result polling out of the box for both training loops and batch evaluation
90
125
  - **Production parity**: Direct code reuse from production agents ensures training behavior matches real deployment
126
+ - **Sandbox on ACR** (`SandboxClient` + `agentcore-sandboxd`): Run shell commands in arbitrary Docker images (e.g. SWE-bench-style coding environments) as isolated AgentCore runtime sessions — no agent server required in the image
91
127
 
92
128
  ## Agent-Side: Adapting Your Agent for RL
93
129
 
@@ -313,6 +349,10 @@ This architecture enables parallel and highly efficient rollouts with secure exe
313
349
  - [rLLM](https://github.com/rllm-org/rllm) — supports multiple backends (veRL, Tinker, and more)
314
350
  - [Math Agent](examples/strands_math_agent/): [Tinker](https://github.com/rllm-org/rllm/blob/main/examples/agentcore_math/train_agentcore_math_tinker.sh)
315
351
 
352
+ For a self-hosted Tinker-compatible training and sampling endpoint, see the
353
+ [SkyRL EC2 deployment example](src/agentcore_rl_toolkit/backends/tinker_api/skyrl/).
354
+ It uses SkyPilot to deploy Qwen3.5-4B on one P4d.
355
+
316
356
  ### Prepare Your Agent Container
317
357
 
318
358
  ACR deploys agents as Docker containers. Most Dockerfiles can be auto-generated with the [AgentCore CLI](https://aws.github.io/bedrock-agentcore-starter-toolkit/api-reference/cli.html). Example command:
@@ -352,12 +392,29 @@ chmod +x scripts/build_docker_image_and_push_to_ecr.sh
352
392
  --context=examples/strands_math_agent
353
393
  ```
354
394
 
395
+ ## Sandbox: Command Execution in Arbitrary Images
396
+
397
+ Coding-agent evaluation and RL training typically start from prebuilt environment images (repository checkout, dependencies, test runner) that are not HTTP agent servers. The sandbox SDK bridges them onto AgentCore Runtime: a tiny health shim (`agentcore-sandboxd`, built from [`sandboxd/`](./sandboxd/)) is added to the image to satisfy the ACR container contract, and commands run through ACR's native `InvokeAgentRuntimeCommand` API.
398
+
399
+ ```python
400
+ from agentcore_rl_toolkit.sandbox import SandboxClient
401
+
402
+ client = SandboxClient(runtime_arn="arn:aws:bedrock-agentcore:...:runtime/...")
403
+ with client.start() as sb:
404
+ result = sb.exec("cd /app && pytest -q", timeout=900)
405
+ print(result.exit_code, result.stdout)
406
+ ```
407
+
408
+ Failing commands and timeouts are results, not exceptions — exactly what reward functions need. See [`examples/sandbox_quickstart/`](./examples/sandbox_quickstart/) for the full walkthrough (build the shim binary, wrap and push an image, create a runtime, run commands).
409
+
355
410
  ## Contributing
356
411
 
357
412
  We welcome contributions!
358
413
 
359
414
  - **Adding examples**: Create a new folder under `examples/` with its own `pyproject.toml`
360
415
  - **Improving the core library**: See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup
416
+ - **Proposing significant features or architectural changes**: See the
417
+ [design document process](designs/README.md)
361
418
 
362
419
  For bug reports, feature requests, and pull request guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md).
363
420
 
@@ -45,6 +45,7 @@ While session routing is valuable for multi-turn production agents, RL rollouts
45
45
  - **Async end-to-end**: Fire-and-forget server + future-based client — no long-lived TCP connections needed for long-running agent rollouts
46
46
  - **Simplified rollout collection**: `RolloutClient` manages concurrency, rate limiting, and S3 result polling out of the box for both training loops and batch evaluation
47
47
  - **Production parity**: Direct code reuse from production agents ensures training behavior matches real deployment
48
+ - **Sandbox on ACR** (`SandboxClient` + `agentcore-sandboxd`): Run shell commands in arbitrary Docker images (e.g. SWE-bench-style coding environments) as isolated AgentCore runtime sessions — no agent server required in the image
48
49
 
49
50
  ## Agent-Side: Adapting Your Agent for RL
50
51
 
@@ -270,6 +271,10 @@ This architecture enables parallel and highly efficient rollouts with secure exe
270
271
  - [rLLM](https://github.com/rllm-org/rllm) — supports multiple backends (veRL, Tinker, and more)
271
272
  - [Math Agent](examples/strands_math_agent/): [Tinker](https://github.com/rllm-org/rllm/blob/main/examples/agentcore_math/train_agentcore_math_tinker.sh)
272
273
 
274
+ For a self-hosted Tinker-compatible training and sampling endpoint, see the
275
+ [SkyRL EC2 deployment example](src/agentcore_rl_toolkit/backends/tinker_api/skyrl/).
276
+ It uses SkyPilot to deploy Qwen3.5-4B on one P4d.
277
+
273
278
  ### Prepare Your Agent Container
274
279
 
275
280
  ACR deploys agents as Docker containers. Most Dockerfiles can be auto-generated with the [AgentCore CLI](https://aws.github.io/bedrock-agentcore-starter-toolkit/api-reference/cli.html). Example command:
@@ -309,12 +314,29 @@ chmod +x scripts/build_docker_image_and_push_to_ecr.sh
309
314
  --context=examples/strands_math_agent
310
315
  ```
311
316
 
317
+ ## Sandbox: Command Execution in Arbitrary Images
318
+
319
+ Coding-agent evaluation and RL training typically start from prebuilt environment images (repository checkout, dependencies, test runner) that are not HTTP agent servers. The sandbox SDK bridges them onto AgentCore Runtime: a tiny health shim (`agentcore-sandboxd`, built from [`sandboxd/`](./sandboxd/)) is added to the image to satisfy the ACR container contract, and commands run through ACR's native `InvokeAgentRuntimeCommand` API.
320
+
321
+ ```python
322
+ from agentcore_rl_toolkit.sandbox import SandboxClient
323
+
324
+ client = SandboxClient(runtime_arn="arn:aws:bedrock-agentcore:...:runtime/...")
325
+ with client.start() as sb:
326
+ result = sb.exec("cd /app && pytest -q", timeout=900)
327
+ print(result.exit_code, result.stdout)
328
+ ```
329
+
330
+ Failing commands and timeouts are results, not exceptions — exactly what reward functions need. See [`examples/sandbox_quickstart/`](./examples/sandbox_quickstart/) for the full walkthrough (build the shim binary, wrap and push an image, create a runtime, run commands).
331
+
312
332
  ## Contributing
313
333
 
314
334
  We welcome contributions!
315
335
 
316
336
  - **Adding examples**: Create a new folder under `examples/` with its own `pyproject.toml`
317
337
  - **Improving the core library**: See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup
338
+ - **Proposing significant features or architectural changes**: See the
339
+ [design document process](designs/README.md)
318
340
 
319
341
  For bug reports, feature requests, and pull request guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md).
320
342
 
@@ -41,13 +41,22 @@ SlimeRunner(
41
41
  slime_dir: str = '/root/slime',
42
42
  megatron_dir: str = '/root/Megatron-LM',
43
43
 
44
+ # --- Optional: CUDA toolchain pinning ---
45
+ cuda_home: str | None = None,
46
+
44
47
  # --- Optional: ACR / toolkit (forwarded to slime via custom-config yaml) ---
45
48
  model_id: str = 'default',
46
49
  acr_timeout: int = 900,
47
50
  acr_tps_limit: int = 25,
48
51
  max_concurrent: int = 100,
52
+ max_pool_connections: int = 100,
49
53
  gateway_port: int = 9090,
50
54
  reward_postprocessing: str = 'grpo',
55
+ sglang_tool_call_parser: str = 'qwen',
56
+ sglang_reasoning_parser: str | None = None,
57
+ cumulative_token_mode: bool = False,
58
+ renderer_family: str = 'auto',
59
+ gateway_log_level: str = 'warning',
51
60
 
52
61
  # --- Optional: training hyperparameters ---
53
62
  rollout_batch_size: int = 32,
@@ -60,6 +69,7 @@ SlimeRunner(
60
69
  weight_decay: float = 0.1,
61
70
  adam_beta2: float = 0.98,
62
71
  sglang_mem_fraction_static: float = 0.7,
72
+ sglang_context_length: int | None = None,
63
73
  max_tokens_per_gpu: int = 9216,
64
74
 
65
75
  # --- Wandb (opt-in; no defaults injected if unset) ---
@@ -95,6 +105,10 @@ via ``ray job submit``. Streams stdout/stderr to the parent process.
95
105
 
96
106
  - `agent_runtime_arn` *(str)*
97
107
 
108
+ - `cuda_home` *(str | None)*
109
+
110
+ - `cumulative_token_mode` *(bool)*
111
+
98
112
  - `data_path` *(str)*
99
113
 
100
114
  - `eps_clip` *(float)*
@@ -105,12 +119,16 @@ via ``ray job submit``. Streams stdout/stderr to the parent process.
105
119
 
106
120
  - `extra_flags` *(list[str])*
107
121
 
122
+ - `gateway_log_level` *(str)*
123
+
108
124
  - `gateway_port` *(int)*
109
125
 
110
126
  - `lr` *(float)*
111
127
 
112
128
  - `max_concurrent` *(int)*
113
129
 
130
+ - `max_pool_connections` *(int)*
131
+
114
132
  - `max_tokens_per_gpu` *(int)*
115
133
 
116
134
  - `megatron_dir` *(str)*
@@ -125,6 +143,8 @@ via ``ray job submit``. Streams stdout/stderr to the parent process.
125
143
 
126
144
  - `num_gpus` *(int)*
127
145
 
146
+ - `renderer_family` *(str)*
147
+
128
148
  - `reward_postprocessing` *(str)*
129
149
 
130
150
  - `rollout_batch_size` *(int)*
@@ -137,8 +157,14 @@ via ``ray job submit``. Streams stdout/stderr to the parent process.
137
157
 
138
158
  - `s3_bucket` *(str)*
139
159
 
160
+ - `sglang_context_length` *(int | None)*
161
+
140
162
  - `sglang_mem_fraction_static` *(float)*
141
163
 
164
+ - `sglang_reasoning_parser` *(str | None)*
165
+
166
+ - `sglang_tool_call_parser` *(str)*
167
+
142
168
  - `slime_dir` *(str)*
143
169
 
144
170
  - `tp_size` *(int)*
@@ -198,7 +198,7 @@ RolloutFuture(
198
198
  input_id: str = None,
199
199
  agentcore_client = None,
200
200
  agent_runtime_arn: str = None,
201
- rate_limiter: ACRRateLimiter = None,
201
+ rate_limiter: LocalRateLimiter = None,
202
202
  )
203
203
  ```
204
204
 
@@ -0,0 +1,111 @@
1
+ ---
2
+ title: Async RL Performance Optimization
3
+ description: Improving training throughput with asynchronous reinforcement learning
4
+ ---
5
+
6
+ _By [Danylo Vashchilenko](https://github.com/hellodanylo) · October 1, 2026_
7
+
8
+ :::note[TL;DR]
9
+ * 🚀 While training [SWE Gym](../../examples/openhands-swegym-agent) agent, we show that asynchronous RL enables higher learning throughput, leading to ~22% higher reward improvement per GPU-hour of training.
10
+ * ℹ️ We show that the efficiency increase is explained by higher LLM inference concurrency and throughput.
11
+ * ⏭️ We observe that KV cache remains underutilized (time-average at ~25%), which is an opportunity for further optimization.
12
+ :::
13
+
14
+ ## RL Throughput and Concurrency of Inference and Training
15
+
16
+ All other things being equal, we prefer an RL system with higher throughput per GPU, as measured in processed trajectories per GPU-hour.
17
+ In highly parallel systems, **throughput and concurrency are positively correlated** up to a certain level of concurrency (the saturation point).
18
+ Measuring and maximizing concurrency is the primary method of optimizing the RL training system.
19
+
20
+ For the inference servers, KV cache capacity of GPU memory is the bottleneck in SWE and other long-context tasks.
21
+ For example, for Qwen3 Coder 30B on p6 node, there is ~5M tokens of capacity, which is only 78 trajectories at 64K context.
22
+ However, the actual concurrency can be significantly lower than the capacity.
23
+ For example, inference concurrency typically peaks right after a rollout batch is dispatched
24
+ and reaches a low right before the next rollout batch is dispatched. When the distribution
25
+ of the trajectory-level latency has high variance, the tail can significantly
26
+ reduce the actual concurrency and therefore inference throughput. In this scenario,
27
+ increasing rollout batch size through off-policy training can improve inference throughput.
28
+
29
+ For example, the following plots show the inference concurrency (x-axis)
30
+ and throughput (y-axis) over the span of a training run. We see
31
+ that the variance of throughput is directly explained by the changes in concurrency.
32
+ ![Throughput vs Concurrency](../../../assets/blog/async-rl-performance-optimization/inference_throughput_and_concurrency.png)
33
+
34
+ In this report, we will specifically compare (1) 1 mini-batch per step (less off-policy), and (2) 2 mini-batches per step (more off-policy).
35
+ We expect that **increasing mini-batch count per step will increase rollout throughput**, because higher inference concurrency will bring the hardware closer to the utilization saturation point.
36
+
37
+ ![Sync RL](../../../assets/blog/async-rl-performance-optimization/sync_rl.png)
38
+
39
+ For the training servers, GPU memory (activations, gradients, optimizer state) is also the bottleneck, but the token batch size is typically significantly higher than the saturation point, so the latency of the update step is roughly linear in the count of tokens. For long trajectories, the training server typically needs [memory saving methods](https://docs.nvidia.com/nemo/megatron-bridge/latest/performance-guide.html) like Model/Context Parallelism, Activation Recomputation and Offloading, which reduce throughput. Quantization can significantly improve throughput if it allows to turn off the memory saving methods without hitting OOMs.
40
+ Notably, context compression during rollout can improve the training server's efficiency,
41
+ because it only needs enough GPU memory to handle the longest *sequence*, not the longest trajectory.
42
+
43
+ It's previously been widely discussed that **RL is rollout-bound, but that's not always true for multi-turn RL** like SWE. The inference server encodes the new context tokens (e.g. prompt and tool responses) in parallel and decodes the agent response tokens sequentially. The training server encodes all tokens in parallel, but also does the backward pass for each token. Therefore, the rollout throughput is positively correlated with the non-agent fraction of tokens in the context, while the trainer throughput does not depend on this ratio.
44
+
45
+ | Server | Agent Tokens | Environment Tokens |
46
+ | --- | --- | --- |
47
+ | Training | parallel fwd+bwd | parallel fwd+bwd |
48
+ | Inference | sequential fwd (slower) | parallel fwd (faster) |
49
+
50
+ What we observe in this report's training scenario (Qwen3 Coder 30B on SWE Gym) is that in an average trajectory only ~20% of tokens are from the agent.
51
+ In this regime, the **inference and training servers can have roughly the same throughput per GPU**.
52
+
53
+ In short, the bottleneck is an async RL pipeline depends on many characteristics of the workload, but it's certainly not always rollout-bound.
54
+ This observation is highly important for prioritizing training efficiency research, and for allocating hardware resources between training and inference servers in experiments.
55
+
56
+ Using the framework of this section, we expect the disaggregated cluster to have higher throughput than a colocated cluster, because reducing inference servers count increases the effective inference concurrency. And we expect the async RL pipeline to have higher throughput than sync RL pipeline, because rollout batches can overlap, leading to higher inference concurrency.
57
+
58
+ ![Sync RL](../../../assets/blog/async-rl-performance-optimization/async_rl.png)
59
+
60
+ With the knowledge that the inference and trainer throughput are roughly the same, we choose to have 1:1 ratio of GPUs allocated to trainer and rollout in the disaggregated cluster. We will specifically compare (1) a colocated cluster with 2 hybrid model replicas and (2) a disaggregated cluster with 1 training replica and 1 inference replica.
61
+
62
+ ## Training Results
63
+
64
+ First, let's review the trainer and rollout throughput measurements of these configurations. As expected, we observe a significant throughput speedup (up to ~1.42x) from using off-policy and async RL, which is explained by the increase of average inference request concurrency. In the sync-1 baseline, the average concurrency of ~11 does not saturate the GPU throughput. Additionally, we observe that average KV cache utilization in all cases is <25%, which means that there is 4x headroom for higher concurrency, which is an opportunity for further optimization.
65
+
66
+ | **Training Cluster Config** | **Throughput (kilo-tokens/minute/GPU)** | **Throughput Speedup** | **Inference Concurrency per Replica** |
67
+ | --- | --- | --- | --- |
68
+ | Sync 1 step | 27.82 | 1 | 11.03 |
69
+ | Sync 2 steps | 34.47 | 1.24x | 15.20 |
70
+ | Async 1 step | 38.49 | 1.38x | 33.97 |
71
+ | Async 2 steps | 39.39 | 1.42x | 38.22 |
72
+
73
+ We know from the past RL research that off-policy learning can be less efficient per optimizer step, so next we measure whether reward
74
+ has the same rate of change per 100 optimizer steps. We observe that Async-1 and Sync-2 configurations reduce the rate of reward improvement, while Async-2 configuration increases it.
75
+
76
+ | **Training Cluster Config** | **Reward Improvement Rate (per 100 optimizer steps)** | **Reward Improvement Speedup** |
77
+ | --- | --- | --- |
78
+ | Sync 1 step | 5.98pp | 1 |
79
+ | Sync 2 steps | 5.71pp | 0.96x |
80
+ | Async 1 step | 4.55pp | 0.76x |
81
+ | Async 2 steps | 7.79pp | 1.30x |
82
+
83
+ Finally, we would like to combine the two parts of this analysis -- throughput per GPU and reward improvement rate -- giving us a measurement of the reward change per GPU-hour. In the following table, we calculate the reward's rate of change per 640 GPU-hours. We observe that Async-2 configuration learns 1.22x faster and cheaper than the Sync-1 baseline.
84
+
85
+ | **Training Cluster Config** | **Reward Improvement Rate (per 640 GPU-hours)** | **Reward Improvement Speedup** |
86
+ | --- | --- | --- |
87
+ | Sync 1 step | 7.17pp | 1 |
88
+ | Sync 2 steps | 7.86pp | 1.10x |
89
+ | Async 1 step | 7.05pp | 0.98x |
90
+ | Async 2 steps | 8.73pp | 1.22x |
91
+
92
+
93
+ We plot the learning curve of the Sync-1 and Async-2 training runs against the GPU-hours used to observe that Async-2 configuration has been ahead of the Sync-1 run during most of the training runtime.
94
+
95
+ ![Reward Curve](../../../assets/blog/async-rl-performance-optimization/reward_curve.png)
96
+
97
+ ## Rollout Correction
98
+
99
+ In this report, we used Verl's implementation of [rollout correction](https://verl.readthedocs.io/en/latest/algo/rollout_corr.html)
100
+ with the following parameters: token-level importance ratio, masking threshold of 2, decoupled mode.
101
+
102
+ In order to understand the off-policy dynamics of these training runs,
103
+ we plot the effective non-masked ratio of tokens in each training step, as reported by Verl.
104
+ We observe that the ratio of masked tokens grows faster for 2-step configurations
105
+ than for 1-step configuration. Notably, up to 3% of tokens are masked towards
106
+ the end of the training runs for Sync-2 and Async-2 configurations.
107
+
108
+ ![Rollout Correction](../../../assets/blog/async-rl-performance-optimization/rollout_corr_eff_sample_size.png)
109
+
110
+ In conclusion, training stability remains an important measurement
111
+ in asynchronous and off-policy RL, and further counter-measures might be needed in longer runs.