Skip to main content
Tasks and splits are how ORS organises problems for training and evaluation. Tasks are the individual problems agents solve, while splits categorize these tasks into organised units - for example train/test splits, or splits for different types of problem (e.g. those which requires CPUs versus GPUs).

Tasks

What is a Task?

A task is a specific problem for an agent to solve. Each task is represented as a JSON object with task-specific data.

Task Examples

Math environment:
Coding environment:
Web navigation:

Task Lifecycle

Accessing Tasks

The simplest way to retrieve tasks is to list all tasks in a split:
Response:
For large datasets, loading all tasks at once is wasteful. Use these endpoints for efficient access: Count tasksPOST /{env_name}/num_tasks:
Returns the number of tasks in a split. Get a single taskPOST /{env_name}/get_task:
Returns the task at a specific index. Get a range of tasksPOST /{env_name}/get_task_range:
Returns tasks in the range [start, stop). Both start and stop are optional.
The server validates split names on all task endpoints and returns 400 for invalid splits.

Task as Episode Input

Tasks are passed when creating episodes. You can provide the task inline via task_spec, or reference it by split and index:
Or load directly from a split (the server resolves the task):
All fields are optional: env_name defaults to the first registered environment, secrets defaults to {}. Exactly one of task_spec or split+index must be provided (see CreateSession). The environment uses the task to:
  • Generate the initial prompt
  • Determine correct answers
  • Calculate rewards
  • Track episode progress

Splits

What is a split?

A split is a named category of tasks. Splits organise tasks for different purposes in ML workflows. An example split structure:
  • train - Tasks for training
  • validation - Tasks for hyperparameter tuning
  • test - Tasks for evaluation

Split Structure

Examples:

Accessing Splits

List available splits:
Response:
Then request tasks from a specific split:

Custom Splits

Environments can define custom splits beyond train/validation/test:
Use cases:
  • Difficulty-based splits (easy/medium/hard)
  • Domain-specific splits (algebra/geometry/calculus)
  • Time-based splits (before_2020/after_2020)
  • Resource-based splits (CPU/GPU sandboxes)
Type defaults: Environments can return splits as either Split objects or bare strings. The server normalises bare strings: "train", "validation", and "test" map to their corresponding type, while any other name defaults to "type": "validation". Convention: When using Split objects explicitly, map to standard types:
  • Training-related → "type": "train"
  • Evaluation-related → "type": "test"
  • Tuning-related → "type": "validation"

Next Steps

Tools

Design tools for solving tasks

Rewards

Create reward signals for tasks

Implementing a Server

Build an ORS server with tasks

HTTP API

See how tasks are accessed via API

Key Takeaway: Tasks are the problems agents solve. Splits organize tasks for proper ML workflows. Design task structures that are clear, validated, and organized into train/test splits to enable both learning and fair evaluation.