RL Environments

Run multiple RL actions in a single request

Executes up to 30 actions sequentially in a single HTTP round-trip, advancing the simulation by one step per action. Stops early and returns partial results if the episode ends (done: true) before all actions are processed.

Rate limiting: Each action in the batch counts as one call against the 5 000 req/hr RL training quota. A batch of 30 actions consumes 30 quota units. If the quota is exhausted mid-batch, the endpoint returns 429 with a Retry-After header indicating how many seconds remain until the window resets.

Idle TTL: The last successful batch-step call resets the environment's 2-hour idle timer, the same as a single step call.

post/rl/environments/{environmentId}/batch-step

Request

  • Base URL: https://www.cloudworldmodel.ai/api
  • URL: https://www.cloudworldmodel.ai/api/rl/environments/{environmentId}/batch-step
  • Auth: one of:
    • HTTP bearer
    • API key in header X-PAYMENT
    • API key in header PAYMENT-SIGNATURE

Path parameters

environmentIdstring uuid required

ID of the RL environment

Request body

Example request

{
  "steps": [
    {
      "action": {
        "parameters": {
          "cpuThreshold": 70,
          "throughputThreshold": 75,
          "latencyThreshold": 180
        }
      }
    }
  ]
}

Response

Batch steps executed successfully

Example response

{
  "results": [
    {
      "obs": {
        "rps": 1620,
        "cpu_util": 0.582,
        "instances": 3,
        "traffic": 1620,
        "currentTime": 15,
        "tick_seconds": 60,
        "unmodeled_dimensions_active": true,
        "warmup_factor": 0.5,
        "routedRps_per_node": 583.3,
        "unavailable_node_count": 1
      },
      "metrics": {
        "cost_usd_hr": 1.08,
        "latency_p95": 104,
        "error_rate": 0.003,
        "uptime": 0.997,
        "connection_pressure": 1.25,
        "compute": [
          {
            "warmup_factor": 0.5,
            "warmup_steps_remaining": 2
          }
        ],
        "error_breakdown": {
          "db_failure": 24
        },
        "ttft_p50_ms": 245,
        "decode_tokens_per_sec": 3840
      },
      "resources": [
        {
          "id": "ec2-1",
          "type": "compute",
          "name": "Web Server 1",
          "provider": "aws",
          "location": {
            "regionKey": "us-east-2"
          },
          "characteristics": {
            "workload": "crud",
            "appRuntime": "node",
            "appWorkerCount": 2,
            "appDbPoolSize": 250,
            "workloadDatabaseVersion": "8.0",
            "workloadDatabaseEngine": "mysql",
            "rdsSqlServerBilling": {
              "instanceClass": "db.t3.micro",
              "storageType": "gp2",
              "allocatedStorageGiB": 20,
              "durationHours": 480,
              "sustainedCpuPercent": 43
            },
            "serviceFamily": "ec2",
            "containerCpu": 0.5,
            "containerMemoryGiB": 1,
            "runtimeMemoryProfile": {
              "workingSetGiB": 0.78125
            },
            "concurrency": 80,
            "requestDurationSeconds": 0.25,
            "requestServingTargetUtilizationPct": 70,
            "billingState": "stopped",
            "size": "m5.large",
            "instanceType": "t3.medium",
            "ocpus": 4,
            "maxThroughput": 2000,
            "capacityRps": 100,
            "baseLatency": 3,
            "maxConnections": 800,
            "capacityGB": 500,
            "maxIops": 3000,
            "inferenceMode": true,
            "accelerator": "a10g",
            "managedComputePlatform": "nvidia-dgx-cloud",
            "openshiftOffering": "rosa-hcp",
            "topology": {
              "intraNode": "nvlink-nvswitch",
              "interNode": "infiniband"
            },
            "intraNode": "nvlink-nvswitch",
            "interNode": "infiniband",
            "includesControlPlane": true,
            "bundledNetworking": true,
            "trainingMode": true,
            "tokensPerRequest": 500,
            "inputTokensPerRequest": 1000,
            "cacheHitRate": 0.85,
            "cacheableRequestShare": 0.75,
            "asynchronousRequestShare": 0.15,
            "queueConsumerCount": 4,
            "queueDrainRatePerConsumerRps": 125,
            "queueCapacityMessages": 20000,
            "queueSimulationStepSeconds": 1,
            "autoscaling": true,
            "maxInstances": 5,
            "minInstances": 2,
            "scaleOutCpuThreshold": 60,
            "scaleInCpuThreshold": 25,
            "nodeCount": 2,
            "workerVcpu": 4,
            "minNodes": 2,
            "maxNodes": 10,
            "perNodeRate": 3.2,
            "pricingModel": "on-demand",
            "nodePools": [
              {
                "name": "general",
                "nodeCount": 2,
                "workerVcpu": 8,
                "minNodes": 2,
                "maxNodes": 10,
                "perNodeRate": 0.096,
                "maxThroughput": 10000
              }
            ],
            "streamShardsCount": 4,
            "streamWriteRps": 3500,
            "eventNotificationsEnabled": true,
            "partitionCount": 8,
            "streamPartitions": 4,
            "partitionWriteRps": 5000,
            "warmupSteps": 5,
            "warmupSeverity": 0.8
          },
          "routedRps": 15,
          "availabilityState": "available",
          "isRoutable": true,
          "failureParkStepsRemaining": 3,
          "recoveryPolicy": {
            "criticalCpuThreshold": 75,
            "criticalSteps": 2,
            "warningCpuThreshold": 60,
            "warningSteps": 1,
            "failureParkSteps": 2
          }
        }
      ]
    }
  ]
}

Changes

No recorded changes to this operation across all 1 revision of this API.