Get Episode
curl --request GET \
--url https://softmax.com/api/observatory/episodes/{episode_id}import requests
url = "https://softmax.com/api/observatory/episodes/{episode_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://softmax.com/api/observatory/episodes/{episode_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://softmax.com/api/observatory/episodes/{episode_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://softmax.com/api/observatory/episodes/{episode_id}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://softmax.com/api/observatory/episodes/{episode_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://softmax.com/api/observatory/episodes/{episode_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"replay_url": "<string>",
"thumbnail_url": "<string>",
"tags": {},
"game_stats": {
"objects.agent.agent": 10,
"objects.aligner_station": 1,
"objects.carbon_extractor": 48,
"objects.chest": 2,
"objects.hub": 1,
"objects.junction": 107,
"objects.wall": 3304,
"tokens_dropped": 0,
"tokens_free_space": 1622361,
"tokens_written": 379639
},
"policy_results": [
{
"position": 123,
"policy": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"version": 123
},
"num_agents": 123,
"avg_reward": 123,
"avg_metrics": {},
"agents": [
{
"agent_id": 123,
"reward": 123,
"metrics": {
"action.move.failed": 51,
"action.move.success": 623,
"action.noop.success": 326,
"energy.amount": 8,
"energy.gained": 1954,
"energy.lost": 1946,
"hp.amount": 67,
"hp.gained": 1075,
"hp.lost": 1008,
"junction.aligned_by_agent": 2,
"status.max_steps_without_motion": 17
}
}
]
}
],
"steps": 123,
"created_at": "2023-11-07T05:31:56Z"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}episodes
Get Episode
GET
/
episodes
/
{episode_id}
Get Episode
curl --request GET \
--url https://softmax.com/api/observatory/episodes/{episode_id}import requests
url = "https://softmax.com/api/observatory/episodes/{episode_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://softmax.com/api/observatory/episodes/{episode_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://softmax.com/api/observatory/episodes/{episode_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://softmax.com/api/observatory/episodes/{episode_id}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://softmax.com/api/observatory/episodes/{episode_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://softmax.com/api/observatory/episodes/{episode_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"replay_url": "<string>",
"thumbnail_url": "<string>",
"tags": {},
"game_stats": {
"objects.agent.agent": 10,
"objects.aligner_station": 1,
"objects.carbon_extractor": 48,
"objects.chest": 2,
"objects.hub": 1,
"objects.junction": 107,
"objects.wall": 3304,
"tokens_dropped": 0,
"tokens_free_space": 1622361,
"tokens_written": 379639
},
"policy_results": [
{
"position": 123,
"policy": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"version": 123
},
"num_agents": 123,
"avg_reward": 123,
"avg_metrics": {},
"agents": [
{
"agent_id": 123,
"reward": 123,
"metrics": {
"action.move.failed": 51,
"action.move.success": 623,
"action.noop.success": 326,
"energy.amount": 8,
"energy.gained": 1954,
"energy.lost": 1946,
"hp.amount": 67,
"hp.gained": 1075,
"hp.lost": 1008,
"junction.aligned_by_agent": 2,
"status.max_steps_without_motion": 17
}
}
]
}
],
"steps": 123,
"created_at": "2023-11-07T05:31:56Z"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Path Parameters
Response
Successful Response
Unique episode identifier
URL to the episode replay recording
URL to a thumbnail image of the episode
Key-value tags attached to this episode. Common keys: game (game name, e.g. 'cogsguard'), match_type (e.g. 'self_play', 'pairing'), job_id, scheduler_git_ref.
Show child attributes
Show child attributes
Game-level aggregate statistics. Keys include object counts (objects., e.g. objects.junction, objects.wall, objects.agent.agent, objects.hub, objects.chest, objects._extractor, objects._station) and observation token stats (tokens_written, tokens_dropped, tokens_free_space).
Show child attributes
Show child attributes
Example:
{ "objects.agent.agent": 10, "objects.aligner_station": 1, "objects.carbon_extractor": 48, "objects.chest": 2, "objects.hub": 1, "objects.junction": 107, "objects.wall": 3304, "tokens_dropped": 0, "tokens_free_space": 1622361, "tokens_written": 379639 }
Results broken down by policy
Show child attributes
Show child attributes
Number of environment steps in the episode
When the episode was recorded