This document details the JSON schema for defining individual experimental trials. In the directory structure, this file is named trial.jsonl.
Each JSON object represents one "trial" which can present one or more stimuli (e.g., text, image, or video) and then ask the user one or more questions. The trial.jsonl file contains one JSON object per line.
As shown in the image above, the interface is divided into two panels: the left panel displays the stimuli, and the right panel displays the queries. The trial object consists of two main arrays of objects that correspond to these components: the stimuli array for the left panel and the queries array for the right panel.
The root object of a single trial contains the following key properties:
| Key | Type | Description |
|---|---|---|
stimuli_id |
String | A unique identifier for this specific trial or stimulus (e.g., "trial_005"). This ID is used in the config.json file. |
stimuli |
Array of Objects |
Ordered list of stimuli to present for this trial. Each stimulus object must include:
|
queries |
Array of Objects | This is the most important part. It's an array where each object represents a single question or prompt for the user. See Section 3.2 below for details. |
delay |
Number | Optional. If specified, delays the display of the queries by N milliseconds after the stimulus is shown. Useful for controlling pacing in experiments. |
Here is an example of a complete trial object that shows an image, followed by a short text blurb, then asks two questions: one multiple-choice and one slider.
{
"stimuli_id": "trial_balls_01",
"stimuli": [
{
"input_type": "img",
"media_url": ["assets/balls.jpg"]
},
{
"input_type": "text",
"text": "Observe the agent's action in the image above."
}
],
"queries": [
{
"prompt": "Which ball appears bigger?",
"type": "multi-choice",
"tag": "ball_size",
"option": [
"Blue Ball",
"Red Ball",
"Equal Size"
],
"randomize_order": false,
"required": true
},
{
"prompt": "How confident are you in your answer?",
"type": "single-slider",
"tag": "goal_confidence",
"slider_config": {
"min": 0,
"max": 100,
"default_value": 50,
"labels": [
{ "value": 0, "label": "Not at all confident" },
{ "value": 100, "label": "Completely confident" }
],
"show_label_values": true
},
"randomize_order": false,
"required": true
}
]
}
For an example with multiple media URLs and dimensions, see Appendix A.1.
Observe the agent's action in the image above.
Which ball appears bigger?*
How confident are you in your answer?*: 50
The queries array defines each prompt or question. All query objects include at least prompt, type, and optional required. The full argument list is specified per query type below.
Displays informative text only (no response is collected). Use this to insert explanatory copy between questions.
| Argument | Type | Required | Description |
|---|---|---|---|
prompt | String (HTML allowed) | Yes | Text to display. |
type | String | Yes | Must be "text-instruction". |
required | Boolean | No | Ignored for this type. |
{
"prompt": "In the next questions, you'll evaluate the agent's beliefs.",
"type": "text-instruction"
}
Multiple-choice queries allow participants to select from a list of options. This query type has two variants: single-select (radio buttons) and multi-select (checkboxes).
Presents radio buttons; user selects exactly one choice.
| Argument | Type | Required | Description |
|---|---|---|---|
prompt | String | Yes | Question text. |
type | String | Yes | Use "multi-choice". |
tag | String | Yes | Storage key. |
option | Array<String> | Yes | Choices to display. |
randomize_order | Boolean | No | Shuffle options per participant. |
required | Boolean | No | Must answer before continuing. |
answer | Number | No | 0-based index of correct option (for quizzes). |
{
"prompt": "What is the capital of France?",
"type": "multi-choice",
"tag": "capital_choice",
"option": [
"London",
"Berlin",
"Paris",
"Madrid"
],
"randomize_order": true,
"required": true
}
What is the capital of France?*
Presents checkboxes; user can select one or more choices.
| Argument | Type | Required | Description |
|---|---|---|---|
prompt | String | Yes | Question text. |
type | String | Yes | Use "multi-select". |
tag | String | Yes | Storage key. |
option | Array<String> | Yes | Choices to display. |
randomize_order | Boolean | No | Shuffle options per participant. |
required | Boolean | No | Must answer before continuing. |
{
"prompt": "Which numbers are greater than 10?",
"type": "multi-select",
"tag": "numbers_gt_10",
"option": [
"5",
"12",
"8",
"15",
"3",
"20"
],
"randomize_order": false,
"required": true
}
Which numbers are greater than 10?*
Single or multiple sliders for ratings.
Presents one slider (no option list). Requires slider_config.
| Argument | Type | Required | Description |
|---|---|---|---|
prompt | String | Yes | Question text. |
type | String | Yes | Use "single-slider". |
tag | String | Yes | Storage key. |
slider_config | Object | Yes | See Appendix A.2: Slider Config. |
required | Boolean | No | Must answer before continuing. |
{
"prompt": "How confident are you?",
"type": "single-slider",
"tag": "confidence_rating",
"slider_config": {
"min": 0,
"max": 100,
"default_value": 50,
"labels": [
{ "value": 0, "label": "Not at all" },
{ "value": 100, "label": "Completely" }
],
"show_label_values": true
},
"required": true
}
How confident are you?*: 50
Presents one slider per item in option. Requires slider_config. Optionally show a random subset via sampling_size.
| Argument | Type | Required | Description |
|---|---|---|---|
prompt | String | Yes | Instruction for the ratings. |
type | String | Yes | Use "multi-slider". |
tag | String | Yes | Storage key. |
option | Array<String> | Yes | Labels for each slider. |
slider_config | Object | Yes | See Appendix A.2: Slider Config. |
sampling_size | Number | No | Randomly show only N options per participant. |
randomize_order | Boolean | No | Shuffle the order of option items. |
required | Boolean | No | Must answer before continuing. |
{
"prompt": "Please rate how likely each of the following statements is to be true",
"type": "multi-slider",
"tag": "statement_ratings",
"option": [
"I am more easily convinced by data and reasoning than by emotional appeals.",
"I feel stressed when my environment is disorganized or messy.",
"I usually think out loud and test ideas by talking them through."
],
"slider_config": {
"min": 0,
"max": 100,
"default_value": 50,
"labels": [
{ "value": 0, "label": "Strongly disagree" },
{ "value": 50, "label": "Neutral" },
{ "value": 100, "label": "Strongly agree" }
],
"show_label_values": true
},
"randomize_order": false,
"required": true
}
Please rate how likely each of the following statements is to be true*
I am more easily convinced by data and reasoning than by emotional appeals. (Value: 50)
I feel stressed when my environment is disorganized or messy. (Value: 50)
I usually think out loud and test ideas by talking them through. (Value: 50)
Provides a free-response text area for the user to type in an answer.
| Argument | Type | Required | Description |
|---|---|---|---|
prompt | String | Yes | Question text. |
type | String | Yes | Use "textbox". |
tag | String | Yes | Storage key. |
required | Boolean | No | Must answer before continuing. |
{
"prompt": "Please describe the agent's behavior.",
"type": "textbox",
"tag": "agent_description",
"required": true
}
Presents a list of items from the option array that the user can drag and drop to rank in order. The user must rank all items.
| Argument | Type | Required | Description |
|---|---|---|---|
prompt | String | Yes | Instruction to rank items. |
type | String | Yes | Use "ranking". |
tag | String | Yes | Storage key. |
option | Array<String> | Yes | Items to rank. |
randomize_order | Boolean | No | Shuffle items before ranking. |
required | Boolean | No | Must complete ranking. |
{
"prompt": "Rank the following goals in order of importance (drag to reorder):",
"type": "ranking",
"tag": "goal_ranking",
"option": [
"Finding the key",
"Avoiding obstacles",
"Reaching the exit",
"Collecting coins"
],
"randomize_order": true,
"required": true
}
Rank the following goals in order of importance (drag to reorder):*
(Drag items to reorder)