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.
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/.gitignore +18 -0
- agentcore_rl_toolkit-0.1.4/NOTICE +29 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/PKG-INFO +66 -9
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/README.md +22 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/async-rl-performance-optimization/async_rl.png +0 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/async-rl-performance-optimization/inference_throughput_and_concurrency.png +0 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/async-rl-performance-optimization/reward_curve.png +0 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/async-rl-performance-optimization/rollout_corr_eff_sample_size.png +0 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/async-rl-performance-optimization/sync_rl.png +0 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/data-synthesis-v0/fig_action_difficulty_depth.png +0 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/data-synthesis-v0/fig_cost_vs_performance.png +0 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/data-synthesis-v0/fig_rl_buckets_telecom.png +0 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/data-synthesis-v0/fig_system_workflow.png +0 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/variable-rows-linear-mode/linear-efficiency.png +0 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/variable-rows-linear-mode/optimizer-reward.png +0 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/examples/openhands-swegym-agent/latency_breakdown.png +0 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/examples/openhands-swegym-agent/reward_curve.png +0 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/examples/openhands-swegym-agent/setup_run_pipeline.png +0 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/assets/examples/openhands-swegym-agent/swe_agent_design.png +0 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/api/backends/slime/runner.md +26 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/api/core/client.md +1 -1
- agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/blog/async-rl-performance-optimization.md +111 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/blog/data-synthesis-v0.mdx +439 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/blog/index.mdx +19 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/blog/training-multi-step-agents-rl.mdx +410 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/blog/variable-rows-linear-mode.mdx +312 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/examples/index.mdx +2 -0
- agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/examples/openhands-swegym-agent.md +277 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/guides/overview.mdx +11 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/guides/rllm-backend-setup.md +1 -1
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/guides/slime-backend-setup.md +39 -36
- agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/guides/verl-backend-setup.md +141 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/index.mdx +1 -1
- agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/troubleshooting/slime.md +32 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/styles/custom.css +25 -0
- agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/app.py +62 -0
- agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/evaluation.py +156 -0
- agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/noop_agent.py +43 -0
- agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/observability.py +312 -0
- agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/open_hands_agent.py +247 -0
- agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/oracle_agent.py +55 -0
- agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/prompts/benchmarks_r2.j2 +64 -0
- agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/prompts/system_prompt.j2 +1 -0
- agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/rollout.py +87 -0
- agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/strands_agent.py +263 -0
- agentcore_rl_toolkit-0.1.4/examples/openhands_swe_agent/src/swe_agent_server/utils.py +15 -0
- agentcore_rl_toolkit-0.1.4/pyproject.toml +267 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/__init__.py +5 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/app.py +11 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/__init__.py +6 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/agentcore_control.py +366 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/agentcore_tools.py +265 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/boto3_tools.py +273 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/dynamodb_control.py +162 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/dynamodb_tools.py +154 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/ec2_monitor.py +230 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/ec2_tools.py +83 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/ecr_control.py +200 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/iam_control.py +184 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/persistent_dict.py +197 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/aws_tools/s3_tools.py +12 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/__init__.py +6 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/slime/examples/math_agent/SETUP.md +36 -0
- {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
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/slime/examples/math_agent/train.sh +132 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/slime/integration/__init__.py +0 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/slime/integration/rewards.py +49 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/slime/integration/rollout.py +202 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/slime/scripts/install_slime.sh +86 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/verl/__init__.py +6 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/verl/config.py +51 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/verl/rollout_session_agent_loop.py +595 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/verl/rollout_session_resources.py +125 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/experimental/verl/task_runner.py +30 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/SETUP.md +65 -94
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/slime/examples/math_agent/config.yaml.example +46 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/slime/examples/math_agent/train.sh +153 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/slime/integration/__init__.py +0 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/integration/gateway.py +49 -1
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/integration/rollout.py +191 -54
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/slime/integration/traces.py +288 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/runner.py +68 -3
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/slime/scripts/install_slime.sh +118 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/README.md +102 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/__init__.py +1 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/data.py +114 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/examples/math_agent/config.json.example +27 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/examples/math_agent/prepare_data.py +26 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/.gitignore +4 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/README.md +133 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/aws_setup.py +238 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/backend_config.json +32 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/deploy.py +205 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/endpoint.yaml +22 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/environment.sh +22 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/pyproject.toml +13 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/serve.sh +20 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/skyrl/setup.sh +27 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/tinker_api/train.py +434 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/README.md +306 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/__init__.py +24 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/agent_loop.py +448 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/dataset.py +70 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/math_agent/agentcore_agent.yaml +33 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/math_agent/fsdp_fft_sync_grpo.sh +109 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/math_agent/fsdp_lora_sync_grpo.sh +82 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/math_agent/megatron_lora_sync_grpo.sh +96 -0
- {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
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/migration_agent/README.md +44 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/migration_agent/agentcore_agent.yaml +16 -0
- 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
- 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
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/migration_agent/preprocess_migrationbench.py +127 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/README.md +213 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/async_separate_b1.yaml +10 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/async_separate_b2.yaml +10 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/cluster_hybrid.yaml +5 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/cluster_trainer2_rollout1.yaml +15 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/cluster_trainer_rollout_n1.yaml +12 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/cluster_trainer_rollout_n2.yaml +15 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/cluster_trainer_rollout_n4.yaml +15 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/dataset_swe_gym.yaml +15 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/lora.yaml +14 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/main.yaml +33 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/megatron.yaml +6 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/megatron_offload.yaml +8 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/megatron_recompute.yaml +11 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/qwen3_30b_p5.yaml +36 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/qwen3_30b_p6.yaml +39 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/rollout_correction_decoupled.yaml +9 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/rollout_session_agent_loop.yaml +57 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/smart_ppo.yaml +58 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/sync_b1.yaml +9 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/config/sync_b2.yaml +9 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/examples/swe_agent/main.py +44 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/gateway_host.py +202 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/sampling_backend.py +124 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/trainer.py +89 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/trainer_mixins/__init__.py +13 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/trainer_mixins/advantage_metrics.py +107 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/trainer_mixins/agent_loop_metrics.py +101 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/trainer_mixins/base.py +25 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/trainer_mixins/round_robin_agent_loop_dispatch.py +53 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/backends/verl/trainer_mixins/variable_row_batching.py +149 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/client.py +5 -56
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/concurrency/__init__.py +5 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/concurrency/priority_assigner.py +31 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/concurrency/priority_semaphore.py +124 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/concurrency/rate_limiter.py +65 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/concurrency/ray_adapters.py +88 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/__init__.py +54 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/adapters/__init__.py +7 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/adapters/anthropic.py +357 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/adapters/common.py +537 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/adapters/openai.py +382 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/gateway.py +152 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/linear.py +316 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/parsing.py +100 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/render.py +395 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/response_schemas.py +270 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/sampling_backends/__init__.py +14 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/sampling_backends/base.py +36 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/sampling_backends/sglang_http.py +89 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/sampling_backends/tinker_sdk.py +66 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/sampling_backends/vllm_http.py +133 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/server.py +118 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/trace.py +81 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_gateway/trajectory.py +427 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/__init__.py +5 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/a2a_client.py +284 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/a2a_executor.py +124 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/a2a_protocol.py +109 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/agentcore_a2a_session.py +82 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/agentcore_http_session.py +70 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/agentcore_s3_session.py +376 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/docker_a2a_session.py +139 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/errors.py +31 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/exception_utils.py +53 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/factory.py +89 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/lifecycle.py +120 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/rollout_session/wire.py +29 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/runtime/__init__.py +6 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/runtime/app.py +132 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/runtime/client.py +213 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/runtime/protocol.py +53 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/runtime/store.py +54 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/sandbox/__init__.py +18 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/sandbox/client.py +430 -0
- agentcore_rl_toolkit-0.1.4/src/agentcore_rl_toolkit/sandbox/types.py +36 -0
- agentcore_rl_toolkit-0.1.3/NOTICE +0 -1
- agentcore_rl_toolkit-0.1.3/docs/site/src/content/docs/api/backends/slime/patches.md +0 -68
- agentcore_rl_toolkit-0.1.3/docs/site/src/content/docs/guides/verl-backend-setup.md +0 -159
- agentcore_rl_toolkit-0.1.3/docs/site/src/content/docs/troubleshooting/slime.md +0 -72
- agentcore_rl_toolkit-0.1.3/docs/site/src/content/docs/troubleshooting/verl.md +0 -14
- agentcore_rl_toolkit-0.1.3/pyproject.toml +0 -112
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/slime/examples/math_agent/train.sh +0 -120
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/slime/integration/traces.py +0 -127
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/slime/patches/sglang_token_ids.py +0 -696
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/slime/patches/verify_sglang_token_ids.py +0 -539
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/__init__.py +0 -44
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/config/agentcore_grpo.yaml +0 -71
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/config.py +0 -64
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/dataset.py +0 -26
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/examples/math_agent/run_agentcore_grpo.sh +0 -89
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/llm_server.py +0 -164
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/loop_manager.py +0 -556
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/main.py +0 -132
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/scripts/install_megatron.sh +0 -41
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/backends/verl/trainer.py +0 -681
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/frameworks/strands/__init__.py +0 -3
- agentcore_rl_toolkit-0.1.3/src/agentcore_rl_toolkit/frameworks/strands/vllm_model.py +0 -110
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/LICENSE +0 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/assets/houston.webp +0 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/api/core/app.md +0 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/api/core/reward.md +0 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/api/index.md +0 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/examples/strands-appworld-agent.md +0 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/examples/strands-math-agent.md +0 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/examples/strands-migration-agent.md +0 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/examples/strands-officebench-agent.md +0 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/guides/agent-adaptation.mdx +0 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content/docs/troubleshooting/rllm.md +0 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/docs/site/src/content.config.ts +0 -0
- /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
- {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
- {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
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/__init__.py +0 -0
- {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
- {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
- {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
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/backends/slime/integration/rewards.py +0 -0
- {agentcore_rl_toolkit-0.1.3 → agentcore_rl_toolkit-0.1.4}/src/agentcore_rl_toolkit/logging.py +0 -0
- {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.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: agentcore-rl-toolkit
|
|
3
|
-
Version: 0.1.
|
|
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.
|
|
16
|
+
Requires-Python: >=3.11
|
|
18
17
|
Requires-Dist: bedrock-agentcore-starter-toolkit>=0.2.0
|
|
19
|
-
Requires-Dist: bedrock-agentcore>=1.
|
|
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:
|
|
40
|
-
Requires-Dist:
|
|
41
|
-
Requires-Dist:
|
|
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
|
|
agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/async-rl-performance-optimization/async_rl.png
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/async-rl-performance-optimization/sync_rl.png
ADDED
|
Binary file
|
|
Binary file
|
agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/data-synthesis-v0/fig_cost_vs_performance.png
ADDED
|
Binary file
|
agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/data-synthesis-v0/fig_rl_buckets_telecom.png
ADDED
|
Binary file
|
agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/data-synthesis-v0/fig_system_workflow.png
ADDED
|
Binary file
|
agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/variable-rows-linear-mode/linear-efficiency.png
ADDED
|
Binary file
|
agentcore_rl_toolkit-0.1.4/docs/site/src/assets/blog/variable-rows-linear-mode/optimizer-reward.png
ADDED
|
Binary file
|
|
Binary file
|
agentcore_rl_toolkit-0.1.4/docs/site/src/assets/examples/openhands-swegym-agent/reward_curve.png
ADDED
|
Binary file
|
|
Binary file
|
agentcore_rl_toolkit-0.1.4/docs/site/src/assets/examples/openhands-swegym-agent/swe_agent_design.png
ADDED
|
Binary file
|
|
@@ -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)*
|
agentcore_rl_toolkit-0.1.4/docs/site/src/content/docs/blog/async-rl-performance-optimization.md
ADDED
|
@@ -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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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.
|