autocad-bench / docs /infrastructure-plugins.md
Dev Mandal
Initial open-source release
0be8f22
|
Raw
History Blame Contribute Delete
5.69 kB
# Infrastructure plugins
The batch controller does not launch workers directly. It resolves the
`infrastructure.backend` in a batch configuration and delegates admission,
launch-command construction, shared-process execution, trace publishing, and
final cleanup to that backend.
The built-in `aws` plugin preserves the existing EC2 + SSM behavior. External
packages can provide workers on another cloud, an on-premises Windows pool, or
a local virtualization system without changing the benchmark harness or
evaluator.
AWS dependencies are optional in packaged installations:
```bash
pip install "autocad-bench[aws]"
```
The base controller, harness, plugin API, and resume planner import without
`boto3` or `botocore`; a third-party backend supplies only its own SDK.
## Configuration
`backend` defaults to `aws` for compatibility, but every AWS resource is
operator-supplied. There are no repository-owned resource defaults:
```json
{
"infrastructure": {
"backend": "aws",
"broker_version": "windows-autocad-2019-v10",
"image_id": "ami-...",
"subnet_ids": ["subnet-..."],
"security_group_id": "sg-...",
"instance_profile_name": "AutoCADBenchWorkerProfile",
"instance_type": "g4dn.xlarge",
"aws_region": "us-east-1"
},
"evaluation": {
"bucket": "my-autocad-bench-bucket"
}
}
```
`aws_profile` is optional. When omitted, boto3 and the AWS CLI use their
standard credential chain. Automatic AWS evaluation is enabled by default and
requires an explicit bucket in the operator's account. Set
`"evaluation": {"enabled": false}` only when deliberately running without the
trusted automatic evaluator.
Third-party backends put backend-owned values in `settings`:
```json
{
"infrastructure": {
"backend": "my-windows-pool",
"broker_version": "windows-autocad-2019-v10",
"settings": {
"pool": "autocad-2019",
"controller_url_env": "WINDOWS_POOL_URL"
}
}
}
```
Do not put credentials in `settings`; reference environment variables or the
backend's native credential provider.
## Plugin contract
Implement `autocad_bench.infrastructure.InfrastructurePlugin`. The controller
calls its methods in this order:
1. `validate_spec` checks configuration without changing external state.
2. `preflight` performs read-only capacity and worker-image checks.
3. `build_rollout_command` wraps the infrastructure-neutral harness command in
one command that owns the worker lifecycle.
4. `run_shared` runs that command when the controller is configured for
in-process execution. Subprocess mode executes the returned command
directly.
5. `create_trace_publisher` optionally mirrors live artifacts when trace
streaming is configured.
6. `reap_batch` performs idempotent best-effort cleanup after all rollouts.
The complete protocol and request models live in
`src/autocad_bench/infrastructure/`. A backend must:
- isolate simultaneous rollouts from each other;
- make the configured desktop broker reachable by the child harness;
- execute the exact `RolloutLaunchRequest.child_command`;
- preserve the requested output directory and process exit code;
- never expose evaluator inputs or credentials to the model-visible desktop;
- make cleanup idempotent, including after a partially failed launch.
The plugin receives evaluation arguments separately because the lifecycle
wrapper, not the model harness, owns trusted DWG retrieval and evaluation.
Trace publishing is enabled with `AUTOCAD_BENCH_TRACE_DESTINATION` and an
optional `AUTOCAD_BENCH_TRACE_PREFIX`. The AWS plugin also accepts the legacy
`AUTOCAD_BENCH_TRACE_S3_BUCKET` and `AUTOCAD_BENCH_TRACE_S3_PREFIX` names.
## Registration
Publish the implementation as a Python entry point whose name matches
`InfrastructurePlugin.name`:
```toml
[project.entry-points."autocad_bench.infrastructure"]
my-windows-pool = "my_autocad_backend:WindowsPoolPlugin"
```
After installing that package in the same environment as AutoCAD Bench, use
`"backend": "my-windows-pool"` in the batch config. Entry points are loaded
only when selected. Applications embedding the controller can instead use
`register_infrastructure_plugin()` for an in-process registration.
The batch state and preflight report record `infrastructure_backend`, making
mixed-backend result directories auditable.
## Interrupted-run recovery
Recovery is an optional second protocol. Backends that support
`autocad-bench-resume` implement
`autocad_bench.infrastructure.InfrastructureRecoveryPlugin` in addition to the
standard lifecycle contract:
1. `validate_recovery_spec` validates reconnect-only settings.
2. `create_recovery_session` creates the recovery control-plane client.
3. `list_active_workers` maps rollout IDs to backend worker IDs for a batch.
4. `worker_id_from_log` supports legacy runs that predate durable batch worker
indexing.
5. `worker_status` determines whether a discovered worker can be reconnected.
6. `build_recovery_command` wraps the infrastructure-neutral harness resume
command.
7. `terminate_worker` idempotently releases a completed or exhausted worker.
New batch states persist the selected infrastructure spec. Recovery plans copy
that spec into every entry, use the backend-neutral `worker_id`, and can contain
entries from multiple backends. AWS plans retain `instance_id`,
`instance_state`, and `instance_termination_requested` as compatibility aliases
for existing controller tooling.
A backend that intentionally does not support interrupted-session recovery can
implement only `InfrastructurePlugin`. Normal batch cleanup still works, while
`autocad-bench-resume` fails explicitly instead of applying another backend's
recovery semantics.