Skip to content

Docs

Search docs

Product

Private RL

Run the same agent many times on the same immutable environment version, inside your organization. Failed attempts keep their logs, trajectories, and PRIVATE export.

Private RL means you run the same agent many times on the same immutable environment version, inside your organization. When scores are poor, AgentForge keeps the evidence: trial logs, trajectory artifacts, and rollout export for every failed attempt. Nothing here is a public leaderboard. Privacy class on the export is PRIVATE.

Repeated rollouts

Two knobs exist today. attemptCount (1–8) on the evaluator configuration runs independent trials in one job and stores pass@k. Reset enqueues a new job against the same environment_versions row (new_workspace or new_world). Both paths write evaluation_trials and, when present, rollouts.reward. The control plane does not sample a stream processor; it reads Postgres rows scoped by organization_id.

Logs and trajectories

For each trial the worker writes trial-{n}-trajectory.json with a truncated log and a trajectory payload (steps: tool, command, observation). That artifact is stored org-scoped and linked as trajectory_artifact_id on the trial. Failed attempts are first-class rows. There is no “only keep the best run” filter in the worker.

trial-1-trajectory.json (worker artifact)

{
  "schemaVersion": 1,
  "log": "opened admin-console … placed ORD-8841",
  "trajectory": "{\"steps\":[{\"step\":1,\"tool\":\"mcp\",\"command\":\"initialize\",\"observation\":\"…\"}]}"
}

PRIVATE export

GET /api/v1/rollouts requires a session. RLS keeps other orgs’ rollouts out. Query kind is all | successful | failed | recovery | preference (RolloutExportKindSchema). The response is NDJSON, Content-Disposition attachment, privacyClass PRIVATE. Failed means reward is not null and reward < 1. Recovery means 0 < reward < 1. Successful means reward === 1. Preference emits pairs: highest versus lowest scored rollout on the same environment version.

GET /api/v1/rollouts
kindFilenameContents
allagentforge-rollouts-all.jsonlUp to 1000 recent rollouts, ATIF-shaped when trial steps exist
successfulagentforge-rollouts-successful.jsonlreward === 1
failedagentforge-rollouts-failed.jsonlEvery scored miss, including partial credit
recoveryagentforge-rollouts-recovery.jsonlPartial credit only
preferenceagentforge-preferences.jsonlpreferred / rejected ids plus rewards

Failed rollout line

GET /api/v1/rollouts?kind=failed

{"schemaVersion":1,"privacyClass":"PRIVATE","format":"atif-shaped","rolloutId":"…","seed":0,"reward":0.15,"evaluationRunId":"…","trajectory":[{"step":1,"tool":"mcp","command":"initialize","observation":"…"}]}

Single rollout + worker-written stage_* keys

GET /api/v1/rollouts/{id}

{
  "id": "…",
  "seed": 0,
  "reward": 0.15,
  "environmentVersionId": "…",
  "evaluationRunId": "…",
  "stages": { "stage_inventory": 1, "stage_checkout": 0 }
}

From the workspace

  • Environments → Export lists the same kind URLs (all, successful, failed, recovery, preference).
  • Capability gap counts real failure_category values from trials. It does not invent a pie chart.
  • Partial rewards lists stage_* keys only after the worker wrote metrics.

Create an account

Private RL · Docs · AgentForge