Spaces:
Running
Running
Refresh research portal with paired videos and complete execution records
Browse filesReference-style layout, native-frame-preserving dual-view videos, instruction/session/tool/artifact inspection, and audited token usage with explicitly estimated API-equivalent costs. Existing experiment outcomes and source evidence are preserved.
- .gitattributes +9 -0
- README.md +9 -1
- app.js +130 -138
- data/b0/detail.json +71 -0
- data/b0/frame-mapping.json +45 -0
- data/b0/instruction.txt +1 -0
- data/b0/media.json +26 -0
- data/b0/poster.jpg +3 -0
- data/b0/terminal.jpg +3 -0
- data/b0/tool-calls.json +1 -0
- data/b0/usage.json +43 -0
- data/b0/verdict.json +17 -0
- data/b0/video.mp4 +3 -0
- data/b1/artifacts/.kinex/memos/libero_spatial.md +9 -0
- data/b1/artifacts/.kinex/tools/tabletop_motion.py +56 -0
- data/b1/detail.json +491 -0
- data/b1/frame-mapping.json +306 -0
- data/b1/instruction.txt +45 -0
- data/b1/media.json +26 -0
- data/b1/poster.jpg +3 -0
- data/b1/terminal.jpg +3 -0
- data/b1/tool-calls.json +1561 -0
- data/b1/usage.json +450 -0
- data/b1/verdict.json +17 -0
- data/b1/video.mp4 +3 -0
- data/b2/artifacts/.kinex/memos/libero-spatial-bowl.md +3 -0
- data/b2/detail.json +142 -0
- data/b2/frame-mapping.json +46 -0
- data/b2/instruction.txt +38 -0
- data/b2/media.json +26 -0
- data/b2/poster.jpg +3 -0
- data/b2/terminal.jpg +3 -0
- data/b2/tool-calls.json +349 -0
- data/b2/usage.json +107 -0
- data/b2/verdict.json +17 -0
- data/b2/video.mp4 +3 -0
- data/manifest.json +136 -16
- data/report.json +21 -3
- index.html +18 -37
- style.css +5 -4
.gitattributes
CHANGED
|
@@ -42,3 +42,12 @@ data/b1/third_person.mp4 filter=lfs diff=lfs merge=lfs -text
|
|
| 42 |
data/b1/wrist.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 43 |
data/b2/third_person.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 44 |
data/b2/wrist.mp4 filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
data/b1/wrist.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 43 |
data/b2/third_person.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 44 |
data/b2/wrist.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
data/b0/poster.jpg filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
data/b0/terminal.jpg filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
data/b0/video.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 48 |
+
data/b1/poster.jpg filter=lfs diff=lfs merge=lfs -text
|
| 49 |
+
data/b1/terminal.jpg filter=lfs diff=lfs merge=lfs -text
|
| 50 |
+
data/b1/video.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 51 |
+
data/b2/poster.jpg filter=lfs diff=lfs merge=lfs -text
|
| 52 |
+
data/b2/terminal.jpg filter=lfs diff=lfs merge=lfs -text
|
| 53 |
+
data/b2/video.mp4 filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -38,7 +38,10 @@ Earlier pilot experiments used a different protocol and are not pooled here.
|
|
| 38 |
The page provides both camera videos, observable agent sessions, VLA invocation
|
| 39 |
arguments and returns, policy input images, predicted action chunks, and executed
|
| 40 |
action CSVs. B1's joint commands are in its session; it has no OSC action rows.
|
| 41 |
-
|
|
|
|
|
|
|
|
|
|
| 42 |
Native success is a separate evaluator result; the VLA does not report semantic
|
| 43 |
completion. Internal reasoning blocks, credentials, host-local paths and private
|
| 44 |
simulator state are excluded. Session tool IDs are remapped to local identifiers.
|
|
@@ -47,6 +50,11 @@ simulator state are excluded. Session tool IDs are remapped to local identifiers
|
|
| 47 |
SHA-256 checksums of all other exported files. Each episode includes the hash of
|
| 48 |
its retained native evidence archive.
|
| 49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 50 |
Future training runs are assigned to the W&B team `programmable_vla`, project
|
| 51 |
`program_VLA`: https://forge.coreweave.com/wandb/programmable_vla
|
| 52 |
This release contains evaluation evidence only.
|
|
|
|
| 38 |
The page provides both camera videos, observable agent sessions, VLA invocation
|
| 39 |
arguments and returns, policy input images, predicted action chunks, and executed
|
| 40 |
action CSVs. B1's joint commands are in its session; it has no OSC action rows.
|
| 41 |
+
Physics runs at 20 Hz; spectator cameras are captured at 10 Hz. The paired
|
| 42 |
+
1440 x 720 publication video encodes every source sample once at 4x simulation
|
| 43 |
+
speed. The viewer defaults to 1x for short policy invocations and supports speed
|
| 44 |
+
selection and the final native frame. Planning/inference pauses are omitted.
|
| 45 |
Native success is a separate evaluator result; the VLA does not report semantic
|
| 46 |
completion. Internal reasoning blocks, credentials, host-local paths and private
|
| 47 |
simulator state are excluded. Session tool IDs are remapped to local identifiers.
|
|
|
|
| 50 |
SHA-256 checksums of all other exported files. Each episode includes the hash of
|
| 51 |
its retained native evidence archive.
|
| 52 |
|
| 53 |
+
Saved agent code and memos, full task instructions, paired tool calls and returns,
|
| 54 |
+
and audited per-response token usage are available in dedicated tabs. Displayed
|
| 55 |
+
USD costs are Standard API-equivalent estimates from official GPT-6 Sol rates
|
| 56 |
+
verified on 2026-10-28, not account charges. GPU inference cost is not measured.
|
| 57 |
+
|
| 58 |
Future training runs are assigned to the W&B team `programmable_vla`, project
|
| 59 |
`program_VLA`: https://forge.coreweave.com/wandb/programmable_vla
|
| 60 |
This release contains evaluation evidence only.
|
app.js
CHANGED
|
@@ -1,150 +1,142 @@
|
|
| 1 |
"use strict";
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
}
|
| 9 |
-
function
|
| 10 |
-
function
|
| 11 |
-
|
|
|
|
|
|
|
|
|
|
| 12 |
}
|
| 13 |
-
function
|
| 14 |
-
const
|
| 15 |
-
|
| 16 |
}
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
if (!response.ok) throw new Error(`Cannot load ${path} (${response.status})`);
|
| 20 |
-
return response.json();
|
| 21 |
}
|
| 22 |
-
function
|
| 23 |
-
|
| 24 |
-
files.forEach(([label, file]) => box.append(link(label, `${path}/${file}`)));
|
| 25 |
-
return box;
|
| 26 |
}
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
const
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
});
|
| 63 |
-
const content = element("div");
|
| 64 |
-
function showInput() {
|
| 65 |
-
const index = Number(select.value), input = detail.policy_inputs[index];
|
| 66 |
-
const images = element("div", "image-pair");
|
| 67 |
-
input.images.forEach((src, number) => {
|
| 68 |
-
const img = element("img"); img.src = src;
|
| 69 |
-
img.alt = `${number === 0 ? "Agent view" : "Wrist view"}, control step ${input.control_step}`;
|
| 70 |
-
img.loading = "lazy"; images.append(img);
|
| 71 |
-
});
|
| 72 |
-
content.replaceChildren(element("p", "", input.instruction), images,
|
| 73 |
-
element("p", "caption", "Policy views after orientation transform, before resize to 224 × 224."),
|
| 74 |
-
pre(detail.policy_chunks[index]));
|
| 75 |
-
}
|
| 76 |
-
select.addEventListener("change", showInput); label.append(select); view.append(label, content); showInput();
|
| 77 |
-
policy.append(view, downloads(episode.path, [["Policy inputs", "policy-inputs.json"], ["Predicted chunks", "policy-chunks.json"], ["Executed actions · CSV", "executed-actions.csv"]]));
|
| 78 |
-
body.append(policy);
|
| 79 |
-
}
|
| 80 |
-
const session = section(`Observable agent session · ${episode.session_messages} messages · ${episode.tool_calls} tool calls`);
|
| 81 |
-
session.append(element("p", "caption", "Public text, tool arguments, returns and camera images. Internal reasoning blocks are omitted. Tool IDs are local aliases. Container paths in tool code describe the recorded execution environment."));
|
| 82 |
-
session.append(downloads(episode.path, [["Session JSON", "session.json"]]));
|
| 83 |
-
let loaded = false;
|
| 84 |
-
session.addEventListener("toggle", async () => {
|
| 85 |
-
if (!session.open || loaded) return;
|
| 86 |
-
loaded = true;
|
| 87 |
-
try {
|
| 88 |
-
const messages = await json(`${episode.path}/session.json`);
|
| 89 |
-
if (!messages.length) session.append(element("p", "", "B0 has no planner session. Its operator-supplied VLA invocation is shown above."));
|
| 90 |
-
messages.forEach((message, index) => {
|
| 91 |
-
const tools = message.content.filter(b => b.type === "toolCall").map(b => b.name);
|
| 92 |
-
const heading = `${String(index + 1).padStart(3, "0")} · ${message.role}${tools.length ? ` · ${tools.join(", ")}` : ""}${message.toolCallId ? ` · ${message.toolCallId}` : ""}`;
|
| 93 |
-
const entry = section(heading); entry.className = "session-message";
|
| 94 |
-
message.content.forEach(block => {
|
| 95 |
-
if (block.type === "image") {
|
| 96 |
-
const img = element("img"); img.src = block.src; img.alt = `Agent observation in message ${index + 1}`; img.loading = "lazy"; entry.append(img);
|
| 97 |
-
} else entry.append(block.type === "text" ? element("pre", "", block.text) : pre(block));
|
| 98 |
-
});
|
| 99 |
-
session.append(entry);
|
| 100 |
-
});
|
| 101 |
-
} catch (error) { loaded = false; session.append(element("p", "error", error.message)); }
|
| 102 |
-
}); body.append(session);
|
| 103 |
-
const provenance = section("Episode usage & evidence identity");
|
| 104 |
-
provenance.append(pre({usage: detail.usage, note: detail.usage_note, policy: detail.policy, evidence_archive_sha256: detail.evidence_archive_sha256}), downloads(episode.path, [["Episode metadata", "detail.json"], ["Third-person video", "third_person.mp4"], ["Wrist video", "wrist.mp4"]]));
|
| 105 |
-
body.append(provenance);
|
| 106 |
-
} catch (error) { if (request === selection) body.replaceChildren(element("p", "error", error.message)); }
|
| 107 |
}
|
| 108 |
-
function
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
video.poster = `${episode.path}/initial.png`; video.src = `${episode.path}/third_person.mp4`;
|
| 115 |
-
video.setAttribute("aria-label", `${episode.method} robot recording`);
|
| 116 |
-
const cameras = element("div", "camera-bar"), camera = element("select");
|
| 117 |
-
camera.setAttribute("aria-label", `${episode.method} camera`);
|
| 118 |
-
for (const [label, value] of [["Third-person camera", "third_person"], ["Wrist camera", "wrist"]]) {
|
| 119 |
-
const option = element("option", "", label); option.value = value; camera.append(option);
|
| 120 |
}
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
for
|
| 125 |
-
|
| 126 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 127 |
}
|
| 128 |
-
const button = element("button", "inspect"); button.type = "button";
|
| 129 |
-
button.setAttribute("aria-expanded", "false"); button.setAttribute("aria-controls", "inspection");
|
| 130 |
-
button.append(element("span", "", "Inspect calls & behavior"), element("span", "", "↗"));
|
| 131 |
-
button.addEventListener("click", () => inspect(episode, button));
|
| 132 |
-
node.append(top, video, cameras, metrics, button); return node;
|
| 133 |
}
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 140 |
async function main() {
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
report.episodes.forEach(episode => document.querySelector("#episodes").append(card(episode)));
|
| 145 |
-
const protocol = document.querySelector("#protocol-content");
|
| 146 |
-
protocol.append(element("p", "", "RLE-Bench owns job execution and native judgment; Kinex owns the agent; rosbridge owns simulator access; StarVLA supplies the pretrained policy. The three episodes have equal initial camera images and joint states. B0 and B2 also have equal first policy observations."), pre(report.protocol), element("p", "", `${report.excluded_engineering_attempts.count} excluded engineering attempts. ${report.excluded_engineering_attempts.reason}`));
|
| 147 |
-
report.export_notes.forEach(note => protocol.append(element("p", "", note)));
|
| 148 |
-
protocol.append(downloads("data", [["Full result JSON", "report.json"], ["SHA-256 file manifest", "manifest.json"]]));
|
| 149 |
}
|
| 150 |
-
main().catch(
|
|
|
|
| 1 |
"use strict";
|
| 2 |
+
const $ = selector => document.querySelector(selector);
|
| 3 |
+
const esc = value => String(value ?? "").replace(/[&<>"']/g, c => ({"&":"&","<":"<",">":">",'"':""","'":"'"}[c]));
|
| 4 |
+
const number = value => Number(value).toLocaleString("en-US");
|
| 5 |
+
const money = value => value == null ? "Not reported" : `$${value.toFixed(4)}`;
|
| 6 |
+
const code = value => `<pre class="code">${esc(typeof value === "string" ? value : JSON.stringify(value, null, 2))}</pre>`;
|
| 7 |
+
const colors = {B0:"#5994bc", B1:"#c7995b", B2:"#756ee4"};
|
| 8 |
+
const names = {B0:"Standalone VLA", B1:"Kinex agent", B2:"Agent + VLA"};
|
| 9 |
+
const cache = new Map();
|
| 10 |
+
let report, current, epoch = 0;
|
| 11 |
+
async function load(path) {
|
| 12 |
+
if (!cache.has(path)) {
|
| 13 |
+
const response = await fetch(path);
|
| 14 |
+
if (!response.ok) throw Error(`Cannot load ${path} (${response.status})`);
|
| 15 |
+
cache.set(path, await response.json());
|
| 16 |
+
}
|
| 17 |
+
return cache.get(path);
|
| 18 |
}
|
| 19 |
+
function external(href, label, className = "") { return `<a class="${className}" href="${esc(href)}" target="_blank" rel="noopener">${esc(label)} ↗</a>`; }
|
| 20 |
+
function links(path, files) { return `<div class="links">${files.map(([name,file]) => external(`${path}/${file}`, name)).join("")}</div>`; }
|
| 21 |
+
function metric(value, label) { return `<div class="metric"><strong>${esc(value)}</strong><span>${esc(label)}</span></div>`; }
|
| 22 |
+
function badge(episode) { return `<span class="badge${episode.success ? "" : " fail"}">${episode.success ? "Success" : "Step limit"}</span>`; }
|
| 23 |
+
function methods() {
|
| 24 |
+
$("#methods").innerHTML = report.episodes.map(e => `<a class="method-card ${current.method === e.method ? "active" : ""}" data-method="${e.method}" style="--variant:${colors[e.method]}" href="#${e.method}/${current.tab}" ${current.method === e.method ? 'aria-current="true"' : ""}><div class="card-header"><span class="method-label"><span class="method-id">${e.method}</span>${names[e.method]}</span>${badge(e)}</div><div class="card-model">${e.method === "B0" ? "Qwen3-VL OFT · frozen" : `GPT-6 Sol / high${e.method === "B2" ? " + OFT" : ""}`}</div><div class="card-stats"><div><strong>${number(e.control_steps)} / 600</strong><span>control steps</span></div><div><strong>${number(e.total_tokens)}</strong><span>total tokens</span></div><div><strong>${money(e.estimated_api_equivalent_usd)}</strong><span>API equiv. · est.</span></div></div></a>`).join("");
|
| 25 |
}
|
| 26 |
+
function tabs(e) {
|
| 27 |
+
const items = [["overview","Overview"],["instruction","Instruction"],["session","Session",e.session_messages],["tools","Tool calls",e.tool_calls],["vla","VLA I/O",e.vla_calls],["artifacts","Artifacts",e.artifacts],["usage","Tokens & cost"]];
|
| 28 |
+
$("#tabs").innerHTML = items.map(([key,label,count]) => `<a href="#${e.method}/${key}" class="${current.tab === key ? "active" : ""}" ${current.tab === key ? 'aria-current="page"' : ""}>${label}${count != null ? `<small>${count}</small>` : ""}</a>`).join("");
|
| 29 |
}
|
| 30 |
+
function overview(e, detail) {
|
| 31 |
+
return `<div class="episode-layout"><div class="video-panel"><div class="video-caption"><span>Third-person + wrist</span><span>1440 × 720</span></div><video id="episode-video" controls playsinline preload="metadata" poster="${e.path}/poster.jpg" src="${e.path}/video.mp4" aria-label="${e.method} paired camera recording"></video><div class="video-toolbar"><label>Speed <select id="playback-speed" aria-label="Video playback speed">${[.5,1,2,4,8].map(speed => `<option value="${speed/4}" ${speed === 1 ? "selected" : ""}>${speed}× simulation</option>`).join("")}</select></label><div><button id="final-frame" class="button">Final frame</button>${external(`${e.path}/video.mp4`,"Video","button")}${external(`${e.path}/terminal.jpg`,"Still","button")}</div></div></div><aside class="panel result-panel"><div class="result-head"><span class="eyebrow">NATIVE RESULT</span>${badge(e)}</div><div class="result-number">${e.control_steps}<span> / 600 control steps</span></div><div class="completion-track"><span style="width:${e.control_steps/6}%"></span></div><dl class="facts"><dt>Termination</dt><dd>${esc(e.native_reason)}</dd><dt>Simulation time</dt><dd>${e.simulation_time_s.toFixed(2)} s</dd><dt>Episode wall time</dt><dd>${e.wall_time_sec.toFixed(1)} s</dd><dt>Model responses</dt><dd>${e.model_responses}</dd><dt>Tool calls</dt><dd>${e.tool_calls}</dd><dt>Accepted VLA calls</dt><dd>${e.vla_calls}</dd><dt>API equiv. · est.</dt><dd>${money(e.estimated_api_equivalent_usd)}</dd></dl></aside></div><div class="metric-grid">${metric(number(detail.accounting.tokens.fresh_input),"Fresh input tokens")}${metric(number(detail.accounting.tokens.cache_read),"Cache read tokens")}${metric(number(detail.accounting.output_tokens),"Output tokens")}${metric(number(e.total_tokens),"Total input + output")}</div><div class="observation"><strong>Observed behavior</strong><span>${esc(e.observation)}</span></div>`;
|
|
|
|
|
|
|
| 32 |
}
|
| 33 |
+
function instruction(e, d) {
|
| 34 |
+
return `<section class="panel"><div class="panel-heading"><h2>Task instruction</h2>${links(e.path,[["Full instruction","instruction.txt"]])}</div><p class="instruction">${esc(report.instruction)}</p><details class="instruction-full"><summary>Full recorded agent input</summary>${code(d.instruction)}</details></section>`;
|
|
|
|
|
|
|
| 35 |
}
|
| 36 |
+
function image(src, label) { return `<img src="${esc(src)}" alt="${esc(label)}" data-image="${esc(src)}" loading="lazy">`; }
|
| 37 |
+
function blocks(content) {
|
| 38 |
+
return content.map(block => block.type === "image" ? image(block.src,"Recorded agent observation") : code(block.type === "text" ? block.text : block)).join("");
|
| 39 |
+
}
|
| 40 |
+
async function session(e, token) {
|
| 41 |
+
const messages = await load(`${e.path}/session.json`);
|
| 42 |
+
if (token !== epoch) return;
|
| 43 |
+
if (!messages.length) { $("#detail").innerHTML = `<div class="panel empty">B0 has no planner session. ${external(`#${e.method}/vla`,"View its policy invocation")}</div>`; return; }
|
| 44 |
+
$("#detail").innerHTML = `<section class="panel"><div class="panel-heading"><h2>Session & observations</h2>${links(e.path,[["Session JSON","session.json"]])}</div><div class="session-toolbar"><select id="event-filter" aria-label="Session filter"><option value="all">All messages</option><option value="assistant">Assistant</option><option value="toolResult">Tool results</option><option value="user">Instruction</option><option value="images">Observations</option></select><input id="event-search" type="search" aria-label="Search session" placeholder="Search text, tool or operation"><span id="event-count"></span></div><div id="session-events"></div><div class="session-more"><button id="more-events" class="button" hidden>Load more</button></div></section>`;
|
| 45 |
+
let limit = 30;
|
| 46 |
+
function render() {
|
| 47 |
+
const query = $("#event-search").value.toLowerCase(), filter = $("#event-filter").value;
|
| 48 |
+
const selected = messages.map((message,index) => ({message,index})).filter(({message}) => (filter === "all" || message.role === filter || (filter === "images" && message.content.some(b => b.type === "image"))) && JSON.stringify(message.content).toLowerCase().includes(query));
|
| 49 |
+
$("#event-count").textContent = `${selected.length} messages`;
|
| 50 |
+
$("#session-events").innerHTML = selected.slice(0,limit).map(({message,index}) => {
|
| 51 |
+
const tools = message.content.filter(b => b.type === "toolCall").map(b => b.name).join(", ");
|
| 52 |
+
const preview = message.content.find(b => b.type === "text")?.text?.slice(0,130) || tools;
|
| 53 |
+
const elapsed = message.timestamp == null ? "" : `+${((message.timestamp-messages[0].timestamp)/1000).toFixed(1)}s`;
|
| 54 |
+
return `<details class="event"><summary><span class="event-id">${String(index+1).padStart(3,"0")} · ${elapsed}</span><span class="event-name">${esc(message.role)}${tools ? ` · ${esc(tools)}` : ""}</span><span class="event-preview">${esc(preview)}</span></summary><div class="event-body">${blocks(message.content)}</div></details>`;
|
| 55 |
+
}).join("") || '<p class="empty">No matching messages.</p>';
|
| 56 |
+
$("#more-events").hidden = selected.length <= limit;
|
| 57 |
+
}
|
| 58 |
+
$("#event-filter").onchange = $("#event-search").oninput = () => { limit = 30; render(); };
|
| 59 |
+
$("#more-events").onclick = () => { limit += 30; render(); }; render();
|
| 60 |
+
}
|
| 61 |
+
async function tools(e, token) {
|
| 62 |
+
const calls = await load(`${e.path}/tool-calls.json`);
|
| 63 |
+
if (token !== epoch) return;
|
| 64 |
+
$("#detail").innerHTML = `<section class="panel"><div class="panel-heading"><h2>Tool calls · ${calls.length}</h2>${links(e.path,[["Tool I/O JSON","tool-calls.json"]])}</div><div class="session-toolbar"><input id="tool-search" type="search" aria-label="Search tool calls" placeholder="Filter by tool, operation or argument"><span id="tool-count"></span></div><div id="tool-list"></div></section>`;
|
| 65 |
+
function render() {
|
| 66 |
+
const selected = calls.filter(c => JSON.stringify(c).toLowerCase().includes($("#tool-search").value.toLowerCase()));
|
| 67 |
+
$("#tool-count").textContent = `${selected.length} calls`;
|
| 68 |
+
$("#tool-list").innerHTML = selected.map(call => `<details class="event"><summary><span class="event-id">${esc(call.id)}</span><span class="event-name">${esc(call.name)}</span><span class="event-preview">${esc(call.arguments.description || call.arguments.action || call.arguments.path || "")}</span></summary><div class="event-body"><h3>Arguments</h3>${code(call.arguments)}<h3>Return</h3>${blocks(call.result)}</div></details>`).join("") || '<p class="empty">No planner tool calls.</p>';
|
| 69 |
+
}
|
| 70 |
+
$("#tool-search").oninput = render; render();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
}
|
| 72 |
+
function vla(e, d) {
|
| 73 |
+
if (!d.calls.length) return '<section class="panel empty">This method uses native arm and gripper commands. See Tool calls for the recorded actions.</section>';
|
| 74 |
+
$("#detail").innerHTML = `<section class="panel"><div class="panel-heading"><h2>Agent → VLA · ${d.calls.length} accepted call</h2>${links(e.path,[["Invocations","vla-calls.json"],["Executed actions","executed-actions.csv"]])}</div>${d.calls.map(call => `<div class="io-grid"><div><h3>Invocation input</h3>${code(call.input)}</div><div><h3>Executor return</h3>${code(call.output)}</div></div>`).join("")}<p class="caption">The native verdict is evaluated separately. The executor returns no semantic completion signal.</p></section><section class="panel section-gap"><div class="panel-heading"><h2>Policy observations → action chunk</h2><select id="policy-step" aria-label="Policy step">${d.policy_inputs.map((input,index) => `<option value="${index}">Chunk ${index+1} · control step ${input.control_step}</option>`).join("")}</select></div><div id="policy-content"></div>${links(e.path,[["Policy inputs","policy-inputs.json"],["Predicted chunks","policy-chunks.json"]])}</section>`;
|
| 75 |
+
function render() {
|
| 76 |
+
const index = Number($("#policy-step").value), input = d.policy_inputs[index];
|
| 77 |
+
$("#policy-content").innerHTML = `<p>${esc(input.instruction)}</p><div class="image-pair">${input.images.map((src,n) => `<figure>${image(src,n ? "Wrist policy input" : "Agent-view policy input")}<figcaption>${n ? "Wrist" : "Agent view"}</figcaption></figure>`).join("")}</div>${code(d.policy_chunks[index])}<p class="caption">8 × 7 unnormalized actions. First six values: OSC controller inputs; last value: gripper prediction.</p>`;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
}
|
| 79 |
+
$("#policy-step").onchange = render; render();
|
| 80 |
+
}
|
| 81 |
+
async function artifacts(e, d, token) {
|
| 82 |
+
$("#detail").innerHTML = `<section class="panel"><div class="panel-heading"><h2>Saved agent artifacts · ${d.artifacts.length}</h2></div>${d.artifacts.length ? '<div class="artifact-list"><div id="artifact-nav" class="artifact-nav"></div><div id="artifact-content"></div></div>' : '<p class="empty">No agent-created files for this method.</p>'}</section><section class="panel section-gap"><div class="panel-heading"><h2>Episode evidence</h2></div><div class="links">${[["Result metadata","detail.json"],["Instruction","instruction.txt"],["Session","session.json"],["Tool calls","tool-calls.json"],["Usage","usage.json"],["Policy actions","executed-actions.csv"],["Media checks","media.json"],["Frame mapping","frame-mapping.json"],["Third-person source","third_person.mp4"],["Wrist source","wrist.mp4"]].map(([label,file])=>external(`${e.path}/${file}`,label)).join("")}</div></section>`;
|
| 83 |
+
let selected = -1;
|
| 84 |
+
async function show(index) {
|
| 85 |
+
selected = index;
|
| 86 |
+
$("#artifact-nav").querySelectorAll("button").forEach((b,n) => b.classList.toggle("active", n === index));
|
| 87 |
+
const resource = d.artifacts[index];
|
| 88 |
+
$("#artifact-content").innerHTML = '<p class="loading">Loading file…</p>';
|
| 89 |
+
const response = await fetch(resource.file);
|
| 90 |
+
if (!response.ok) throw Error(`Artifact unavailable: ${resource.name}`);
|
| 91 |
+
const text = await response.text();
|
| 92 |
+
if (token !== epoch || selected !== index) return;
|
| 93 |
+
$("#artifact-content").innerHTML = `<div class="panel-heading"><h3>${esc(resource.name.split("/").at(-1))}</h3>${external(resource.file,"Download","button")}</div>${code(text)}`;
|
| 94 |
+
}
|
| 95 |
+
if (d.artifacts.length) {
|
| 96 |
+
$("#artifact-nav").innerHTML = d.artifacts.map((r,i) => `<button data-artifact="${i}">${esc(r.name)}</button>`).join("");
|
| 97 |
+
$("#artifact-nav").onclick = event => { const button = event.target.closest("[data-artifact]"); if (button) show(Number(button.dataset.artifact)).catch(showError); };
|
| 98 |
+
await show(0);
|
| 99 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 100 |
}
|
| 101 |
+
function usage(e, d) {
|
| 102 |
+
const u = d.accounting, labels = {fresh_input:"Fresh input",cache_read:"Cache read",cache_write:"Cache write",output:"Output"};
|
| 103 |
+
return `<div class="metric-grid">${metric(number(u.input_tokens),"Input tokens · includes cache")}${metric(number(u.output_tokens),"Output tokens")}${metric(number(u.total_tokens),"Total tokens")}${metric(money(u.estimated_api_equivalent_usd),"API equivalent · estimated")}</div><section class="panel"><div class="panel-heading"><h2>Token & cost accounting</h2>${links(e.path,[["Usage JSON","usage.json"]])}</div><div class="table-wrap"><table class="data-table"><thead><tr><th>Category</th><th>Tokens</th><th>USD / 1M</th><th>Estimated USD</th></tr></thead><tbody>${Object.entries(labels).map(([key,label])=>`<tr><td>${label}</td><td>${number(u.tokens[key])}</td><td>$${u.pricing.per_million_tokens[key].toFixed(2)}</td><td>${money(u.cost_breakdown_usd[key])}</td></tr>`).join("")}<tr><td><strong>Total</strong></td><td>${number(u.total_tokens)}</td><td></td><td><strong>${money(u.estimated_api_equivalent_usd)}</strong></td></tr></tbody></table></div><p class="caption">Standard API-equivalent estimate from ${u.response_count} audited responses. Actual billed cost: ${money(u.actual_billed_usd)}. GPU cost: not measured. ${external(u.pricing.source,"Pricing source")} · ${esc(u.pricing.verified_date)}</p><details class="section-gap"><summary>Per-response usage</summary>${code(u.per_response_usage)}</details></section>`;
|
| 104 |
+
}
|
| 105 |
+
function viewer(src, label) { $("#viewer-image").src = src; $("#image-original").href = src; $("#image-label").textContent = label; $("#image-viewer").showModal(); }
|
| 106 |
+
function setupVideo() {
|
| 107 |
+
const video = $("#episode-video"); if (!video) return;
|
| 108 |
+
video.defaultPlaybackRate = .25; video.playbackRate = .25;
|
| 109 |
+
$("#playback-speed").onchange = event => { video.playbackRate = Number(event.target.value); };
|
| 110 |
+
$("#final-frame").onclick = () => { video.pause(); viewer(`${current.episode.path}/terminal.jpg`,"Final native frame · third-person + wrist"); };
|
| 111 |
+
}
|
| 112 |
+
function showError(error) { $("#detail").innerHTML = `<p class="error">${esc(error.message)}</p>`; }
|
| 113 |
+
async function route() {
|
| 114 |
+
if (!report) return;
|
| 115 |
+
if (location.hash === "#protocol") { $("#protocol").open = true; $("#protocol").scrollIntoView(); return; }
|
| 116 |
+
const [requestedMethod,requestedTab] = location.hash.slice(1).split("/");
|
| 117 |
+
const method = ["B0","B1","B2"].includes(requestedMethod) ? requestedMethod : "B2";
|
| 118 |
+
const tab = ["overview","instruction","session","tools","vla","artifacts","usage"].includes(requestedTab) ? requestedTab : "overview";
|
| 119 |
+
const e = report.episodes.find(row => row.method === method), token = ++epoch;
|
| 120 |
+
current = {method,tab,episode:e}; methods(); tabs(e);
|
| 121 |
+
$("#detail").innerHTML = '<p class="loading">Loading evidence…</p>';
|
| 122 |
+
try {
|
| 123 |
+
const detail = await load(`${e.path}/detail.json`); if (token !== epoch) return;
|
| 124 |
+
if (tab === "overview") { $("#detail").innerHTML = overview(e,detail); setupVideo(); }
|
| 125 |
+
if (tab === "instruction") $("#detail").innerHTML = instruction(e,detail);
|
| 126 |
+
if (tab === "session") await session(e,token);
|
| 127 |
+
if (tab === "tools") await tools(e,token);
|
| 128 |
+
if (tab === "vla") { const empty = vla(e,detail); if (empty) $("#detail").innerHTML = empty; }
|
| 129 |
+
if (tab === "artifacts") await artifacts(e,detail,token);
|
| 130 |
+
if (tab === "usage") $("#detail").innerHTML = usage(e,detail);
|
| 131 |
+
} catch(error) { if (token === epoch) showError(error); }
|
| 132 |
+
}
|
| 133 |
+
$("#close-viewer").onclick = () => $("#image-viewer").close();
|
| 134 |
+
$("#image-viewer").addEventListener("click", event => { if (event.target === $("#image-viewer")) $("#image-viewer").close(); });
|
| 135 |
+
document.addEventListener("click", event => { const img = event.target.closest("[data-image]"); if (img) viewer(img.dataset.image,img.alt); });
|
| 136 |
+
window.addEventListener("hashchange", route);
|
| 137 |
async function main() {
|
| 138 |
+
report = await load("data/report.json");
|
| 139 |
+
$("#protocol-content").innerHTML = `<p>One task, one initial state per method. Original frozen VLA; no encoder, training or progress monitor. Three pre-action engineering failures are excluded. Earlier pilots use a different protocol.</p><details class="section-gap"><summary>Effective configuration</summary>${code(report.protocol)}</details><p>Sessions contain observable messages, tool I/O and images. Internal reasoning and private simulator state remain excluded. Videos retain every synchronized camera sample and the terminal frame.</p><div class="links">${external("https://huggingface.co/StarVLA/Qwen3-VL-OFT-LIBERO-4in1","Policy checkpoint")}${external("data/report.json","Result index")}${external("data/manifest.json","Checksums")}</div>`;
|
| 140 |
+
await route();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 141 |
}
|
| 142 |
+
main().catch(showError);
|
data/b0/detail.json
CHANGED
|
@@ -1,4 +1,75 @@
|
|
| 1 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
"calls": [
|
| 3 |
{
|
| 4 |
"input": {
|
|
|
|
| 1 |
{
|
| 2 |
+
"instruction": "Pick the akita black bowl between the plate and the ramekin and place it in the center of the plate",
|
| 3 |
+
"artifacts": [],
|
| 4 |
+
"media": {
|
| 5 |
+
"schema": "programvla.media.v1",
|
| 6 |
+
"passed": true,
|
| 7 |
+
"speed": 4,
|
| 8 |
+
"width": 1440,
|
| 9 |
+
"height": 720,
|
| 10 |
+
"source_fps": 10.0,
|
| 11 |
+
"output_fps": 40,
|
| 12 |
+
"native_frames": 40,
|
| 13 |
+
"published_frames": 40,
|
| 14 |
+
"all_frames_compared": 40,
|
| 15 |
+
"minimum_frame_psnr_db": 39.243889670843956,
|
| 16 |
+
"duration_s": 1.0,
|
| 17 |
+
"source_sample_coverage": 1.0,
|
| 18 |
+
"terminal_frame_retained": true,
|
| 19 |
+
"source_dropped_samples": 0,
|
| 20 |
+
"pts_verified": true,
|
| 21 |
+
"decode_ok": true,
|
| 22 |
+
"sha256": "4505afb3b4adb875dd2709e5a5d36d1e81f56dc261acb10a54cb5776ace0a3e8",
|
| 23 |
+
"source_sha256": {
|
| 24 |
+
"third_person.mp4": "1b697c19a8d5ff7620b0e8074fa8922f00628b4f1bf4427a3a734390cc6a80ca",
|
| 25 |
+
"wrist.mp4": "117607ece1c52e17ffef1c56814e3f00564be0d49b3f913bebe2503e9bb2d3be"
|
| 26 |
+
},
|
| 27 |
+
"frame_mapping": "Each source sample once, third-person left and wrist right.",
|
| 28 |
+
"reference_style": "RLE-Bench/kinex-benchmark-native-budget-with-robobridge"
|
| 29 |
+
},
|
| 30 |
+
"accounting": {
|
| 31 |
+
"input_tokens": 0,
|
| 32 |
+
"output_tokens": 0,
|
| 33 |
+
"total_tokens": 0,
|
| 34 |
+
"tokens": {
|
| 35 |
+
"fresh_input": 0,
|
| 36 |
+
"cache_read": 0,
|
| 37 |
+
"cache_write": 0,
|
| 38 |
+
"output": 0
|
| 39 |
+
},
|
| 40 |
+
"cost_breakdown_usd": {
|
| 41 |
+
"fresh_input": 0.0,
|
| 42 |
+
"cache_read": 0.0,
|
| 43 |
+
"cache_write": 0.0,
|
| 44 |
+
"output": 0.0
|
| 45 |
+
},
|
| 46 |
+
"response_count": 0,
|
| 47 |
+
"estimated_api_equivalent_usd": 0.0,
|
| 48 |
+
"actual_billed_usd": 0.0,
|
| 49 |
+
"audit_complete": true,
|
| 50 |
+
"per_response_usage": [],
|
| 51 |
+
"pricing": {
|
| 52 |
+
"model": "openai/gpt-6-sol",
|
| 53 |
+
"currency": "USD",
|
| 54 |
+
"verified_date": "2026-10-28",
|
| 55 |
+
"source": "https://developers.openai.com/api/docs/models/gpt-6-sol",
|
| 56 |
+
"basis": "Standard API-equivalent estimate; actual subscription billing is unavailable",
|
| 57 |
+
"per_million_tokens": {
|
| 58 |
+
"fresh_input": 2.0,
|
| 59 |
+
"cache_read": 0.2,
|
| 60 |
+
"cache_write": 2.5,
|
| 61 |
+
"output": 10.0
|
| 62 |
+
},
|
| 63 |
+
"long_context_threshold": 272000,
|
| 64 |
+
"long_context_multipliers": {
|
| 65 |
+
"fresh_input": 2.0,
|
| 66 |
+
"cache_read": 2.0,
|
| 67 |
+
"cache_write": 2.0,
|
| 68 |
+
"output": 1.5
|
| 69 |
+
}
|
| 70 |
+
},
|
| 71 |
+
"gpu_cost_usd": null
|
| 72 |
+
},
|
| 73 |
"calls": [
|
| 74 |
{
|
| 75 |
"input": {
|
data/b0/frame-mapping.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"source_stamp_ns": [
|
| 3 |
+
0,
|
| 4 |
+
100000000,
|
| 5 |
+
200000000,
|
| 6 |
+
300000000,
|
| 7 |
+
400000000,
|
| 8 |
+
500000000,
|
| 9 |
+
600000000,
|
| 10 |
+
700000000,
|
| 11 |
+
800000000,
|
| 12 |
+
900000000,
|
| 13 |
+
1000000000,
|
| 14 |
+
1100000000,
|
| 15 |
+
1200000000,
|
| 16 |
+
1300000000,
|
| 17 |
+
1400000000,
|
| 18 |
+
1500000000,
|
| 19 |
+
1600000000,
|
| 20 |
+
1700000000,
|
| 21 |
+
1800000000,
|
| 22 |
+
1900000000,
|
| 23 |
+
2000000000,
|
| 24 |
+
2100000000,
|
| 25 |
+
2200000000,
|
| 26 |
+
2300000000,
|
| 27 |
+
2400000000,
|
| 28 |
+
2500000000,
|
| 29 |
+
2600000000,
|
| 30 |
+
2700000000,
|
| 31 |
+
2800000000,
|
| 32 |
+
2900000000,
|
| 33 |
+
3000000000,
|
| 34 |
+
3100000000,
|
| 35 |
+
3200000000,
|
| 36 |
+
3300000000,
|
| 37 |
+
3400000000,
|
| 38 |
+
3500000000,
|
| 39 |
+
3600000000,
|
| 40 |
+
3700000000,
|
| 41 |
+
3800000000,
|
| 42 |
+
3850000000
|
| 43 |
+
],
|
| 44 |
+
"output_fps": 40
|
| 45 |
+
}
|
data/b0/instruction.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Pick the akita black bowl between the plate and the ramekin and place it in the center of the plate
|
data/b0/media.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"schema": "programvla.media.v1",
|
| 3 |
+
"passed": true,
|
| 4 |
+
"speed": 4,
|
| 5 |
+
"width": 1440,
|
| 6 |
+
"height": 720,
|
| 7 |
+
"source_fps": 10.0,
|
| 8 |
+
"output_fps": 40,
|
| 9 |
+
"native_frames": 40,
|
| 10 |
+
"published_frames": 40,
|
| 11 |
+
"all_frames_compared": 40,
|
| 12 |
+
"minimum_frame_psnr_db": 39.243889670843956,
|
| 13 |
+
"duration_s": 1.0,
|
| 14 |
+
"source_sample_coverage": 1.0,
|
| 15 |
+
"terminal_frame_retained": true,
|
| 16 |
+
"source_dropped_samples": 0,
|
| 17 |
+
"pts_verified": true,
|
| 18 |
+
"decode_ok": true,
|
| 19 |
+
"sha256": "4505afb3b4adb875dd2709e5a5d36d1e81f56dc261acb10a54cb5776ace0a3e8",
|
| 20 |
+
"source_sha256": {
|
| 21 |
+
"third_person.mp4": "1b697c19a8d5ff7620b0e8074fa8922f00628b4f1bf4427a3a734390cc6a80ca",
|
| 22 |
+
"wrist.mp4": "117607ece1c52e17ffef1c56814e3f00564be0d49b3f913bebe2503e9bb2d3be"
|
| 23 |
+
},
|
| 24 |
+
"frame_mapping": "Each source sample once, third-person left and wrist right.",
|
| 25 |
+
"reference_style": "RLE-Bench/kinex-benchmark-native-budget-with-robobridge"
|
| 26 |
+
}
|
data/b0/poster.jpg
ADDED
|
Git LFS Details
|
data/b0/terminal.jpg
ADDED
|
Git LFS Details
|
data/b0/tool-calls.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
[]
|
data/b0/usage.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"input_tokens": 0,
|
| 3 |
+
"output_tokens": 0,
|
| 4 |
+
"total_tokens": 0,
|
| 5 |
+
"tokens": {
|
| 6 |
+
"fresh_input": 0,
|
| 7 |
+
"cache_read": 0,
|
| 8 |
+
"cache_write": 0,
|
| 9 |
+
"output": 0
|
| 10 |
+
},
|
| 11 |
+
"cost_breakdown_usd": {
|
| 12 |
+
"fresh_input": 0.0,
|
| 13 |
+
"cache_read": 0.0,
|
| 14 |
+
"cache_write": 0.0,
|
| 15 |
+
"output": 0.0
|
| 16 |
+
},
|
| 17 |
+
"response_count": 0,
|
| 18 |
+
"estimated_api_equivalent_usd": 0.0,
|
| 19 |
+
"actual_billed_usd": 0.0,
|
| 20 |
+
"audit_complete": true,
|
| 21 |
+
"per_response_usage": [],
|
| 22 |
+
"pricing": {
|
| 23 |
+
"model": "openai/gpt-6-sol",
|
| 24 |
+
"currency": "USD",
|
| 25 |
+
"verified_date": "2026-10-28",
|
| 26 |
+
"source": "https://developers.openai.com/api/docs/models/gpt-6-sol",
|
| 27 |
+
"basis": "Standard API-equivalent estimate; actual subscription billing is unavailable",
|
| 28 |
+
"per_million_tokens": {
|
| 29 |
+
"fresh_input": 2.0,
|
| 30 |
+
"cache_read": 0.2,
|
| 31 |
+
"cache_write": 2.5,
|
| 32 |
+
"output": 10.0
|
| 33 |
+
},
|
| 34 |
+
"long_context_threshold": 272000,
|
| 35 |
+
"long_context_multipliers": {
|
| 36 |
+
"fresh_input": 2.0,
|
| 37 |
+
"cache_read": 2.0,
|
| 38 |
+
"cache_write": 2.0,
|
| 39 |
+
"output": 1.5
|
| 40 |
+
}
|
| 41 |
+
},
|
| 42 |
+
"gpu_cost_usd": null
|
| 43 |
+
}
|
data/b0/verdict.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"success": true,
|
| 3 |
+
"valid": true,
|
| 4 |
+
"evidence_valid": true,
|
| 5 |
+
"steps": 82,
|
| 6 |
+
"step_limit": 605,
|
| 7 |
+
"reason": "success",
|
| 8 |
+
"simulation_time_s": 3.8499999999997705,
|
| 9 |
+
"initialization": {
|
| 10 |
+
"init_state_index": 0,
|
| 11 |
+
"initialization_frames": 5
|
| 12 |
+
},
|
| 13 |
+
"execution": {
|
| 14 |
+
"status": "finished",
|
| 15 |
+
"reason": null
|
| 16 |
+
}
|
| 17 |
+
}
|
data/b0/video.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:4505afb3b4adb875dd2709e5a5d36d1e81f56dc261acb10a54cb5776ace0a3e8
|
| 3 |
+
size 610206
|
data/b1/artifacts/.kinex/memos/libero_spatial.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# LIBERO spatial tabletop bowl placement
|
| 2 |
+
|
| 3 |
+
The running episode has ~30 s of native world time (605 x 0.05 s), even though wall safety timeout is much larger. `world.wait` rejects progression at terminal; do not interpret the rejected wait as success. All borrowed devices start loaded. Camera reads do not advance time.
|
| 4 |
+
|
| 5 |
+
Interfaces: `harness.md` and `.kinex/devices/*/profile.yaml`. Arm is a seven-joint trajectory; gripper `target.data` is finger_joint1 in metres, 0 closed / 0.04 open. World `wait(duration_s)` is the ONLY way to step. `.kinex/tools/tabletop_motion.py` accepts world TCP waypoints and seconds, publishes timed trajectory, waits, returns measured pose. It assumes the initial downward flange orientation and arm base at world (-.66,0,.912), gripper TCP 0.097 m below flange. Tool has been exercised; `model.fk` requires a **list**, not ROS array slices.
|
| 6 |
+
|
| 7 |
+
Camera_agentview pinhole fx=fy=309.019, cx=cy=127.5, camera world (.658613,0,1.61035), quaternion (.638018,.638018,-.304850,-.304850). Wrist camera fx=fy=166.813, camera position from flange FK + 0.05 m along flange x, quaternion flange * (0,0,.707107,.707107). Triangulation of images at t=2.95 gave target textured dark bowl between plate and silver ramekin at world approx (-.065,.203,.938) (visible inner surface), plate center (.055,.206,.910), near bowl rim at (-.054,.1455,.953). Do not mistake bowls under gripper for a successful pickup; at t=29.1 bowl was visibly still on table (agentview (190,150), wrist (100,~205)) and gripper fully shut (finger_joint1=.0005). Need verify successful grasp by observing bowl displacement in agentview with gripper moved to a clear position and/or stereo triangulation with matching bowl pixels, not by finger stall alone.
|
| 8 |
+
|
| 9 |
+
Attempted near-rim pinch with gripper x axis along world +y, TCP x~-.065,y=.15,z=.947; then x~-.065,y=.14,z=.927; then x~-.065,y=.165,z=.924; then x~-.055,y=.145,z=.950. Each closed finger_joint1 to ~.002-.004 initially but target bowl remained after lift. Too low (~.924) likely misses rim at z~.953. At t=29, an attempted reposition to far-side rim (-.06,.26,.948) was interrupted at terminal t=30; no success. Future strategy: try opposite rim at y~.26, z~.95 with open fingers, then close, confirm lifted bowl before translating. Use fewer slow moves and a shorter total wait budget. Plate center x~.055 y~.206, placing bowl likely requires TCP x~.035 y~.16, z~.95 if near-side wall grasp succeeds.
|
data/b1/artifacts/.kinex/tools/tabletop_motion.py
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""LIBERO Panda measured Cartesian waypoints; call via kinex.exec with args.
|
| 2 |
+
|
| 3 |
+
args: {"poses": [[world_x,world_y,world_tcp_z],...], "seconds": [duration,...],
|
| 4 |
+
"grip": optional finger_joint1 target (m), "settle": optional seconds}
|
| 5 |
+
Flange orientation is held at the episode's downward start orientation (model FK of
|
| 6 |
+
home measured initial posture). Returns final measured positions and TCP world pose.
|
| 7 |
+
"""
|
| 8 |
+
import asyncio
|
| 9 |
+
import numpy as np
|
| 10 |
+
from kinex import args, communication, finish, helpers
|
| 11 |
+
|
| 12 |
+
START = [-0.000138453925, -0.17673447527, -0.03655759749,
|
| 13 |
+
-2.4571129762, 0.00593502655, 2.235219967, 0.799383438]
|
| 14 |
+
|
| 15 |
+
async def run():
|
| 16 |
+
a = args()
|
| 17 |
+
model = helpers.joint_model('arm')
|
| 18 |
+
orientation = model.fk(START)[3:]
|
| 19 |
+
async with communication() as io:
|
| 20 |
+
async with io.subscribe('arm.joint_state', depth=1) as states:
|
| 21 |
+
current = await states.next(timeout_s=8)
|
| 22 |
+
q = list(current.position[:7])
|
| 23 |
+
if 'grip' in a:
|
| 24 |
+
await io.publish('gripper.target', {'data': float(a['grip'])})
|
| 25 |
+
poses = a.get('poses', [])
|
| 26 |
+
durations = a.get('seconds', [1.7]*len(poses))
|
| 27 |
+
if len(poses) != len(durations):
|
| 28 |
+
raise ValueError('poses/seconds mismatch')
|
| 29 |
+
waypoints = []
|
| 30 |
+
elapsed = 0.0
|
| 31 |
+
for (x,y,tcpz), duration in zip(poses,durations):
|
| 32 |
+
# arm/base origin is world [-.66,0,.912]; tcp is 97 mm below flange.
|
| 33 |
+
target = [float(x)+.66,float(y),float(tcpz)+.097-.912,*orientation]
|
| 34 |
+
q = model.ik(target,q)
|
| 35 |
+
elapsed += float(duration)
|
| 36 |
+
sec = int(elapsed)
|
| 37 |
+
waypoints.append({'positions':list(q), 'velocities':[],
|
| 38 |
+
'accelerations':[], 'effort':[],
|
| 39 |
+
'time_from_start':{'sec':sec,'nanosec':round((elapsed-sec)*1e9)}})
|
| 40 |
+
if waypoints:
|
| 41 |
+
await io.publish('arm.joint_target', {
|
| 42 |
+
'header': {'stamp':{'sec':0,'nanosec':0},'frame_id':''},
|
| 43 |
+
'joint_names':model.names,'points':waypoints})
|
| 44 |
+
wait_s = elapsed + float(a.get('settle',.25))
|
| 45 |
+
if wait_s:
|
| 46 |
+
result = await io.request('world.wait',duration_s=wait_s)
|
| 47 |
+
if not result.success:
|
| 48 |
+
raise RuntimeError(f'world wait failed: {result.message}')
|
| 49 |
+
measured = await states.next(timeout_s=8)
|
| 50 |
+
actual = model.fk(list(measured.position[:7]))
|
| 51 |
+
tcp = [actual[0]-.66,actual[1],actual[2]+.912-.097]
|
| 52 |
+
finish({'target':poses[-1] if poses else None, 'tcp_world':tcp,
|
| 53 |
+
'joints':list(measured.position[:7]), 'max_velocity':max(abs(v) for v in measured.velocity[:7]),
|
| 54 |
+
'time':result.time_s if wait_s else None})
|
| 55 |
+
|
| 56 |
+
asyncio.run(run())
|
data/b1/detail.json
CHANGED
|
@@ -1,4 +1,495 @@
|
|
| 1 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
"calls": [],
|
| 3 |
"policy_inputs": [],
|
| 4 |
"policy_chunks": [],
|
|
|
|
| 1 |
{
|
| 2 |
+
"instruction": "# Task: libero/libero-spatial-01\n\nPick the akita black bowl between the plate and the ramekin and place it in the center of the plate\n\n## Work to do\n\nSolve the task efficiently using the running rosbridge environment. Follow the\ntask instruction above, including its completion requirements. Read `harness.md`\nand the device profiles for public interfaces, units and calibrated frames.\nReuse your saved tools, skills, and memos.\n\n## Limits\n\nYou have 605 native control steps. The execution mode is `stepped`: physics is\nfrozen while idle. Use `world.wait` with `duration_s` to advance the native clock.\nJoint targets are ROS JointTrajectory messages; gripper targets use the units\ndeclared in their profiles. Reads and command publication do not advance physics.\nWaits are sequential; concurrent waits are rejected. A command or elapsed time\ndoes not prove arrival; inspect measured feedback. Device stop holds the device\nwithout ending the episode. The safety timeout is 28800 seconds.\nDo not launch or reset a simulation.\n\n## Completion\n\nReturn when finished. The owner finalizes the episode and reads its native\nverdict. An interrupted or rejected wait does not establish task success. The\nnative step limit stops physics even if your requested wait is longer.\n\n## Saved resources\n\nMaintain reusable code in `.kinex/tools/`, skills in `.kinex/skills/`, and concise working notes\nin `.kinex/memos/`. Improve existing files in place as you learn, replacing outdated\ncontent. Create a new file only when no existing resource fits; do not create\nper-attempt reflections or numbered copies. These files persist across fresh\nconversations. Update them before finishing your response.\n\n## Robot and device access\n\nUse Kinex's ROS device profiles in `.kinex/devices/` and the robot\nspecification in `.kinex/workspace.yaml`. The adapter refreshes them each episode.\nUse `kinex.communication` for typed topic publication, subscriptions and service\nrequests. Inspect operation schemas before acting. Load the provided devices;\nthey borrow the running simulator. Stop holds motion; it does not reset the world.\nImprove existing tools, skills, and memos in place.\n\n",
|
| 3 |
+
"artifacts": [
|
| 4 |
+
{
|
| 5 |
+
"name": ".kinex/tools/tabletop_motion.py",
|
| 6 |
+
"file": "data/b1/artifacts/.kinex/tools/tabletop_motion.py",
|
| 7 |
+
"bytes": 2838,
|
| 8 |
+
"sha256": "a1910a099fdfd8100c86eab90f064a85f7e7a56b6030b17593e450ee19ae27eb"
|
| 9 |
+
},
|
| 10 |
+
{
|
| 11 |
+
"name": ".kinex/memos/libero_spatial.md",
|
| 12 |
+
"file": "data/b1/artifacts/.kinex/memos/libero_spatial.md",
|
| 13 |
+
"bytes": 2445,
|
| 14 |
+
"sha256": "514d0000e9dfa1b92c2d8c06979b54765f07a458d845a02b88b076c850942ac8"
|
| 15 |
+
}
|
| 16 |
+
],
|
| 17 |
+
"media": {
|
| 18 |
+
"schema": "programvla.media.v1",
|
| 19 |
+
"passed": true,
|
| 20 |
+
"speed": 4,
|
| 21 |
+
"width": 1440,
|
| 22 |
+
"height": 720,
|
| 23 |
+
"source_fps": 10.0,
|
| 24 |
+
"output_fps": 40,
|
| 25 |
+
"native_frames": 301,
|
| 26 |
+
"published_frames": 301,
|
| 27 |
+
"all_frames_compared": 301,
|
| 28 |
+
"minimum_frame_psnr_db": 39.193138159821416,
|
| 29 |
+
"duration_s": 7.525,
|
| 30 |
+
"source_sample_coverage": 1.0,
|
| 31 |
+
"terminal_frame_retained": true,
|
| 32 |
+
"source_dropped_samples": 0,
|
| 33 |
+
"pts_verified": true,
|
| 34 |
+
"decode_ok": true,
|
| 35 |
+
"sha256": "6879be037df0d6f285572f0f75c2d82edcace427504c1c942be45fb8415d7a8e",
|
| 36 |
+
"source_sha256": {
|
| 37 |
+
"third_person.mp4": "ea52c7739a7f0ca6d043b45154aac48fe14e0d37d49ef20b5bf5b1ebd26205fe",
|
| 38 |
+
"wrist.mp4": "598f56dae47f56701179ea8cc7e6423ce9242109aaa0aadb13f7accbbf2ae22f"
|
| 39 |
+
},
|
| 40 |
+
"frame_mapping": "Each source sample once, third-person left and wrist right.",
|
| 41 |
+
"reference_style": "RLE-Bench/kinex-benchmark-native-budget-with-robobridge"
|
| 42 |
+
},
|
| 43 |
+
"accounting": {
|
| 44 |
+
"input_tokens": 1802752,
|
| 45 |
+
"output_tokens": 18444,
|
| 46 |
+
"total_tokens": 1821196,
|
| 47 |
+
"tokens": {
|
| 48 |
+
"fresh_input": 57984,
|
| 49 |
+
"cache_read": 1744768,
|
| 50 |
+
"cache_write": 0,
|
| 51 |
+
"output": 18444
|
| 52 |
+
},
|
| 53 |
+
"cost_breakdown_usd": {
|
| 54 |
+
"fresh_input": 0.11596800000000003,
|
| 55 |
+
"cache_read": 0.34895360000000003,
|
| 56 |
+
"cache_write": 0.0,
|
| 57 |
+
"output": 0.18443999999999997
|
| 58 |
+
},
|
| 59 |
+
"response_count": 58,
|
| 60 |
+
"estimated_api_equivalent_usd": 0.6493616,
|
| 61 |
+
"actual_billed_usd": null,
|
| 62 |
+
"audit_complete": true,
|
| 63 |
+
"per_response_usage": [
|
| 64 |
+
{
|
| 65 |
+
"cache_write_input_tokens": 0,
|
| 66 |
+
"cached_input_tokens": 0,
|
| 67 |
+
"input_tokens": 11259,
|
| 68 |
+
"output_tokens": 113,
|
| 69 |
+
"reasoning_output_tokens": 0
|
| 70 |
+
},
|
| 71 |
+
{
|
| 72 |
+
"cache_write_input_tokens": 0,
|
| 73 |
+
"cached_input_tokens": 0,
|
| 74 |
+
"input_tokens": 11717,
|
| 75 |
+
"output_tokens": 186,
|
| 76 |
+
"reasoning_output_tokens": 0
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"cache_write_input_tokens": 0,
|
| 80 |
+
"cached_input_tokens": 11264,
|
| 81 |
+
"input_tokens": 15040,
|
| 82 |
+
"output_tokens": 197,
|
| 83 |
+
"reasoning_output_tokens": 26
|
| 84 |
+
},
|
| 85 |
+
{
|
| 86 |
+
"cache_write_input_tokens": 0,
|
| 87 |
+
"cached_input_tokens": 15104,
|
| 88 |
+
"input_tokens": 16092,
|
| 89 |
+
"output_tokens": 238,
|
| 90 |
+
"reasoning_output_tokens": 161
|
| 91 |
+
},
|
| 92 |
+
{
|
| 93 |
+
"cache_write_input_tokens": 0,
|
| 94 |
+
"cached_input_tokens": 11776,
|
| 95 |
+
"input_tokens": 16907,
|
| 96 |
+
"output_tokens": 63,
|
| 97 |
+
"reasoning_output_tokens": 10
|
| 98 |
+
},
|
| 99 |
+
{
|
| 100 |
+
"cache_write_input_tokens": 0,
|
| 101 |
+
"cached_input_tokens": 16128,
|
| 102 |
+
"input_tokens": 16999,
|
| 103 |
+
"output_tokens": 39,
|
| 104 |
+
"reasoning_output_tokens": 0
|
| 105 |
+
},
|
| 106 |
+
{
|
| 107 |
+
"cache_write_input_tokens": 0,
|
| 108 |
+
"cached_input_tokens": 16896,
|
| 109 |
+
"input_tokens": 17507,
|
| 110 |
+
"output_tokens": 42,
|
| 111 |
+
"reasoning_output_tokens": 0
|
| 112 |
+
},
|
| 113 |
+
{
|
| 114 |
+
"cache_write_input_tokens": 0,
|
| 115 |
+
"cached_input_tokens": 17408,
|
| 116 |
+
"input_tokens": 17759,
|
| 117 |
+
"output_tokens": 445,
|
| 118 |
+
"reasoning_output_tokens": 186
|
| 119 |
+
},
|
| 120 |
+
{
|
| 121 |
+
"cache_write_input_tokens": 0,
|
| 122 |
+
"cached_input_tokens": 18048,
|
| 123 |
+
"input_tokens": 18723,
|
| 124 |
+
"output_tokens": 573,
|
| 125 |
+
"reasoning_output_tokens": 141
|
| 126 |
+
},
|
| 127 |
+
{
|
| 128 |
+
"cache_write_input_tokens": 0,
|
| 129 |
+
"cached_input_tokens": 16896,
|
| 130 |
+
"input_tokens": 19582,
|
| 131 |
+
"output_tokens": 1098,
|
| 132 |
+
"reasoning_output_tokens": 1060
|
| 133 |
+
},
|
| 134 |
+
{
|
| 135 |
+
"cache_write_input_tokens": 0,
|
| 136 |
+
"cached_input_tokens": 20480,
|
| 137 |
+
"input_tokens": 21126,
|
| 138 |
+
"output_tokens": 284,
|
| 139 |
+
"reasoning_output_tokens": 242
|
| 140 |
+
},
|
| 141 |
+
{
|
| 142 |
+
"cache_write_input_tokens": 0,
|
| 143 |
+
"cached_input_tokens": 21248,
|
| 144 |
+
"input_tokens": 22399,
|
| 145 |
+
"output_tokens": 322,
|
| 146 |
+
"reasoning_output_tokens": 107
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
"cache_write_input_tokens": 0,
|
| 150 |
+
"cached_input_tokens": 22528,
|
| 151 |
+
"input_tokens": 23001,
|
| 152 |
+
"output_tokens": 192,
|
| 153 |
+
"reasoning_output_tokens": 62
|
| 154 |
+
},
|
| 155 |
+
{
|
| 156 |
+
"cache_write_input_tokens": 0,
|
| 157 |
+
"cached_input_tokens": 23040,
|
| 158 |
+
"input_tokens": 23304,
|
| 159 |
+
"output_tokens": 319,
|
| 160 |
+
"reasoning_output_tokens": 217
|
| 161 |
+
},
|
| 162 |
+
{
|
| 163 |
+
"cache_write_input_tokens": 0,
|
| 164 |
+
"cached_input_tokens": 23424,
|
| 165 |
+
"input_tokens": 23788,
|
| 166 |
+
"output_tokens": 972,
|
| 167 |
+
"reasoning_output_tokens": 171
|
| 168 |
+
},
|
| 169 |
+
{
|
| 170 |
+
"cache_write_input_tokens": 0,
|
| 171 |
+
"cached_input_tokens": 24576,
|
| 172 |
+
"input_tokens": 24781,
|
| 173 |
+
"output_tokens": 121,
|
| 174 |
+
"reasoning_output_tokens": 47
|
| 175 |
+
},
|
| 176 |
+
{
|
| 177 |
+
"cache_write_input_tokens": 0,
|
| 178 |
+
"cached_input_tokens": 24704,
|
| 179 |
+
"input_tokens": 25519,
|
| 180 |
+
"output_tokens": 141,
|
| 181 |
+
"reasoning_output_tokens": 42
|
| 182 |
+
},
|
| 183 |
+
{
|
| 184 |
+
"cache_write_input_tokens": 0,
|
| 185 |
+
"cached_input_tokens": 25472,
|
| 186 |
+
"input_tokens": 26164,
|
| 187 |
+
"output_tokens": 351,
|
| 188 |
+
"reasoning_output_tokens": 246
|
| 189 |
+
},
|
| 190 |
+
{
|
| 191 |
+
"cache_write_input_tokens": 0,
|
| 192 |
+
"cached_input_tokens": 26368,
|
| 193 |
+
"input_tokens": 26749,
|
| 194 |
+
"output_tokens": 114,
|
| 195 |
+
"reasoning_output_tokens": 52
|
| 196 |
+
},
|
| 197 |
+
{
|
| 198 |
+
"cache_write_input_tokens": 0,
|
| 199 |
+
"cached_input_tokens": 26624,
|
| 200 |
+
"input_tokens": 26890,
|
| 201 |
+
"output_tokens": 560,
|
| 202 |
+
"reasoning_output_tokens": 122
|
| 203 |
+
},
|
| 204 |
+
{
|
| 205 |
+
"cache_write_input_tokens": 0,
|
| 206 |
+
"cached_input_tokens": 27264,
|
| 207 |
+
"input_tokens": 27656,
|
| 208 |
+
"output_tokens": 478,
|
| 209 |
+
"reasoning_output_tokens": 399
|
| 210 |
+
},
|
| 211 |
+
{
|
| 212 |
+
"cache_write_input_tokens": 0,
|
| 213 |
+
"cached_input_tokens": 27904,
|
| 214 |
+
"input_tokens": 28337,
|
| 215 |
+
"output_tokens": 80,
|
| 216 |
+
"reasoning_output_tokens": 0
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"cache_write_input_tokens": 0,
|
| 220 |
+
"cached_input_tokens": 28288,
|
| 221 |
+
"input_tokens": 28788,
|
| 222 |
+
"output_tokens": 499,
|
| 223 |
+
"reasoning_output_tokens": 425
|
| 224 |
+
},
|
| 225 |
+
{
|
| 226 |
+
"cache_write_input_tokens": 0,
|
| 227 |
+
"cached_input_tokens": 29184,
|
| 228 |
+
"input_tokens": 29491,
|
| 229 |
+
"output_tokens": 60,
|
| 230 |
+
"reasoning_output_tokens": 0
|
| 231 |
+
},
|
| 232 |
+
{
|
| 233 |
+
"cache_write_input_tokens": 0,
|
| 234 |
+
"cached_input_tokens": 29440,
|
| 235 |
+
"input_tokens": 29853,
|
| 236 |
+
"output_tokens": 145,
|
| 237 |
+
"reasoning_output_tokens": 89
|
| 238 |
+
},
|
| 239 |
+
{
|
| 240 |
+
"cache_write_input_tokens": 0,
|
| 241 |
+
"cached_input_tokens": 29952,
|
| 242 |
+
"input_tokens": 30193,
|
| 243 |
+
"output_tokens": 60,
|
| 244 |
+
"reasoning_output_tokens": 0
|
| 245 |
+
},
|
| 246 |
+
{
|
| 247 |
+
"cache_write_input_tokens": 0,
|
| 248 |
+
"cached_input_tokens": 30208,
|
| 249 |
+
"input_tokens": 30472,
|
| 250 |
+
"output_tokens": 117,
|
| 251 |
+
"reasoning_output_tokens": 46
|
| 252 |
+
},
|
| 253 |
+
{
|
| 254 |
+
"cache_write_input_tokens": 0,
|
| 255 |
+
"cached_input_tokens": 30464,
|
| 256 |
+
"input_tokens": 30791,
|
| 257 |
+
"output_tokens": 80,
|
| 258 |
+
"reasoning_output_tokens": 0
|
| 259 |
+
},
|
| 260 |
+
{
|
| 261 |
+
"cache_write_input_tokens": 0,
|
| 262 |
+
"cached_input_tokens": 30720,
|
| 263 |
+
"input_tokens": 31245,
|
| 264 |
+
"output_tokens": 1568,
|
| 265 |
+
"reasoning_output_tokens": 1469
|
| 266 |
+
},
|
| 267 |
+
{
|
| 268 |
+
"cache_write_input_tokens": 0,
|
| 269 |
+
"cached_input_tokens": 32640,
|
| 270 |
+
"input_tokens": 33016,
|
| 271 |
+
"output_tokens": 60,
|
| 272 |
+
"reasoning_output_tokens": 0
|
| 273 |
+
},
|
| 274 |
+
{
|
| 275 |
+
"cache_write_input_tokens": 0,
|
| 276 |
+
"cached_input_tokens": 32896,
|
| 277 |
+
"input_tokens": 33376,
|
| 278 |
+
"output_tokens": 83,
|
| 279 |
+
"reasoning_output_tokens": 29
|
| 280 |
+
},
|
| 281 |
+
{
|
| 282 |
+
"cache_write_input_tokens": 0,
|
| 283 |
+
"cached_input_tokens": 33280,
|
| 284 |
+
"input_tokens": 33653,
|
| 285 |
+
"output_tokens": 24,
|
| 286 |
+
"reasoning_output_tokens": 0
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"cache_write_input_tokens": 0,
|
| 290 |
+
"cached_input_tokens": 33536,
|
| 291 |
+
"input_tokens": 33751,
|
| 292 |
+
"output_tokens": 99,
|
| 293 |
+
"reasoning_output_tokens": 27
|
| 294 |
+
},
|
| 295 |
+
{
|
| 296 |
+
"cache_write_input_tokens": 0,
|
| 297 |
+
"cached_input_tokens": 33664,
|
| 298 |
+
"input_tokens": 34054,
|
| 299 |
+
"output_tokens": 24,
|
| 300 |
+
"reasoning_output_tokens": 0
|
| 301 |
+
},
|
| 302 |
+
{
|
| 303 |
+
"cache_write_input_tokens": 0,
|
| 304 |
+
"cached_input_tokens": 33920,
|
| 305 |
+
"input_tokens": 34230,
|
| 306 |
+
"output_tokens": 427,
|
| 307 |
+
"reasoning_output_tokens": 345
|
| 308 |
+
},
|
| 309 |
+
{
|
| 310 |
+
"cache_write_input_tokens": 0,
|
| 311 |
+
"cached_input_tokens": 34432,
|
| 312 |
+
"input_tokens": 34671,
|
| 313 |
+
"output_tokens": 30,
|
| 314 |
+
"reasoning_output_tokens": 0
|
| 315 |
+
},
|
| 316 |
+
{
|
| 317 |
+
"cache_write_input_tokens": 0,
|
| 318 |
+
"cached_input_tokens": 34560,
|
| 319 |
+
"input_tokens": 35381,
|
| 320 |
+
"output_tokens": 516,
|
| 321 |
+
"reasoning_output_tokens": 490
|
| 322 |
+
},
|
| 323 |
+
{
|
| 324 |
+
"cache_write_input_tokens": 0,
|
| 325 |
+
"cached_input_tokens": 35712,
|
| 326 |
+
"input_tokens": 35969,
|
| 327 |
+
"output_tokens": 681,
|
| 328 |
+
"reasoning_output_tokens": 582
|
| 329 |
+
},
|
| 330 |
+
{
|
| 331 |
+
"cache_write_input_tokens": 0,
|
| 332 |
+
"cached_input_tokens": 36480,
|
| 333 |
+
"input_tokens": 36853,
|
| 334 |
+
"output_tokens": 24,
|
| 335 |
+
"reasoning_output_tokens": 0
|
| 336 |
+
},
|
| 337 |
+
{
|
| 338 |
+
"cache_write_input_tokens": 0,
|
| 339 |
+
"cached_input_tokens": 36736,
|
| 340 |
+
"input_tokens": 37029,
|
| 341 |
+
"output_tokens": 54,
|
| 342 |
+
"reasoning_output_tokens": 0
|
| 343 |
+
},
|
| 344 |
+
{
|
| 345 |
+
"cache_write_input_tokens": 0,
|
| 346 |
+
"cached_input_tokens": 36864,
|
| 347 |
+
"input_tokens": 37277,
|
| 348 |
+
"output_tokens": 60,
|
| 349 |
+
"reasoning_output_tokens": 0
|
| 350 |
+
},
|
| 351 |
+
{
|
| 352 |
+
"cache_write_input_tokens": 0,
|
| 353 |
+
"cached_input_tokens": 37120,
|
| 354 |
+
"input_tokens": 37560,
|
| 355 |
+
"output_tokens": 69,
|
| 356 |
+
"reasoning_output_tokens": 0
|
| 357 |
+
},
|
| 358 |
+
{
|
| 359 |
+
"cache_write_input_tokens": 0,
|
| 360 |
+
"cached_input_tokens": 37504,
|
| 361 |
+
"input_tokens": 37829,
|
| 362 |
+
"output_tokens": 24,
|
| 363 |
+
"reasoning_output_tokens": 0
|
| 364 |
+
},
|
| 365 |
+
{
|
| 366 |
+
"cache_write_input_tokens": 0,
|
| 367 |
+
"cached_input_tokens": 37632,
|
| 368 |
+
"input_tokens": 38005,
|
| 369 |
+
"output_tokens": 1368,
|
| 370 |
+
"reasoning_output_tokens": 937
|
| 371 |
+
},
|
| 372 |
+
{
|
| 373 |
+
"cache_write_input_tokens": 0,
|
| 374 |
+
"cached_input_tokens": 39168,
|
| 375 |
+
"input_tokens": 39606,
|
| 376 |
+
"output_tokens": 567,
|
| 377 |
+
"reasoning_output_tokens": 465
|
| 378 |
+
},
|
| 379 |
+
{
|
| 380 |
+
"cache_write_input_tokens": 0,
|
| 381 |
+
"cached_input_tokens": 39936,
|
| 382 |
+
"input_tokens": 40373,
|
| 383 |
+
"output_tokens": 52,
|
| 384 |
+
"reasoning_output_tokens": 0
|
| 385 |
+
},
|
| 386 |
+
{
|
| 387 |
+
"cache_write_input_tokens": 0,
|
| 388 |
+
"cached_input_tokens": 40192,
|
| 389 |
+
"input_tokens": 40618,
|
| 390 |
+
"output_tokens": 24,
|
| 391 |
+
"reasoning_output_tokens": 0
|
| 392 |
+
},
|
| 393 |
+
{
|
| 394 |
+
"cache_write_input_tokens": 0,
|
| 395 |
+
"cached_input_tokens": 40448,
|
| 396 |
+
"input_tokens": 40715,
|
| 397 |
+
"output_tokens": 90,
|
| 398 |
+
"reasoning_output_tokens": 18
|
| 399 |
+
},
|
| 400 |
+
{
|
| 401 |
+
"cache_write_input_tokens": 0,
|
| 402 |
+
"cached_input_tokens": 40576,
|
| 403 |
+
"input_tokens": 41007,
|
| 404 |
+
"output_tokens": 24,
|
| 405 |
+
"reasoning_output_tokens": 0
|
| 406 |
+
},
|
| 407 |
+
{
|
| 408 |
+
"cache_write_input_tokens": 0,
|
| 409 |
+
"cached_input_tokens": 40832,
|
| 410 |
+
"input_tokens": 41181,
|
| 411 |
+
"output_tokens": 114,
|
| 412 |
+
"reasoning_output_tokens": 88
|
| 413 |
+
},
|
| 414 |
+
{
|
| 415 |
+
"cache_write_input_tokens": 0,
|
| 416 |
+
"cached_input_tokens": 41216,
|
| 417 |
+
"input_tokens": 41444,
|
| 418 |
+
"output_tokens": 226,
|
| 419 |
+
"reasoning_output_tokens": 126
|
| 420 |
+
},
|
| 421 |
+
{
|
| 422 |
+
"cache_write_input_tokens": 0,
|
| 423 |
+
"cached_input_tokens": 41600,
|
| 424 |
+
"input_tokens": 41684,
|
| 425 |
+
"output_tokens": 82,
|
| 426 |
+
"reasoning_output_tokens": 0
|
| 427 |
+
},
|
| 428 |
+
{
|
| 429 |
+
"cache_write_input_tokens": 0,
|
| 430 |
+
"cached_input_tokens": 41728,
|
| 431 |
+
"input_tokens": 42904,
|
| 432 |
+
"output_tokens": 826,
|
| 433 |
+
"reasoning_output_tokens": 397
|
| 434 |
+
},
|
| 435 |
+
{
|
| 436 |
+
"cache_write_input_tokens": 0,
|
| 437 |
+
"cached_input_tokens": 43648,
|
| 438 |
+
"input_tokens": 43901,
|
| 439 |
+
"output_tokens": 430,
|
| 440 |
+
"reasoning_output_tokens": 357
|
| 441 |
+
},
|
| 442 |
+
{
|
| 443 |
+
"cache_write_input_tokens": 0,
|
| 444 |
+
"cached_input_tokens": 44160,
|
| 445 |
+
"input_tokens": 44534,
|
| 446 |
+
"output_tokens": 80,
|
| 447 |
+
"reasoning_output_tokens": 0
|
| 448 |
+
},
|
| 449 |
+
{
|
| 450 |
+
"cache_write_input_tokens": 0,
|
| 451 |
+
"cached_input_tokens": 44416,
|
| 452 |
+
"input_tokens": 44986,
|
| 453 |
+
"output_tokens": 1895,
|
| 454 |
+
"reasoning_output_tokens": 1796
|
| 455 |
+
},
|
| 456 |
+
{
|
| 457 |
+
"cache_write_input_tokens": 0,
|
| 458 |
+
"cached_input_tokens": 46720,
|
| 459 |
+
"input_tokens": 47019,
|
| 460 |
+
"output_tokens": 952,
|
| 461 |
+
"reasoning_output_tokens": 264
|
| 462 |
+
},
|
| 463 |
+
{
|
| 464 |
+
"cache_write_input_tokens": 0,
|
| 465 |
+
"cached_input_tokens": 47744,
|
| 466 |
+
"input_tokens": 47994,
|
| 467 |
+
"output_tokens": 82,
|
| 468 |
+
"reasoning_output_tokens": 12
|
| 469 |
+
}
|
| 470 |
+
],
|
| 471 |
+
"pricing": {
|
| 472 |
+
"model": "openai/gpt-6-sol",
|
| 473 |
+
"currency": "USD",
|
| 474 |
+
"verified_date": "2026-10-28",
|
| 475 |
+
"source": "https://developers.openai.com/api/docs/models/gpt-6-sol",
|
| 476 |
+
"basis": "Standard API-equivalent estimate; actual subscription billing is unavailable",
|
| 477 |
+
"per_million_tokens": {
|
| 478 |
+
"fresh_input": 2.0,
|
| 479 |
+
"cache_read": 0.2,
|
| 480 |
+
"cache_write": 2.5,
|
| 481 |
+
"output": 10.0
|
| 482 |
+
},
|
| 483 |
+
"long_context_threshold": 272000,
|
| 484 |
+
"long_context_multipliers": {
|
| 485 |
+
"fresh_input": 2.0,
|
| 486 |
+
"cache_read": 2.0,
|
| 487 |
+
"cache_write": 2.0,
|
| 488 |
+
"output": 1.5
|
| 489 |
+
}
|
| 490 |
+
},
|
| 491 |
+
"gpu_cost_usd": null
|
| 492 |
+
},
|
| 493 |
"calls": [],
|
| 494 |
"policy_inputs": [],
|
| 495 |
"policy_chunks": [],
|
data/b1/frame-mapping.json
ADDED
|
@@ -0,0 +1,306 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"source_stamp_ns": [
|
| 3 |
+
0,
|
| 4 |
+
100000000,
|
| 5 |
+
200000000,
|
| 6 |
+
300000000,
|
| 7 |
+
400000000,
|
| 8 |
+
500000000,
|
| 9 |
+
600000000,
|
| 10 |
+
700000000,
|
| 11 |
+
800000000,
|
| 12 |
+
900000000,
|
| 13 |
+
1000000000,
|
| 14 |
+
1100000000,
|
| 15 |
+
1200000000,
|
| 16 |
+
1300000000,
|
| 17 |
+
1400000000,
|
| 18 |
+
1500000000,
|
| 19 |
+
1600000000,
|
| 20 |
+
1700000000,
|
| 21 |
+
1800000000,
|
| 22 |
+
1900000000,
|
| 23 |
+
2000000000,
|
| 24 |
+
2100000000,
|
| 25 |
+
2200000000,
|
| 26 |
+
2300000000,
|
| 27 |
+
2400000000,
|
| 28 |
+
2500000000,
|
| 29 |
+
2600000000,
|
| 30 |
+
2700000000,
|
| 31 |
+
2800000000,
|
| 32 |
+
2900000000,
|
| 33 |
+
3000000000,
|
| 34 |
+
3100000000,
|
| 35 |
+
3200000000,
|
| 36 |
+
3300000000,
|
| 37 |
+
3400000000,
|
| 38 |
+
3500000000,
|
| 39 |
+
3600000000,
|
| 40 |
+
3700000000,
|
| 41 |
+
3800000000,
|
| 42 |
+
3900000000,
|
| 43 |
+
4000000000,
|
| 44 |
+
4100000000,
|
| 45 |
+
4200000000,
|
| 46 |
+
4300000000,
|
| 47 |
+
4400000000,
|
| 48 |
+
4500000000,
|
| 49 |
+
4600000000,
|
| 50 |
+
4700000000,
|
| 51 |
+
4800000000,
|
| 52 |
+
4900000000,
|
| 53 |
+
5000000000,
|
| 54 |
+
5100000000,
|
| 55 |
+
5200000000,
|
| 56 |
+
5300000000,
|
| 57 |
+
5400000000,
|
| 58 |
+
5500000000,
|
| 59 |
+
5600000000,
|
| 60 |
+
5700000000,
|
| 61 |
+
5800000000,
|
| 62 |
+
5900000000,
|
| 63 |
+
6000000000,
|
| 64 |
+
6100000000,
|
| 65 |
+
6200000000,
|
| 66 |
+
6300000000,
|
| 67 |
+
6400000000,
|
| 68 |
+
6500000000,
|
| 69 |
+
6600000000,
|
| 70 |
+
6700000000,
|
| 71 |
+
6800000000,
|
| 72 |
+
6900000000,
|
| 73 |
+
7000000000,
|
| 74 |
+
7100000000,
|
| 75 |
+
7200000000,
|
| 76 |
+
7300000000,
|
| 77 |
+
7400000000,
|
| 78 |
+
7500000000,
|
| 79 |
+
7600000000,
|
| 80 |
+
7700000000,
|
| 81 |
+
7800000000,
|
| 82 |
+
7900000000,
|
| 83 |
+
8000000000,
|
| 84 |
+
8100000000,
|
| 85 |
+
8200000000,
|
| 86 |
+
8300000000,
|
| 87 |
+
8400000000,
|
| 88 |
+
8500000000,
|
| 89 |
+
8600000000,
|
| 90 |
+
8700000000,
|
| 91 |
+
8800000000,
|
| 92 |
+
8900000000,
|
| 93 |
+
9000000000,
|
| 94 |
+
9100000000,
|
| 95 |
+
9200000000,
|
| 96 |
+
9300000000,
|
| 97 |
+
9400000000,
|
| 98 |
+
9500000000,
|
| 99 |
+
9600000000,
|
| 100 |
+
9700000000,
|
| 101 |
+
9800000000,
|
| 102 |
+
9900000000,
|
| 103 |
+
10000000000,
|
| 104 |
+
10100000000,
|
| 105 |
+
10200000000,
|
| 106 |
+
10300000000,
|
| 107 |
+
10400000000,
|
| 108 |
+
10500000000,
|
| 109 |
+
10600000000,
|
| 110 |
+
10700000000,
|
| 111 |
+
10800000000,
|
| 112 |
+
10900000000,
|
| 113 |
+
11000000000,
|
| 114 |
+
11100000000,
|
| 115 |
+
11200000000,
|
| 116 |
+
11300000000,
|
| 117 |
+
11400000000,
|
| 118 |
+
11500000000,
|
| 119 |
+
11600000000,
|
| 120 |
+
11700000000,
|
| 121 |
+
11800000000,
|
| 122 |
+
11900000000,
|
| 123 |
+
12000000000,
|
| 124 |
+
12100000000,
|
| 125 |
+
12200000000,
|
| 126 |
+
12300000000,
|
| 127 |
+
12400000000,
|
| 128 |
+
12500000000,
|
| 129 |
+
12600000000,
|
| 130 |
+
12700000000,
|
| 131 |
+
12800000000,
|
| 132 |
+
12900000000,
|
| 133 |
+
13000000000,
|
| 134 |
+
13100000000,
|
| 135 |
+
13200000000,
|
| 136 |
+
13300000000,
|
| 137 |
+
13400000000,
|
| 138 |
+
13500000000,
|
| 139 |
+
13600000000,
|
| 140 |
+
13700000000,
|
| 141 |
+
13800000000,
|
| 142 |
+
13900000000,
|
| 143 |
+
14000000000,
|
| 144 |
+
14100000000,
|
| 145 |
+
14200000000,
|
| 146 |
+
14300000000,
|
| 147 |
+
14400000000,
|
| 148 |
+
14500000000,
|
| 149 |
+
14600000000,
|
| 150 |
+
14700000000,
|
| 151 |
+
14800000000,
|
| 152 |
+
14900000000,
|
| 153 |
+
15000000000,
|
| 154 |
+
15100000000,
|
| 155 |
+
15200000000,
|
| 156 |
+
15300000000,
|
| 157 |
+
15400000000,
|
| 158 |
+
15500000000,
|
| 159 |
+
15600000000,
|
| 160 |
+
15700000000,
|
| 161 |
+
15800000000,
|
| 162 |
+
15900000000,
|
| 163 |
+
16000000000,
|
| 164 |
+
16100000000,
|
| 165 |
+
16200000000,
|
| 166 |
+
16300000000,
|
| 167 |
+
16400000000,
|
| 168 |
+
16500000000,
|
| 169 |
+
16600000000,
|
| 170 |
+
16700000000,
|
| 171 |
+
16800000000,
|
| 172 |
+
16900000000,
|
| 173 |
+
17000000000,
|
| 174 |
+
17100000000,
|
| 175 |
+
17200000000,
|
| 176 |
+
17300000000,
|
| 177 |
+
17400000000,
|
| 178 |
+
17500000000,
|
| 179 |
+
17600000000,
|
| 180 |
+
17700000000,
|
| 181 |
+
17800000000,
|
| 182 |
+
17900000000,
|
| 183 |
+
18000000000,
|
| 184 |
+
18100000000,
|
| 185 |
+
18200000000,
|
| 186 |
+
18300000000,
|
| 187 |
+
18400000000,
|
| 188 |
+
18500000000,
|
| 189 |
+
18600000000,
|
| 190 |
+
18700000000,
|
| 191 |
+
18800000000,
|
| 192 |
+
18900000000,
|
| 193 |
+
19000000000,
|
| 194 |
+
19100000000,
|
| 195 |
+
19200000000,
|
| 196 |
+
19300000000,
|
| 197 |
+
19400000000,
|
| 198 |
+
19500000000,
|
| 199 |
+
19600000000,
|
| 200 |
+
19700000000,
|
| 201 |
+
19800000000,
|
| 202 |
+
19900000000,
|
| 203 |
+
20000000000,
|
| 204 |
+
20100000000,
|
| 205 |
+
20200000000,
|
| 206 |
+
20300000000,
|
| 207 |
+
20400000000,
|
| 208 |
+
20500000000,
|
| 209 |
+
20600000000,
|
| 210 |
+
20700000000,
|
| 211 |
+
20800000000,
|
| 212 |
+
20900000000,
|
| 213 |
+
21000000000,
|
| 214 |
+
21100000000,
|
| 215 |
+
21200000000,
|
| 216 |
+
21300000000,
|
| 217 |
+
21400000000,
|
| 218 |
+
21500000000,
|
| 219 |
+
21600000000,
|
| 220 |
+
21700000000,
|
| 221 |
+
21800000000,
|
| 222 |
+
21900000000,
|
| 223 |
+
22000000000,
|
| 224 |
+
22100000000,
|
| 225 |
+
22200000000,
|
| 226 |
+
22300000000,
|
| 227 |
+
22400000000,
|
| 228 |
+
22500000000,
|
| 229 |
+
22600000000,
|
| 230 |
+
22700000000,
|
| 231 |
+
22800000000,
|
| 232 |
+
22900000000,
|
| 233 |
+
23000000000,
|
| 234 |
+
23100000000,
|
| 235 |
+
23200000000,
|
| 236 |
+
23300000000,
|
| 237 |
+
23400000000,
|
| 238 |
+
23500000000,
|
| 239 |
+
23600000000,
|
| 240 |
+
23700000000,
|
| 241 |
+
23800000000,
|
| 242 |
+
23900000000,
|
| 243 |
+
24000000000,
|
| 244 |
+
24100000000,
|
| 245 |
+
24200000000,
|
| 246 |
+
24300000000,
|
| 247 |
+
24400000000,
|
| 248 |
+
24500000000,
|
| 249 |
+
24600000000,
|
| 250 |
+
24700000000,
|
| 251 |
+
24800000000,
|
| 252 |
+
24900000000,
|
| 253 |
+
25000000000,
|
| 254 |
+
25100000000,
|
| 255 |
+
25200000000,
|
| 256 |
+
25300000000,
|
| 257 |
+
25400000000,
|
| 258 |
+
25500000000,
|
| 259 |
+
25600000000,
|
| 260 |
+
25700000000,
|
| 261 |
+
25800000000,
|
| 262 |
+
25900000000,
|
| 263 |
+
26000000000,
|
| 264 |
+
26100000000,
|
| 265 |
+
26200000000,
|
| 266 |
+
26300000000,
|
| 267 |
+
26400000000,
|
| 268 |
+
26500000000,
|
| 269 |
+
26600000000,
|
| 270 |
+
26700000000,
|
| 271 |
+
26800000000,
|
| 272 |
+
26900000000,
|
| 273 |
+
27000000000,
|
| 274 |
+
27100000000,
|
| 275 |
+
27200000000,
|
| 276 |
+
27300000000,
|
| 277 |
+
27400000000,
|
| 278 |
+
27500000000,
|
| 279 |
+
27600000000,
|
| 280 |
+
27700000000,
|
| 281 |
+
27800000000,
|
| 282 |
+
27900000000,
|
| 283 |
+
28000000000,
|
| 284 |
+
28100000000,
|
| 285 |
+
28200000000,
|
| 286 |
+
28300000000,
|
| 287 |
+
28400000000,
|
| 288 |
+
28500000000,
|
| 289 |
+
28600000000,
|
| 290 |
+
28700000000,
|
| 291 |
+
28800000000,
|
| 292 |
+
28900000000,
|
| 293 |
+
29000000000,
|
| 294 |
+
29100000000,
|
| 295 |
+
29200000000,
|
| 296 |
+
29300000000,
|
| 297 |
+
29400000000,
|
| 298 |
+
29500000000,
|
| 299 |
+
29600000000,
|
| 300 |
+
29700000000,
|
| 301 |
+
29800000000,
|
| 302 |
+
29900000000,
|
| 303 |
+
30000000000
|
| 304 |
+
],
|
| 305 |
+
"output_fps": 40
|
| 306 |
+
}
|
data/b1/instruction.txt
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Task: libero/libero-spatial-01
|
| 2 |
+
|
| 3 |
+
Pick the akita black bowl between the plate and the ramekin and place it in the center of the plate
|
| 4 |
+
|
| 5 |
+
## Work to do
|
| 6 |
+
|
| 7 |
+
Solve the task efficiently using the running rosbridge environment. Follow the
|
| 8 |
+
task instruction above, including its completion requirements. Read `harness.md`
|
| 9 |
+
and the device profiles for public interfaces, units and calibrated frames.
|
| 10 |
+
Reuse your saved tools, skills, and memos.
|
| 11 |
+
|
| 12 |
+
## Limits
|
| 13 |
+
|
| 14 |
+
You have 605 native control steps. The execution mode is `stepped`: physics is
|
| 15 |
+
frozen while idle. Use `world.wait` with `duration_s` to advance the native clock.
|
| 16 |
+
Joint targets are ROS JointTrajectory messages; gripper targets use the units
|
| 17 |
+
declared in their profiles. Reads and command publication do not advance physics.
|
| 18 |
+
Waits are sequential; concurrent waits are rejected. A command or elapsed time
|
| 19 |
+
does not prove arrival; inspect measured feedback. Device stop holds the device
|
| 20 |
+
without ending the episode. The safety timeout is 28800 seconds.
|
| 21 |
+
Do not launch or reset a simulation.
|
| 22 |
+
|
| 23 |
+
## Completion
|
| 24 |
+
|
| 25 |
+
Return when finished. The owner finalizes the episode and reads its native
|
| 26 |
+
verdict. An interrupted or rejected wait does not establish task success. The
|
| 27 |
+
native step limit stops physics even if your requested wait is longer.
|
| 28 |
+
|
| 29 |
+
## Saved resources
|
| 30 |
+
|
| 31 |
+
Maintain reusable code in `.kinex/tools/`, skills in `.kinex/skills/`, and concise working notes
|
| 32 |
+
in `.kinex/memos/`. Improve existing files in place as you learn, replacing outdated
|
| 33 |
+
content. Create a new file only when no existing resource fits; do not create
|
| 34 |
+
per-attempt reflections or numbered copies. These files persist across fresh
|
| 35 |
+
conversations. Update them before finishing your response.
|
| 36 |
+
|
| 37 |
+
## Robot and device access
|
| 38 |
+
|
| 39 |
+
Use Kinex's ROS device profiles in `.kinex/devices/` and the robot
|
| 40 |
+
specification in `.kinex/workspace.yaml`. The adapter refreshes them each episode.
|
| 41 |
+
Use `kinex.communication` for typed topic publication, subscriptions and service
|
| 42 |
+
requests. Inspect operation schemas before acting. Load the provided devices;
|
| 43 |
+
they borrow the running simulator. Stop holds motion; it does not reset the world.
|
| 44 |
+
Improve existing tools, skills, and memos in place.
|
| 45 |
+
|
data/b1/media.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"schema": "programvla.media.v1",
|
| 3 |
+
"passed": true,
|
| 4 |
+
"speed": 4,
|
| 5 |
+
"width": 1440,
|
| 6 |
+
"height": 720,
|
| 7 |
+
"source_fps": 10.0,
|
| 8 |
+
"output_fps": 40,
|
| 9 |
+
"native_frames": 301,
|
| 10 |
+
"published_frames": 301,
|
| 11 |
+
"all_frames_compared": 301,
|
| 12 |
+
"minimum_frame_psnr_db": 39.193138159821416,
|
| 13 |
+
"duration_s": 7.525,
|
| 14 |
+
"source_sample_coverage": 1.0,
|
| 15 |
+
"terminal_frame_retained": true,
|
| 16 |
+
"source_dropped_samples": 0,
|
| 17 |
+
"pts_verified": true,
|
| 18 |
+
"decode_ok": true,
|
| 19 |
+
"sha256": "6879be037df0d6f285572f0f75c2d82edcace427504c1c942be45fb8415d7a8e",
|
| 20 |
+
"source_sha256": {
|
| 21 |
+
"third_person.mp4": "ea52c7739a7f0ca6d043b45154aac48fe14e0d37d49ef20b5bf5b1ebd26205fe",
|
| 22 |
+
"wrist.mp4": "598f56dae47f56701179ea8cc7e6423ce9242109aaa0aadb13f7accbbf2ae22f"
|
| 23 |
+
},
|
| 24 |
+
"frame_mapping": "Each source sample once, third-person left and wrist right.",
|
| 25 |
+
"reference_style": "RLE-Bench/kinex-benchmark-native-budget-with-robobridge"
|
| 26 |
+
}
|
data/b1/poster.jpg
ADDED
|
Git LFS Details
|
data/b1/terminal.jpg
ADDED
|
Git LFS Details
|
data/b1/tool-calls.json
ADDED
|
@@ -0,0 +1,1561 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"id": "tool-001",
|
| 4 |
+
"name": "read",
|
| 5 |
+
"arguments": {
|
| 6 |
+
"path": "harness.md",
|
| 7 |
+
"offset": null,
|
| 8 |
+
"limit": null
|
| 9 |
+
},
|
| 10 |
+
"timestamp": 1793160406354,
|
| 11 |
+
"result": [
|
| 12 |
+
{
|
| 13 |
+
"type": "text",
|
| 14 |
+
"text": "Use Kinex's ROS device profiles in `.kinex/devices/` and the robot\nspecification in `.kinex/workspace.yaml`. The adapter refreshes them each episode.\nUse `kinex.communication` for typed topic publication, subscriptions and service\nrequests. Inspect operation schemas before acting. Load the provided devices;\nthey borrow the running simulator. Stop holds motion; it does not reset the world.\nImprove existing tools, skills, and memos in place.\n"
|
| 15 |
+
}
|
| 16 |
+
]
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"id": "tool-002",
|
| 20 |
+
"name": "bash",
|
| 21 |
+
"arguments": {
|
| 22 |
+
"command": "ls -R .kinex/devices .kinex/tools .kinex/skills .kinex/memos 2>/dev/null",
|
| 23 |
+
"timeout": 10
|
| 24 |
+
},
|
| 25 |
+
"timestamp": 1793160406354,
|
| 26 |
+
"result": [
|
| 27 |
+
{
|
| 28 |
+
"type": "text",
|
| 29 |
+
"text": ".kinex/devices:\narm\ncamera_agentview\ncamera_wrist\ngripper\nworld\n\n.kinex/devices/arm:\narm.urdf\nlinks.py\nprofile.yaml\n\n.kinex/devices/camera_agentview:\nprofile.yaml\n\n.kinex/devices/camera_wrist:\nprofile.yaml\n\n.kinex/devices/gripper:\ngripper.urdf\nlinks.py\nprofile.yaml\n\n.kinex/devices/world:\nprofile.yaml\n\n.kinex/memos:\n\n.kinex/skills:\n\n.kinex/tools:\n"
|
| 30 |
+
}
|
| 31 |
+
]
|
| 32 |
+
},
|
| 33 |
+
{
|
| 34 |
+
"id": "tool-003",
|
| 35 |
+
"name": "read",
|
| 36 |
+
"arguments": {
|
| 37 |
+
"path": ".kinex/workspace.yaml",
|
| 38 |
+
"offset": null,
|
| 39 |
+
"limit": null
|
| 40 |
+
},
|
| 41 |
+
"timestamp": 1793160406354,
|
| 42 |
+
"result": [
|
| 43 |
+
{
|
| 44 |
+
"type": "text",
|
| 45 |
+
"text": "identity:\n id: libero-panda-tabletop\n name: LIBERO Panda tabletop\n kind: arm\n model: Panda\n source: user\ndevices:\n source: user\nsafety:\n source: user\n max_joint_velocity: null\n max_cartesian_velocity: null\n keep_out_zones: []\nmeta:\n created_at: '2026-10-19T00:00:00Z'\n updated_at: '2026-10-19T00:00:00Z'\n"
|
| 46 |
+
}
|
| 47 |
+
]
|
| 48 |
+
},
|
| 49 |
+
{
|
| 50 |
+
"id": "tool-004",
|
| 51 |
+
"name": "read",
|
| 52 |
+
"arguments": {
|
| 53 |
+
"path": ".kinex/devices/arm/profile.yaml",
|
| 54 |
+
"offset": null,
|
| 55 |
+
"limit": null
|
| 56 |
+
},
|
| 57 |
+
"timestamp": 1793160408775,
|
| 58 |
+
"result": [
|
| 59 |
+
{
|
| 60 |
+
"type": "text",
|
| 61 |
+
"text": "name: arm\nruntime:\n domain_id: 83\n nodes:\n - entry: links.py\n factory: create\n ready_timeout_s: 30\noperations:\n joint_state:\n description: Measured joint positions with joint names and world-clock acquisition\n stamp. Positions are radians for the arm and metres for finger joints; do not\n infer motion completion from a sent command.\n transport: topic\n direction: output\n endpoint: /arm/joint_state\n type: sensor_msgs/msg/JointState\n qos:\n depth: 1\n reliability: reliable\n durability: transient_local\n timeout_s: 10\n joint_target:\n description: Joint trajectory over all seven arm joints in radians, timed from\n receipt by strictly increasing time_from_start and finishing within 120 seconds;\n velocities, accelerations and effort must be empty. A zero header stamp selects\n now; a nonzero stamp must not start in the past. Replacement clears pending\n references; invalid trajectories are ignored, so verify measured joint_state.\n transport: topic\n direction: input\n endpoint: /arm/joint_target\n type: trajectory_msgs/msg/JointTrajectory\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n timeout_s: 10\n stop:\n description: Stop arm motion and hold the measured posture.\n transport: service\n direction: input\n endpoint: /arm/stop\n type: std_srvs/srv/Trigger\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n timeout_s: 10\nloaded: true\nmeta:\n created_at: '2026-10-19T00:00:00Z'\n updated_at: '2026-10-20T17:24:01.462Z'\ntype: joint\ndescription: Panda seven-joint manipulator mounted in the tabletop workspace. Geometry\n is the sibling arm.urdf with flange as the tip link; measured links are on TF as\n arm/<link>, and helpers.joint_model('arm') computes FK/IK from it. rosbridge rejects\n targets outside the URDF joint limits.\nsource: introspected\ncalibrated_at: null\nmethod: introspection\nmodel:\n format: urdf\n path: arm.urdf\n base_link: base_link\n tip_link: flange\nlimits: native\nhome:\n robot0_joint1: 0\n robot0_joint2: -0.161037389\n robot0_joint3: 0\n robot0_joint4: -2.44459747\n robot0_joint5: 0\n robot0_joint6: 2.2267522\n robot0_joint7: 0.785398163397\nstop:\n behavior: hold\n affected_devices:\n - arm\nframes:\n base:\n translation_m:\n - -0.66\n - 0.0\n - 0.912\n rotation_xyzw:\n - 0.0\n - 0.0\n - 0.0\n - 1.0\n parent: world:base\n"
|
| 62 |
+
}
|
| 63 |
+
]
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"id": "tool-005",
|
| 67 |
+
"name": "read",
|
| 68 |
+
"arguments": {
|
| 69 |
+
"path": ".kinex/devices/gripper/profile.yaml",
|
| 70 |
+
"offset": null,
|
| 71 |
+
"limit": null
|
| 72 |
+
},
|
| 73 |
+
"timestamp": 1793160408775,
|
| 74 |
+
"result": [
|
| 75 |
+
{
|
| 76 |
+
"type": "text",
|
| 77 |
+
"text": "name: gripper\nruntime:\n domain_id: 83\n nodes:\n - entry: links.py\n factory: create\n ready_timeout_s: 30\n observation: joint_state\noperations:\n joint_state:\n description: Measured finger_joint1 in metres, half the summed finger travel,\n stamped at acquisition; Kinex publishes the URDF finger and pad links from it.\n transport: topic\n direction: output\n endpoint: /gripper/joint_state\n type: sensor_msgs/msg/JointState\n qos:\n depth: 1\n reliability: reliable\n durability: transient_local\n timeout_s: 10\n target:\n description: finger_joint1 position (data) from 0 (closed) to 0.04 m (open). rosbridge\n steers LIBERO's integrated direction command toward it every control step with\n 1 mm tolerance, so open and closed are reached reliably while intermediate targets\n oscillate by a few millimetres. A target persists until replaced or stopped;\n out-of-range targets are ignored, so verify joint_state.\n transport: topic\n direction: input\n endpoint: /gripper/target\n type: std_msgs/msg/Float64\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n timeout_s: 10\n stop:\n description: Hold the measured finger position; the fingers may settle briefly\n after the stop.\n transport: service\n direction: input\n endpoint: /gripper/stop\n type: std_srvs/srv/Trigger\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n timeout_s: 10\nloaded: true\nmeta:\n created_at: '2026-10-19T00:00:00Z'\n updated_at: '2026-10-20T17:24:01.455Z'\ntype: gripper\ndescription: Panda parallel two-finger gripper on the arm flange. Fingers close along\n the gripper base x axis; the URDF pad links mark the 16 by 16 mm inner pad faces,\n 3.6 mm below the TCP. finger_joint1 is half of LIBERO's summed finger travel, so\n the inner pad gap is 2 * finger_joint1 - 1 mm. A closed or stalled grip alone does\n not prove a successful grasp.\nsource: introspected\ncalibrated_at: null\nmethod: introspection\nstop:\n behavior: hold\n affected_devices:\n - gripper\nframes:\n base:\n translation_m:\n - 0\n - 0\n - 0\n rotation_xyzw:\n - 0\n - 0\n - -0.707106781187\n - 0.707106781187\n parent: arm:flange\n tcp:\n translation_m:\n - 0\n - 0\n - 0.097\n rotation_xyzw:\n - 0\n - 0\n - 0\n - 1\n parent: gripper:base\nmodel:\n format: urdf\n path: gripper.urdf\n base_link: base_link\ngrip:\n joint: finger_joint1\n open: 0.04\n closed: 0.0\n"
|
| 78 |
+
}
|
| 79 |
+
]
|
| 80 |
+
},
|
| 81 |
+
{
|
| 82 |
+
"id": "tool-006",
|
| 83 |
+
"name": "read",
|
| 84 |
+
"arguments": {
|
| 85 |
+
"path": ".kinex/devices/world/profile.yaml",
|
| 86 |
+
"offset": null,
|
| 87 |
+
"limit": null
|
| 88 |
+
},
|
| 89 |
+
"timestamp": 1793160408775,
|
| 90 |
+
"result": [
|
| 91 |
+
{
|
| 92 |
+
"type": "text",
|
| 93 |
+
"text": "name: world\nruntime:\n domain_id: 83\n observation: time\n nodes: []\n ready_timeout_s: 30\noperations:\n time:\n description: Authoritative world clock\n transport: topic\n direction: output\n endpoint: /clock\n type: rosgraph_msgs/msg/Clock\n qos:\n depth: 1\n reliability: reliable\n durability: transient_local\n timeout_s: 10\n wait:\n description: Advance or await duration_s of world time (finite and nonnegative).\n Zero is an observation barrier. Waits are sequential; one requested while another\n is pending is rejected. A terminal episode rejects further progression without\n exposing benchmark results.\n transport: service\n direction: input\n endpoint: /world/wait\n type: kinex_interfaces/srv/Wait\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n timeout_s: 120\n stop:\n description: Cancel the pending wait.\n transport: service\n direction: input\n endpoint: /world/stop\n type: std_srvs/srv/Trigger\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n timeout_s: 10\nloaded: true\nmeta:\n created_at: '2026-10-19T00:00:00Z'\n updated_at: '2026-10-20T17:24:01.458Z'\ntype: world\ndescription: Scene reference and authoritative world clock. Bounds and surfaces describe\n known scene geometry. Kinex supplies frame transforms independently. This device\n exposes no task instructions or evaluator results.\nsource: default\nmethod: unknown\ncalibrated_at: null\nbounds: null\nsurfaces: []\nframes:\n base:\n parent: null\n translation_m: null\n rotation_xyzw: null\n"
|
| 94 |
+
}
|
| 95 |
+
]
|
| 96 |
+
},
|
| 97 |
+
{
|
| 98 |
+
"id": "tool-007",
|
| 99 |
+
"name": "read",
|
| 100 |
+
"arguments": {
|
| 101 |
+
"path": ".kinex/devices/camera_agentview/profile.yaml",
|
| 102 |
+
"offset": null,
|
| 103 |
+
"limit": null
|
| 104 |
+
},
|
| 105 |
+
"timestamp": 1793160408775,
|
| 106 |
+
"result": [
|
| 107 |
+
{
|
| 108 |
+
"type": "text",
|
| 109 |
+
"text": "name: camera_agentview\nruntime:\n domain_id: 83\n nodes: []\n ready_timeout_s: 30\noperations:\n image:\n description: RGB image measurements with encoding, dimensions, row stride and\n acquisition timestamp in the Image header. The frame_id identifies the calibrated\n optical frame; use its stamp for tf2 lookup. A new subscriber receives the current\n frame at once, also while the world is paused, then one per camera sample; reading\n never advances world time.\n transport: topic\n direction: output\n endpoint: /camera_agentview/image\n type: sensor_msgs/msg/Image\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n timeout_s: 10\n camera_info:\n description: Projection and distortion calibration for the image stream, including\n K, D, image size and optical frame. Use the declared distortion model and raw/rectified\n image space when projecting pixels; intrinsics are not TF transforms.\n transport: topic\n direction: output\n endpoint: /camera_agentview/camera_info\n type: sensor_msgs/msg/CameraInfo\n qos:\n depth: 1\n reliability: reliable\n durability: transient_local\n timeout_s: 10\nloaded: true\nmeta:\n created_at: '2026-10-19T00:00:00Z'\n updated_at: '2026-10-20T17:24:01.453Z'\ntype: rgb\ndescription: Fixed RGB camera observing the tabletop scene. Image calibration and\n the optical-frame mount are in the profile. Images are measurements at world-clock\n acquisition timestamps.\nsource: introspected\nmethod: introspection\ncalibrated_at: null\ncolor:\n width: 256\n height: 256\n fps: null\n projection:\n model: pinhole\n fx: 309.01933598375615\n fy: 309.01933598375615\n cx: 127.5\n cy: 127.5\n skew: 0\n distortion:\n model: none\n fov:\n horizontal_deg: 45.00000000000001\n vertical_deg: 45.00000000000001\nframes:\n base:\n translation_m:\n - 0.658613174683\n - 0.0\n - 1.610350024037\n rotation_xyzw:\n - 0.638017721229\n - 0.638017721229\n - -0.304849838016\n - -0.304849718806\n parent: world:base\n"
|
| 110 |
+
}
|
| 111 |
+
]
|
| 112 |
+
},
|
| 113 |
+
{
|
| 114 |
+
"id": "tool-008",
|
| 115 |
+
"name": "read",
|
| 116 |
+
"arguments": {
|
| 117 |
+
"path": ".kinex/devices/camera_wrist/profile.yaml",
|
| 118 |
+
"offset": null,
|
| 119 |
+
"limit": null
|
| 120 |
+
},
|
| 121 |
+
"timestamp": 1793160408775,
|
| 122 |
+
"result": [
|
| 123 |
+
{
|
| 124 |
+
"type": "text",
|
| 125 |
+
"text": "name: camera_wrist\nruntime:\n domain_id: 83\n nodes: []\n ready_timeout_s: 30\noperations:\n image:\n description: RGB image measurements with encoding, dimensions, row stride and\n acquisition timestamp in the Image header. The frame_id identifies the calibrated\n optical frame; use its stamp for tf2 lookup. A new subscriber receives the current\n frame at once, also while the world is paused, then one per camera sample; reading\n never advances world time.\n transport: topic\n direction: output\n endpoint: /camera_wrist/image\n type: sensor_msgs/msg/Image\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n timeout_s: 10\n camera_info:\n description: Projection and distortion calibration for the image stream, including\n K, D, image size and optical frame. Use the declared distortion model and raw/rectified\n image space when projecting pixels; intrinsics are not TF transforms.\n transport: topic\n direction: output\n endpoint: /camera_wrist/camera_info\n type: sensor_msgs/msg/CameraInfo\n qos:\n depth: 1\n reliability: reliable\n durability: transient_local\n timeout_s: 10\nloaded: true\nmeta:\n created_at: '2026-10-19T00:00:00Z'\n updated_at: '2026-10-20T17:24:01.464Z'\ntype: rgb\ndescription: Wrist-mounted RGB camera moving with the arm. Use the image acquisition\n timestamp when looking up its optical-frame transform; calibration and mounting\n facts are in the profile.\nsource: introspected\nmethod: introspection\ncalibrated_at: '2026-10-20T17:21:08.827172Z'\ncolor:\n width: 256\n height: 256\n fps: null\n projection:\n model: pinhole\n fx: 166.81284772367434\n fy: 166.81284772367434\n cx: 127.5\n cy: 127.5\n skew: 0\n distortion:\n model: none\n fov:\n horizontal_deg: 75.00000000000001\n vertical_deg: 75.00000000000001\nframes:\n base:\n translation_m:\n - 0.04999999999999985\n - -3.469446951953614e-18\n - -2.220446049250313e-16\n rotation_xyzw:\n - 1.7326215608522153e-17\n - 4.52321557921596e-18\n - 0.7071067811865476\n - 0.7071067811865475\n parent: arm:flange\n"
|
| 126 |
+
}
|
| 127 |
+
]
|
| 128 |
+
},
|
| 129 |
+
{
|
| 130 |
+
"id": "tool-009",
|
| 131 |
+
"name": "setup_plan",
|
| 132 |
+
"arguments": {
|
| 133 |
+
"action": "read",
|
| 134 |
+
"full": false
|
| 135 |
+
},
|
| 136 |
+
"timestamp": 1793160408775,
|
| 137 |
+
"result": [
|
| 138 |
+
{
|
| 139 |
+
"type": "text",
|
| 140 |
+
"text": "{\n \"revision\": 0,\n \"task\": null,\n \"taskSatisfied\": null,\n \"message\": \"No setup plan. Existing operations remain available; use /onboarding to prepare only what the task needs.\",\n \"next\": [],\n \"missing\": [],\n \"nodes\": [],\n \"deferred\": 0\n}"
|
| 141 |
+
}
|
| 142 |
+
]
|
| 143 |
+
},
|
| 144 |
+
{
|
| 145 |
+
"id": "tool-010",
|
| 146 |
+
"name": "device",
|
| 147 |
+
"arguments": {
|
| 148 |
+
"deviceID": "camera_agentview",
|
| 149 |
+
"action": "image"
|
| 150 |
+
},
|
| 151 |
+
"timestamp": 1793160411528,
|
| 152 |
+
"result": [
|
| 153 |
+
{
|
| 154 |
+
"type": "text",
|
| 155 |
+
"text": "{\n \"deviceID\": \"camera_agentview\",\n \"timestamp\": 0,\n \"frame_id\": \"camera_agentview/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-alcjnix9.png\"\n}"
|
| 156 |
+
},
|
| 157 |
+
{
|
| 158 |
+
"type": "image",
|
| 159 |
+
"src": "data/b1/session-images/013-01.png"
|
| 160 |
+
}
|
| 161 |
+
]
|
| 162 |
+
},
|
| 163 |
+
{
|
| 164 |
+
"id": "tool-011",
|
| 165 |
+
"name": "device",
|
| 166 |
+
"arguments": {
|
| 167 |
+
"deviceID": "camera_wrist",
|
| 168 |
+
"action": "image"
|
| 169 |
+
},
|
| 170 |
+
"timestamp": 1793160411528,
|
| 171 |
+
"result": [
|
| 172 |
+
{
|
| 173 |
+
"type": "text",
|
| 174 |
+
"text": "{\n \"deviceID\": \"camera_wrist\",\n \"timestamp\": 0,\n \"frame_id\": \"camera_wrist/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-wgx581gd.png\"\n}"
|
| 175 |
+
},
|
| 176 |
+
{
|
| 177 |
+
"type": "image",
|
| 178 |
+
"src": "data/b1/session-images/014-01.png"
|
| 179 |
+
}
|
| 180 |
+
]
|
| 181 |
+
},
|
| 182 |
+
{
|
| 183 |
+
"id": "tool-012",
|
| 184 |
+
"name": "device",
|
| 185 |
+
"arguments": {
|
| 186 |
+
"deviceID": "arm",
|
| 187 |
+
"action": "joint_state"
|
| 188 |
+
},
|
| 189 |
+
"timestamp": 1793160411528,
|
| 190 |
+
"result": [
|
| 191 |
+
{
|
| 192 |
+
"type": "text",
|
| 193 |
+
"text": "{\n \"positions\": [\n -0.00013845392507808466,\n -0.17673447527028746,\n -0.0365575974870041,\n -2.457112976205083,\n 0.005935026546017218,\n 2.235219967026241,\n 0.7993834381074322\n ],\n \"velocities\": [\n -1.494574939173468e-11,\n 2.526816253127224e-13,\n 1.764907642469367e-11,\n -7.765710720776031e-13,\n 1.664076504653035e-10,\n -3.305743598539451e-13,\n 5.4990451506816066e-11\n ],\n \"joint_names\": [\n \"robot0_joint1\",\n \"robot0_joint2\",\n \"robot0_joint3\",\n \"robot0_joint4\",\n \"robot0_joint5\",\n \"robot0_joint6\",\n \"robot0_joint7\"\n ],\n \"timestamp\": 0\n}"
|
| 194 |
+
}
|
| 195 |
+
]
|
| 196 |
+
},
|
| 197 |
+
{
|
| 198 |
+
"id": "tool-013",
|
| 199 |
+
"name": "device",
|
| 200 |
+
"arguments": {
|
| 201 |
+
"deviceID": "gripper",
|
| 202 |
+
"action": "joint_state"
|
| 203 |
+
},
|
| 204 |
+
"timestamp": 1793160411528,
|
| 205 |
+
"result": [
|
| 206 |
+
{
|
| 207 |
+
"type": "text",
|
| 208 |
+
"text": "{\n \"positions\": [\n 0.020833\n ],\n \"velocities\": [\n 1.179069862577986e-18\n ],\n \"joint_names\": [\n \"finger_joint1\"\n ],\n \"timestamp\": 0\n}"
|
| 209 |
+
}
|
| 210 |
+
]
|
| 211 |
+
},
|
| 212 |
+
{
|
| 213 |
+
"id": "tool-014",
|
| 214 |
+
"name": "exec",
|
| 215 |
+
"arguments": {
|
| 216 |
+
"python": "from kinex import runtime, finish\nfinish({n:{k:runtime.describe(runtime.operations(n)[k]) for k in runtime.operations(n) if k in ('joint_target','target','wait')} for n in ('arm','gripper','world')})",
|
| 217 |
+
"description": "inspect command schemas"
|
| 218 |
+
},
|
| 219 |
+
"timestamp": 1793160411528,
|
| 220 |
+
"result": [
|
| 221 |
+
{
|
| 222 |
+
"type": "text",
|
| 223 |
+
"text": "{\n \"output\": \"\",\n \"error\": \"Traceback (most recent call last):\\n File \\\"<frozen runpy>\\\", line 198, in _run_module_as_main\\n File \\\"<frozen runpy>\\\", line 88, in _run_code\\n File \\\"/opt/kinex/packages/core/assets/python/kinex/host/run.py\\\", line 51, in <module>\\n script()\\n File \\\"/opt/kinex/packages/core/assets/python/kinex/host/run.py\\\", line 44, in script\\n exec(compile(_request[\\\"source\\\"], \\\"<kinex-exec>\\\", \\\"exec\\\"), module.__dict__)\\n File \\\"<kinex-exec>\\\", line 2, in <module>\\n File \\\"/opt/kinex/packages/core/assets/python/kinex/runtime.py\\\", line 26, in describe\\n device, separator, name = operation.partition(\\\".\\\")\\n ^^^^^^^^^^^^^^^^^^^\\nAttributeError: 'dict' object has no attribute 'partition'\"\n}"
|
| 224 |
+
}
|
| 225 |
+
]
|
| 226 |
+
},
|
| 227 |
+
{
|
| 228 |
+
"id": "tool-015",
|
| 229 |
+
"name": "exec",
|
| 230 |
+
"arguments": {
|
| 231 |
+
"python": "from kinex import runtime,finish\nfinish({n:{k:runtime.describe(n+'.'+k) for k in ('joint_target','target','wait') if k in runtime.operations(n)} for n in ('arm','gripper','world')})",
|
| 232 |
+
"description": "inspect ROS command payloads"
|
| 233 |
+
},
|
| 234 |
+
"timestamp": 1793160416521,
|
| 235 |
+
"result": [
|
| 236 |
+
{
|
| 237 |
+
"type": "text",
|
| 238 |
+
"text": "{\n \"output\": \"\",\n \"result\": {\n \"arm\": {\"joint_target\":{\"description\":\"Joint trajectory over all seven arm joints in radians, timed from receipt by strictly increasing time_from_start and finishing within 120 seconds; velocities, accelerations and effort must be empty. A zero header stamp selects now; a nonzero stamp must not start in the past. Replacement clears pending references; invalid trajectories are ignored, so verify measured joint_state.\",\"transport\":\"topic\",\"direction\":\"input\",\"endpoint\":\"/arm/joint_target\",\"type\":\"trajectory_msgs/msg/JointTrajectory\",\"qos\":{\"depth\":1,\"reliability\":\"reliable\",\"durability\":\"volatile\"},\"timeout_s\":10,\"message\":{\"header\":\"std_msgs/Header\",\"joint_names\":\"sequence<string>\",\"points\":\"sequence<trajectory_msgs/JointTrajectoryPoint>\"},\"definitions\":{\"std_msgs/msg/Header\":{\"stamp\":\"builtin_interfaces/Time\",\"frame_id\":\"string\"},\"builtin_interfaces/msg/Time\":{\"sec\":\"int32\",\"nanosec\":\"uint32\"},\"trajectory_msgs/msg/JointTrajectoryPoint\":{\"positions\":\"sequence<double>\",\"velocities\":\"sequence<double>\",\"accelerations\":\"sequence<double>\",\"effort\":\"sequence<double>\",\"time_from_start\":\"builtin_interfaces/Duration\"},\"builtin_interfaces/msg/Duration\":{\"sec\":\"int32\",\"nanosec\":\"uint32\"}}}},\n \"gripper\": {\"target\":{\"description\":\"finger_joint1 position (data) from 0 (closed) to 0.04 m (open). rosbridge steers LIBERO's integrated direction command toward it every control step with 1 mm tolerance, so open and closed are reached reliably while intermediate targets oscillate by a few millimetres. A target persists until replaced or stopped; out-of-range targets are ignored, so verify joint_state.\",\"transport\":\"topic\",\"direction\":\"input\",\"endpoint\":\"/gripper/target\",\"type\":\"std_msgs/msg/Float64\",\"qos\":{\"depth\":1,\"reliability\":\"reliable\",\"durability\":\"volatile\"},\"timeout_s\":10,\"message\":{\"data\":\"double\"},\"definitions\":{}}},\n \"world\": {\"wait\":{\"description\":\"Advance or await duration_s of world time (finite and nonnegative). Zero is an observation barrier. Waits are sequential; one requested while another is pending is rejected. A terminal episode rejects further progression without exposing benchmark results.\",\"transport\":\"service\",\"direction\":\"input\",\"endpoint\":\"/world/wait\",\"type\":\"kinex_interfaces/srv/Wait\",\"qos\":{\"depth\":1,\"reliability\":\"reliable\",\"durability\":\"volatile\"},\"timeout_s\":120,\"request\":{\"duration_s\":\"double\"},\"response\":{\"success\":\"boolean\",\"message\":\"string\",\"time_s\":\"double\",\"waited_s\":\"double\"},\"definitions\":{}}}\n }\n}"
|
| 239 |
+
}
|
| 240 |
+
]
|
| 241 |
+
},
|
| 242 |
+
{
|
| 243 |
+
"id": "tool-016",
|
| 244 |
+
"name": "bash",
|
| 245 |
+
"arguments": {
|
| 246 |
+
"command": "rg -n 'joint_model|inverse|forward|kinematics' /opt/kinex/packages/core/assets/python/kinex/helpers/helpers.txt",
|
| 247 |
+
"timeout": 10
|
| 248 |
+
},
|
| 249 |
+
"timestamp": 1793160424437,
|
| 250 |
+
"result": [
|
| 251 |
+
{
|
| 252 |
+
"type": "text",
|
| 253 |
+
"text": "19: helpers.joint_model(device)\n21: Implementation: kinematics.py\n"
|
| 254 |
+
}
|
| 255 |
+
]
|
| 256 |
+
},
|
| 257 |
+
{
|
| 258 |
+
"id": "tool-017",
|
| 259 |
+
"name": "read",
|
| 260 |
+
"arguments": {
|
| 261 |
+
"path": "/opt/kinex/packages/core/assets/python/kinex/helpers/helpers.txt",
|
| 262 |
+
"offset": 1,
|
| 263 |
+
"limit": 160
|
| 264 |
+
},
|
| 265 |
+
"timestamp": 1793160428152,
|
| 266 |
+
"result": [
|
| 267 |
+
{
|
| 268 |
+
"type": "text",
|
| 269 |
+
"text": "Kinex Python helpers\n\nImport with: from kinex import helpers\nImplementation paths below are relative to this index; see their docstrings for\ndetails. The builtin Python tools are interfaces to these same functions; call the\nhelpers directly inside exec to share its communication and cleanup.\nWorkspace-specific helpers belong in .kinex/lib, which exec and tools can import.\n\nFrames\n await helpers.lookup_transform(io, target, source, stamp=None, timeout_s=5)\n Return a stamped source-to-target transform using Kinex frame history.\n await helpers.transform_pose(io, pose, source, target, stamp=None)\n Express a pose given in one frame in another.\n await helpers.relative_pose(io, child, parent, timestamp=None)\n Express a frame-attached child pose relative to a frame-attached parent pose.\n Implementation: frames.py\n\nKinematics\n helpers.joint_model(device)\n Load a joint device's commanded joints, link FK and IK from its URDF.\n Implementation: kinematics.py\n\nMotion\n helpers.trajectory(joints, start, target, period_s, fraction=1.0, max_velocity=None, max_acceleration=None, *, check_limits=True, start_tolerance=0)\n Plan joint references and duration without device I/O.\n Implementation: motion.py\n\nPolicy\n await helpers.run_policy(io, model, observation, command, task=None, world=\"world\", action_hz=10, max_actions=None, inference_args=None)\n Infer once and submit the valid action prefix to the commanded devices.\n Implementation: policy.py\n\nImages\n await helpers.camera_frame(io, camera, timeout_s=None)\n The current image and, for an rgbd camera, its depth from the same acquisition.\n helpers.image_array(image)\n Native-order pixels of a sensor_msgs/Image as numpy for computation.\n helpers.save_image(image)\n Write a sensor_msgs/Image as a PNG and return its path for finish(file=...).\n Implementation: images.py\n\nPerception\n await helpers.locate_object_3d(io, camera, model, prompt, depth=None, min_score=0.25, instance=0)\n Locate a detected object in a stamped camera optical frame.\n Implementation: perception.py\n"
|
| 270 |
+
}
|
| 271 |
+
]
|
| 272 |
+
},
|
| 273 |
+
{
|
| 274 |
+
"id": "tool-018",
|
| 275 |
+
"name": "read",
|
| 276 |
+
"arguments": {
|
| 277 |
+
"path": "/opt/kinex/packages/core/assets/python/kinex/helpers/kinematics.py",
|
| 278 |
+
"offset": 1,
|
| 279 |
+
"limit": 240
|
| 280 |
+
},
|
| 281 |
+
"timestamp": 1793160434207,
|
| 282 |
+
"result": [
|
| 283 |
+
{
|
| 284 |
+
"type": "text",
|
| 285 |
+
"text": "\"\"\"Joint device kinematics from the device's resolved URDF.\"\"\"\n\nfrom kinex import profile\nfrom kinex.lib.joints import JointModel\n\n\ndef joint_model(device):\n \"\"\"Load a joint device's model without device I/O.\n\n joints lists the commanded joints in URDF document order with limits and\n rate limits; names holds their names. fk(positions, link=None) returns the\n link pose [x, y, z, qx, qy, qz, qw] in <device>/base. ik(pose, seed,\n link=None, **options) returns commanded positions nearest the seed, or\n raises ValueError when no verified solution is found. link defaults to the\n model's tip_link. Measured links are also on TF as <device>/<link>.\n\n Example: arm = helpers.joint_model(\"arm\"); q = arm.ik(arm.fk(seed), seed)\n \"\"\"\n return JointModel(profile(device))\n"
|
| 286 |
+
}
|
| 287 |
+
]
|
| 288 |
+
},
|
| 289 |
+
{
|
| 290 |
+
"id": "tool-019",
|
| 291 |
+
"name": "exec",
|
| 292 |
+
"arguments": {
|
| 293 |
+
"python": "import numpy as np\nfrom scipy.spatial.transform import Rotation as R\nfrom kinex import helpers,finish\np=np.array([.658613174683,0,1.610350024037]); rot=R.from_quat([.638017721229,.638017721229,-.304849838016,-.304849718806]);\nfor uv in [(191,149),(198,184),(181,125),(220,125)]:\n d=rot.apply([(uv[0]-127.5)/309.0193,(uv[1]-127.5)/309.0193,1]); print(uv,{z:np.round(p+(z-p[2])/d[2]*d,4).tolist() for z in [.8,.85,.9,.92]})\nm=helpers.joint_model('arm'); q=[-0.00013845,-.1767345,-.0365576,-2.457113,.005935,2.23522,.799383];print('flange base',m.fk(q));finish({'names':m.names})",
|
| 294 |
+
"description": "estimate tabletop object positions and tool pose"
|
| 295 |
+
},
|
| 296 |
+
"timestamp": 1793160436014,
|
| 297 |
+
"result": [
|
| 298 |
+
{
|
| 299 |
+
"type": "text",
|
| 300 |
+
"text": "{\n \"output\": \"(191, 149) {0.8: [-0.2134, 0.244, 0.8], 0.85: [-0.1596, 0.229, 0.85], 0.9: [-0.1058, 0.2139, 0.9], 0.92: [-0.0842, 0.2079, 0.92]}\\n(198, 184) {0.8: [-0.0388, 0.2399, 0.8], 0.85: [0.0042, 0.2251, 0.85], 0.9: [0.0473, 0.2103, 0.9], 0.92: [0.0645, 0.2044, 0.92]}\\n(181, 125) {0.8: [-0.3616, 0.2256, 0.8], 0.85: [-0.2987, 0.2116, 0.85], 0.9: [-0.2357, 0.1977, 0.9], 0.92: [-0.2106, 0.1922, 0.92]}\\n(220, 125) {0.8: [-0.3616, 0.39, 0.8], 0.85: [-0.2987, 0.3659, 0.85], 0.9: [-0.2357, 0.3419, 0.9], 0.92: [-0.2106, 0.3322, 0.92]}\\nflange base [0.4535326278348672, -0.01639354758125637, 0.36057179539125095, 0.9993743120738147, -0.026609223451674994, -0.02257720344538244, -0.005762245992182521]\\n\",\n \"result\": {\n \"names\": [\"robot0_joint1\",\"robot0_joint2\",\"robot0_joint3\",\"robot0_joint4\",\"robot0_joint5\",\"robot0_joint6\",\"robot0_joint7\"]\n }\n}"
|
| 301 |
+
}
|
| 302 |
+
]
|
| 303 |
+
},
|
| 304 |
+
{
|
| 305 |
+
"id": "tool-020",
|
| 306 |
+
"name": "exec",
|
| 307 |
+
"arguments": {
|
| 308 |
+
"python": "import numpy as np\nfrom scipy.spatial.transform import Rotation as R\nfrom kinex import helpers,finish\nq=[-.00013845,-.1767345,-.0365576,-2.457113,.005935,2.23522,.799383]; f=helpers.joint_model('arm').fk(q)\npa=np.array([.658613174683,0,1.610350024037]); ra=R.from_quat([.638017721229,.638017721229,-.304849838016,-.304849718806]); pf=np.array([-.66,0,.912])+f[:3];rf=R.from_quat(f[3:]); pw=pf+rf.apply([.05,0,0]);rw=rf*R.from_quat([0,0,.7071067811865476,.7071067811865475]);print('wrist',pw,rw.as_quat())\nfor label,ua,uw in [('bowl',(191,149),(20,78)),('plate',(198,184),(16,14)),('ramekin',(181,125),(31,144)),('other',(220,125),(-12,72))]:\n da=ra.apply([(ua[0]-127.5)/309.0193,(ua[1]-127.5)/309.0193,1]); dw=rw.apply([(uw[0]-127.5)/166.81285,(uw[1]-127.5)/166.81285,1]); t=np.linalg.lstsq(np.stack([da,-dw],axis=1),pw-pa,rcond=None)[0];a=pa+t[0]*da;b=pw+t[1]*dw;print(label,'point',np.round((a+b)/2,4),'error',np.linalg.norm(a-b), 'params',t)\nfinish({'camera':pw.tolist()})",
|
| 309 |
+
"description": "triangulate bowl and plate using two calibrated cameras"
|
| 310 |
+
},
|
| 311 |
+
"timestamp": 1793160448764,
|
| 312 |
+
"result": [
|
| 313 |
+
{
|
| 314 |
+
"type": "text",
|
| 315 |
+
"text": "{\n \"output\": \"wrist [-0.15658915 -0.0190398 1.27030015] [ 0.68784879 -0.72547992 -0.02003902 0.01188997]\\nbowl point [-0.0623 0.1982 0.9373] error 0.008963677982934716 params [0.98312863 0.33323846]\\nplate point [0.0698 0.2009 0.9248] error 0.004131237976270251 params [0.88858607 0.33862219]\\nramekin point [-0.1958 0.1876 0.9305] error 0.0033773262193366573 params [1.0915624 0.34461158]\\nother point [-0.068 0.2497 1.0049] error 0.07772653057938098 params [0.93638303 0.28691951]\\n\",\n \"result\": {\n \"camera\": [-0.15658915025394438,-0.0190397954794332,1.270300154785954]\n }\n}"
|
| 316 |
+
}
|
| 317 |
+
]
|
| 318 |
+
},
|
| 319 |
+
{
|
| 320 |
+
"id": "tool-021",
|
| 321 |
+
"name": "read",
|
| 322 |
+
"arguments": {
|
| 323 |
+
"path": ".kinex/devices/gripper/gripper.urdf",
|
| 324 |
+
"offset": 1,
|
| 325 |
+
"limit": 200
|
| 326 |
+
},
|
| 327 |
+
"timestamp": 1793160461492,
|
| 328 |
+
"result": [
|
| 329 |
+
{
|
| 330 |
+
"type": "text",
|
| 331 |
+
"text": "<?xml version=\"1.0\"?>\n<!-- LIBERO Panda hand (robosuite panda_gripper.xml). finger_joint1 slides the left finger\n along -x and its mimic the right finger along +x, so it is half the summed finger travel.\n Pad links mark the inner pad faces, 0.5 mm inside each finger, so the pad gap is\n 2 * finger_joint1 - 1 mm; pads sit 3.6 mm below the TCP; +z approaches. -->\n<robot name=\"panda_hand\">\n <link name=\"base_link\"/>\n <link name=\"left_finger\"/>\n <link name=\"right_finger\"/>\n <link name=\"left_pad\"/>\n <link name=\"right_pad\"/>\n <joint name=\"finger_joint1\" type=\"prismatic\">\n <parent link=\"base_link\"/>\n <child link=\"left_finger\"/>\n <origin xyz=\"0 0 0.0524\"/>\n <axis xyz=\"-1 0 0\"/>\n <limit lower=\"0\" upper=\"0.04\" effort=\"20\" velocity=\"0.2\"/>\n </joint>\n <joint name=\"finger_joint2\" type=\"prismatic\">\n <parent link=\"base_link\"/>\n <child link=\"right_finger\"/>\n <origin xyz=\"0 0 0.0524\"/>\n <axis xyz=\"1 0 0\"/>\n <limit lower=\"0\" upper=\"0.04\" effort=\"20\" velocity=\"0.2\"/>\n <mimic joint=\"finger_joint1\"/>\n </joint>\n <joint name=\"left_pad_joint\" type=\"fixed\">\n <parent link=\"left_finger\"/>\n <child link=\"left_pad\"/>\n <origin xyz=\"0.0005 0 0.041\"/>\n </joint>\n <joint name=\"right_pad_joint\" type=\"fixed\">\n <parent link=\"right_finger\"/>\n <child link=\"right_pad\"/>\n <origin xyz=\"-0.0005 0 0.041\"/>\n </joint>\n</robot>\n"
|
| 332 |
+
}
|
| 333 |
+
]
|
| 334 |
+
},
|
| 335 |
+
{
|
| 336 |
+
"id": "tool-022",
|
| 337 |
+
"name": "read",
|
| 338 |
+
"arguments": {
|
| 339 |
+
"path": "/opt/kinex/packages/core/assets/python/kinex/helpers/motion.py",
|
| 340 |
+
"offset": 1,
|
| 341 |
+
"limit": 190
|
| 342 |
+
},
|
| 343 |
+
"timestamp": 1793160481749,
|
| 344 |
+
"result": [
|
| 345 |
+
{
|
| 346 |
+
"type": "text",
|
| 347 |
+
"text": "\"\"\"Harness-owned, synchronized rest-to-rest joint trajectory generation.\"\"\"\n\nimport math\nfrom dataclasses import dataclass\n\nfrom kinex.lib.geometry import number, vector\nfrom kinex.lib.joints import recovery_targets\nfrom kinex.lib.urdf import joint_target\n\n\n@dataclass(frozen=True)\nclass Trajectory:\n \"\"\"A complete reference buffer and its planned execution duration.\"\"\"\n\n actions: list[list[float]]\n duration_s: float\n\n\ndef planning_limits(joints, max_velocity=None, max_acceleration=None):\n \"\"\"Resolve requested rates against known limits; defaults are planning policy.\"\"\"\n result = []\n for key, requested, rotary, linear in (\n (\"max_velocity\", max_velocity, 1.0, 0.1),\n (\"max_acceleration\", max_acceleration, 3.0, 0.3),\n ):\n values = [None] * len(joints) if requested is None else vector(\n requested if isinstance(requested, list) else [requested] * len(joints), len(joints), key)\n rates = []\n for joint, value in zip(joints, values):\n limit = joint.get(key)\n if limit is not None and number(limit, key) <= 0:\n raise ValueError(f\"{key} must be positive\")\n if value is None:\n value = linear if joint[\"type\"] == \"prismatic\" else rotary\n if number(value, key) <= 0:\n raise ValueError(f\"{key} must be positive\")\n rates.append(min(value, limit) if limit is not None else value)\n result.append(rates)\n return result\n\n\ndef trajectory(joints, start, target, period_s, fraction=1.0, max_velocity=None, max_acceleration=None, *, check_limits=True, start_tolerance=0):\n \"\"\"Plan synchronized rest-to-rest quintic joint references without device I/O.\n\n joints contains model-ordered joint definitions; start and target use that\n order. Returns Trajectory(actions, duration_s), excluding the start sample\n and including the target. Continuous joints take the shortest angular path.\n period_s bounds sample spacing: sample i (starting at 1) occurs at\n i * duration_s / len(actions). fraction (0..1] scales velocity/acceleration\n limits. Overrides may be scalars or per-joint lists, capped by known limits.\n Defaults are 1 rad/s and 3 rad/s², or 0.1 m/s and 0.3 m/s² for prismatic\n joints. With check_limits, start_tolerance permits bounded recovery from\n an out-of-limit start; the target must satisfy limits.\n\n Example: helpers.trajectory(joints, start, target, period_s=0.01)\n \"\"\"\n start = joint_target(start, joints, check_limits=False)\n target = joint_target(target, joints, check_limits=check_limits)\n if check_limits:\n recovery_targets([start, target], joints, start_tolerance)\n if not math.isfinite(period_s) or period_s <= 0 or not 0 < fraction <= 1:\n raise ValueError(\"invalid trajectory period or speed fraction\")\n delta, duration = [], period_s\n velocities, accelerations = planning_limits(joints, max_velocity, max_acceleration)\n for joint, a, b, velocity, acceleration in zip(joints, start, target, velocities, accelerations):\n distance = b - a\n if joint[\"type\"] == \"continuous\":\n distance = math.atan2(math.sin(distance), math.cos(distance))\n delta.append(distance)\n # Exact extrema of 10s^3 - 15s^4 + 6s^5 and its derivatives.\n duration = max(duration, 1.875 * abs(distance) / (velocity * fraction),\n math.sqrt(10 / math.sqrt(3) * abs(distance) / (acceleration * fraction)))\n count = math.ceil(duration / period_s)\n if count > 1_000_000:\n raise ValueError(\"trajectory exceeds one million references\")\n result = []\n for tick in range(1, count + 1):\n t = tick / count\n scale = t ** 3 * (10 + t * (-15 + 6 * t))\n result.append([a + d * scale for a, d in zip(start, delta)])\n result[-1] = [q if j[\"type\"] == \"continuous\" else goal\n for q, goal, j in zip(result[-1], target, joints)]\n if check_limits:\n recovery_targets(result, joints, start_tolerance)\n return Trajectory(actions=result, duration_s=duration)\n"
|
| 348 |
+
}
|
| 349 |
+
]
|
| 350 |
+
},
|
| 351 |
+
{
|
| 352 |
+
"id": "tool-023",
|
| 353 |
+
"name": "exec",
|
| 354 |
+
"arguments": {
|
| 355 |
+
"python": "from kinex import helpers,finish\nm=helpers.joint_model('arm'); q=[-.00013845,-.1767345,-.0365576,-2.457113,.005935,2.23522,.799383]; ori=m.fk(q)[3:]; out={}\nfor name,x,y,z in [('above',-.065,.15,1.13),('near',-.065,.15,1.04),('grasp',-.065,.15,1.028),('plate',.07,.20,1.10)]:\n pose=[x+.66,y,z-.912,*ori]\n try:\n sol=m.ik(pose,q);out[name]={'q':[round(v,3) for v in sol],'fk':m.fk(sol)[:3]}\n except Exception as e:out[name]=str(e)\nfinish(out)",
|
| 356 |
+
"description": "check safe arm IK targets"
|
| 357 |
+
},
|
| 358 |
+
"timestamp": 1793160489126,
|
| 359 |
+
"result": [
|
| 360 |
+
{
|
| 361 |
+
"type": "text",
|
| 362 |
+
"text": "{\n \"output\": \"\",\n \"result\": {\n \"above\": {\"q\":[0.17,0.495,0.08,-1.96,-0.022,2.413,1.097],\"fk\":[0.5949722825137563,0.1499891475677133,0.21800620595498604]},\n \"near\": {\"q\":[0.192,0.683,0.055,-1.925,-0.022,2.566,1.093],\"fk\":[0.5949496689686569,0.1499875983542056,0.1280059580012934]},\n \"grasp\": {\"q\":[0.208,0.71,0.039,-1.915,-0.005,2.584,1.082],\"fk\":[0.594963999951744,0.1499892079412551,0.11600683131106018]},\n \"plate\": {\"q\":[0.226,0.976,0.06,-1.183,-0.03,2.118,1.116],\"fk\":[0.7299795967734796,0.1999939125576791,0.18800085873093114]}\n }\n}"
|
| 363 |
+
}
|
| 364 |
+
]
|
| 365 |
+
},
|
| 366 |
+
{
|
| 367 |
+
"id": "tool-024",
|
| 368 |
+
"name": "exec",
|
| 369 |
+
"arguments": {
|
| 370 |
+
"python": "from scipy.spatial.transform import Rotation as R\nfrom kinex import helpers,finish\nq=[-.00013845,-.1767345,-.0365576,-2.457113,.005935,2.23522,.799383];r=R.from_quat(helpers.joint_model('arm').fk(q)[3:])*R.from_quat([0,0,-.707106781187,.707106781187]);finish({'gripper_axes_world':r.as_matrix().tolist()})",
|
| 371 |
+
"description": "check gripping jaw direction"
|
| 372 |
+
},
|
| 373 |
+
"timestamp": 1793160495753,
|
| 374 |
+
"result": [
|
| 375 |
+
{
|
| 376 |
+
"type": "text",
|
| 377 |
+
"text": "{\n \"output\": \"\",\n \"result\": {\n \"gripper_axes_world\": [[0.05344533956380805,0.9975644382237695,-0.04481949654118027],[0.998517491496849,-0.052924957963536676,0.012718804951659227],[0.010315757546090792,-0.04543281210593829,-0.998914132811423]]\n }\n}"
|
| 378 |
+
}
|
| 379 |
+
]
|
| 380 |
+
},
|
| 381 |
+
{
|
| 382 |
+
"id": "tool-025",
|
| 383 |
+
"name": "exec",
|
| 384 |
+
"arguments": {
|
| 385 |
+
"python": "import asyncio\nfrom kinex import communication,finish\nasync def main():\n async with communication() as io:\n async with io.subscribe('arm.joint_state',depth=1) as s:\n m=await s.next(timeout_s=5)\n finish({'names':m.name,'positions':m.position})\nasyncio.run(main())",
|
| 386 |
+
"description": "check arm measured ROS subscription"
|
| 387 |
+
},
|
| 388 |
+
"timestamp": 1793160501794,
|
| 389 |
+
"result": [
|
| 390 |
+
{
|
| 391 |
+
"type": "text",
|
| 392 |
+
"text": "{\n \"output\": \"[INFO] [1793160510.796514082] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"names\": [\"robot0_joint1\",\"robot0_joint2\",\"robot0_joint3\",\"robot0_joint4\",\"robot0_joint5\",\"robot0_joint6\",\"robot0_joint7\"],\n \"positions\": [-0.00013845392507808466,-0.17673447527028746,-0.0365575974870041,-2.457112976205083,0.005935026546017218,2.235219967026241,0.7993834381074322]\n }\n}"
|
| 393 |
+
}
|
| 394 |
+
]
|
| 395 |
+
},
|
| 396 |
+
{
|
| 397 |
+
"id": "tool-026",
|
| 398 |
+
"name": "write",
|
| 399 |
+
"arguments": {
|
| 400 |
+
"path": ".kinex/tools/tabletop_motion.py",
|
| 401 |
+
"content": "\"\"\"LIBERO Panda measured Cartesian waypoints; call via kinex.exec with args.\n\nargs: {\"poses\": [[world_x,world_y,world_tcp_z],...], \"seconds\": [duration,...],\n \"grip\": optional finger_joint1 target (m), \"settle\": optional seconds}\nFlange orientation is held at the episode's downward start orientation (model FK of\nhome measured initial posture). Returns final measured positions and TCP world pose.\n\"\"\"\nimport asyncio\nimport numpy as np\nfrom kinex import args, communication, finish, helpers\n\nSTART = [-0.000138453925, -0.17673447527, -0.03655759749,\n -2.4571129762, 0.00593502655, 2.235219967, 0.799383438]\n\nasync def run():\n a = args()\n model = helpers.joint_model('arm')\n orientation = model.fk(START)[3:]\n async with communication() as io:\n async with io.subscribe('arm.joint_state', depth=1) as states:\n current = await states.next(timeout_s=8)\n q = list(current.position[:7])\n if 'grip' in a:\n await io.publish('gripper.target', {'data': float(a['grip'])})\n poses = a.get('poses', [])\n durations = a.get('seconds', [1.7]*len(poses))\n if len(poses) != len(durations):\n raise ValueError('poses/seconds mismatch')\n waypoints = []\n elapsed = 0.0\n for (x,y,tcpz), duration in zip(poses,durations):\n # arm/base origin is world [-.66,0,.912]; tcp is 97 mm below flange.\n target = [float(x)+.66,float(y),float(tcpz)+.097-.912,*orientation]\n q = model.ik(target,q)\n elapsed += float(duration)\n sec = int(elapsed)\n waypoints.append({'positions':list(q), 'velocities':[],\n 'accelerations':[], 'effort':[],\n 'time_from_start':{'sec':sec,'nanosec':round((elapsed-sec)*1e9)}})\n if waypoints:\n await io.publish('arm.joint_target', {\n 'header': {'stamp':{'sec':0,'nanosec':0},'frame_id':''},\n 'joint_names':model.names,'points':waypoints})\n wait_s = elapsed + float(a.get('settle',.25))\n if wait_s:\n result = await io.request('world.wait',duration_s=wait_s)\n if not result.success:\n raise RuntimeError(f'world wait failed: {result.message}')\n measured = await states.next(timeout_s=8)\n actual = model.fk(measured.position[:7])\n tcp = [actual[0]-.66,actual[1],actual[2]+.912-.097]\n finish({'target':poses[-1] if poses else None, 'tcp_world':tcp,\n 'joints':list(measured.position[:7]), 'max_velocity':max(abs(v) for v in measured.velocity[:7]),\n 'time':result.time_s if wait_s else None})\n\nasyncio.run(run())\n"
|
| 402 |
+
},
|
| 403 |
+
"timestamp": 1793160511371,
|
| 404 |
+
"result": [
|
| 405 |
+
{
|
| 406 |
+
"type": "text",
|
| 407 |
+
"text": "Successfully wrote to .kinex/tools/tabletop_motion.py"
|
| 408 |
+
}
|
| 409 |
+
]
|
| 410 |
+
},
|
| 411 |
+
{
|
| 412 |
+
"id": "tool-027",
|
| 413 |
+
"name": "exec",
|
| 414 |
+
"arguments": {
|
| 415 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 416 |
+
"args": {
|
| 417 |
+
"poses": [
|
| 418 |
+
[
|
| 419 |
+
-0.066,
|
| 420 |
+
0.15,
|
| 421 |
+
1.09
|
| 422 |
+
]
|
| 423 |
+
],
|
| 424 |
+
"seconds": [
|
| 425 |
+
2.7
|
| 426 |
+
],
|
| 427 |
+
"grip": 0.04
|
| 428 |
+
},
|
| 429 |
+
"description": "open gripper and approach safely above black bowl",
|
| 430 |
+
"timeout_s": 60
|
| 431 |
+
},
|
| 432 |
+
"timestamp": 1793160525613,
|
| 433 |
+
"result": [
|
| 434 |
+
{
|
| 435 |
+
"type": "text",
|
| 436 |
+
"text": "{\n \"output\": \"[INFO] [1793160534.095409088] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"error\": \"Traceback (most recent call last):\\n File \\\"<frozen runpy>\\\", line 198, in _run_module_as_main\\n File \\\"<frozen runpy>\\\", line 88, in _run_code\\n File \\\"/opt/kinex/packages/core/assets/python/kinex/host/run.py\\\", line 51, in <module>\\n script()\\n File \\\"/opt/kinex/packages/core/assets/python/kinex/host/run.py\\\", line 40, in script\\n runpy.run_path(file, run_name=\\\"__main__\\\")\\n File \\\"<frozen runpy>\\\", line 287, in run_path\\n File \\\"<frozen runpy>\\\", line 98, in _run_module_code\\n File \\\"<frozen runpy>\\\", line 88, in _run_code\\n File \\\"/workspace/.kinex/tools/tabletop_motion.py\\\", line 56, in <module>\\n asyncio.run(run())\\n File \\\"/workspace/.kinex/python/.pixi/envs/default/lib/python3.12/asyncio/runners.py\\\", line 195, in run\\n return runner.run(main)\\n ^^^^^^^^^^^^^^^^\\n File \\\"/workspace/.kinex/python/.pixi/envs/default/lib/python3.12/asyncio/runners.py\\\", line 118, in run\\n return self._loop.run_until_complete(task)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\\"/workspace/.kinex/python/.pixi/envs/default/lib/python3.12/asyncio/base_events.py\\\", line 691, in run_until_complete\\n return future.result()\\n ^^^^^^^^^^^^^^^\\n File \\\"/workspace/.kinex/tools/tabletop_motion.py\\\", line 50, in run\\n actual = model.fk(measured.position[:7])\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\\"/opt/kinex/packages/core/assets/python/kinex/lib/joints.py\\\", line 41, in fk\\n q = joint_target(positions, self.joints, check_limits=False)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\\"/opt/kinex/packages/core/assets/python/kinex/lib/urdf.py\\\", line 114, in joint_target\\n vector(value, len(joints), \\\"joint target\\\")\\n File \\\"/opt/kinex/packages/core/assets/python/kinex/lib/geometry.py\\\", line 19, in vector\\n raise ValueError(f\\\"{name} needs {size} numbers\\\")\\nValueError: joint target needs 7 numbers\"\n}"
|
| 437 |
+
}
|
| 438 |
+
]
|
| 439 |
+
},
|
| 440 |
+
{
|
| 441 |
+
"id": "tool-028",
|
| 442 |
+
"name": "device",
|
| 443 |
+
"arguments": {
|
| 444 |
+
"deviceID": "arm",
|
| 445 |
+
"action": "joint_state"
|
| 446 |
+
},
|
| 447 |
+
"timestamp": 1793160540153,
|
| 448 |
+
"result": [
|
| 449 |
+
{
|
| 450 |
+
"type": "text",
|
| 451 |
+
"text": "{\n \"positions\": [\n 0.2009659710958959,\n 0.3727141053824204,\n 0.0383000364842774,\n -1.9692603179841035,\n 0.008664048061008647,\n 2.299332297714499,\n 1.0676314523226615\n ],\n \"velocities\": [\n 0.03230016435253175,\n 0.0882936145866055,\n 0.012396458347120146,\n 0.07852460706384758,\n 0.0008678974269145455,\n 0.010606336598511084,\n 0.04335899058136133\n ],\n \"joint_names\": [\n \"robot0_joint1\",\n \"robot0_joint2\",\n \"robot0_joint3\",\n \"robot0_joint4\",\n \"robot0_joint5\",\n \"robot0_joint6\",\n \"robot0_joint7\"\n ],\n \"timestamp\": 2.95\n}"
|
| 452 |
+
}
|
| 453 |
+
]
|
| 454 |
+
},
|
| 455 |
+
{
|
| 456 |
+
"id": "tool-029",
|
| 457 |
+
"name": "device",
|
| 458 |
+
"arguments": {
|
| 459 |
+
"deviceID": "gripper",
|
| 460 |
+
"action": "joint_state"
|
| 461 |
+
},
|
| 462 |
+
"timestamp": 1793160540153,
|
| 463 |
+
"result": [
|
| 464 |
+
{
|
| 465 |
+
"type": "text",
|
| 466 |
+
"text": "{\n \"positions\": [\n 0.039862647405173375\n ],\n \"velocities\": [\n 0.00012050192867098374\n ],\n \"joint_names\": [\n \"finger_joint1\"\n ],\n \"timestamp\": 2.95\n}"
|
| 467 |
+
}
|
| 468 |
+
]
|
| 469 |
+
},
|
| 470 |
+
{
|
| 471 |
+
"id": "tool-030",
|
| 472 |
+
"name": "device",
|
| 473 |
+
"arguments": {
|
| 474 |
+
"deviceID": "world",
|
| 475 |
+
"action": "time"
|
| 476 |
+
},
|
| 477 |
+
"timestamp": 1793160540153,
|
| 478 |
+
"result": [
|
| 479 |
+
{
|
| 480 |
+
"type": "text",
|
| 481 |
+
"text": "{\n \"clock\": {\n \"sec\": 2,\n \"nanosec\": 950000000\n }\n}"
|
| 482 |
+
}
|
| 483 |
+
]
|
| 484 |
+
},
|
| 485 |
+
{
|
| 486 |
+
"id": "tool-031",
|
| 487 |
+
"name": "device",
|
| 488 |
+
"arguments": {
|
| 489 |
+
"deviceID": "camera_wrist",
|
| 490 |
+
"action": "image"
|
| 491 |
+
},
|
| 492 |
+
"timestamp": 1793160540153,
|
| 493 |
+
"result": [
|
| 494 |
+
{
|
| 495 |
+
"type": "text",
|
| 496 |
+
"text": "{\n \"deviceID\": \"camera_wrist\",\n \"timestamp\": 2.95,\n \"frame_id\": \"camera_wrist/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-yl1e3es4.png\"\n}"
|
| 497 |
+
},
|
| 498 |
+
{
|
| 499 |
+
"type": "image",
|
| 500 |
+
"src": "data/b1/session-images/048-01.png"
|
| 501 |
+
}
|
| 502 |
+
]
|
| 503 |
+
},
|
| 504 |
+
{
|
| 505 |
+
"id": "tool-032",
|
| 506 |
+
"name": "exec",
|
| 507 |
+
"arguments": {
|
| 508 |
+
"python": "import asyncio\nfrom kinex import communication,finish\nasync def run():\n async with communication() as io:\n async with io.subscribe('arm.joint_state',depth=1) as s:\n x=await s.next(timeout_s=8); finish({'name':x.name,'position':x.position,'velocity':x.velocity})\nasyncio.run(run())",
|
| 509 |
+
"description": "diagnose measured joint message"
|
| 510 |
+
},
|
| 511 |
+
"timestamp": 1793160544661,
|
| 512 |
+
"result": [
|
| 513 |
+
{
|
| 514 |
+
"type": "text",
|
| 515 |
+
"text": "{\n \"output\": \"[INFO] [1793160554.049128257] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"name\": [\"robot0_joint1\",\"robot0_joint2\",\"robot0_joint3\",\"robot0_joint4\",\"robot0_joint5\",\"robot0_joint6\",\"robot0_joint7\"],\n \"position\": [0.2009659710958959,0.3727141053824204,0.0383000364842774,-1.9692603179841035,0.008664048061008647,2.299332297714499,1.0676314523226615],\n \"velocity\": [0.03230016435253175,0.0882936145866055,0.012396458347120146,0.07852460706384758,0.0008678974269145455,0.010606336598511084,0.04335899058136133]\n }\n}"
|
| 516 |
+
}
|
| 517 |
+
]
|
| 518 |
+
},
|
| 519 |
+
{
|
| 520 |
+
"id": "tool-033",
|
| 521 |
+
"name": "edit",
|
| 522 |
+
"arguments": {
|
| 523 |
+
"path": ".kinex/tools/tabletop_motion.py",
|
| 524 |
+
"edits": [
|
| 525 |
+
{
|
| 526 |
+
"oldText": "actual = model.fk(measured.position[:7])",
|
| 527 |
+
"newText": "actual = model.fk(list(measured.position[:7]))"
|
| 528 |
+
}
|
| 529 |
+
]
|
| 530 |
+
},
|
| 531 |
+
"timestamp": 1793160554523,
|
| 532 |
+
"result": [
|
| 533 |
+
{
|
| 534 |
+
"type": "text",
|
| 535 |
+
"text": "Successfully replaced 1 block(s) in .kinex/tools/tabletop_motion.py."
|
| 536 |
+
}
|
| 537 |
+
]
|
| 538 |
+
},
|
| 539 |
+
{
|
| 540 |
+
"id": "tool-034",
|
| 541 |
+
"name": "exec",
|
| 542 |
+
"arguments": {
|
| 543 |
+
"python": "import numpy as np\nfrom scipy.spatial.transform import Rotation as R\nfrom kinex import helpers,finish\nq=[.200965971,.372714105,.038300036,-1.969260318,.008664048,2.299332298,1.067631452]; f=helpers.joint_model('arm').fk(q)\npa=np.array([.658613174683,0,1.610350024037]);ra=R.from_quat([.638017721229,.638017721229,-.304849838016,-.304849718806]);pf=np.array([-.66,0,.912])+f[:3];rf=R.from_quat(f[3:]);pw=pf+rf.apply([.05,0,0]);rw=rf*R.from_quat([0,0,.7071067811865476,.7071067811865475]);print('tcp',pf+rf.apply([0,0,.097]),'camera',pw)\nfor name,ua,uw in [('bowl',(191,149),(89,152)),('plate',(198,184),(88,78)),('rimtop',(191,136),(90,130)),('rimbottom',(191,162),(91,175))]:\n da=ra.apply([(ua[0]-127.5)/309.0193,(ua[1]-127.5)/309.0193,1]);dw=rw.apply([(uw[0]-127.5)/166.81285,(uw[1]-127.5)/166.81285,1]);t=np.linalg.lstsq(np.stack([da,-dw],axis=1),pw-pa,rcond=None)[0];a=pa+t[0]*da;b=pw+t[1]*dw;print(name,np.round((a+b)/2,4),'error',round(np.linalg.norm(a-b),4))\nfinish({'tcp':pf.tolist()})",
|
| 544 |
+
"description": "refine object location from new wrist view"
|
| 545 |
+
},
|
| 546 |
+
"timestamp": 1793160557948,
|
| 547 |
+
"result": [
|
| 548 |
+
{
|
| 549 |
+
"type": "text",
|
| 550 |
+
"text": "{\n \"output\": \"tcp [-0.0734636 0.14444611 1.09389403] camera [-0.01912293 0.14096326 1.18846655]\\nbowl [-0.0648 0.203 0.9381] error 0.0011\\nplate [0.0539 0.2067 0.9075] error 0.0027\\nrimtop [-0.0271 0.1825 1.0243] error 0.0055\\nrimbottom [-0.1456 0.2353 0.7982] error 0.0038\\n\",\n \"result\": {\n \"tcp\": [-0.0690053009629179,0.14348627716109608,1.1907867679248911]\n }\n}"
|
| 551 |
+
}
|
| 552 |
+
]
|
| 553 |
+
},
|
| 554 |
+
{
|
| 555 |
+
"id": "tool-035",
|
| 556 |
+
"name": "exec",
|
| 557 |
+
"arguments": {
|
| 558 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 559 |
+
"args": {
|
| 560 |
+
"poses": [
|
| 561 |
+
[
|
| 562 |
+
-0.065,
|
| 563 |
+
0.15,
|
| 564 |
+
0.968
|
| 565 |
+
]
|
| 566 |
+
],
|
| 567 |
+
"seconds": [
|
| 568 |
+
2
|
| 569 |
+
],
|
| 570 |
+
"grip": 0.04,
|
| 571 |
+
"settle": 0.3
|
| 572 |
+
},
|
| 573 |
+
"description": "lower open fingers toward near bowl rim",
|
| 574 |
+
"timeout_s": 60
|
| 575 |
+
},
|
| 576 |
+
"timestamp": 1793160567216,
|
| 577 |
+
"result": [
|
| 578 |
+
{
|
| 579 |
+
"type": "text",
|
| 580 |
+
"text": "{\n \"output\": \"[INFO] [1793160580.844415589] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"target\": [-0.065,0.15,0.968],\n \"tcp_world\": [-0.06507610506230255,0.14997560982009955,0.9719440152593686],\n \"joints\": [0.21058723356341272,0.6184490779518904,0.03712686261208041,-1.9424367526234858,0.004755616690608187,2.5183911815510047,1.0750906916919276],\n \"max_velocity\": 0.042142240850543335,\n \"time\": 5.249999999999616\n }\n}"
|
| 581 |
+
}
|
| 582 |
+
]
|
| 583 |
+
},
|
| 584 |
+
{
|
| 585 |
+
"id": "tool-036",
|
| 586 |
+
"name": "device",
|
| 587 |
+
"arguments": {
|
| 588 |
+
"deviceID": "camera_agentview",
|
| 589 |
+
"action": "image"
|
| 590 |
+
},
|
| 591 |
+
"timestamp": 1793160585860,
|
| 592 |
+
"result": [
|
| 593 |
+
{
|
| 594 |
+
"type": "text",
|
| 595 |
+
"text": "{\n \"deviceID\": \"camera_agentview\",\n \"timestamp\": 5.25,\n \"frame_id\": \"camera_agentview/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-nkoszzfy.png\"\n}"
|
| 596 |
+
},
|
| 597 |
+
{
|
| 598 |
+
"type": "image",
|
| 599 |
+
"src": "data/b1/session-images/058-01.png"
|
| 600 |
+
}
|
| 601 |
+
]
|
| 602 |
+
},
|
| 603 |
+
{
|
| 604 |
+
"id": "tool-037",
|
| 605 |
+
"name": "device",
|
| 606 |
+
"arguments": {
|
| 607 |
+
"deviceID": "camera_wrist",
|
| 608 |
+
"action": "image"
|
| 609 |
+
},
|
| 610 |
+
"timestamp": 1793160585860,
|
| 611 |
+
"result": [
|
| 612 |
+
{
|
| 613 |
+
"type": "text",
|
| 614 |
+
"text": "{\n \"deviceID\": \"camera_wrist\",\n \"timestamp\": 5.25,\n \"frame_id\": \"camera_wrist/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-0lgu1093.png\"\n}"
|
| 615 |
+
},
|
| 616 |
+
{
|
| 617 |
+
"type": "image",
|
| 618 |
+
"src": "data/b1/session-images/059-01.png"
|
| 619 |
+
}
|
| 620 |
+
]
|
| 621 |
+
},
|
| 622 |
+
{
|
| 623 |
+
"id": "tool-038",
|
| 624 |
+
"name": "device",
|
| 625 |
+
"arguments": {
|
| 626 |
+
"deviceID": "gripper",
|
| 627 |
+
"action": "joint_state"
|
| 628 |
+
},
|
| 629 |
+
"timestamp": 1793160585860,
|
| 630 |
+
"result": [
|
| 631 |
+
{
|
| 632 |
+
"type": "text",
|
| 633 |
+
"text": "{\n \"positions\": [\n 0.03998171548190475\n ],\n \"velocities\": [\n 0.00001604505222686177\n ],\n \"joint_names\": [\n \"finger_joint1\"\n ],\n \"timestamp\": 5.25\n}"
|
| 634 |
+
}
|
| 635 |
+
]
|
| 636 |
+
},
|
| 637 |
+
{
|
| 638 |
+
"id": "tool-039",
|
| 639 |
+
"name": "exec",
|
| 640 |
+
"arguments": {
|
| 641 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 642 |
+
"args": {
|
| 643 |
+
"poses": [
|
| 644 |
+
[
|
| 645 |
+
-0.065,
|
| 646 |
+
0.15,
|
| 647 |
+
0.947
|
| 648 |
+
]
|
| 649 |
+
],
|
| 650 |
+
"seconds": [
|
| 651 |
+
1.25
|
| 652 |
+
],
|
| 653 |
+
"settle": 0.3
|
| 654 |
+
},
|
| 655 |
+
"description": "insert one finger inside bowl rim and one outside",
|
| 656 |
+
"timeout_s": 60
|
| 657 |
+
},
|
| 658 |
+
"timestamp": 1793160588275,
|
| 659 |
+
"result": [
|
| 660 |
+
{
|
| 661 |
+
"type": "text",
|
| 662 |
+
"text": "{\n \"output\": \"[INFO] [1793160599.329079224] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"target\": [-0.065,0.15,0.947],\n \"tcp_world\": [-0.06543949108550162,0.15006297245415198,0.9480795523054795],\n \"joints\": [0.21634874744083596,0.6702143445065488,0.03144279488773566,-1.929223028954786,0.005508084080391773,2.5569745489888014,1.0752368200460498],\n \"max_velocity\": 0.012214143665390713,\n \"time\": 6.799999999999446\n }\n}"
|
| 663 |
+
}
|
| 664 |
+
]
|
| 665 |
+
},
|
| 666 |
+
{
|
| 667 |
+
"id": "tool-040",
|
| 668 |
+
"name": "device",
|
| 669 |
+
"arguments": {
|
| 670 |
+
"deviceID": "camera_agentview",
|
| 671 |
+
"action": "image"
|
| 672 |
+
},
|
| 673 |
+
"timestamp": 1793160602572,
|
| 674 |
+
"result": [
|
| 675 |
+
{
|
| 676 |
+
"type": "text",
|
| 677 |
+
"text": "{\n \"deviceID\": \"camera_agentview\",\n \"timestamp\": 6.8,\n \"frame_id\": \"camera_agentview/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-tahgvtp5.png\"\n}"
|
| 678 |
+
},
|
| 679 |
+
{
|
| 680 |
+
"type": "image",
|
| 681 |
+
"src": "data/b1/session-images/064-01.png"
|
| 682 |
+
}
|
| 683 |
+
]
|
| 684 |
+
},
|
| 685 |
+
{
|
| 686 |
+
"id": "tool-041",
|
| 687 |
+
"name": "device",
|
| 688 |
+
"arguments": {
|
| 689 |
+
"deviceID": "camera_wrist",
|
| 690 |
+
"action": "image"
|
| 691 |
+
},
|
| 692 |
+
"timestamp": 1793160602572,
|
| 693 |
+
"result": [
|
| 694 |
+
{
|
| 695 |
+
"type": "text",
|
| 696 |
+
"text": "{\n \"deviceID\": \"camera_wrist\",\n \"timestamp\": 6.8,\n \"frame_id\": \"camera_wrist/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-v7ci70d4.png\"\n}"
|
| 697 |
+
},
|
| 698 |
+
{
|
| 699 |
+
"type": "image",
|
| 700 |
+
"src": "data/b1/session-images/065-01.png"
|
| 701 |
+
}
|
| 702 |
+
]
|
| 703 |
+
},
|
| 704 |
+
{
|
| 705 |
+
"id": "tool-042",
|
| 706 |
+
"name": "exec",
|
| 707 |
+
"arguments": {
|
| 708 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 709 |
+
"args": {
|
| 710 |
+
"poses": [],
|
| 711 |
+
"grip": 0,
|
| 712 |
+
"settle": 1.2
|
| 713 |
+
},
|
| 714 |
+
"description": "close fingers onto bowl wall",
|
| 715 |
+
"timeout_s": 60
|
| 716 |
+
},
|
| 717 |
+
"timestamp": 1793160604925,
|
| 718 |
+
"result": [
|
| 719 |
+
{
|
| 720 |
+
"type": "text",
|
| 721 |
+
"text": "{\n \"output\": \"[INFO] [1793160611.228828044] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"target\": null,\n \"tcp_world\": [-0.06525071419389838,0.1501609140414943,0.9472588633463734],\n \"joints\": [0.2167404584730557,0.6724547746819498,0.031138054426063547,-1.9280885179778855,0.00581970186856135,2.5588553875373377,1.075203401628102],\n \"max_velocity\": 0.00028015071762820134,\n \"time\": 7.9999999999994245\n }\n}"
|
| 722 |
+
}
|
| 723 |
+
]
|
| 724 |
+
},
|
| 725 |
+
{
|
| 726 |
+
"id": "tool-043",
|
| 727 |
+
"name": "device",
|
| 728 |
+
"arguments": {
|
| 729 |
+
"deviceID": "gripper",
|
| 730 |
+
"action": "joint_state"
|
| 731 |
+
},
|
| 732 |
+
"timestamp": 1793160613865,
|
| 733 |
+
"result": [
|
| 734 |
+
{
|
| 735 |
+
"type": "text",
|
| 736 |
+
"text": "{\n \"positions\": [\n 0.00260687655307424\n ],\n \"velocities\": [\n -0.00006671995031638759\n ],\n \"joint_names\": [\n \"finger_joint1\"\n ],\n \"timestamp\": 8\n}"
|
| 737 |
+
}
|
| 738 |
+
]
|
| 739 |
+
},
|
| 740 |
+
{
|
| 741 |
+
"id": "tool-044",
|
| 742 |
+
"name": "device",
|
| 743 |
+
"arguments": {
|
| 744 |
+
"deviceID": "camera_agentview",
|
| 745 |
+
"action": "image"
|
| 746 |
+
},
|
| 747 |
+
"timestamp": 1793160613865,
|
| 748 |
+
"result": [
|
| 749 |
+
{
|
| 750 |
+
"type": "text",
|
| 751 |
+
"text": "{\n \"deviceID\": \"camera_agentview\",\n \"timestamp\": 8,\n \"frame_id\": \"camera_agentview/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-qwtd0tne.png\"\n}"
|
| 752 |
+
},
|
| 753 |
+
{
|
| 754 |
+
"type": "image",
|
| 755 |
+
"src": "data/b1/session-images/070-01.png"
|
| 756 |
+
}
|
| 757 |
+
]
|
| 758 |
+
},
|
| 759 |
+
{
|
| 760 |
+
"id": "tool-045",
|
| 761 |
+
"name": "exec",
|
| 762 |
+
"arguments": {
|
| 763 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 764 |
+
"args": {
|
| 765 |
+
"poses": [
|
| 766 |
+
[
|
| 767 |
+
-0.065,
|
| 768 |
+
0.15,
|
| 769 |
+
1.07
|
| 770 |
+
]
|
| 771 |
+
],
|
| 772 |
+
"seconds": [
|
| 773 |
+
1.8
|
| 774 |
+
],
|
| 775 |
+
"settle": 0.3
|
| 776 |
+
},
|
| 777 |
+
"description": "lift bowl vertically and check grasp",
|
| 778 |
+
"timeout_s": 60
|
| 779 |
+
},
|
| 780 |
+
"timestamp": 1793160616147,
|
| 781 |
+
"result": [
|
| 782 |
+
{
|
| 783 |
+
"type": "text",
|
| 784 |
+
"text": "{\n \"output\": \"[INFO] [1793160622.025522098] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"target\": [-0.065,0.15,1.07],\n \"tcp_world\": [-0.06415459210505248,0.14990424056296264,1.065724481206759],\n \"joints\": [0.21226953580809443,0.43572926693737285,0.03527312935962132,-1.9542425648246309,0.0099802822752535,2.350671532745538,1.07524197554221],\n \"max_velocity\": 0.045454864050648504,\n \"time\": 10.100000000000126\n }\n}"
|
| 785 |
+
}
|
| 786 |
+
]
|
| 787 |
+
},
|
| 788 |
+
{
|
| 789 |
+
"id": "tool-046",
|
| 790 |
+
"name": "device",
|
| 791 |
+
"arguments": {
|
| 792 |
+
"deviceID": "camera_agentview",
|
| 793 |
+
"action": "image"
|
| 794 |
+
},
|
| 795 |
+
"timestamp": 1793160626440,
|
| 796 |
+
"result": [
|
| 797 |
+
{
|
| 798 |
+
"type": "text",
|
| 799 |
+
"text": "{\n \"deviceID\": \"camera_agentview\",\n \"timestamp\": 10.1,\n \"frame_id\": \"camera_agentview/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-szxuoa0k.png\"\n}"
|
| 800 |
+
},
|
| 801 |
+
{
|
| 802 |
+
"type": "image",
|
| 803 |
+
"src": "data/b1/session-images/074-01.png"
|
| 804 |
+
}
|
| 805 |
+
]
|
| 806 |
+
},
|
| 807 |
+
{
|
| 808 |
+
"id": "tool-047",
|
| 809 |
+
"name": "device",
|
| 810 |
+
"arguments": {
|
| 811 |
+
"deviceID": "camera_wrist",
|
| 812 |
+
"action": "image"
|
| 813 |
+
},
|
| 814 |
+
"timestamp": 1793160626440,
|
| 815 |
+
"result": [
|
| 816 |
+
{
|
| 817 |
+
"type": "text",
|
| 818 |
+
"text": "{\n \"deviceID\": \"camera_wrist\",\n \"timestamp\": 10.1,\n \"frame_id\": \"camera_wrist/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-af41e5x2.png\"\n}"
|
| 819 |
+
},
|
| 820 |
+
{
|
| 821 |
+
"type": "image",
|
| 822 |
+
"src": "data/b1/session-images/075-01.png"
|
| 823 |
+
}
|
| 824 |
+
]
|
| 825 |
+
},
|
| 826 |
+
{
|
| 827 |
+
"id": "tool-048",
|
| 828 |
+
"name": "device",
|
| 829 |
+
"arguments": {
|
| 830 |
+
"deviceID": "gripper",
|
| 831 |
+
"action": "joint_state"
|
| 832 |
+
},
|
| 833 |
+
"timestamp": 1793160626440,
|
| 834 |
+
"result": [
|
| 835 |
+
{
|
| 836 |
+
"type": "text",
|
| 837 |
+
"text": "{\n \"positions\": [\n 0.0024902996389407133\n ],\n \"velocities\": [\n -0.00005107521726434425\n ],\n \"joint_names\": [\n \"finger_joint1\"\n ],\n \"timestamp\": 10.1\n}"
|
| 838 |
+
}
|
| 839 |
+
]
|
| 840 |
+
},
|
| 841 |
+
{
|
| 842 |
+
"id": "tool-049",
|
| 843 |
+
"name": "exec",
|
| 844 |
+
"arguments": {
|
| 845 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 846 |
+
"args": {
|
| 847 |
+
"poses": [
|
| 848 |
+
[
|
| 849 |
+
-0.065,
|
| 850 |
+
0.14,
|
| 851 |
+
0.97
|
| 852 |
+
],
|
| 853 |
+
[
|
| 854 |
+
-0.065,
|
| 855 |
+
0.14,
|
| 856 |
+
0.927
|
| 857 |
+
]
|
| 858 |
+
],
|
| 859 |
+
"seconds": [
|
| 860 |
+
1.6,
|
| 861 |
+
1
|
| 862 |
+
],
|
| 863 |
+
"grip": 0.04,
|
| 864 |
+
"settle": 0.25
|
| 865 |
+
},
|
| 866 |
+
"description": "reposition jaws at outer bowl wall and insert deeper",
|
| 867 |
+
"timeout_s": 60
|
| 868 |
+
},
|
| 869 |
+
"timestamp": 1793160629654,
|
| 870 |
+
"result": [
|
| 871 |
+
{
|
| 872 |
+
"type": "text",
|
| 873 |
+
"text": "{\n \"output\": \"[INFO] [1793160658.629724393] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"target\": [-0.065,0.14,0.927],\n \"tcp_world\": [-0.06528787963485683,0.14023533847136463,0.9305176573503926],\n \"joints\": [0.20326243089687823,0.7056659465387953,0.028822180846579122,-1.9245712487618651,0.009226133412744282,2.5874951096877066,1.0594480749695268],\n \"max_velocity\": 0.04070098643607075,\n \"time\": 12.950000000001078\n }\n}"
|
| 874 |
+
}
|
| 875 |
+
]
|
| 876 |
+
},
|
| 877 |
+
{
|
| 878 |
+
"id": "tool-050",
|
| 879 |
+
"name": "device",
|
| 880 |
+
"arguments": {
|
| 881 |
+
"deviceID": "camera_agentview",
|
| 882 |
+
"action": "image"
|
| 883 |
+
},
|
| 884 |
+
"timestamp": 1793160664609,
|
| 885 |
+
"result": [
|
| 886 |
+
{
|
| 887 |
+
"type": "text",
|
| 888 |
+
"text": "{\n \"deviceID\": \"camera_agentview\",\n \"timestamp\": 12.95,\n \"frame_id\": \"camera_agentview/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-wvarozqj.png\"\n}"
|
| 889 |
+
},
|
| 890 |
+
{
|
| 891 |
+
"type": "image",
|
| 892 |
+
"src": "data/b1/session-images/080-01.png"
|
| 893 |
+
}
|
| 894 |
+
]
|
| 895 |
+
},
|
| 896 |
+
{
|
| 897 |
+
"id": "tool-051",
|
| 898 |
+
"name": "device",
|
| 899 |
+
"arguments": {
|
| 900 |
+
"deviceID": "camera_wrist",
|
| 901 |
+
"action": "image"
|
| 902 |
+
},
|
| 903 |
+
"timestamp": 1793160664609,
|
| 904 |
+
"result": [
|
| 905 |
+
{
|
| 906 |
+
"type": "text",
|
| 907 |
+
"text": "{\n \"deviceID\": \"camera_wrist\",\n \"timestamp\": 12.95,\n \"frame_id\": \"camera_wrist/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-490h52dd.png\"\n}"
|
| 908 |
+
},
|
| 909 |
+
{
|
| 910 |
+
"type": "image",
|
| 911 |
+
"src": "data/b1/session-images/081-01.png"
|
| 912 |
+
}
|
| 913 |
+
]
|
| 914 |
+
},
|
| 915 |
+
{
|
| 916 |
+
"id": "tool-052",
|
| 917 |
+
"name": "exec",
|
| 918 |
+
"arguments": {
|
| 919 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 920 |
+
"args": {
|
| 921 |
+
"grip": 0,
|
| 922 |
+
"settle": 1
|
| 923 |
+
},
|
| 924 |
+
"description": "pinch bowl lower at its near rim",
|
| 925 |
+
"timeout_s": 60
|
| 926 |
+
},
|
| 927 |
+
"timestamp": 1793160667764,
|
| 928 |
+
"result": [
|
| 929 |
+
{
|
| 930 |
+
"type": "text",
|
| 931 |
+
"text": "{\n \"output\": \"[INFO] [1793160672.826748363] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"target\": null,\n \"tcp_world\": [-0.06520059877377415,0.14047836689613946,0.9274392742216031],\n \"joints\": [0.20355103542856265,0.713054275148156,0.02888273764061047,-1.9217132722169707,0.009086972884071693,2.5929480531643083,1.0593183245954352],\n \"max_velocity\": 0.0004186793895414026,\n \"time\": 13.950000000001411\n }\n}"
|
| 932 |
+
}
|
| 933 |
+
]
|
| 934 |
+
},
|
| 935 |
+
{
|
| 936 |
+
"id": "tool-053",
|
| 937 |
+
"name": "device",
|
| 938 |
+
"arguments": {
|
| 939 |
+
"deviceID": "gripper",
|
| 940 |
+
"action": "joint_state"
|
| 941 |
+
},
|
| 942 |
+
"timestamp": 1793160675526,
|
| 943 |
+
"result": [
|
| 944 |
+
{
|
| 945 |
+
"type": "text",
|
| 946 |
+
"text": "{\n \"positions\": [\n 0.0038722993133267804\n ],\n \"velocities\": [\n -0.00021362488001271714\n ],\n \"joint_names\": [\n \"finger_joint1\"\n ],\n \"timestamp\": 13.95\n}"
|
| 947 |
+
}
|
| 948 |
+
]
|
| 949 |
+
},
|
| 950 |
+
{
|
| 951 |
+
"id": "tool-054",
|
| 952 |
+
"name": "exec",
|
| 953 |
+
"arguments": {
|
| 954 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 955 |
+
"args": {
|
| 956 |
+
"poses": [
|
| 957 |
+
[
|
| 958 |
+
-0.065,
|
| 959 |
+
0.14,
|
| 960 |
+
1.045
|
| 961 |
+
]
|
| 962 |
+
],
|
| 963 |
+
"seconds": [
|
| 964 |
+
1.65
|
| 965 |
+
],
|
| 966 |
+
"settle": 0.3
|
| 967 |
+
},
|
| 968 |
+
"description": "lift and inspect whether bowl follows grasp",
|
| 969 |
+
"timeout_s": 60
|
| 970 |
+
},
|
| 971 |
+
"timestamp": 1793160676925,
|
| 972 |
+
"result": [
|
| 973 |
+
{
|
| 974 |
+
"type": "text",
|
| 975 |
+
"text": "{\n \"output\": \"[INFO] [1793160682.930332261] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"target\": [-0.065,0.14,1.045],\n \"tcp_world\": [-0.06416192436761481,0.13992110062242955,1.040542569224081],\n \"joints\": [0.19985177588998115,0.47567225459002815,0.03165717187781703,-1.9668205282459534,0.010117305581018723,2.4028556756780914,1.0592420864175462],\n \"max_velocity\": 0.04996326952448967,\n \"time\": 15.900000000001928\n }\n}"
|
| 976 |
+
}
|
| 977 |
+
]
|
| 978 |
+
},
|
| 979 |
+
{
|
| 980 |
+
"id": "tool-055",
|
| 981 |
+
"name": "device",
|
| 982 |
+
"arguments": {
|
| 983 |
+
"deviceID": "camera_agentview",
|
| 984 |
+
"action": "image"
|
| 985 |
+
},
|
| 986 |
+
"timestamp": 1793160687456,
|
| 987 |
+
"result": [
|
| 988 |
+
{
|
| 989 |
+
"type": "text",
|
| 990 |
+
"text": "{\n \"deviceID\": \"camera_agentview\",\n \"timestamp\": 15.9,\n \"frame_id\": \"camera_agentview/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-unf1hcd1.png\"\n}"
|
| 991 |
+
},
|
| 992 |
+
{
|
| 993 |
+
"type": "image",
|
| 994 |
+
"src": "data/b1/session-images/089-01.png"
|
| 995 |
+
}
|
| 996 |
+
]
|
| 997 |
+
},
|
| 998 |
+
{
|
| 999 |
+
"id": "tool-056",
|
| 1000 |
+
"name": "bash",
|
| 1001 |
+
"arguments": {
|
| 1002 |
+
"command": "python - <<'PY'\nfrom PIL import Image\nim=Image.open('/tmp/kinex-observation-wvarozqj.png')\nim.crop((165,108,228,169)).resize((756,732)).save('/tmp/bowlzoom.png')\nPY",
|
| 1003 |
+
"timeout": 10
|
| 1004 |
+
},
|
| 1005 |
+
"timestamp": 1793160688972,
|
| 1006 |
+
"result": [
|
| 1007 |
+
{
|
| 1008 |
+
"type": "text",
|
| 1009 |
+
"text": "(no output)"
|
| 1010 |
+
}
|
| 1011 |
+
]
|
| 1012 |
+
},
|
| 1013 |
+
{
|
| 1014 |
+
"id": "tool-057",
|
| 1015 |
+
"name": "read",
|
| 1016 |
+
"arguments": {
|
| 1017 |
+
"path": "/tmp/bowlzoom.png",
|
| 1018 |
+
"offset": null,
|
| 1019 |
+
"limit": null
|
| 1020 |
+
},
|
| 1021 |
+
"timestamp": 1793160697065,
|
| 1022 |
+
"result": [
|
| 1023 |
+
{
|
| 1024 |
+
"type": "text",
|
| 1025 |
+
"text": "Read image file [image/png]"
|
| 1026 |
+
},
|
| 1027 |
+
{
|
| 1028 |
+
"type": "image",
|
| 1029 |
+
"src": "data/b1/session-images/093-01.png"
|
| 1030 |
+
}
|
| 1031 |
+
]
|
| 1032 |
+
},
|
| 1033 |
+
{
|
| 1034 |
+
"id": "tool-058",
|
| 1035 |
+
"name": "device",
|
| 1036 |
+
"arguments": {
|
| 1037 |
+
"deviceID": "gripper",
|
| 1038 |
+
"action": "joint_state"
|
| 1039 |
+
},
|
| 1040 |
+
"timestamp": 1793160698844,
|
| 1041 |
+
"result": [
|
| 1042 |
+
{
|
| 1043 |
+
"type": "text",
|
| 1044 |
+
"text": "{\n \"positions\": [\n 0.003700399617413923\n ],\n \"velocities\": [\n -0.000113946302347188\n ],\n \"joint_names\": [\n \"finger_joint1\"\n ],\n \"timestamp\": 15.9\n}"
|
| 1045 |
+
}
|
| 1046 |
+
]
|
| 1047 |
+
},
|
| 1048 |
+
{
|
| 1049 |
+
"id": "tool-059",
|
| 1050 |
+
"name": "exec",
|
| 1051 |
+
"arguments": {
|
| 1052 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 1053 |
+
"args": {
|
| 1054 |
+
"poses": [
|
| 1055 |
+
[
|
| 1056 |
+
-0.065,
|
| 1057 |
+
0.165,
|
| 1058 |
+
0.96
|
| 1059 |
+
],
|
| 1060 |
+
[
|
| 1061 |
+
-0.065,
|
| 1062 |
+
0.165,
|
| 1063 |
+
0.924
|
| 1064 |
+
]
|
| 1065 |
+
],
|
| 1066 |
+
"seconds": [
|
| 1067 |
+
1.35,
|
| 1068 |
+
0.85
|
| 1069 |
+
],
|
| 1070 |
+
"grip": 0.04,
|
| 1071 |
+
"settle": 0.25
|
| 1072 |
+
},
|
| 1073 |
+
"description": "place jaw center inward to contact bowl wall below rim",
|
| 1074 |
+
"timeout_s": 60
|
| 1075 |
+
},
|
| 1076 |
+
"timestamp": 1793160709373,
|
| 1077 |
+
"result": [
|
| 1078 |
+
{
|
| 1079 |
+
"type": "text",
|
| 1080 |
+
"text": "{\n \"output\": \"[INFO] [1793160725.952929723] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"target\": [-0.065,0.165,0.924],\n \"tcp_world\": [-0.06527890056549734,0.16506333839398366,0.9274713184089283],\n \"joints\": [0.2396488031257716,0.7254079355166553,0.031772910551978645,-1.8965395021477252,0.00780843814258162,2.580048425043998,1.095114615735081],\n \"max_velocity\": 0.04032875825113654,\n \"time\": 18.35000000000057\n }\n}"
|
| 1081 |
+
}
|
| 1082 |
+
]
|
| 1083 |
+
},
|
| 1084 |
+
{
|
| 1085 |
+
"id": "tool-060",
|
| 1086 |
+
"name": "device",
|
| 1087 |
+
"arguments": {
|
| 1088 |
+
"deviceID": "camera_agentview",
|
| 1089 |
+
"action": "image"
|
| 1090 |
+
},
|
| 1091 |
+
"timestamp": 1793160730627,
|
| 1092 |
+
"result": [
|
| 1093 |
+
{
|
| 1094 |
+
"type": "text",
|
| 1095 |
+
"text": "{\n \"deviceID\": \"camera_agentview\",\n \"timestamp\": 18.35,\n \"frame_id\": \"camera_agentview/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-s0bkojm8.png\"\n}"
|
| 1096 |
+
},
|
| 1097 |
+
{
|
| 1098 |
+
"type": "image",
|
| 1099 |
+
"src": "data/b1/session-images/099-01.png"
|
| 1100 |
+
}
|
| 1101 |
+
]
|
| 1102 |
+
},
|
| 1103 |
+
{
|
| 1104 |
+
"id": "tool-061",
|
| 1105 |
+
"name": "exec",
|
| 1106 |
+
"arguments": {
|
| 1107 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 1108 |
+
"args": {
|
| 1109 |
+
"grip": 0,
|
| 1110 |
+
"settle": 1.2
|
| 1111 |
+
},
|
| 1112 |
+
"description": "grasp black bowl wall at inner offset",
|
| 1113 |
+
"timeout_s": 60
|
| 1114 |
+
},
|
| 1115 |
+
"timestamp": 1793160737971,
|
| 1116 |
+
"result": [
|
| 1117 |
+
{
|
| 1118 |
+
"type": "text",
|
| 1119 |
+
"text": "{\n \"output\": \"[INFO] [1793160741.362864519] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"target\": null,\n \"tcp_world\": [-0.06504939987270697,0.16499216039726045,0.9244885729692776],\n \"joints\": [0.239852565630546,0.7326626372523988,0.0313453116727595,-1.8934521990831243,0.0075382868027790055,2.5852336640458904,1.0952448470765244],\n \"max_velocity\": 0.00069239835045677,\n \"time\": 19.549999999999905\n }\n}"
|
| 1120 |
+
}
|
| 1121 |
+
]
|
| 1122 |
+
},
|
| 1123 |
+
{
|
| 1124 |
+
"id": "tool-062",
|
| 1125 |
+
"name": "device",
|
| 1126 |
+
"arguments": {
|
| 1127 |
+
"deviceID": "gripper",
|
| 1128 |
+
"action": "joint_state"
|
| 1129 |
+
},
|
| 1130 |
+
"timestamp": 1793160743981,
|
| 1131 |
+
"result": [
|
| 1132 |
+
{
|
| 1133 |
+
"type": "text",
|
| 1134 |
+
"text": "{\n \"positions\": [\n 0.0041325631407900815\n ],\n \"velocities\": [\n -0.00031418192403061967\n ],\n \"joint_names\": [\n \"finger_joint1\"\n ],\n \"timestamp\": 19.55\n}"
|
| 1135 |
+
}
|
| 1136 |
+
]
|
| 1137 |
+
},
|
| 1138 |
+
{
|
| 1139 |
+
"id": "tool-063",
|
| 1140 |
+
"name": "device",
|
| 1141 |
+
"arguments": {
|
| 1142 |
+
"deviceID": "camera_agentview",
|
| 1143 |
+
"action": "image"
|
| 1144 |
+
},
|
| 1145 |
+
"timestamp": 1793160743981,
|
| 1146 |
+
"result": [
|
| 1147 |
+
{
|
| 1148 |
+
"type": "text",
|
| 1149 |
+
"text": "{\n \"deviceID\": \"camera_agentview\",\n \"timestamp\": 19.55,\n \"frame_id\": \"camera_agentview/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-h4qbchhz.png\"\n}"
|
| 1150 |
+
},
|
| 1151 |
+
{
|
| 1152 |
+
"type": "image",
|
| 1153 |
+
"src": "data/b1/session-images/104-01.png"
|
| 1154 |
+
}
|
| 1155 |
+
]
|
| 1156 |
+
},
|
| 1157 |
+
{
|
| 1158 |
+
"id": "tool-064",
|
| 1159 |
+
"name": "exec",
|
| 1160 |
+
"arguments": {
|
| 1161 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 1162 |
+
"args": {
|
| 1163 |
+
"poses": [
|
| 1164 |
+
[
|
| 1165 |
+
-0.065,
|
| 1166 |
+
0.165,
|
| 1167 |
+
1.035
|
| 1168 |
+
]
|
| 1169 |
+
],
|
| 1170 |
+
"seconds": [
|
| 1171 |
+
1.6
|
| 1172 |
+
],
|
| 1173 |
+
"settle": 0.3
|
| 1174 |
+
},
|
| 1175 |
+
"description": "verify third bowl pinch by lifting",
|
| 1176 |
+
"timeout_s": 60
|
| 1177 |
+
},
|
| 1178 |
+
"timestamp": 1793160747794,
|
| 1179 |
+
"result": [
|
| 1180 |
+
{
|
| 1181 |
+
"type": "text",
|
| 1182 |
+
"text": "{\n \"output\": \"[INFO] [1793160753.144493954] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"target\": [-0.065,0.165,1.035],\n \"tcp_world\": [-0.06419832060877861,0.1649449780647281,1.030672598957793],\n \"joints\": [0.232619744864378,0.50931101617392,0.038723571676454197,-1.941425381259083,0.007497088134651046,2.411921010360549,1.0984540530034448],\n \"max_velocity\": 0.048570502350424566,\n \"time\": 21.44999999999885\n }\n}"
|
| 1183 |
+
}
|
| 1184 |
+
]
|
| 1185 |
+
},
|
| 1186 |
+
{
|
| 1187 |
+
"id": "tool-065",
|
| 1188 |
+
"name": "device",
|
| 1189 |
+
"arguments": {
|
| 1190 |
+
"deviceID": "camera_agentview",
|
| 1191 |
+
"action": "image"
|
| 1192 |
+
},
|
| 1193 |
+
"timestamp": 1793160757167,
|
| 1194 |
+
"result": [
|
| 1195 |
+
{
|
| 1196 |
+
"type": "text",
|
| 1197 |
+
"text": "{\n \"deviceID\": \"camera_agentview\",\n \"timestamp\": 21.45,\n \"frame_id\": \"camera_agentview/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-c9h18muc.png\"\n}"
|
| 1198 |
+
},
|
| 1199 |
+
{
|
| 1200 |
+
"type": "image",
|
| 1201 |
+
"src": "data/b1/session-images/108-01.png"
|
| 1202 |
+
}
|
| 1203 |
+
]
|
| 1204 |
+
},
|
| 1205 |
+
{
|
| 1206 |
+
"id": "tool-066",
|
| 1207 |
+
"name": "exec",
|
| 1208 |
+
"arguments": {
|
| 1209 |
+
"python": "import numpy as np\nfrom scipy.spatial.transform import Rotation as R\nfrom kinex import helpers,finish\nq=[.21058723356,.61844907795,.0371268626,-1.9424367526,.0047556167,2.51839118,1.07509069];f=helpers.joint_model('arm').fk(q);pa=np.array([.658613174683,0,1.610350024037]);ra=R.from_quat([.638017721229,.638017721229,-.304849838016,-.304849718806]);rf=R.from_quat(f[3:]);pw=np.array([-.66,0,.912])+f[:3]+rf.apply([.05,0,0]);rw=rf*R.from_quat([0,0,.7071067811865476,.7071067811865475]);\nfor ua in [(174,148),(176,146),(190,149),(206,150)]:\n for uw in [(135,175),(132,165),(120,170),(60,175)]:\n da=ra.apply([(ua[0]-127.5)/309.0193,(ua[1]-127.5)/309.0193,1]); dw=rw.apply([(uw[0]-127.5)/166.81285,(uw[1]-127.5)/166.81285,1]);t=np.linalg.lstsq(np.stack([da,-dw],axis=1),pw-pa,rcond=None)[0];v=(pa+t[0]*da+pw+t[1]*dw)/2;err=np.linalg.norm(pa+t[0]*da-pw-t[1]*dw)\n if err<.005:print(ua,uw,np.round(v,4),round(err,4))\nfinish({'camera':pw.tolist()})",
|
| 1210 |
+
"description": "estimate bowl near lip 3D location from matched silhouette"
|
| 1211 |
+
},
|
| 1212 |
+
"timestamp": 1793160759574,
|
| 1213 |
+
"result": [
|
| 1214 |
+
{
|
| 1215 |
+
"type": "text",
|
| 1216 |
+
"text": "{\n \"output\": \"(174, 148) (135, 175) [-0.0537 0.1455 0.9527] 0.0001\\n(174, 148) (132, 165) [-0.045 0.1455 0.9601] 0.0034\\n(176, 146) (135, 175) [-0.0481 0.1477 0.967 ] 0.0042\\n(176, 146) (132, 165) [-0.0408 0.1477 0.973 ] 0.0011\\n(190, 149) (60, 175) [-0.0511 0.1966 0.9516] 0.0027\\n\",\n \"result\": {\n \"camera\": [-0.015198591497510933,0.14740158043290155,1.0665758939348013]\n }\n}"
|
| 1217 |
+
}
|
| 1218 |
+
]
|
| 1219 |
+
},
|
| 1220 |
+
{
|
| 1221 |
+
"id": "tool-067",
|
| 1222 |
+
"name": "exec",
|
| 1223 |
+
"arguments": {
|
| 1224 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 1225 |
+
"args": {
|
| 1226 |
+
"poses": [
|
| 1227 |
+
[
|
| 1228 |
+
-0.055,
|
| 1229 |
+
0.145,
|
| 1230 |
+
1
|
| 1231 |
+
],
|
| 1232 |
+
[
|
| 1233 |
+
-0.055,
|
| 1234 |
+
0.145,
|
| 1235 |
+
0.95
|
| 1236 |
+
]
|
| 1237 |
+
],
|
| 1238 |
+
"seconds": [
|
| 1239 |
+
1.2,
|
| 1240 |
+
1
|
| 1241 |
+
],
|
| 1242 |
+
"grip": 0.04,
|
| 1243 |
+
"settle": 0.25
|
| 1244 |
+
},
|
| 1245 |
+
"description": "align jaws to triangulated rim at 0.953 m elevation",
|
| 1246 |
+
"timeout_s": 60
|
| 1247 |
+
},
|
| 1248 |
+
"timestamp": 1793160782564,
|
| 1249 |
+
"result": [
|
| 1250 |
+
{
|
| 1251 |
+
"type": "text",
|
| 1252 |
+
"text": "{\n \"output\": \"[INFO] [1793160797.134011798] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"target\": [-0.055,0.145,0.95],\n \"tcp_world\": [-0.05525526896455557,0.14522203918792037,0.9540619489418729],\n \"joints\": [0.20694027473327622,0.6756185457256266,0.029599819539212438,-1.8965720767673973,0.007890086468979114,2.529553973813061,1.0648718480814288],\n \"max_velocity\": 0.04447010114454261,\n \"time\": 23.899999999997494\n }\n}"
|
| 1253 |
+
}
|
| 1254 |
+
]
|
| 1255 |
+
},
|
| 1256 |
+
{
|
| 1257 |
+
"id": "tool-068",
|
| 1258 |
+
"name": "exec",
|
| 1259 |
+
"arguments": {
|
| 1260 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 1261 |
+
"args": {
|
| 1262 |
+
"grip": 0,
|
| 1263 |
+
"settle": 1.4
|
| 1264 |
+
},
|
| 1265 |
+
"description": "close around triangulated bowl lip",
|
| 1266 |
+
"timeout_s": 60
|
| 1267 |
+
},
|
| 1268 |
+
"timestamp": 1793160802106,
|
| 1269 |
+
"result": [
|
| 1270 |
+
{
|
| 1271 |
+
"type": "text",
|
| 1272 |
+
"text": "{\n \"output\": \"[INFO] [1793160805.456365475] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"target\": null,\n \"tcp_world\": [-0.055409937433791745,0.14531414459029926,0.9502148507897983],\n \"joints\": [0.2072653840017457,0.6838094239505388,0.029460908205961086,-1.8945518819179692,0.007879046606041273,2.535799621052039,1.0645735567770487],\n \"max_velocity\": 0.000496050062535405,\n \"time\": 25.299999999996718\n }\n}"
|
| 1273 |
+
}
|
| 1274 |
+
]
|
| 1275 |
+
},
|
| 1276 |
+
{
|
| 1277 |
+
"id": "tool-069",
|
| 1278 |
+
"name": "device",
|
| 1279 |
+
"arguments": {
|
| 1280 |
+
"deviceID": "gripper",
|
| 1281 |
+
"action": "joint_state"
|
| 1282 |
+
},
|
| 1283 |
+
"timestamp": 1793160809004,
|
| 1284 |
+
"result": [
|
| 1285 |
+
{
|
| 1286 |
+
"type": "text",
|
| 1287 |
+
"text": "{\n \"positions\": [\n 0.002834472180768575\n ],\n \"velocities\": [\n -0.00030774450299379634\n ],\n \"joint_names\": [\n \"finger_joint1\"\n ],\n \"timestamp\": 25.3\n}"
|
| 1288 |
+
}
|
| 1289 |
+
]
|
| 1290 |
+
},
|
| 1291 |
+
{
|
| 1292 |
+
"id": "tool-070",
|
| 1293 |
+
"name": "exec",
|
| 1294 |
+
"arguments": {
|
| 1295 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 1296 |
+
"args": {
|
| 1297 |
+
"poses": [
|
| 1298 |
+
[
|
| 1299 |
+
-0.055,
|
| 1300 |
+
0.145,
|
| 1301 |
+
1.035
|
| 1302 |
+
]
|
| 1303 |
+
],
|
| 1304 |
+
"seconds": [
|
| 1305 |
+
1.4
|
| 1306 |
+
],
|
| 1307 |
+
"settle": 0.3
|
| 1308 |
+
},
|
| 1309 |
+
"description": "test rim grip under short vertical lift",
|
| 1310 |
+
"timeout_s": 60
|
| 1311 |
+
},
|
| 1312 |
+
"timestamp": 1793160810552,
|
| 1313 |
+
"result": [
|
| 1314 |
+
{
|
| 1315 |
+
"type": "text",
|
| 1316 |
+
"text": "{\n \"output\": \"[INFO] [1793160814.865927710] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"target\": [-0.055,0.145,1.035],\n \"tcp_world\": [-0.05434475955081153,0.14489841690198482,1.031181639030266],\n \"joints\": [0.20445726888978175,0.5193204732167088,0.031495774501353234,-1.921999315410278,0.008585434481248294,2.401800763325162,1.0644908443278474],\n \"max_velocity\": 0.04118860826470653,\n \"time\": 26.999999999995776\n }\n}"
|
| 1317 |
+
}
|
| 1318 |
+
]
|
| 1319 |
+
},
|
| 1320 |
+
{
|
| 1321 |
+
"id": "tool-071",
|
| 1322 |
+
"name": "device",
|
| 1323 |
+
"arguments": {
|
| 1324 |
+
"deviceID": "camera_agentview",
|
| 1325 |
+
"action": "image"
|
| 1326 |
+
},
|
| 1327 |
+
"timestamp": 1793160818519,
|
| 1328 |
+
"result": [
|
| 1329 |
+
{
|
| 1330 |
+
"type": "text",
|
| 1331 |
+
"text": "{\n \"deviceID\": \"camera_agentview\",\n \"timestamp\": 27,\n \"frame_id\": \"camera_agentview/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-hf1oi18k.png\"\n}"
|
| 1332 |
+
},
|
| 1333 |
+
{
|
| 1334 |
+
"type": "image",
|
| 1335 |
+
"src": "data/b1/session-images/120-01.png"
|
| 1336 |
+
}
|
| 1337 |
+
]
|
| 1338 |
+
},
|
| 1339 |
+
{
|
| 1340 |
+
"id": "tool-072",
|
| 1341 |
+
"name": "device",
|
| 1342 |
+
"arguments": {
|
| 1343 |
+
"deviceID": "camera_wrist",
|
| 1344 |
+
"action": "image"
|
| 1345 |
+
},
|
| 1346 |
+
"timestamp": 1793160820166,
|
| 1347 |
+
"result": [
|
| 1348 |
+
{
|
| 1349 |
+
"type": "text",
|
| 1350 |
+
"text": "{\n \"deviceID\": \"camera_wrist\",\n \"timestamp\": 27,\n \"frame_id\": \"camera_wrist/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-oesztpvm.png\"\n}"
|
| 1351 |
+
},
|
| 1352 |
+
{
|
| 1353 |
+
"type": "image",
|
| 1354 |
+
"src": "data/b1/session-images/122-01.png"
|
| 1355 |
+
}
|
| 1356 |
+
]
|
| 1357 |
+
},
|
| 1358 |
+
{
|
| 1359 |
+
"id": "tool-073",
|
| 1360 |
+
"name": "bash",
|
| 1361 |
+
"arguments": {
|
| 1362 |
+
"command": "python - <<'PY'\nfrom PIL import Image\nfor name in ['hf1oi18k','c9h18muc']:\n im=Image.open('/tmp/kinex-observation-'+name+'.png'); im.crop((165,108,236,170)).resize((710,620)).save('/tmp/'+name+'-crop.png')\nPY",
|
| 1363 |
+
"timeout": 10
|
| 1364 |
+
},
|
| 1365 |
+
"timestamp": 1793160824423,
|
| 1366 |
+
"result": [
|
| 1367 |
+
{
|
| 1368 |
+
"type": "text",
|
| 1369 |
+
"text": "(no output)"
|
| 1370 |
+
}
|
| 1371 |
+
]
|
| 1372 |
+
},
|
| 1373 |
+
{
|
| 1374 |
+
"id": "tool-074",
|
| 1375 |
+
"name": "read",
|
| 1376 |
+
"arguments": {
|
| 1377 |
+
"path": "/tmp/hf1oi18k-crop.png",
|
| 1378 |
+
"offset": null,
|
| 1379 |
+
"limit": null
|
| 1380 |
+
},
|
| 1381 |
+
"timestamp": 1793160828902,
|
| 1382 |
+
"result": [
|
| 1383 |
+
{
|
| 1384 |
+
"type": "text",
|
| 1385 |
+
"text": "Read image file [image/png]"
|
| 1386 |
+
},
|
| 1387 |
+
{
|
| 1388 |
+
"type": "image",
|
| 1389 |
+
"src": "data/b1/session-images/126-01.png"
|
| 1390 |
+
}
|
| 1391 |
+
]
|
| 1392 |
+
},
|
| 1393 |
+
{
|
| 1394 |
+
"id": "tool-075",
|
| 1395 |
+
"name": "read",
|
| 1396 |
+
"arguments": {
|
| 1397 |
+
"path": "/tmp/c9h18muc-crop.png",
|
| 1398 |
+
"offset": null,
|
| 1399 |
+
"limit": null
|
| 1400 |
+
},
|
| 1401 |
+
"timestamp": 1793160828902,
|
| 1402 |
+
"result": [
|
| 1403 |
+
{
|
| 1404 |
+
"type": "text",
|
| 1405 |
+
"text": "Read image file [image/png]"
|
| 1406 |
+
},
|
| 1407 |
+
{
|
| 1408 |
+
"type": "image",
|
| 1409 |
+
"src": "data/b1/session-images/127-01.png"
|
| 1410 |
+
}
|
| 1411 |
+
]
|
| 1412 |
+
},
|
| 1413 |
+
{
|
| 1414 |
+
"id": "tool-076",
|
| 1415 |
+
"name": "exec",
|
| 1416 |
+
"arguments": {
|
| 1417 |
+
"python": "import numpy as np\nfrom scipy.spatial.transform import Rotation as R\nfrom kinex import helpers,finish\nq=[.20445726889,.5193204732,.0314957745,-1.9219993154,.008585434,2.401800763,1.064490844];f=helpers.joint_model('arm').fk(q);pa=np.array([.658613174683,0,1.610350024037]);ra=R.from_quat([.638017721229,.638017721229,-.304849838016,-.304849718806]);rf=R.from_quat(f[3:]);pw=np.array([-.66,0,.912])+f[:3]+rf.apply([.05,0,0]);rw=rf*R.from_quat([0,0,.7071067811865476,.7071067811865475]);\nfor name,ua,uw in [('heldbowl',(192,135),(65,171)),('plate',(198,184),(78,75)),('other',(220,125),(180,160))]:\n da=ra.apply([(ua[0]-127.5)/309.0193,(ua[1]-127.5)/309.0193,1]); dw=rw.apply([(uw[0]-127.5)/166.81285,(uw[1]-127.5)/166.81285,1]); t=np.linalg.lstsq(np.stack([da,-dw],axis=1),pw-pa,rcond=None)[0];a=pa+t[0]*da;b=pw+t[1]*dw;print(name,np.round((a+b)/2,4),round(np.linalg.norm(a-b),4),t)\nfinish({'tcp':(np.array([-.66,0,.912])+f[:3]+rf.apply([0,0,.097])).tolist()})",
|
| 1418 |
+
"description": "triangulate whether bowl is held above the plate"
|
| 1419 |
+
},
|
| 1420 |
+
"timestamp": 1793160831351,
|
| 1421 |
+
"result": [
|
| 1422 |
+
{
|
| 1423 |
+
"type": "text",
|
| 1424 |
+
"text": "{\n \"output\": \"heldbowl [-0.0353 0.1877 1.0204] 0.0048 [0.91008825 0.1082543 ]\\nplate [0.0568 0.2058 0.9107] 0.0026 [0.90758951 0.21356894]\\nother [0.0352 0.1918 1.1549] 0.0973 [ 0.76071598 -0.04681665]\\n\",\n \"result\": {\n \"tcp\": [-0.0585296013745853,0.1460437571070927,1.0312787221627562]\n }\n}"
|
| 1425 |
+
}
|
| 1426 |
+
]
|
| 1427 |
+
},
|
| 1428 |
+
{
|
| 1429 |
+
"id": "tool-077",
|
| 1430 |
+
"name": "exec",
|
| 1431 |
+
"arguments": {
|
| 1432 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 1433 |
+
"args": {
|
| 1434 |
+
"poses": [
|
| 1435 |
+
[
|
| 1436 |
+
0.035,
|
| 1437 |
+
0.163,
|
| 1438 |
+
1.065
|
| 1439 |
+
]
|
| 1440 |
+
],
|
| 1441 |
+
"seconds": [
|
| 1442 |
+
1.75
|
| 1443 |
+
],
|
| 1444 |
+
"settle": 0.35
|
| 1445 |
+
},
|
| 1446 |
+
"description": "carry grasped bowl above center of plate",
|
| 1447 |
+
"timeout_s": 60
|
| 1448 |
+
},
|
| 1449 |
+
"timestamp": 1793160844391,
|
| 1450 |
+
"result": [
|
| 1451 |
+
{
|
| 1452 |
+
"type": "text",
|
| 1453 |
+
"text": "{\n \"output\": \"[INFO] [1793160853.916409925] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"result\": {\n \"target\": [0.035,0.163,1.065],\n \"tcp_world\": [0.03276882854217289,0.16280309374400104,1.064105621131978],\n \"joints\": [0.2060694357450056,0.7123162097810749,0.02927153590514025,-1.487948624416567,0.005991780842772691,2.1603029039178945,1.0644928062782655],\n \"max_velocity\": 0.06644217749343302,\n \"time\": 29.099999999994612\n }\n}"
|
| 1454 |
+
}
|
| 1455 |
+
]
|
| 1456 |
+
},
|
| 1457 |
+
{
|
| 1458 |
+
"id": "tool-078",
|
| 1459 |
+
"name": "device",
|
| 1460 |
+
"arguments": {
|
| 1461 |
+
"deviceID": "camera_agentview",
|
| 1462 |
+
"action": "image"
|
| 1463 |
+
},
|
| 1464 |
+
"timestamp": 1793160858198,
|
| 1465 |
+
"result": [
|
| 1466 |
+
{
|
| 1467 |
+
"type": "text",
|
| 1468 |
+
"text": "{\n \"deviceID\": \"camera_agentview\",\n \"timestamp\": 29.1,\n \"frame_id\": \"camera_agentview/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-rqcuvl5r.png\"\n}"
|
| 1469 |
+
},
|
| 1470 |
+
{
|
| 1471 |
+
"type": "image",
|
| 1472 |
+
"src": "data/b1/session-images/133-01.png"
|
| 1473 |
+
}
|
| 1474 |
+
]
|
| 1475 |
+
},
|
| 1476 |
+
{
|
| 1477 |
+
"id": "tool-079",
|
| 1478 |
+
"name": "device",
|
| 1479 |
+
"arguments": {
|
| 1480 |
+
"deviceID": "camera_wrist",
|
| 1481 |
+
"action": "image"
|
| 1482 |
+
},
|
| 1483 |
+
"timestamp": 1793160858198,
|
| 1484 |
+
"result": [
|
| 1485 |
+
{
|
| 1486 |
+
"type": "text",
|
| 1487 |
+
"text": "{\n \"deviceID\": \"camera_wrist\",\n \"timestamp\": 29.1,\n \"frame_id\": \"camera_wrist/base\",\n \"width\": 256,\n \"height\": 256,\n \"file\": \"/tmp/kinex-observation-cli4qogr.png\"\n}"
|
| 1488 |
+
},
|
| 1489 |
+
{
|
| 1490 |
+
"type": "image",
|
| 1491 |
+
"src": "data/b1/session-images/134-01.png"
|
| 1492 |
+
}
|
| 1493 |
+
]
|
| 1494 |
+
},
|
| 1495 |
+
{
|
| 1496 |
+
"id": "tool-080",
|
| 1497 |
+
"name": "device",
|
| 1498 |
+
"arguments": {
|
| 1499 |
+
"deviceID": "gripper",
|
| 1500 |
+
"action": "joint_state"
|
| 1501 |
+
},
|
| 1502 |
+
"timestamp": 1793160858198,
|
| 1503 |
+
"result": [
|
| 1504 |
+
{
|
| 1505 |
+
"type": "text",
|
| 1506 |
+
"text": "{\n \"positions\": [\n 0.0004998167883087032\n ],\n \"velocities\": [\n -0.000002603186583499088\n ],\n \"joint_names\": [\n \"finger_joint1\"\n ],\n \"timestamp\": 29.1\n}"
|
| 1507 |
+
}
|
| 1508 |
+
]
|
| 1509 |
+
},
|
| 1510 |
+
{
|
| 1511 |
+
"id": "tool-081",
|
| 1512 |
+
"name": "exec",
|
| 1513 |
+
"arguments": {
|
| 1514 |
+
"file": ".kinex/tools/tabletop_motion.py",
|
| 1515 |
+
"args": {
|
| 1516 |
+
"poses": [
|
| 1517 |
+
[
|
| 1518 |
+
-0.06,
|
| 1519 |
+
0.26,
|
| 1520 |
+
1.07
|
| 1521 |
+
],
|
| 1522 |
+
[
|
| 1523 |
+
-0.06,
|
| 1524 |
+
0.26,
|
| 1525 |
+
0.948
|
| 1526 |
+
]
|
| 1527 |
+
],
|
| 1528 |
+
"seconds": [
|
| 1529 |
+
1.7,
|
| 1530 |
+
1.6
|
| 1531 |
+
],
|
| 1532 |
+
"grip": 0.04,
|
| 1533 |
+
"settle": 0.3
|
| 1534 |
+
},
|
| 1535 |
+
"description": "approach opposite rim for more robust bowl-wall grip",
|
| 1536 |
+
"timeout_s": 60
|
| 1537 |
+
},
|
| 1538 |
+
"timestamp": 1793160861408,
|
| 1539 |
+
"result": [
|
| 1540 |
+
{
|
| 1541 |
+
"type": "text",
|
| 1542 |
+
"text": "{\n \"output\": \"[INFO] [1793160892.455945128] [rcl]: Found security directory: /run/rlebench/public/security/enclaves/agent\\n\",\n \"error\": \"episode ended during wait\",\n \"code\": \"operation_rejected\",\n \"details\": {\n \"operation\": \"world.wait\",\n \"type\": \"kinex_interfaces/srv/Wait\",\n \"response\": {\"success\":false,\"message\":\"episode ended during wait\",\"time_s\":29.999999999994113,\"waited_s\":0.8999999999995012}\n }\n}"
|
| 1543 |
+
}
|
| 1544 |
+
]
|
| 1545 |
+
},
|
| 1546 |
+
{
|
| 1547 |
+
"id": "tool-082",
|
| 1548 |
+
"name": "write",
|
| 1549 |
+
"arguments": {
|
| 1550 |
+
"path": ".kinex/memos/libero_spatial.md",
|
| 1551 |
+
"content": "# LIBERO spatial tabletop bowl placement\n\nThe running episode has ~30 s of native world time (605 x 0.05 s), even though wall safety timeout is much larger. `world.wait` rejects progression at terminal; do not interpret the rejected wait as success. All borrowed devices start loaded. Camera reads do not advance time.\n\nInterfaces: `harness.md` and `.kinex/devices/*/profile.yaml`. Arm is a seven-joint trajectory; gripper `target.data` is finger_joint1 in metres, 0 closed / 0.04 open. World `wait(duration_s)` is the ONLY way to step. `.kinex/tools/tabletop_motion.py` accepts world TCP waypoints and seconds, publishes timed trajectory, waits, returns measured pose. It assumes the initial downward flange orientation and arm base at world (-.66,0,.912), gripper TCP 0.097 m below flange. Tool has been exercised; `model.fk` requires a **list**, not ROS array slices.\n\nCamera_agentview pinhole fx=fy=309.019, cx=cy=127.5, camera world (.658613,0,1.61035), quaternion (.638018,.638018,-.304850,-.304850). Wrist camera fx=fy=166.813, camera position from flange FK + 0.05 m along flange x, quaternion flange * (0,0,.707107,.707107). Triangulation of images at t=2.95 gave target textured dark bowl between plate and silver ramekin at world approx (-.065,.203,.938) (visible inner surface), plate center (.055,.206,.910), near bowl rim at (-.054,.1455,.953). Do not mistake bowls under gripper for a successful pickup; at t=29.1 bowl was visibly still on table (agentview (190,150), wrist (100,~205)) and gripper fully shut (finger_joint1=.0005). Need verify successful grasp by observing bowl displacement in agentview with gripper moved to a clear position and/or stereo triangulation with matching bowl pixels, not by finger stall alone.\n\nAttempted near-rim pinch with gripper x axis along world +y, TCP x~-.065,y=.15,z=.947; then x~-.065,y=.14,z=.927; then x~-.065,y=.165,z=.924; then x~-.055,y=.145,z=.950. Each closed finger_joint1 to ~.002-.004 initially but target bowl remained after lift. Too low (~.924) likely misses rim at z~.953. At t=29, an attempted reposition to far-side rim (-.06,.26,.948) was interrupted at terminal t=30; no success. Future strategy: try opposite rim at y~.26, z~.95 with open fingers, then close, confirm lifted bowl before translating. Use fewer slow moves and a shorter total wait budget. Plate center x~.055 y~.206, placing bowl likely requires TCP x~.035 y~.16, z~.95 if near-side wall grasp succeeds.\n"
|
| 1552 |
+
},
|
| 1553 |
+
"timestamp": 1793160894805,
|
| 1554 |
+
"result": [
|
| 1555 |
+
{
|
| 1556 |
+
"type": "text",
|
| 1557 |
+
"text": "Successfully wrote to .kinex/memos/libero_spatial.md"
|
| 1558 |
+
}
|
| 1559 |
+
]
|
| 1560 |
+
}
|
| 1561 |
+
]
|
data/b1/usage.json
ADDED
|
@@ -0,0 +1,450 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"input_tokens": 1802752,
|
| 3 |
+
"output_tokens": 18444,
|
| 4 |
+
"total_tokens": 1821196,
|
| 5 |
+
"tokens": {
|
| 6 |
+
"fresh_input": 57984,
|
| 7 |
+
"cache_read": 1744768,
|
| 8 |
+
"cache_write": 0,
|
| 9 |
+
"output": 18444
|
| 10 |
+
},
|
| 11 |
+
"cost_breakdown_usd": {
|
| 12 |
+
"fresh_input": 0.11596800000000003,
|
| 13 |
+
"cache_read": 0.34895360000000003,
|
| 14 |
+
"cache_write": 0.0,
|
| 15 |
+
"output": 0.18443999999999997
|
| 16 |
+
},
|
| 17 |
+
"response_count": 58,
|
| 18 |
+
"estimated_api_equivalent_usd": 0.6493616,
|
| 19 |
+
"actual_billed_usd": null,
|
| 20 |
+
"audit_complete": true,
|
| 21 |
+
"per_response_usage": [
|
| 22 |
+
{
|
| 23 |
+
"cache_write_input_tokens": 0,
|
| 24 |
+
"cached_input_tokens": 0,
|
| 25 |
+
"input_tokens": 11259,
|
| 26 |
+
"output_tokens": 113,
|
| 27 |
+
"reasoning_output_tokens": 0
|
| 28 |
+
},
|
| 29 |
+
{
|
| 30 |
+
"cache_write_input_tokens": 0,
|
| 31 |
+
"cached_input_tokens": 0,
|
| 32 |
+
"input_tokens": 11717,
|
| 33 |
+
"output_tokens": 186,
|
| 34 |
+
"reasoning_output_tokens": 0
|
| 35 |
+
},
|
| 36 |
+
{
|
| 37 |
+
"cache_write_input_tokens": 0,
|
| 38 |
+
"cached_input_tokens": 11264,
|
| 39 |
+
"input_tokens": 15040,
|
| 40 |
+
"output_tokens": 197,
|
| 41 |
+
"reasoning_output_tokens": 26
|
| 42 |
+
},
|
| 43 |
+
{
|
| 44 |
+
"cache_write_input_tokens": 0,
|
| 45 |
+
"cached_input_tokens": 15104,
|
| 46 |
+
"input_tokens": 16092,
|
| 47 |
+
"output_tokens": 238,
|
| 48 |
+
"reasoning_output_tokens": 161
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"cache_write_input_tokens": 0,
|
| 52 |
+
"cached_input_tokens": 11776,
|
| 53 |
+
"input_tokens": 16907,
|
| 54 |
+
"output_tokens": 63,
|
| 55 |
+
"reasoning_output_tokens": 10
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"cache_write_input_tokens": 0,
|
| 59 |
+
"cached_input_tokens": 16128,
|
| 60 |
+
"input_tokens": 16999,
|
| 61 |
+
"output_tokens": 39,
|
| 62 |
+
"reasoning_output_tokens": 0
|
| 63 |
+
},
|
| 64 |
+
{
|
| 65 |
+
"cache_write_input_tokens": 0,
|
| 66 |
+
"cached_input_tokens": 16896,
|
| 67 |
+
"input_tokens": 17507,
|
| 68 |
+
"output_tokens": 42,
|
| 69 |
+
"reasoning_output_tokens": 0
|
| 70 |
+
},
|
| 71 |
+
{
|
| 72 |
+
"cache_write_input_tokens": 0,
|
| 73 |
+
"cached_input_tokens": 17408,
|
| 74 |
+
"input_tokens": 17759,
|
| 75 |
+
"output_tokens": 445,
|
| 76 |
+
"reasoning_output_tokens": 186
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"cache_write_input_tokens": 0,
|
| 80 |
+
"cached_input_tokens": 18048,
|
| 81 |
+
"input_tokens": 18723,
|
| 82 |
+
"output_tokens": 573,
|
| 83 |
+
"reasoning_output_tokens": 141
|
| 84 |
+
},
|
| 85 |
+
{
|
| 86 |
+
"cache_write_input_tokens": 0,
|
| 87 |
+
"cached_input_tokens": 16896,
|
| 88 |
+
"input_tokens": 19582,
|
| 89 |
+
"output_tokens": 1098,
|
| 90 |
+
"reasoning_output_tokens": 1060
|
| 91 |
+
},
|
| 92 |
+
{
|
| 93 |
+
"cache_write_input_tokens": 0,
|
| 94 |
+
"cached_input_tokens": 20480,
|
| 95 |
+
"input_tokens": 21126,
|
| 96 |
+
"output_tokens": 284,
|
| 97 |
+
"reasoning_output_tokens": 242
|
| 98 |
+
},
|
| 99 |
+
{
|
| 100 |
+
"cache_write_input_tokens": 0,
|
| 101 |
+
"cached_input_tokens": 21248,
|
| 102 |
+
"input_tokens": 22399,
|
| 103 |
+
"output_tokens": 322,
|
| 104 |
+
"reasoning_output_tokens": 107
|
| 105 |
+
},
|
| 106 |
+
{
|
| 107 |
+
"cache_write_input_tokens": 0,
|
| 108 |
+
"cached_input_tokens": 22528,
|
| 109 |
+
"input_tokens": 23001,
|
| 110 |
+
"output_tokens": 192,
|
| 111 |
+
"reasoning_output_tokens": 62
|
| 112 |
+
},
|
| 113 |
+
{
|
| 114 |
+
"cache_write_input_tokens": 0,
|
| 115 |
+
"cached_input_tokens": 23040,
|
| 116 |
+
"input_tokens": 23304,
|
| 117 |
+
"output_tokens": 319,
|
| 118 |
+
"reasoning_output_tokens": 217
|
| 119 |
+
},
|
| 120 |
+
{
|
| 121 |
+
"cache_write_input_tokens": 0,
|
| 122 |
+
"cached_input_tokens": 23424,
|
| 123 |
+
"input_tokens": 23788,
|
| 124 |
+
"output_tokens": 972,
|
| 125 |
+
"reasoning_output_tokens": 171
|
| 126 |
+
},
|
| 127 |
+
{
|
| 128 |
+
"cache_write_input_tokens": 0,
|
| 129 |
+
"cached_input_tokens": 24576,
|
| 130 |
+
"input_tokens": 24781,
|
| 131 |
+
"output_tokens": 121,
|
| 132 |
+
"reasoning_output_tokens": 47
|
| 133 |
+
},
|
| 134 |
+
{
|
| 135 |
+
"cache_write_input_tokens": 0,
|
| 136 |
+
"cached_input_tokens": 24704,
|
| 137 |
+
"input_tokens": 25519,
|
| 138 |
+
"output_tokens": 141,
|
| 139 |
+
"reasoning_output_tokens": 42
|
| 140 |
+
},
|
| 141 |
+
{
|
| 142 |
+
"cache_write_input_tokens": 0,
|
| 143 |
+
"cached_input_tokens": 25472,
|
| 144 |
+
"input_tokens": 26164,
|
| 145 |
+
"output_tokens": 351,
|
| 146 |
+
"reasoning_output_tokens": 246
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
"cache_write_input_tokens": 0,
|
| 150 |
+
"cached_input_tokens": 26368,
|
| 151 |
+
"input_tokens": 26749,
|
| 152 |
+
"output_tokens": 114,
|
| 153 |
+
"reasoning_output_tokens": 52
|
| 154 |
+
},
|
| 155 |
+
{
|
| 156 |
+
"cache_write_input_tokens": 0,
|
| 157 |
+
"cached_input_tokens": 26624,
|
| 158 |
+
"input_tokens": 26890,
|
| 159 |
+
"output_tokens": 560,
|
| 160 |
+
"reasoning_output_tokens": 122
|
| 161 |
+
},
|
| 162 |
+
{
|
| 163 |
+
"cache_write_input_tokens": 0,
|
| 164 |
+
"cached_input_tokens": 27264,
|
| 165 |
+
"input_tokens": 27656,
|
| 166 |
+
"output_tokens": 478,
|
| 167 |
+
"reasoning_output_tokens": 399
|
| 168 |
+
},
|
| 169 |
+
{
|
| 170 |
+
"cache_write_input_tokens": 0,
|
| 171 |
+
"cached_input_tokens": 27904,
|
| 172 |
+
"input_tokens": 28337,
|
| 173 |
+
"output_tokens": 80,
|
| 174 |
+
"reasoning_output_tokens": 0
|
| 175 |
+
},
|
| 176 |
+
{
|
| 177 |
+
"cache_write_input_tokens": 0,
|
| 178 |
+
"cached_input_tokens": 28288,
|
| 179 |
+
"input_tokens": 28788,
|
| 180 |
+
"output_tokens": 499,
|
| 181 |
+
"reasoning_output_tokens": 425
|
| 182 |
+
},
|
| 183 |
+
{
|
| 184 |
+
"cache_write_input_tokens": 0,
|
| 185 |
+
"cached_input_tokens": 29184,
|
| 186 |
+
"input_tokens": 29491,
|
| 187 |
+
"output_tokens": 60,
|
| 188 |
+
"reasoning_output_tokens": 0
|
| 189 |
+
},
|
| 190 |
+
{
|
| 191 |
+
"cache_write_input_tokens": 0,
|
| 192 |
+
"cached_input_tokens": 29440,
|
| 193 |
+
"input_tokens": 29853,
|
| 194 |
+
"output_tokens": 145,
|
| 195 |
+
"reasoning_output_tokens": 89
|
| 196 |
+
},
|
| 197 |
+
{
|
| 198 |
+
"cache_write_input_tokens": 0,
|
| 199 |
+
"cached_input_tokens": 29952,
|
| 200 |
+
"input_tokens": 30193,
|
| 201 |
+
"output_tokens": 60,
|
| 202 |
+
"reasoning_output_tokens": 0
|
| 203 |
+
},
|
| 204 |
+
{
|
| 205 |
+
"cache_write_input_tokens": 0,
|
| 206 |
+
"cached_input_tokens": 30208,
|
| 207 |
+
"input_tokens": 30472,
|
| 208 |
+
"output_tokens": 117,
|
| 209 |
+
"reasoning_output_tokens": 46
|
| 210 |
+
},
|
| 211 |
+
{
|
| 212 |
+
"cache_write_input_tokens": 0,
|
| 213 |
+
"cached_input_tokens": 30464,
|
| 214 |
+
"input_tokens": 30791,
|
| 215 |
+
"output_tokens": 80,
|
| 216 |
+
"reasoning_output_tokens": 0
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"cache_write_input_tokens": 0,
|
| 220 |
+
"cached_input_tokens": 30720,
|
| 221 |
+
"input_tokens": 31245,
|
| 222 |
+
"output_tokens": 1568,
|
| 223 |
+
"reasoning_output_tokens": 1469
|
| 224 |
+
},
|
| 225 |
+
{
|
| 226 |
+
"cache_write_input_tokens": 0,
|
| 227 |
+
"cached_input_tokens": 32640,
|
| 228 |
+
"input_tokens": 33016,
|
| 229 |
+
"output_tokens": 60,
|
| 230 |
+
"reasoning_output_tokens": 0
|
| 231 |
+
},
|
| 232 |
+
{
|
| 233 |
+
"cache_write_input_tokens": 0,
|
| 234 |
+
"cached_input_tokens": 32896,
|
| 235 |
+
"input_tokens": 33376,
|
| 236 |
+
"output_tokens": 83,
|
| 237 |
+
"reasoning_output_tokens": 29
|
| 238 |
+
},
|
| 239 |
+
{
|
| 240 |
+
"cache_write_input_tokens": 0,
|
| 241 |
+
"cached_input_tokens": 33280,
|
| 242 |
+
"input_tokens": 33653,
|
| 243 |
+
"output_tokens": 24,
|
| 244 |
+
"reasoning_output_tokens": 0
|
| 245 |
+
},
|
| 246 |
+
{
|
| 247 |
+
"cache_write_input_tokens": 0,
|
| 248 |
+
"cached_input_tokens": 33536,
|
| 249 |
+
"input_tokens": 33751,
|
| 250 |
+
"output_tokens": 99,
|
| 251 |
+
"reasoning_output_tokens": 27
|
| 252 |
+
},
|
| 253 |
+
{
|
| 254 |
+
"cache_write_input_tokens": 0,
|
| 255 |
+
"cached_input_tokens": 33664,
|
| 256 |
+
"input_tokens": 34054,
|
| 257 |
+
"output_tokens": 24,
|
| 258 |
+
"reasoning_output_tokens": 0
|
| 259 |
+
},
|
| 260 |
+
{
|
| 261 |
+
"cache_write_input_tokens": 0,
|
| 262 |
+
"cached_input_tokens": 33920,
|
| 263 |
+
"input_tokens": 34230,
|
| 264 |
+
"output_tokens": 427,
|
| 265 |
+
"reasoning_output_tokens": 345
|
| 266 |
+
},
|
| 267 |
+
{
|
| 268 |
+
"cache_write_input_tokens": 0,
|
| 269 |
+
"cached_input_tokens": 34432,
|
| 270 |
+
"input_tokens": 34671,
|
| 271 |
+
"output_tokens": 30,
|
| 272 |
+
"reasoning_output_tokens": 0
|
| 273 |
+
},
|
| 274 |
+
{
|
| 275 |
+
"cache_write_input_tokens": 0,
|
| 276 |
+
"cached_input_tokens": 34560,
|
| 277 |
+
"input_tokens": 35381,
|
| 278 |
+
"output_tokens": 516,
|
| 279 |
+
"reasoning_output_tokens": 490
|
| 280 |
+
},
|
| 281 |
+
{
|
| 282 |
+
"cache_write_input_tokens": 0,
|
| 283 |
+
"cached_input_tokens": 35712,
|
| 284 |
+
"input_tokens": 35969,
|
| 285 |
+
"output_tokens": 681,
|
| 286 |
+
"reasoning_output_tokens": 582
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"cache_write_input_tokens": 0,
|
| 290 |
+
"cached_input_tokens": 36480,
|
| 291 |
+
"input_tokens": 36853,
|
| 292 |
+
"output_tokens": 24,
|
| 293 |
+
"reasoning_output_tokens": 0
|
| 294 |
+
},
|
| 295 |
+
{
|
| 296 |
+
"cache_write_input_tokens": 0,
|
| 297 |
+
"cached_input_tokens": 36736,
|
| 298 |
+
"input_tokens": 37029,
|
| 299 |
+
"output_tokens": 54,
|
| 300 |
+
"reasoning_output_tokens": 0
|
| 301 |
+
},
|
| 302 |
+
{
|
| 303 |
+
"cache_write_input_tokens": 0,
|
| 304 |
+
"cached_input_tokens": 36864,
|
| 305 |
+
"input_tokens": 37277,
|
| 306 |
+
"output_tokens": 60,
|
| 307 |
+
"reasoning_output_tokens": 0
|
| 308 |
+
},
|
| 309 |
+
{
|
| 310 |
+
"cache_write_input_tokens": 0,
|
| 311 |
+
"cached_input_tokens": 37120,
|
| 312 |
+
"input_tokens": 37560,
|
| 313 |
+
"output_tokens": 69,
|
| 314 |
+
"reasoning_output_tokens": 0
|
| 315 |
+
},
|
| 316 |
+
{
|
| 317 |
+
"cache_write_input_tokens": 0,
|
| 318 |
+
"cached_input_tokens": 37504,
|
| 319 |
+
"input_tokens": 37829,
|
| 320 |
+
"output_tokens": 24,
|
| 321 |
+
"reasoning_output_tokens": 0
|
| 322 |
+
},
|
| 323 |
+
{
|
| 324 |
+
"cache_write_input_tokens": 0,
|
| 325 |
+
"cached_input_tokens": 37632,
|
| 326 |
+
"input_tokens": 38005,
|
| 327 |
+
"output_tokens": 1368,
|
| 328 |
+
"reasoning_output_tokens": 937
|
| 329 |
+
},
|
| 330 |
+
{
|
| 331 |
+
"cache_write_input_tokens": 0,
|
| 332 |
+
"cached_input_tokens": 39168,
|
| 333 |
+
"input_tokens": 39606,
|
| 334 |
+
"output_tokens": 567,
|
| 335 |
+
"reasoning_output_tokens": 465
|
| 336 |
+
},
|
| 337 |
+
{
|
| 338 |
+
"cache_write_input_tokens": 0,
|
| 339 |
+
"cached_input_tokens": 39936,
|
| 340 |
+
"input_tokens": 40373,
|
| 341 |
+
"output_tokens": 52,
|
| 342 |
+
"reasoning_output_tokens": 0
|
| 343 |
+
},
|
| 344 |
+
{
|
| 345 |
+
"cache_write_input_tokens": 0,
|
| 346 |
+
"cached_input_tokens": 40192,
|
| 347 |
+
"input_tokens": 40618,
|
| 348 |
+
"output_tokens": 24,
|
| 349 |
+
"reasoning_output_tokens": 0
|
| 350 |
+
},
|
| 351 |
+
{
|
| 352 |
+
"cache_write_input_tokens": 0,
|
| 353 |
+
"cached_input_tokens": 40448,
|
| 354 |
+
"input_tokens": 40715,
|
| 355 |
+
"output_tokens": 90,
|
| 356 |
+
"reasoning_output_tokens": 18
|
| 357 |
+
},
|
| 358 |
+
{
|
| 359 |
+
"cache_write_input_tokens": 0,
|
| 360 |
+
"cached_input_tokens": 40576,
|
| 361 |
+
"input_tokens": 41007,
|
| 362 |
+
"output_tokens": 24,
|
| 363 |
+
"reasoning_output_tokens": 0
|
| 364 |
+
},
|
| 365 |
+
{
|
| 366 |
+
"cache_write_input_tokens": 0,
|
| 367 |
+
"cached_input_tokens": 40832,
|
| 368 |
+
"input_tokens": 41181,
|
| 369 |
+
"output_tokens": 114,
|
| 370 |
+
"reasoning_output_tokens": 88
|
| 371 |
+
},
|
| 372 |
+
{
|
| 373 |
+
"cache_write_input_tokens": 0,
|
| 374 |
+
"cached_input_tokens": 41216,
|
| 375 |
+
"input_tokens": 41444,
|
| 376 |
+
"output_tokens": 226,
|
| 377 |
+
"reasoning_output_tokens": 126
|
| 378 |
+
},
|
| 379 |
+
{
|
| 380 |
+
"cache_write_input_tokens": 0,
|
| 381 |
+
"cached_input_tokens": 41600,
|
| 382 |
+
"input_tokens": 41684,
|
| 383 |
+
"output_tokens": 82,
|
| 384 |
+
"reasoning_output_tokens": 0
|
| 385 |
+
},
|
| 386 |
+
{
|
| 387 |
+
"cache_write_input_tokens": 0,
|
| 388 |
+
"cached_input_tokens": 41728,
|
| 389 |
+
"input_tokens": 42904,
|
| 390 |
+
"output_tokens": 826,
|
| 391 |
+
"reasoning_output_tokens": 397
|
| 392 |
+
},
|
| 393 |
+
{
|
| 394 |
+
"cache_write_input_tokens": 0,
|
| 395 |
+
"cached_input_tokens": 43648,
|
| 396 |
+
"input_tokens": 43901,
|
| 397 |
+
"output_tokens": 430,
|
| 398 |
+
"reasoning_output_tokens": 357
|
| 399 |
+
},
|
| 400 |
+
{
|
| 401 |
+
"cache_write_input_tokens": 0,
|
| 402 |
+
"cached_input_tokens": 44160,
|
| 403 |
+
"input_tokens": 44534,
|
| 404 |
+
"output_tokens": 80,
|
| 405 |
+
"reasoning_output_tokens": 0
|
| 406 |
+
},
|
| 407 |
+
{
|
| 408 |
+
"cache_write_input_tokens": 0,
|
| 409 |
+
"cached_input_tokens": 44416,
|
| 410 |
+
"input_tokens": 44986,
|
| 411 |
+
"output_tokens": 1895,
|
| 412 |
+
"reasoning_output_tokens": 1796
|
| 413 |
+
},
|
| 414 |
+
{
|
| 415 |
+
"cache_write_input_tokens": 0,
|
| 416 |
+
"cached_input_tokens": 46720,
|
| 417 |
+
"input_tokens": 47019,
|
| 418 |
+
"output_tokens": 952,
|
| 419 |
+
"reasoning_output_tokens": 264
|
| 420 |
+
},
|
| 421 |
+
{
|
| 422 |
+
"cache_write_input_tokens": 0,
|
| 423 |
+
"cached_input_tokens": 47744,
|
| 424 |
+
"input_tokens": 47994,
|
| 425 |
+
"output_tokens": 82,
|
| 426 |
+
"reasoning_output_tokens": 12
|
| 427 |
+
}
|
| 428 |
+
],
|
| 429 |
+
"pricing": {
|
| 430 |
+
"model": "openai/gpt-6-sol",
|
| 431 |
+
"currency": "USD",
|
| 432 |
+
"verified_date": "2026-10-28",
|
| 433 |
+
"source": "https://developers.openai.com/api/docs/models/gpt-6-sol",
|
| 434 |
+
"basis": "Standard API-equivalent estimate; actual subscription billing is unavailable",
|
| 435 |
+
"per_million_tokens": {
|
| 436 |
+
"fresh_input": 2.0,
|
| 437 |
+
"cache_read": 0.2,
|
| 438 |
+
"cache_write": 2.5,
|
| 439 |
+
"output": 10.0
|
| 440 |
+
},
|
| 441 |
+
"long_context_threshold": 272000,
|
| 442 |
+
"long_context_multipliers": {
|
| 443 |
+
"fresh_input": 2.0,
|
| 444 |
+
"cache_read": 2.0,
|
| 445 |
+
"cache_write": 2.0,
|
| 446 |
+
"output": 1.5
|
| 447 |
+
}
|
| 448 |
+
},
|
| 449 |
+
"gpu_cost_usd": null
|
| 450 |
+
}
|
data/b1/verdict.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"success": false,
|
| 3 |
+
"valid": true,
|
| 4 |
+
"evidence_valid": true,
|
| 5 |
+
"steps": 605,
|
| 6 |
+
"step_limit": 605,
|
| 7 |
+
"reason": "step_limit",
|
| 8 |
+
"simulation_time_s": 29.999999999994113,
|
| 9 |
+
"initialization": {
|
| 10 |
+
"init_state_index": 0,
|
| 11 |
+
"initialization_frames": 5
|
| 12 |
+
},
|
| 13 |
+
"execution": {
|
| 14 |
+
"status": "finished",
|
| 15 |
+
"reason": null
|
| 16 |
+
}
|
| 17 |
+
}
|
data/b1/video.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:6879be037df0d6f285572f0f75c2d82edcace427504c1c942be45fb8415d7a8e
|
| 3 |
+
size 3101153
|
data/b2/artifacts/.kinex/memos/libero-spatial-bowl.md
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# LIBERO spatial bowl-to-plate
|
| 2 |
+
|
| 3 |
+
For `libero/libero-spatial-01`, the initial agentview image showed the target akita black patterned bowl between the small metal ramekin and striped plate (near pixel 190,149 in 256x256); a second bowl sat farther right (near 220,125). The frozen `vla.execute` accepts direct device args `instruction`, unique `invocation_id`, `max_control_steps`, `timeout_wall_s` (not a nested `request`). Use the user's natural-language instruction and inspect fresh agentview/wrist images after execution. In this episode the full instruction caused `episode_ended` after 79 control steps at world time 3.95s, with wrist view showing the bowl overlapping the plate. The native verdict is only available to the owner; do not infer semantic completion from the service response. Do not attempt further movement after terminal status.
|
data/b2/detail.json
CHANGED
|
@@ -1,4 +1,146 @@
|
|
| 1 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
"calls": [
|
| 3 |
{
|
| 4 |
"input": {
|
|
|
|
| 1 |
{
|
| 2 |
+
"instruction": "# Task: libero/libero-spatial-01\n\nPick the akita black bowl between the plate and the ramekin and place it in the center of the plate\n\n## Work to do\n\nSolve the task efficiently using the running rosbridge environment. Follow the\ntask instruction above, including its completion requirements. Read `harness.md`\nand the device profiles for public interfaces, units and calibrated frames.\nReuse your saved tools, skills, and memos.\n\n## Limits\n\nThe episode has 605 native steps including five initialization frames; 600 control steps remain. Use the frozen VLA device's `execute` operation for physical manipulation. Give a nonempty instruction, a unique invocation_id, max_control_steps and timeout_wall_s. The executor consumes the same shared native budget at 20 Hz. It does not reset or grant a new episode. Inspect allowed observations and choose whether to delegate the whole task or a subtask. Plan and revise when useful; neither decomposition nor full-task delegation is required. A call-budget return is not semantic completion. There is no progress monitor. Inspect new camera images before deciding what to do next. No model-decision cap is imposed. Do not launch or reset a simulation.\n\n## Completion\n\nReturn when finished. The owner finalizes the episode and reads its native\nverdict. An interrupted or rejected wait does not establish task success. The\nnative step limit stops physics even if your requested wait is longer.\n\n## Saved resources\n\nMaintain reusable code in `.kinex/tools/`, skills in `.kinex/skills/`, and concise working notes\nin `.kinex/memos/`. Improve existing files in place as you learn, replacing outdated\ncontent. Create a new file only when no existing resource fits; do not create\nper-attempt reflections or numbered copies. These files persist across fresh\nconversations. Update them before finishing your response.\n\n## Robot and device access\n\nUse Kinex's ROS device profiles in `.kinex/devices/` and the robot\nspecification in `.kinex/workspace.yaml`. The adapter refreshes them each episode.\nUse `kinex.communication` for typed topic publication, subscriptions and service\nrequests. Inspect operation schemas before acting. Load the provided devices;\nthey borrow the running simulator. Stop holds motion; it does not reset the world.\nImprove existing tools, skills, and memos in place.\n\n",
|
| 3 |
+
"artifacts": [
|
| 4 |
+
{
|
| 5 |
+
"name": ".kinex/memos/libero-spatial-bowl.md",
|
| 6 |
+
"file": "data/b2/artifacts/.kinex/memos/libero-spatial-bowl.md",
|
| 7 |
+
"bytes": 851,
|
| 8 |
+
"sha256": "823f8e5d3bee9874a7b1c7aec5024e478563cd65e27eb000f443f6ed6fd99795"
|
| 9 |
+
}
|
| 10 |
+
],
|
| 11 |
+
"media": {
|
| 12 |
+
"schema": "programvla.media.v1",
|
| 13 |
+
"passed": true,
|
| 14 |
+
"speed": 4,
|
| 15 |
+
"width": 1440,
|
| 16 |
+
"height": 720,
|
| 17 |
+
"source_fps": 10.0,
|
| 18 |
+
"output_fps": 40,
|
| 19 |
+
"native_frames": 41,
|
| 20 |
+
"published_frames": 41,
|
| 21 |
+
"all_frames_compared": 41,
|
| 22 |
+
"minimum_frame_psnr_db": 39.191235664806264,
|
| 23 |
+
"duration_s": 1.025,
|
| 24 |
+
"source_sample_coverage": 1.0,
|
| 25 |
+
"terminal_frame_retained": true,
|
| 26 |
+
"source_dropped_samples": 0,
|
| 27 |
+
"pts_verified": true,
|
| 28 |
+
"decode_ok": true,
|
| 29 |
+
"sha256": "6a3db4cd43f3d7b2a6b16e3c28591efc8f48893e81a54cc6696e92de02221dab",
|
| 30 |
+
"source_sha256": {
|
| 31 |
+
"third_person.mp4": "29b64adef464a7acd86250806a9a1c1dd463798e038b5c6444daf2aede547a0d",
|
| 32 |
+
"wrist.mp4": "7dc3fd735118c5ddaa7fd6792dee485e44991bca88fea26f0fd357c8ecb83f95"
|
| 33 |
+
},
|
| 34 |
+
"frame_mapping": "Each source sample once, third-person left and wrist right.",
|
| 35 |
+
"reference_style": "RLE-Bench/kinex-benchmark-native-budget-with-robobridge"
|
| 36 |
+
},
|
| 37 |
+
"accounting": {
|
| 38 |
+
"input_tokens": 135208,
|
| 39 |
+
"output_tokens": 1311,
|
| 40 |
+
"total_tokens": 136519,
|
| 41 |
+
"tokens": {
|
| 42 |
+
"fresh_input": 16936,
|
| 43 |
+
"cache_read": 118272,
|
| 44 |
+
"cache_write": 0,
|
| 45 |
+
"output": 1311
|
| 46 |
+
},
|
| 47 |
+
"cost_breakdown_usd": {
|
| 48 |
+
"fresh_input": 0.033872,
|
| 49 |
+
"cache_read": 0.023654400000000003,
|
| 50 |
+
"cache_write": 0.0,
|
| 51 |
+
"output": 0.013109999999999998
|
| 52 |
+
},
|
| 53 |
+
"response_count": 9,
|
| 54 |
+
"estimated_api_equivalent_usd": 0.0706364,
|
| 55 |
+
"actual_billed_usd": null,
|
| 56 |
+
"audit_complete": true,
|
| 57 |
+
"per_response_usage": [
|
| 58 |
+
{
|
| 59 |
+
"cache_write_input_tokens": 0,
|
| 60 |
+
"cached_input_tokens": 0,
|
| 61 |
+
"input_tokens": 11285,
|
| 62 |
+
"output_tokens": 118,
|
| 63 |
+
"reasoning_output_tokens": 8
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"cache_write_input_tokens": 0,
|
| 67 |
+
"cached_input_tokens": 11264,
|
| 68 |
+
"input_tokens": 11596,
|
| 69 |
+
"output_tokens": 288,
|
| 70 |
+
"reasoning_output_tokens": 0
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"cache_write_input_tokens": 0,
|
| 74 |
+
"cached_input_tokens": 11776,
|
| 75 |
+
"input_tokens": 15177,
|
| 76 |
+
"output_tokens": 52,
|
| 77 |
+
"reasoning_output_tokens": 11
|
| 78 |
+
},
|
| 79 |
+
{
|
| 80 |
+
"cache_write_input_tokens": 0,
|
| 81 |
+
"cached_input_tokens": 15104,
|
| 82 |
+
"input_tokens": 15513,
|
| 83 |
+
"output_tokens": 123,
|
| 84 |
+
"reasoning_output_tokens": 81
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"cache_write_input_tokens": 0,
|
| 88 |
+
"cached_input_tokens": 15488,
|
| 89 |
+
"input_tokens": 15825,
|
| 90 |
+
"output_tokens": 220,
|
| 91 |
+
"reasoning_output_tokens": 137
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"cache_write_input_tokens": 0,
|
| 95 |
+
"cached_input_tokens": 15872,
|
| 96 |
+
"input_tokens": 16071,
|
| 97 |
+
"output_tokens": 91,
|
| 98 |
+
"reasoning_output_tokens": 14
|
| 99 |
+
},
|
| 100 |
+
{
|
| 101 |
+
"cache_write_input_tokens": 0,
|
| 102 |
+
"cached_input_tokens": 16000,
|
| 103 |
+
"input_tokens": 16238,
|
| 104 |
+
"output_tokens": 61,
|
| 105 |
+
"reasoning_output_tokens": 20
|
| 106 |
+
},
|
| 107 |
+
{
|
| 108 |
+
"cache_write_input_tokens": 0,
|
| 109 |
+
"cached_input_tokens": 16128,
|
| 110 |
+
"input_tokens": 16588,
|
| 111 |
+
"output_tokens": 302,
|
| 112 |
+
"reasoning_output_tokens": 80
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"cache_write_input_tokens": 0,
|
| 116 |
+
"cached_input_tokens": 16640,
|
| 117 |
+
"input_tokens": 16915,
|
| 118 |
+
"output_tokens": 56,
|
| 119 |
+
"reasoning_output_tokens": 0
|
| 120 |
+
}
|
| 121 |
+
],
|
| 122 |
+
"pricing": {
|
| 123 |
+
"model": "openai/gpt-6-sol",
|
| 124 |
+
"currency": "USD",
|
| 125 |
+
"verified_date": "2026-10-28",
|
| 126 |
+
"source": "https://developers.openai.com/api/docs/models/gpt-6-sol",
|
| 127 |
+
"basis": "Standard API-equivalent estimate; actual subscription billing is unavailable",
|
| 128 |
+
"per_million_tokens": {
|
| 129 |
+
"fresh_input": 2.0,
|
| 130 |
+
"cache_read": 0.2,
|
| 131 |
+
"cache_write": 2.5,
|
| 132 |
+
"output": 10.0
|
| 133 |
+
},
|
| 134 |
+
"long_context_threshold": 272000,
|
| 135 |
+
"long_context_multipliers": {
|
| 136 |
+
"fresh_input": 2.0,
|
| 137 |
+
"cache_read": 2.0,
|
| 138 |
+
"cache_write": 2.0,
|
| 139 |
+
"output": 1.5
|
| 140 |
+
}
|
| 141 |
+
},
|
| 142 |
+
"gpu_cost_usd": null
|
| 143 |
+
},
|
| 144 |
"calls": [
|
| 145 |
{
|
| 146 |
"input": {
|
data/b2/frame-mapping.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"source_stamp_ns": [
|
| 3 |
+
0,
|
| 4 |
+
100000000,
|
| 5 |
+
200000000,
|
| 6 |
+
300000000,
|
| 7 |
+
400000000,
|
| 8 |
+
500000000,
|
| 9 |
+
600000000,
|
| 10 |
+
700000000,
|
| 11 |
+
800000000,
|
| 12 |
+
900000000,
|
| 13 |
+
1000000000,
|
| 14 |
+
1100000000,
|
| 15 |
+
1200000000,
|
| 16 |
+
1300000000,
|
| 17 |
+
1400000000,
|
| 18 |
+
1500000000,
|
| 19 |
+
1600000000,
|
| 20 |
+
1700000000,
|
| 21 |
+
1800000000,
|
| 22 |
+
1900000000,
|
| 23 |
+
2000000000,
|
| 24 |
+
2100000000,
|
| 25 |
+
2200000000,
|
| 26 |
+
2300000000,
|
| 27 |
+
2400000000,
|
| 28 |
+
2500000000,
|
| 29 |
+
2600000000,
|
| 30 |
+
2700000000,
|
| 31 |
+
2800000000,
|
| 32 |
+
2900000000,
|
| 33 |
+
3000000000,
|
| 34 |
+
3100000000,
|
| 35 |
+
3200000000,
|
| 36 |
+
3300000000,
|
| 37 |
+
3400000000,
|
| 38 |
+
3500000000,
|
| 39 |
+
3600000000,
|
| 40 |
+
3700000000,
|
| 41 |
+
3800000000,
|
| 42 |
+
3900000000,
|
| 43 |
+
3950000000
|
| 44 |
+
],
|
| 45 |
+
"output_fps": 40
|
| 46 |
+
}
|
data/b2/instruction.txt
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Task: libero/libero-spatial-01
|
| 2 |
+
|
| 3 |
+
Pick the akita black bowl between the plate and the ramekin and place it in the center of the plate
|
| 4 |
+
|
| 5 |
+
## Work to do
|
| 6 |
+
|
| 7 |
+
Solve the task efficiently using the running rosbridge environment. Follow the
|
| 8 |
+
task instruction above, including its completion requirements. Read `harness.md`
|
| 9 |
+
and the device profiles for public interfaces, units and calibrated frames.
|
| 10 |
+
Reuse your saved tools, skills, and memos.
|
| 11 |
+
|
| 12 |
+
## Limits
|
| 13 |
+
|
| 14 |
+
The episode has 605 native steps including five initialization frames; 600 control steps remain. Use the frozen VLA device's `execute` operation for physical manipulation. Give a nonempty instruction, a unique invocation_id, max_control_steps and timeout_wall_s. The executor consumes the same shared native budget at 20 Hz. It does not reset or grant a new episode. Inspect allowed observations and choose whether to delegate the whole task or a subtask. Plan and revise when useful; neither decomposition nor full-task delegation is required. A call-budget return is not semantic completion. There is no progress monitor. Inspect new camera images before deciding what to do next. No model-decision cap is imposed. Do not launch or reset a simulation.
|
| 15 |
+
|
| 16 |
+
## Completion
|
| 17 |
+
|
| 18 |
+
Return when finished. The owner finalizes the episode and reads its native
|
| 19 |
+
verdict. An interrupted or rejected wait does not establish task success. The
|
| 20 |
+
native step limit stops physics even if your requested wait is longer.
|
| 21 |
+
|
| 22 |
+
## Saved resources
|
| 23 |
+
|
| 24 |
+
Maintain reusable code in `.kinex/tools/`, skills in `.kinex/skills/`, and concise working notes
|
| 25 |
+
in `.kinex/memos/`. Improve existing files in place as you learn, replacing outdated
|
| 26 |
+
content. Create a new file only when no existing resource fits; do not create
|
| 27 |
+
per-attempt reflections or numbered copies. These files persist across fresh
|
| 28 |
+
conversations. Update them before finishing your response.
|
| 29 |
+
|
| 30 |
+
## Robot and device access
|
| 31 |
+
|
| 32 |
+
Use Kinex's ROS device profiles in `.kinex/devices/` and the robot
|
| 33 |
+
specification in `.kinex/workspace.yaml`. The adapter refreshes them each episode.
|
| 34 |
+
Use `kinex.communication` for typed topic publication, subscriptions and service
|
| 35 |
+
requests. Inspect operation schemas before acting. Load the provided devices;
|
| 36 |
+
they borrow the running simulator. Stop holds motion; it does not reset the world.
|
| 37 |
+
Improve existing tools, skills, and memos in place.
|
| 38 |
+
|
data/b2/media.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"schema": "programvla.media.v1",
|
| 3 |
+
"passed": true,
|
| 4 |
+
"speed": 4,
|
| 5 |
+
"width": 1440,
|
| 6 |
+
"height": 720,
|
| 7 |
+
"source_fps": 10.0,
|
| 8 |
+
"output_fps": 40,
|
| 9 |
+
"native_frames": 41,
|
| 10 |
+
"published_frames": 41,
|
| 11 |
+
"all_frames_compared": 41,
|
| 12 |
+
"minimum_frame_psnr_db": 39.191235664806264,
|
| 13 |
+
"duration_s": 1.025,
|
| 14 |
+
"source_sample_coverage": 1.0,
|
| 15 |
+
"terminal_frame_retained": true,
|
| 16 |
+
"source_dropped_samples": 0,
|
| 17 |
+
"pts_verified": true,
|
| 18 |
+
"decode_ok": true,
|
| 19 |
+
"sha256": "6a3db4cd43f3d7b2a6b16e3c28591efc8f48893e81a54cc6696e92de02221dab",
|
| 20 |
+
"source_sha256": {
|
| 21 |
+
"third_person.mp4": "29b64adef464a7acd86250806a9a1c1dd463798e038b5c6444daf2aede547a0d",
|
| 22 |
+
"wrist.mp4": "7dc3fd735118c5ddaa7fd6792dee485e44991bca88fea26f0fd357c8ecb83f95"
|
| 23 |
+
},
|
| 24 |
+
"frame_mapping": "Each source sample once, third-person left and wrist right.",
|
| 25 |
+
"reference_style": "RLE-Bench/kinex-benchmark-native-budget-with-robobridge"
|
| 26 |
+
}
|
data/b2/poster.jpg
ADDED
|
Git LFS Details
|
data/b2/terminal.jpg
ADDED
|
Git LFS Details
|
data/b2/tool-calls.json
ADDED
|
@@ -0,0 +1,349 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"id": "tool-001",
|
| 4 |
+
"name": "read",
|
| 5 |
+
"arguments": {
|
| 6 |
+
"path": "harness.md",
|
| 7 |
+
"offset": null,
|
| 8 |
+
"limit": null
|
| 9 |
+
},
|
| 10 |
+
"timestamp": 1793160977807,
|
| 11 |
+
"result": [
|
| 12 |
+
{
|
| 13 |
+
"type": "text",
|
| 14 |
+
"text": "Kinex's public ROS profiles are in `.kinex/devices/`. The frozen VLA is a borrowed model device. It takes language, consumes native control steps, and returns execution status. Use cameras and public calibration for observation. No numeric target or learned semantic-completion signal is supported. The arm and gripper write operations are owned by the VLA executor.\n"
|
| 15 |
+
}
|
| 16 |
+
]
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"id": "tool-002",
|
| 20 |
+
"name": "ls",
|
| 21 |
+
"arguments": {
|
| 22 |
+
"path": ".kinex",
|
| 23 |
+
"limit": 500
|
| 24 |
+
},
|
| 25 |
+
"timestamp": 1793160977807,
|
| 26 |
+
"result": [
|
| 27 |
+
{
|
| 28 |
+
"type": "text",
|
| 29 |
+
"text": "devices/\nkinex.json\nmemos/\npython/\nskills/\ntools/\nworkspace.yaml"
|
| 30 |
+
}
|
| 31 |
+
]
|
| 32 |
+
},
|
| 33 |
+
{
|
| 34 |
+
"id": "tool-003",
|
| 35 |
+
"name": "find",
|
| 36 |
+
"arguments": {
|
| 37 |
+
"pattern": ".kinex/devices/**/profile.yaml"
|
| 38 |
+
},
|
| 39 |
+
"timestamp": 1793160977807,
|
| 40 |
+
"result": [
|
| 41 |
+
{
|
| 42 |
+
"type": "text",
|
| 43 |
+
"text": ".kinex/devices/arm/profile.yaml\n.kinex/devices/camera_agentview/profile.yaml\n.kinex/devices/camera_wrist/profile.yaml\n.kinex/devices/gripper/profile.yaml\n.kinex/devices/vla/profile.yaml\n.kinex/devices/world/profile.yaml"
|
| 44 |
+
}
|
| 45 |
+
]
|
| 46 |
+
},
|
| 47 |
+
{
|
| 48 |
+
"id": "tool-004",
|
| 49 |
+
"name": "find",
|
| 50 |
+
"arguments": {
|
| 51 |
+
"pattern": ".kinex/{tools,skills,memos}/**/*"
|
| 52 |
+
},
|
| 53 |
+
"timestamp": 1793160977807,
|
| 54 |
+
"result": [
|
| 55 |
+
{
|
| 56 |
+
"type": "text",
|
| 57 |
+
"text": "No files found matching pattern"
|
| 58 |
+
}
|
| 59 |
+
]
|
| 60 |
+
},
|
| 61 |
+
{
|
| 62 |
+
"id": "tool-005",
|
| 63 |
+
"name": "read",
|
| 64 |
+
"arguments": {
|
| 65 |
+
"path": ".kinex/devices/vla/profile.yaml",
|
| 66 |
+
"offset": null,
|
| 67 |
+
"limit": null
|
| 68 |
+
},
|
| 69 |
+
"timestamp": 1793160980431,
|
| 70 |
+
"result": [
|
| 71 |
+
{
|
| 72 |
+
"type": "text",
|
| 73 |
+
"text": "name: vla\ntype: model\ndescription: Frozen LIBERO manipulation policy. Executes a local language instruction\n for a bounded number of control steps. Returns execution status; semantic completion\n is unavailable. Inspect fresh camera measurements after a call. Numeric goal conditioning\n is not trained.\nruntime:\n domain_id: 83\n nodes: []\n ready_timeout_s: 30\nloaded: true\nsource: default\nmethod: unknown\ncalibrated_at: null\nmeta:\n created_at: '2026-10-27T00:00:00Z'\n updated_at: '2026-10-27T00:00:00Z'\nfamily: starvla_oft\ncompute:\n kind: remote\nartifacts: []\noperations:\n execute:\n description: Execute instruction, a nonempty local manipulation instruction. Required\n invocation_id must be unique in this episode. Optional max_control_steps (default\n 40) and timeout_wall_s (default 120) bound execution; they do not change policy\n speed. Schema is programvla.invocation.v1. No completion monitor.\n transport: service\n direction: input\n endpoint: /vla/execute\n type: kinex_interfaces/srv/Json\n timeout_s: 180\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n stop:\n description: Cancel the active invocation and discard pending actions.\n transport: service\n direction: input\n endpoint: /vla/stop\n type: std_srvs/srv/Trigger\n timeout_s: 10\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n"
|
| 74 |
+
}
|
| 75 |
+
]
|
| 76 |
+
},
|
| 77 |
+
{
|
| 78 |
+
"id": "tool-006",
|
| 79 |
+
"name": "read",
|
| 80 |
+
"arguments": {
|
| 81 |
+
"path": ".kinex/devices/camera_agentview/profile.yaml",
|
| 82 |
+
"offset": null,
|
| 83 |
+
"limit": null
|
| 84 |
+
},
|
| 85 |
+
"timestamp": 1793160980431,
|
| 86 |
+
"result": [
|
| 87 |
+
{
|
| 88 |
+
"type": "text",
|
| 89 |
+
"text": "name: camera_agentview\nruntime:\n domain_id: 83\n nodes: []\n ready_timeout_s: 30\noperations:\n image:\n description: RGB image measurements with encoding, dimensions, row stride and\n acquisition timestamp in the Image header. The frame_id identifies the calibrated\n optical frame; use its stamp for tf2 lookup. A new subscriber receives the current\n frame at once, also while the world is paused, then one per camera sample; reading\n never advances world time.\n transport: topic\n direction: output\n endpoint: /camera_agentview/image\n type: sensor_msgs/msg/Image\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n timeout_s: 10\n camera_info:\n description: Projection and distortion calibration for the image stream, including\n K, D, image size and optical frame. Use the declared distortion model and raw/rectified\n image space when projecting pixels; intrinsics are not TF transforms.\n transport: topic\n direction: output\n endpoint: /camera_agentview/camera_info\n type: sensor_msgs/msg/CameraInfo\n qos:\n depth: 1\n reliability: reliable\n durability: transient_local\n timeout_s: 10\nloaded: true\nmeta:\n created_at: '2026-10-19T00:00:00Z'\n updated_at: '2026-10-20T17:24:01.453Z'\ntype: rgb\ndescription: Fixed RGB camera observing the tabletop scene. Image calibration and\n the optical-frame mount are in the profile. Images are measurements at world-clock\n acquisition timestamps.\nsource: introspected\nmethod: introspection\ncalibrated_at: null\ncolor:\n width: 256\n height: 256\n fps: null\n projection:\n model: pinhole\n fx: 309.01933598375615\n fy: 309.01933598375615\n cx: 127.5\n cy: 127.5\n skew: 0\n distortion:\n model: none\n fov:\n horizontal_deg: 45.00000000000001\n vertical_deg: 45.00000000000001\nframes:\n base:\n translation_m:\n - 0.658613174683\n - 0.0\n - 1.610350024037\n rotation_xyzw:\n - 0.638017721229\n - 0.638017721229\n - -0.304849838016\n - -0.304849718806\n parent: world:base\n"
|
| 90 |
+
}
|
| 91 |
+
]
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"id": "tool-007",
|
| 95 |
+
"name": "read",
|
| 96 |
+
"arguments": {
|
| 97 |
+
"path": ".kinex/devices/camera_wrist/profile.yaml",
|
| 98 |
+
"offset": null,
|
| 99 |
+
"limit": null
|
| 100 |
+
},
|
| 101 |
+
"timestamp": 1793160980431,
|
| 102 |
+
"result": [
|
| 103 |
+
{
|
| 104 |
+
"type": "text",
|
| 105 |
+
"text": "name: camera_wrist\nruntime:\n domain_id: 83\n nodes: []\n ready_timeout_s: 30\noperations:\n image:\n description: RGB image measurements with encoding, dimensions, row stride and\n acquisition timestamp in the Image header. The frame_id identifies the calibrated\n optical frame; use its stamp for tf2 lookup. A new subscriber receives the current\n frame at once, also while the world is paused, then one per camera sample; reading\n never advances world time.\n transport: topic\n direction: output\n endpoint: /camera_wrist/image\n type: sensor_msgs/msg/Image\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n timeout_s: 10\n camera_info:\n description: Projection and distortion calibration for the image stream, including\n K, D, image size and optical frame. Use the declared distortion model and raw/rectified\n image space when projecting pixels; intrinsics are not TF transforms.\n transport: topic\n direction: output\n endpoint: /camera_wrist/camera_info\n type: sensor_msgs/msg/CameraInfo\n qos:\n depth: 1\n reliability: reliable\n durability: transient_local\n timeout_s: 10\nloaded: true\nmeta:\n created_at: '2026-10-19T00:00:00Z'\n updated_at: '2026-10-20T17:24:01.464Z'\ntype: rgb\ndescription: Wrist-mounted RGB camera moving with the arm. Use the image acquisition\n timestamp when looking up its optical-frame transform; calibration and mounting\n facts are in the profile.\nsource: introspected\nmethod: introspection\ncalibrated_at: '2026-10-20T17:21:08.827172Z'\ncolor:\n width: 256\n height: 256\n fps: null\n projection:\n model: pinhole\n fx: 166.81284772367434\n fy: 166.81284772367434\n cx: 127.5\n cy: 127.5\n skew: 0\n distortion:\n model: none\n fov:\n horizontal_deg: 75.00000000000001\n vertical_deg: 75.00000000000001\nframes:\n base:\n translation_m:\n - 0.04999999999999985\n - -3.469446951953614e-18\n - -2.220446049250313e-16\n rotation_xyzw:\n - 1.7326215608522153e-17\n - 4.52321557921596e-18\n - 0.7071067811865476\n - 0.7071067811865475\n parent: arm:flange\n"
|
| 106 |
+
}
|
| 107 |
+
]
|
| 108 |
+
},
|
| 109 |
+
{
|
| 110 |
+
"id": "tool-008",
|
| 111 |
+
"name": "read",
|
| 112 |
+
"arguments": {
|
| 113 |
+
"path": ".kinex/devices/world/profile.yaml",
|
| 114 |
+
"offset": null,
|
| 115 |
+
"limit": null
|
| 116 |
+
},
|
| 117 |
+
"timestamp": 1793160980431,
|
| 118 |
+
"result": [
|
| 119 |
+
{
|
| 120 |
+
"type": "text",
|
| 121 |
+
"text": "name: world\nruntime:\n domain_id: 83\n observation: time\n nodes: []\n ready_timeout_s: 30\noperations:\n time:\n description: Authoritative world clock\n transport: topic\n direction: output\n endpoint: /clock\n type: rosgraph_msgs/msg/Clock\n qos:\n depth: 1\n reliability: reliable\n durability: transient_local\n timeout_s: 10\n wait:\n description: Advance or await duration_s of world time (finite and nonnegative).\n Zero is an observation barrier. Waits are sequential; one requested while another\n is pending is rejected. A terminal episode rejects further progression without\n exposing benchmark results.\n transport: service\n direction: input\n endpoint: /world/wait\n type: kinex_interfaces/srv/Wait\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n timeout_s: 120\n stop:\n description: Cancel the pending wait.\n transport: service\n direction: input\n endpoint: /world/stop\n type: std_srvs/srv/Trigger\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n timeout_s: 10\nloaded: true\nmeta:\n created_at: '2026-10-19T00:00:00Z'\n updated_at: '2026-10-20T17:24:01.458Z'\ntype: world\ndescription: Scene reference and authoritative world clock. Bounds and surfaces describe\n known scene geometry. Kinex supplies frame transforms independently. This device\n exposes no task instructions or evaluator results.\nsource: default\nmethod: unknown\ncalibrated_at: null\nbounds: null\nsurfaces: []\nframes:\n base:\n parent: null\n translation_m: null\n rotation_xyzw: null\n"
|
| 122 |
+
}
|
| 123 |
+
]
|
| 124 |
+
},
|
| 125 |
+
{
|
| 126 |
+
"id": "tool-009",
|
| 127 |
+
"name": "read",
|
| 128 |
+
"arguments": {
|
| 129 |
+
"path": ".kinex/devices/arm/profile.yaml",
|
| 130 |
+
"offset": null,
|
| 131 |
+
"limit": null
|
| 132 |
+
},
|
| 133 |
+
"timestamp": 1793160980431,
|
| 134 |
+
"result": [
|
| 135 |
+
{
|
| 136 |
+
"type": "text",
|
| 137 |
+
"text": "name: arm\nruntime:\n domain_id: 83\n nodes:\n - entry: links.py\n factory: create\n ready_timeout_s: 30\noperations:\n joint_state:\n description: Measured joint positions with joint names and world-clock acquisition\n stamp. Positions are radians for the arm and metres for finger joints; do not\n infer motion completion from a sent command.\n transport: topic\n direction: output\n endpoint: /arm/joint_state\n type: sensor_msgs/msg/JointState\n qos:\n depth: 1\n reliability: reliable\n durability: transient_local\n timeout_s: 10\n stop:\n description: Stop arm motion and hold the measured posture.\n transport: service\n direction: input\n endpoint: /arm/stop\n type: std_srvs/srv/Trigger\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n timeout_s: 10\nloaded: true\nmeta:\n created_at: '2026-10-19T00:00:00Z'\n updated_at: '2026-10-20T17:24:01.462Z'\ntype: joint\ndescription: Panda seven-joint manipulator mounted in the tabletop workspace. Geometry\n is the sibling arm.urdf with flange as the tip link; measured links are on TF as\n arm/<link>, and helpers.joint_model('arm') computes FK/IK from it. rosbridge rejects\n targets outside the URDF joint limits.\nsource: introspected\ncalibrated_at: null\nmethod: introspection\nmodel:\n format: urdf\n path: arm.urdf\n base_link: base_link\n tip_link: flange\nlimits: native\nhome:\n robot0_joint1: 0\n robot0_joint2: -0.161037389\n robot0_joint3: 0\n robot0_joint4: -2.44459747\n robot0_joint5: 0\n robot0_joint6: 2.2267522\n robot0_joint7: 0.785398163397\nstop:\n behavior: hold\n affected_devices:\n - arm\nframes:\n base:\n translation_m:\n - -0.66\n - 0.0\n - 0.912\n rotation_xyzw:\n - 0.0\n - 0.0\n - 0.0\n - 1.0\n parent: world:base\n"
|
| 138 |
+
}
|
| 139 |
+
]
|
| 140 |
+
},
|
| 141 |
+
{
|
| 142 |
+
"id": "tool-010",
|
| 143 |
+
"name": "read",
|
| 144 |
+
"arguments": {
|
| 145 |
+
"path": ".kinex/devices/gripper/profile.yaml",
|
| 146 |
+
"offset": null,
|
| 147 |
+
"limit": null
|
| 148 |
+
},
|
| 149 |
+
"timestamp": 1793160980431,
|
| 150 |
+
"result": [
|
| 151 |
+
{
|
| 152 |
+
"type": "text",
|
| 153 |
+
"text": "name: gripper\nruntime:\n domain_id: 83\n nodes:\n - entry: links.py\n factory: create\n ready_timeout_s: 30\n observation: joint_state\noperations:\n joint_state:\n description: Measured finger_joint1 in metres, half the summed finger travel,\n stamped at acquisition; Kinex publishes the URDF finger and pad links from it.\n transport: topic\n direction: output\n endpoint: /gripper/joint_state\n type: sensor_msgs/msg/JointState\n qos:\n depth: 1\n reliability: reliable\n durability: transient_local\n timeout_s: 10\n stop:\n description: Hold the measured finger position; the fingers may settle briefly\n after the stop.\n transport: service\n direction: input\n endpoint: /gripper/stop\n type: std_srvs/srv/Trigger\n qos:\n depth: 1\n reliability: reliable\n durability: volatile\n timeout_s: 10\nloaded: true\nmeta:\n created_at: '2026-10-19T00:00:00Z'\n updated_at: '2026-10-20T17:24:01.455Z'\ntype: gripper\ndescription: Panda parallel two-finger gripper on the arm flange. Fingers close along\n the gripper base x axis; the URDF pad links mark the 16 by 16 mm inner pad faces,\n 3.6 mm below the TCP. finger_joint1 is half of LIBERO's summed finger travel, so\n the inner pad gap is 2 * finger_joint1 - 1 mm. A closed or stalled grip alone does\n not prove a successful grasp.\nsource: introspected\ncalibrated_at: null\nmethod: introspection\nstop:\n behavior: hold\n affected_devices:\n - gripper\nframes:\n base:\n translation_m:\n - 0\n - 0\n - 0\n rotation_xyzw:\n - 0\n - 0\n - -0.707106781187\n - 0.707106781187\n parent: arm:flange\n tcp:\n translation_m:\n - 0\n - 0\n - 0.097\n rotation_xyzw:\n - 0\n - 0\n - 0\n - 1\n parent: gripper:base\nmodel:\n format: urdf\n path: gripper.urdf\n base_link: base_link\ngrip:\n joint: finger_joint1\n open: 0.04\n closed: 0.0\n"
|
| 154 |
+
}
|
| 155 |
+
]
|
| 156 |
+
},
|
| 157 |
+
{
|
| 158 |
+
"id": "tool-011",
|
| 159 |
+
"name": "read",
|
| 160 |
+
"arguments": {
|
| 161 |
+
"path": ".kinex/workspace.yaml",
|
| 162 |
+
"offset": null,
|
| 163 |
+
"limit": null
|
| 164 |
+
},
|
| 165 |
+
"timestamp": 1793160980431,
|
| 166 |
+
"result": [
|
| 167 |
+
{
|
| 168 |
+
"type": "text",
|
| 169 |
+
"text": "identity:\n id: libero-panda-tabletop\n name: LIBERO Panda tabletop\n kind: arm\n model: Panda\n source: user\ndevices:\n source: user\nsafety:\n source: user\n max_joint_velocity: null\n max_cartesian_velocity: null\n keep_out_zones: []\nmeta:\n created_at: '2026-10-19T00:00:00Z'\n updated_at: '2026-10-19T00:00:00Z'\n"
|
| 170 |
+
}
|
| 171 |
+
]
|
| 172 |
+
},
|
| 173 |
+
{
|
| 174 |
+
"id": "tool-012",
|
| 175 |
+
"name": "ls",
|
| 176 |
+
"arguments": {
|
| 177 |
+
"path": ".kinex/memos",
|
| 178 |
+
"limit": 500
|
| 179 |
+
},
|
| 180 |
+
"timestamp": 1793160980431,
|
| 181 |
+
"result": [
|
| 182 |
+
{
|
| 183 |
+
"type": "text",
|
| 184 |
+
"text": "(empty directory)"
|
| 185 |
+
}
|
| 186 |
+
]
|
| 187 |
+
},
|
| 188 |
+
{
|
| 189 |
+
"id": "tool-013",
|
| 190 |
+
"name": "ls",
|
| 191 |
+
"arguments": {
|
| 192 |
+
"path": ".kinex/tools",
|
| 193 |
+
"limit": 500
|
| 194 |
+
},
|
| 195 |
+
"timestamp": 1793160980431,
|
| 196 |
+
"result": [
|
| 197 |
+
{
|
| 198 |
+
"type": "text",
|
| 199 |
+
"text": "(empty directory)"
|
| 200 |
+
}
|
| 201 |
+
]
|
| 202 |
+
},
|
| 203 |
+
{
|
| 204 |
+
"id": "tool-014",
|
| 205 |
+
"name": "ls",
|
| 206 |
+
"arguments": {
|
| 207 |
+
"path": ".kinex/skills",
|
| 208 |
+
"limit": 500
|
| 209 |
+
},
|
| 210 |
+
"timestamp": 1793160980431,
|
| 211 |
+
"result": [
|
| 212 |
+
{
|
| 213 |
+
"type": "text",
|
| 214 |
+
"text": "(empty directory)"
|
| 215 |
+
}
|
| 216 |
+
]
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"id": "tool-015",
|
| 220 |
+
"name": "devices",
|
| 221 |
+
"arguments": {
|
| 222 |
+
"calls": [
|
| 223 |
+
{
|
| 224 |
+
"deviceID": "camera_agentview",
|
| 225 |
+
"action": "image"
|
| 226 |
+
},
|
| 227 |
+
{
|
| 228 |
+
"deviceID": "camera_wrist",
|
| 229 |
+
"action": "image"
|
| 230 |
+
}
|
| 231 |
+
]
|
| 232 |
+
},
|
| 233 |
+
"timestamp": 1793160984239,
|
| 234 |
+
"result": [
|
| 235 |
+
{
|
| 236 |
+
"type": "text",
|
| 237 |
+
"text": "{\n \"results\": [\n {\"deviceID\":\"camera_agentview\",\"action\":\"image\",\"ok\":true,\"data\":{\"timestamp\":0,\"frame_id\":\"camera_agentview/base\",\"width\":256,\"height\":256},\"file\":\"/tmp/kinex-observation-ge13xvv3.png\"},\n {\"deviceID\":\"camera_wrist\",\"action\":\"image\",\"ok\":true,\"data\":{\"timestamp\":0,\"frame_id\":\"camera_wrist/base\",\"width\":256,\"height\":256},\"file\":\"/tmp/kinex-observation-fb47ry1z.png\"}\n ]\n}"
|
| 238 |
+
},
|
| 239 |
+
{
|
| 240 |
+
"type": "image",
|
| 241 |
+
"src": "data/b2/session-images/018-01.png"
|
| 242 |
+
},
|
| 243 |
+
{
|
| 244 |
+
"type": "image",
|
| 245 |
+
"src": "data/b2/session-images/018-02.png"
|
| 246 |
+
}
|
| 247 |
+
]
|
| 248 |
+
},
|
| 249 |
+
{
|
| 250 |
+
"id": "tool-016",
|
| 251 |
+
"name": "exec",
|
| 252 |
+
"arguments": {
|
| 253 |
+
"python": "from kinex import runtime, finish\nfinish(runtime.describe('vla.execute'))",
|
| 254 |
+
"description": "inspect vla execute schema"
|
| 255 |
+
},
|
| 256 |
+
"timestamp": 1793160987124,
|
| 257 |
+
"result": [
|
| 258 |
+
{
|
| 259 |
+
"type": "text",
|
| 260 |
+
"text": "{\n \"output\": \"\",\n \"result\": {\n \"description\": \"Execute instruction, a nonempty local manipulation instruction. Required invocation_id must be unique in this episode. Optional max_control_steps (default 40) and timeout_wall_s (default 120) bound execution; they do not change policy speed. Schema is programvla.invocation.v1. No completion monitor.\",\n \"transport\": \"service\",\n \"direction\": \"input\",\n \"endpoint\": \"/vla/execute\",\n \"type\": \"kinex_interfaces/srv/Json\",\n \"qos\": {\"depth\":1,\"reliability\":\"reliable\",\"durability\":\"volatile\"},\n \"timeout_s\": 180,\n \"request\": {\"request\":\"string\"},\n \"response\": {\"success\":\"boolean\",\"message\":\"string\",\"response\":\"string\"},\n \"definitions\": {}\n }\n}"
|
| 261 |
+
}
|
| 262 |
+
]
|
| 263 |
+
},
|
| 264 |
+
{
|
| 265 |
+
"id": "tool-017",
|
| 266 |
+
"name": "device",
|
| 267 |
+
"arguments": {
|
| 268 |
+
"deviceID": "vla",
|
| 269 |
+
"action": "execute",
|
| 270 |
+
"args": {
|
| 271 |
+
"request": "{\"instruction\":\"Pick the akita black bowl between the plate and the ramekin and place it in the center of the plate.\",\"invocation_id\":\"spatial01_bowl_plate_01\",\"max_control_steps\":180,\"timeout_wall_s\":150}"
|
| 272 |
+
}
|
| 273 |
+
},
|
| 274 |
+
"timestamp": 1793160992735,
|
| 275 |
+
"result": [
|
| 276 |
+
{
|
| 277 |
+
"type": "text",
|
| 278 |
+
"text": "TypeError: Invocation.__init__() got an unexpected keyword argument 'request'"
|
| 279 |
+
}
|
| 280 |
+
]
|
| 281 |
+
},
|
| 282 |
+
{
|
| 283 |
+
"id": "tool-018",
|
| 284 |
+
"name": "device",
|
| 285 |
+
"arguments": {
|
| 286 |
+
"deviceID": "vla",
|
| 287 |
+
"action": "execute",
|
| 288 |
+
"args": {
|
| 289 |
+
"instruction": "Pick the akita black bowl between the plate and the ramekin and place it in the center of the plate.",
|
| 290 |
+
"invocation_id": "spatial01_bowl_plate_01",
|
| 291 |
+
"max_control_steps": 180,
|
| 292 |
+
"timeout_wall_s": 150
|
| 293 |
+
}
|
| 294 |
+
},
|
| 295 |
+
"timestamp": 1793160999008,
|
| 296 |
+
"result": [
|
| 297 |
+
{
|
| 298 |
+
"type": "text",
|
| 299 |
+
"text": "{\n \"invocation_id\": \"spatial01_bowl_plate_01\",\n \"reason\": \"episode_ended\",\n \"control_steps\": 79,\n \"policy_chunks\": 10,\n \"wall_s\": 16.2738747112453,\n \"semantic_completion\": \"unavailable\"\n}"
|
| 300 |
+
}
|
| 301 |
+
]
|
| 302 |
+
},
|
| 303 |
+
{
|
| 304 |
+
"id": "tool-019",
|
| 305 |
+
"name": "devices",
|
| 306 |
+
"arguments": {
|
| 307 |
+
"calls": [
|
| 308 |
+
{
|
| 309 |
+
"deviceID": "camera_agentview",
|
| 310 |
+
"action": "image"
|
| 311 |
+
},
|
| 312 |
+
{
|
| 313 |
+
"deviceID": "camera_wrist",
|
| 314 |
+
"action": "image"
|
| 315 |
+
}
|
| 316 |
+
]
|
| 317 |
+
},
|
| 318 |
+
"timestamp": 1793161018876,
|
| 319 |
+
"result": [
|
| 320 |
+
{
|
| 321 |
+
"type": "text",
|
| 322 |
+
"text": "{\n \"results\": [\n {\"deviceID\":\"camera_agentview\",\"action\":\"image\",\"ok\":true,\"data\":{\"timestamp\":3.95,\"frame_id\":\"camera_agentview/base\",\"width\":256,\"height\":256},\"file\":\"/tmp/kinex-observation-6qmt_lct.png\"},\n {\"deviceID\":\"camera_wrist\",\"action\":\"image\",\"ok\":true,\"data\":{\"timestamp\":3.95,\"frame_id\":\"camera_wrist/base\",\"width\":256,\"height\":256},\"file\":\"/tmp/kinex-observation-vz04ya3w.png\"}\n ]\n}"
|
| 323 |
+
},
|
| 324 |
+
{
|
| 325 |
+
"type": "image",
|
| 326 |
+
"src": "data/b2/session-images/026-01.png"
|
| 327 |
+
},
|
| 328 |
+
{
|
| 329 |
+
"type": "image",
|
| 330 |
+
"src": "data/b2/session-images/026-02.png"
|
| 331 |
+
}
|
| 332 |
+
]
|
| 333 |
+
},
|
| 334 |
+
{
|
| 335 |
+
"id": "tool-020",
|
| 336 |
+
"name": "write",
|
| 337 |
+
"arguments": {
|
| 338 |
+
"path": ".kinex/memos/libero-spatial-bowl.md",
|
| 339 |
+
"content": "# LIBERO spatial bowl-to-plate\n\nFor `libero/libero-spatial-01`, the initial agentview image showed the target akita black patterned bowl between the small metal ramekin and striped plate (near pixel 190,149 in 256x256); a second bowl sat farther right (near 220,125). The frozen `vla.execute` accepts direct device args `instruction`, unique `invocation_id`, `max_control_steps`, `timeout_wall_s` (not a nested `request`). Use the user's natural-language instruction and inspect fresh agentview/wrist images after execution. In this episode the full instruction caused `episode_ended` after 79 control steps at world time 3.95s, with wrist view showing the bowl overlapping the plate. The native verdict is only available to the owner; do not infer semantic completion from the service response. Do not attempt further movement after terminal status.\n"
|
| 340 |
+
},
|
| 341 |
+
"timestamp": 1793161022227,
|
| 342 |
+
"result": [
|
| 343 |
+
{
|
| 344 |
+
"type": "text",
|
| 345 |
+
"text": "Successfully wrote to .kinex/memos/libero-spatial-bowl.md"
|
| 346 |
+
}
|
| 347 |
+
]
|
| 348 |
+
}
|
| 349 |
+
]
|
data/b2/usage.json
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"input_tokens": 135208,
|
| 3 |
+
"output_tokens": 1311,
|
| 4 |
+
"total_tokens": 136519,
|
| 5 |
+
"tokens": {
|
| 6 |
+
"fresh_input": 16936,
|
| 7 |
+
"cache_read": 118272,
|
| 8 |
+
"cache_write": 0,
|
| 9 |
+
"output": 1311
|
| 10 |
+
},
|
| 11 |
+
"cost_breakdown_usd": {
|
| 12 |
+
"fresh_input": 0.033872,
|
| 13 |
+
"cache_read": 0.023654400000000003,
|
| 14 |
+
"cache_write": 0.0,
|
| 15 |
+
"output": 0.013109999999999998
|
| 16 |
+
},
|
| 17 |
+
"response_count": 9,
|
| 18 |
+
"estimated_api_equivalent_usd": 0.0706364,
|
| 19 |
+
"actual_billed_usd": null,
|
| 20 |
+
"audit_complete": true,
|
| 21 |
+
"per_response_usage": [
|
| 22 |
+
{
|
| 23 |
+
"cache_write_input_tokens": 0,
|
| 24 |
+
"cached_input_tokens": 0,
|
| 25 |
+
"input_tokens": 11285,
|
| 26 |
+
"output_tokens": 118,
|
| 27 |
+
"reasoning_output_tokens": 8
|
| 28 |
+
},
|
| 29 |
+
{
|
| 30 |
+
"cache_write_input_tokens": 0,
|
| 31 |
+
"cached_input_tokens": 11264,
|
| 32 |
+
"input_tokens": 11596,
|
| 33 |
+
"output_tokens": 288,
|
| 34 |
+
"reasoning_output_tokens": 0
|
| 35 |
+
},
|
| 36 |
+
{
|
| 37 |
+
"cache_write_input_tokens": 0,
|
| 38 |
+
"cached_input_tokens": 11776,
|
| 39 |
+
"input_tokens": 15177,
|
| 40 |
+
"output_tokens": 52,
|
| 41 |
+
"reasoning_output_tokens": 11
|
| 42 |
+
},
|
| 43 |
+
{
|
| 44 |
+
"cache_write_input_tokens": 0,
|
| 45 |
+
"cached_input_tokens": 15104,
|
| 46 |
+
"input_tokens": 15513,
|
| 47 |
+
"output_tokens": 123,
|
| 48 |
+
"reasoning_output_tokens": 81
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"cache_write_input_tokens": 0,
|
| 52 |
+
"cached_input_tokens": 15488,
|
| 53 |
+
"input_tokens": 15825,
|
| 54 |
+
"output_tokens": 220,
|
| 55 |
+
"reasoning_output_tokens": 137
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"cache_write_input_tokens": 0,
|
| 59 |
+
"cached_input_tokens": 15872,
|
| 60 |
+
"input_tokens": 16071,
|
| 61 |
+
"output_tokens": 91,
|
| 62 |
+
"reasoning_output_tokens": 14
|
| 63 |
+
},
|
| 64 |
+
{
|
| 65 |
+
"cache_write_input_tokens": 0,
|
| 66 |
+
"cached_input_tokens": 16000,
|
| 67 |
+
"input_tokens": 16238,
|
| 68 |
+
"output_tokens": 61,
|
| 69 |
+
"reasoning_output_tokens": 20
|
| 70 |
+
},
|
| 71 |
+
{
|
| 72 |
+
"cache_write_input_tokens": 0,
|
| 73 |
+
"cached_input_tokens": 16128,
|
| 74 |
+
"input_tokens": 16588,
|
| 75 |
+
"output_tokens": 302,
|
| 76 |
+
"reasoning_output_tokens": 80
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"cache_write_input_tokens": 0,
|
| 80 |
+
"cached_input_tokens": 16640,
|
| 81 |
+
"input_tokens": 16915,
|
| 82 |
+
"output_tokens": 56,
|
| 83 |
+
"reasoning_output_tokens": 0
|
| 84 |
+
}
|
| 85 |
+
],
|
| 86 |
+
"pricing": {
|
| 87 |
+
"model": "openai/gpt-6-sol",
|
| 88 |
+
"currency": "USD",
|
| 89 |
+
"verified_date": "2026-10-28",
|
| 90 |
+
"source": "https://developers.openai.com/api/docs/models/gpt-6-sol",
|
| 91 |
+
"basis": "Standard API-equivalent estimate; actual subscription billing is unavailable",
|
| 92 |
+
"per_million_tokens": {
|
| 93 |
+
"fresh_input": 2.0,
|
| 94 |
+
"cache_read": 0.2,
|
| 95 |
+
"cache_write": 2.5,
|
| 96 |
+
"output": 10.0
|
| 97 |
+
},
|
| 98 |
+
"long_context_threshold": 272000,
|
| 99 |
+
"long_context_multipliers": {
|
| 100 |
+
"fresh_input": 2.0,
|
| 101 |
+
"cache_read": 2.0,
|
| 102 |
+
"cache_write": 2.0,
|
| 103 |
+
"output": 1.5
|
| 104 |
+
}
|
| 105 |
+
},
|
| 106 |
+
"gpu_cost_usd": null
|
| 107 |
+
}
|
data/b2/verdict.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"success": true,
|
| 3 |
+
"valid": true,
|
| 4 |
+
"evidence_valid": true,
|
| 5 |
+
"steps": 84,
|
| 6 |
+
"step_limit": 605,
|
| 7 |
+
"reason": "success",
|
| 8 |
+
"simulation_time_s": 3.9499999999997595,
|
| 9 |
+
"initialization": {
|
| 10 |
+
"init_state_index": 0,
|
| 11 |
+
"initialization_frames": 5
|
| 12 |
+
},
|
| 13 |
+
"execution": {
|
| 14 |
+
"status": "finished",
|
| 15 |
+
"reason": null
|
| 16 |
+
}
|
| 17 |
+
}
|
data/b2/video.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:6a3db4cd43f3d7b2a6b16e3c28591efc8f48893e81a54cc6696e92de02221dab
|
| 3 |
+
size 628396
|
data/manifest.json
CHANGED
|
@@ -2,25 +2,37 @@
|
|
| 2 |
"schema_version": 1,
|
| 3 |
"files": {
|
| 4 |
"README.md": {
|
| 5 |
-
"sha256": "
|
| 6 |
-
"bytes":
|
| 7 |
},
|
| 8 |
"app.js": {
|
| 9 |
-
"sha256": "
|
| 10 |
-
"bytes":
|
| 11 |
},
|
| 12 |
"data/b0/detail.json": {
|
| 13 |
-
"sha256": "
|
| 14 |
-
"bytes":
|
| 15 |
},
|
| 16 |
"data/b0/executed-actions.csv": {
|
| 17 |
"sha256": "a4182d690899970fd3a6983e7cb69e9648dabb346c0fd692dce4efcea073a40a",
|
| 18 |
"bytes": 13983
|
| 19 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
"data/b0/initial.png": {
|
| 21 |
"sha256": "ec2cdb640481d52d6ce1ae74d39069a609a0363f28c5d8ef02319c61139b5687",
|
| 22 |
"bytes": 59386
|
| 23 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
"data/b0/observations/call_canonical_000_step_00000_view0.png": {
|
| 25 |
"sha256": "c0cccc610b118df6e6e147eee3bc0a8c777b3002be6743dc8902f4def412c884",
|
| 26 |
"bytes": 59333
|
|
@@ -109,14 +121,38 @@
|
|
| 109 |
"sha256": "a78281fe64627bc030df9f3bbf693242f9df4aacfa90e1e41ddacbfd98ad5381",
|
| 110 |
"bytes": 4806
|
| 111 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 112 |
"data/b0/session.json": {
|
| 113 |
"sha256": "37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570",
|
| 114 |
"bytes": 3
|
| 115 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 116 |
"data/b0/third_person.mp4": {
|
| 117 |
"sha256": "1b697c19a8d5ff7620b0e8074fa8922f00628b4f1bf4427a3a734390cc6a80ca",
|
| 118 |
"bytes": 289372
|
| 119 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 120 |
"data/b0/vla-calls.json": {
|
| 121 |
"sha256": "4ebeb0252ac015a987e0372f469525424dc96f238dc7f356f8f6f5c2e7b14380",
|
| 122 |
"bytes": 837
|
|
@@ -125,18 +161,38 @@
|
|
| 125 |
"sha256": "117607ece1c52e17ffef1c56814e3f00564be0d49b3f913bebe2503e9bb2d3be",
|
| 126 |
"bytes": 630222
|
| 127 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 128 |
"data/b1/detail.json": {
|
| 129 |
-
"sha256": "
|
| 130 |
-
"bytes":
|
| 131 |
},
|
| 132 |
"data/b1/executed-actions.csv": {
|
| 133 |
"sha256": "74cc0740705a2c9e19bb88ec4b412ce49e08cf11153d995da25fbb0c4a1d93ea",
|
| 134 |
"bytes": 79
|
| 135 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 136 |
"data/b1/initial.png": {
|
| 137 |
"sha256": "ec2cdb640481d52d6ce1ae74d39069a609a0363f28c5d8ef02319c61139b5687",
|
| 138 |
"bytes": 59386
|
| 139 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 140 |
"data/b1/policy-chunks.json": {
|
| 141 |
"sha256": "37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570",
|
| 142 |
"bytes": 3
|
|
@@ -145,6 +201,10 @@
|
|
| 145 |
"sha256": "37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570",
|
| 146 |
"bytes": 3
|
| 147 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 148 |
"data/b1/session-images/013-01.png": {
|
| 149 |
"sha256": "ec2cdb640481d52d6ce1ae74d39069a609a0363f28c5d8ef02319c61139b5687",
|
| 150 |
"bytes": 59386
|
|
@@ -241,10 +301,30 @@
|
|
| 241 |
"sha256": "6c4a3c3766f1462eb0b7dbfa09b31aaafe1d1e2228d6653b0473b03fd8e484f9",
|
| 242 |
"bytes": 107121
|
| 243 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 244 |
"data/b1/third_person.mp4": {
|
| 245 |
"sha256": "ea52c7739a7f0ca6d043b45154aac48fe14e0d37d49ef20b5bf5b1ebd26205fe",
|
| 246 |
"bytes": 1879100
|
| 247 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 248 |
"data/b1/vla-calls.json": {
|
| 249 |
"sha256": "37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570",
|
| 250 |
"bytes": 3
|
|
@@ -253,18 +333,34 @@
|
|
| 253 |
"sha256": "598f56dae47f56701179ea8cc7e6423ce9242109aaa0aadb13f7accbbf2ae22f",
|
| 254 |
"bytes": 3591913
|
| 255 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 256 |
"data/b2/detail.json": {
|
| 257 |
-
"sha256": "
|
| 258 |
-
"bytes":
|
| 259 |
},
|
| 260 |
"data/b2/executed-actions.csv": {
|
| 261 |
"sha256": "1b528ab8983c96fd27002e65a307d441648bf55df8a42bf6b948ba125f2cbc60",
|
| 262 |
"bytes": 15141
|
| 263 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 264 |
"data/b2/initial.png": {
|
| 265 |
"sha256": "ec2cdb640481d52d6ce1ae74d39069a609a0363f28c5d8ef02319c61139b5687",
|
| 266 |
"bytes": 59386
|
| 267 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 268 |
"data/b2/observations/call_spatial01_bowl_plate_01_step_00000_view0.png": {
|
| 269 |
"sha256": "c0cccc610b118df6e6e147eee3bc0a8c777b3002be6743dc8902f4def412c884",
|
| 270 |
"bytes": 59333
|
|
@@ -353,6 +449,10 @@
|
|
| 353 |
"sha256": "810b23dcfe33b3237d3956bc4aed4925ee3f3df29540c453af55dcfc7c2a2649",
|
| 354 |
"bytes": 5116
|
| 355 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 356 |
"data/b2/session-images/018-01.png": {
|
| 357 |
"sha256": "ec2cdb640481d52d6ce1ae74d39069a609a0363f28c5d8ef02319c61139b5687",
|
| 358 |
"bytes": 59386
|
|
@@ -373,10 +473,30 @@
|
|
| 373 |
"sha256": "95197368df63b5b93863758b5b158449a0b060155a709b7cced6a6e90a2a4b41",
|
| 374 |
"bytes": 28153
|
| 375 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 376 |
"data/b2/third_person.mp4": {
|
| 377 |
"sha256": "29b64adef464a7acd86250806a9a1c1dd463798e038b5c6444daf2aede547a0d",
|
| 378 |
"bytes": 325868
|
| 379 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 380 |
"data/b2/vla-calls.json": {
|
| 381 |
"sha256": "19e035581ff3e31752571080589c7b3c2a6f90b08bf33033b563218da2df16bd",
|
| 382 |
"bytes": 856
|
|
@@ -386,16 +506,16 @@
|
|
| 386 |
"bytes": 654183
|
| 387 |
},
|
| 388 |
"data/report.json": {
|
| 389 |
-
"sha256": "
|
| 390 |
-
"bytes":
|
| 391 |
},
|
| 392 |
"index.html": {
|
| 393 |
-
"sha256": "
|
| 394 |
-
"bytes":
|
| 395 |
},
|
| 396 |
"style.css": {
|
| 397 |
-
"sha256": "
|
| 398 |
-
"bytes":
|
| 399 |
}
|
| 400 |
}
|
| 401 |
}
|
|
|
|
| 2 |
"schema_version": 1,
|
| 3 |
"files": {
|
| 4 |
"README.md": {
|
| 5 |
+
"sha256": "60e4c31c09be8b67e167e0ecc3bcbe86f64012ebc76de377dc07460f43195b5d",
|
| 6 |
+
"bytes": 2892
|
| 7 |
},
|
| 8 |
"app.js": {
|
| 9 |
+
"sha256": "18f0e94fea6638b5f0b8579c30a369dc343f948852d4fa03d813b5a7851b3971",
|
| 10 |
+
"bytes": 17850
|
| 11 |
},
|
| 12 |
"data/b0/detail.json": {
|
| 13 |
+
"sha256": "c6d2154bcf48eacb2d48990cc3859520401473f025d3c80367902fe0e7d066f4",
|
| 14 |
+
"bytes": 31083
|
| 15 |
},
|
| 16 |
"data/b0/executed-actions.csv": {
|
| 17 |
"sha256": "a4182d690899970fd3a6983e7cb69e9648dabb346c0fd692dce4efcea073a40a",
|
| 18 |
"bytes": 13983
|
| 19 |
},
|
| 20 |
+
"data/b0/frame-mapping.json": {
|
| 21 |
+
"sha256": "d410e9a8a6aaf4f9e6358ce6f19a9da2e4663cdd64e69d39ff7faf16b51041ab",
|
| 22 |
+
"bytes": 672
|
| 23 |
+
},
|
| 24 |
"data/b0/initial.png": {
|
| 25 |
"sha256": "ec2cdb640481d52d6ce1ae74d39069a609a0363f28c5d8ef02319c61139b5687",
|
| 26 |
"bytes": 59386
|
| 27 |
},
|
| 28 |
+
"data/b0/instruction.txt": {
|
| 29 |
+
"sha256": "56488779d6907687533a5a234418eb14e4dd7eb270953c8d2bceb80962903cf0",
|
| 30 |
+
"bytes": 99
|
| 31 |
+
},
|
| 32 |
+
"data/b0/media.json": {
|
| 33 |
+
"sha256": "23f6ff2edbbf2c14f580d049267466c4669e59590a5d3333c0e0d1a6743c5ccc",
|
| 34 |
+
"bytes": 880
|
| 35 |
+
},
|
| 36 |
"data/b0/observations/call_canonical_000_step_00000_view0.png": {
|
| 37 |
"sha256": "c0cccc610b118df6e6e147eee3bc0a8c777b3002be6743dc8902f4def412c884",
|
| 38 |
"bytes": 59333
|
|
|
|
| 121 |
"sha256": "a78281fe64627bc030df9f3bbf693242f9df4aacfa90e1e41ddacbfd98ad5381",
|
| 122 |
"bytes": 4806
|
| 123 |
},
|
| 124 |
+
"data/b0/poster.jpg": {
|
| 125 |
+
"sha256": "c6badefc4600352cc612742084a810830a77bbd915ef863f0b1695040da259de",
|
| 126 |
+
"bytes": 179497
|
| 127 |
+
},
|
| 128 |
"data/b0/session.json": {
|
| 129 |
"sha256": "37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570",
|
| 130 |
"bytes": 3
|
| 131 |
},
|
| 132 |
+
"data/b0/terminal.jpg": {
|
| 133 |
+
"sha256": "e9c6beb0e0c935d56f7c36be0f73acc8f3626d02358160304b37c8152c5d0c71",
|
| 134 |
+
"bytes": 191499
|
| 135 |
+
},
|
| 136 |
"data/b0/third_person.mp4": {
|
| 137 |
"sha256": "1b697c19a8d5ff7620b0e8074fa8922f00628b4f1bf4427a3a734390cc6a80ca",
|
| 138 |
"bytes": 289372
|
| 139 |
},
|
| 140 |
+
"data/b0/tool-calls.json": {
|
| 141 |
+
"sha256": "37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570",
|
| 142 |
+
"bytes": 3
|
| 143 |
+
},
|
| 144 |
+
"data/b0/usage.json": {
|
| 145 |
+
"sha256": "c2ba2b52b205ed73b447004f106f68a7e833a88b58f2db14643a6c8dde14be53",
|
| 146 |
+
"bytes": 1040
|
| 147 |
+
},
|
| 148 |
+
"data/b0/verdict.json": {
|
| 149 |
+
"sha256": "9d8881ad57f683b4ea70c7f31b4ed84e914a1f489b4d161c499beee4fadbb367",
|
| 150 |
+
"bytes": 319
|
| 151 |
+
},
|
| 152 |
+
"data/b0/video.mp4": {
|
| 153 |
+
"sha256": "4505afb3b4adb875dd2709e5a5d36d1e81f56dc261acb10a54cb5776ace0a3e8",
|
| 154 |
+
"bytes": 610206
|
| 155 |
+
},
|
| 156 |
"data/b0/vla-calls.json": {
|
| 157 |
"sha256": "4ebeb0252ac015a987e0372f469525424dc96f238dc7f356f8f6f5c2e7b14380",
|
| 158 |
"bytes": 837
|
|
|
|
| 161 |
"sha256": "117607ece1c52e17ffef1c56814e3f00564be0d49b3f913bebe2503e9bb2d3be",
|
| 162 |
"bytes": 630222
|
| 163 |
},
|
| 164 |
+
"data/b1/artifacts/.kinex/memos/libero_spatial.md": {
|
| 165 |
+
"sha256": "514d0000e9dfa1b92c2d8c06979b54765f07a458d845a02b88b076c850942ac8",
|
| 166 |
+
"bytes": 2445
|
| 167 |
+
},
|
| 168 |
+
"data/b1/artifacts/.kinex/tools/tabletop_motion.py": {
|
| 169 |
+
"sha256": "a1910a099fdfd8100c86eab90f064a85f7e7a56b6030b17593e450ee19ae27eb",
|
| 170 |
+
"bytes": 2838
|
| 171 |
+
},
|
| 172 |
"data/b1/detail.json": {
|
| 173 |
+
"sha256": "030bb7b3c75b856d37d570eb36c94516232226c74d21c2169c8dae40ddc8d910",
|
| 174 |
+
"bytes": 16533
|
| 175 |
},
|
| 176 |
"data/b1/executed-actions.csv": {
|
| 177 |
"sha256": "74cc0740705a2c9e19bb88ec4b412ce49e08cf11153d995da25fbb0c4a1d93ea",
|
| 178 |
"bytes": 79
|
| 179 |
},
|
| 180 |
+
"data/b1/frame-mapping.json": {
|
| 181 |
+
"sha256": "eecdb6df677edaa359f1cf00b97ca053b22caea901f93206d6ffe334d44c2861",
|
| 182 |
+
"bytes": 5049
|
| 183 |
+
},
|
| 184 |
"data/b1/initial.png": {
|
| 185 |
"sha256": "ec2cdb640481d52d6ce1ae74d39069a609a0363f28c5d8ef02319c61139b5687",
|
| 186 |
"bytes": 59386
|
| 187 |
},
|
| 188 |
+
"data/b1/instruction.txt": {
|
| 189 |
+
"sha256": "451de0be084e4dfc529ac68676ef8c4e326605b7926baa82d609843a782e039c",
|
| 190 |
+
"bytes": 2155
|
| 191 |
+
},
|
| 192 |
+
"data/b1/media.json": {
|
| 193 |
+
"sha256": "6cd76f2309cdb60633361df135a447e66b8ddbbbe76cd1dc509b3c4f8d5e64a7",
|
| 194 |
+
"bytes": 885
|
| 195 |
+
},
|
| 196 |
"data/b1/policy-chunks.json": {
|
| 197 |
"sha256": "37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570",
|
| 198 |
"bytes": 3
|
|
|
|
| 201 |
"sha256": "37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570",
|
| 202 |
"bytes": 3
|
| 203 |
},
|
| 204 |
+
"data/b1/poster.jpg": {
|
| 205 |
+
"sha256": "0c5d027233bc059d536408205f9b26ec32dd886f24a3493c26ff45c99758cac0",
|
| 206 |
+
"bytes": 181375
|
| 207 |
+
},
|
| 208 |
"data/b1/session-images/013-01.png": {
|
| 209 |
"sha256": "ec2cdb640481d52d6ce1ae74d39069a609a0363f28c5d8ef02319c61139b5687",
|
| 210 |
"bytes": 59386
|
|
|
|
| 301 |
"sha256": "6c4a3c3766f1462eb0b7dbfa09b31aaafe1d1e2228d6653b0473b03fd8e484f9",
|
| 302 |
"bytes": 107121
|
| 303 |
},
|
| 304 |
+
"data/b1/terminal.jpg": {
|
| 305 |
+
"sha256": "0a76a1aae6cd4a159724dc30a0766ba7cc2d996a8420e2976c517493fdec341c",
|
| 306 |
+
"bytes": 180388
|
| 307 |
+
},
|
| 308 |
"data/b1/third_person.mp4": {
|
| 309 |
"sha256": "ea52c7739a7f0ca6d043b45154aac48fe14e0d37d49ef20b5bf5b1ebd26205fe",
|
| 310 |
"bytes": 1879100
|
| 311 |
},
|
| 312 |
+
"data/b1/tool-calls.json": {
|
| 313 |
+
"sha256": "a021bd5bb629a97db07836082980fa2831bd7823125da144e422e77917f2c5ca",
|
| 314 |
+
"bytes": 86705
|
| 315 |
+
},
|
| 316 |
+
"data/b1/usage.json": {
|
| 317 |
+
"sha256": "4c49ec2b689f9d88bf10f4128b968867b3b5183300a35d97cb5feb768cb44641",
|
| 318 |
+
"bytes": 11485
|
| 319 |
+
},
|
| 320 |
+
"data/b1/verdict.json": {
|
| 321 |
+
"sha256": "7781abf2b672528324955b337e10f23a28f5be3d567c13caf3a41355e8860273",
|
| 322 |
+
"bytes": 324
|
| 323 |
+
},
|
| 324 |
+
"data/b1/video.mp4": {
|
| 325 |
+
"sha256": "6879be037df0d6f285572f0f75c2d82edcace427504c1c942be45fb8415d7a8e",
|
| 326 |
+
"bytes": 3101153
|
| 327 |
+
},
|
| 328 |
"data/b1/vla-calls.json": {
|
| 329 |
"sha256": "37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570",
|
| 330 |
"bytes": 3
|
|
|
|
| 333 |
"sha256": "598f56dae47f56701179ea8cc7e6423ce9242109aaa0aadb13f7accbbf2ae22f",
|
| 334 |
"bytes": 3591913
|
| 335 |
},
|
| 336 |
+
"data/b2/artifacts/.kinex/memos/libero-spatial-bowl.md": {
|
| 337 |
+
"sha256": "823f8e5d3bee9874a7b1c7aec5024e478563cd65e27eb000f443f6ed6fd99795",
|
| 338 |
+
"bytes": 851
|
| 339 |
+
},
|
| 340 |
"data/b2/detail.json": {
|
| 341 |
+
"sha256": "accbe524aaa6d734faa930708102ff555c2087fd8650f6f79e5350317270bb37",
|
| 342 |
+
"bytes": 35847
|
| 343 |
},
|
| 344 |
"data/b2/executed-actions.csv": {
|
| 345 |
"sha256": "1b528ab8983c96fd27002e65a307d441648bf55df8a42bf6b948ba125f2cbc60",
|
| 346 |
"bytes": 15141
|
| 347 |
},
|
| 348 |
+
"data/b2/frame-mapping.json": {
|
| 349 |
+
"sha256": "08a3ac8e995fa64a3c39878f52ff64785e82a7a117e4c201d8c142d390f4b17a",
|
| 350 |
+
"bytes": 688
|
| 351 |
+
},
|
| 352 |
"data/b2/initial.png": {
|
| 353 |
"sha256": "ec2cdb640481d52d6ce1ae74d39069a609a0363f28c5d8ef02319c61139b5687",
|
| 354 |
"bytes": 59386
|
| 355 |
},
|
| 356 |
+
"data/b2/instruction.txt": {
|
| 357 |
+
"sha256": "cbf99763cedcf86c4f240011e786a37a4c93c6d97a88f0347ecbafc8fe59e4b1",
|
| 358 |
+
"bytes": 2326
|
| 359 |
+
},
|
| 360 |
+
"data/b2/media.json": {
|
| 361 |
+
"sha256": "46cebde1ef9081e40c196134775efe823abe4b53312f6789091c854063f713fe",
|
| 362 |
+
"bytes": 882
|
| 363 |
+
},
|
| 364 |
"data/b2/observations/call_spatial01_bowl_plate_01_step_00000_view0.png": {
|
| 365 |
"sha256": "c0cccc610b118df6e6e147eee3bc0a8c777b3002be6743dc8902f4def412c884",
|
| 366 |
"bytes": 59333
|
|
|
|
| 449 |
"sha256": "810b23dcfe33b3237d3956bc4aed4925ee3f3df29540c453af55dcfc7c2a2649",
|
| 450 |
"bytes": 5116
|
| 451 |
},
|
| 452 |
+
"data/b2/poster.jpg": {
|
| 453 |
+
"sha256": "0cfec65039ff8d01c8121843740a58a9660e6d8a19269193fed84c33e6f37567",
|
| 454 |
+
"bytes": 179914
|
| 455 |
+
},
|
| 456 |
"data/b2/session-images/018-01.png": {
|
| 457 |
"sha256": "ec2cdb640481d52d6ce1ae74d39069a609a0363f28c5d8ef02319c61139b5687",
|
| 458 |
"bytes": 59386
|
|
|
|
| 473 |
"sha256": "95197368df63b5b93863758b5b158449a0b060155a709b7cced6a6e90a2a4b41",
|
| 474 |
"bytes": 28153
|
| 475 |
},
|
| 476 |
+
"data/b2/terminal.jpg": {
|
| 477 |
+
"sha256": "b18713e5d6a04af3b57ae12db9c55b4c99837d1aaca0d9ae5de4195e1f26cf94",
|
| 478 |
+
"bytes": 192862
|
| 479 |
+
},
|
| 480 |
"data/b2/third_person.mp4": {
|
| 481 |
"sha256": "29b64adef464a7acd86250806a9a1c1dd463798e038b5c6444daf2aede547a0d",
|
| 482 |
"bytes": 325868
|
| 483 |
},
|
| 484 |
+
"data/b2/tool-calls.json": {
|
| 485 |
+
"sha256": "f47c27eef3ad261ba6aa11ab24d2bbed0e9ca63638b185c3db880cd6a0eb8f3c",
|
| 486 |
+
"bytes": 21706
|
| 487 |
+
},
|
| 488 |
+
"data/b2/usage.json": {
|
| 489 |
+
"sha256": "eb405a89e5838e2b25a481cb02115e2ff1906c138f6e53018e08869bb73fc08b",
|
| 490 |
+
"bytes": 2714
|
| 491 |
+
},
|
| 492 |
+
"data/b2/verdict.json": {
|
| 493 |
+
"sha256": "5ad402b111d54954d968593a83981137e54241706f931b35fc0b319f6a4002c0",
|
| 494 |
+
"bytes": 319
|
| 495 |
+
},
|
| 496 |
+
"data/b2/video.mp4": {
|
| 497 |
+
"sha256": "6a3db4cd43f3d7b2a6b16e3c28591efc8f48893e81a54cc6696e92de02221dab",
|
| 498 |
+
"bytes": 628396
|
| 499 |
+
},
|
| 500 |
"data/b2/vla-calls.json": {
|
| 501 |
"sha256": "19e035581ff3e31752571080589c7b3c2a6f90b08bf33033b563218da2df16bd",
|
| 502 |
"bytes": 856
|
|
|
|
| 506 |
"bytes": 654183
|
| 507 |
},
|
| 508 |
"data/report.json": {
|
| 509 |
+
"sha256": "578f0ee04ec6723001860984f5d95e9faa2a9d391b4f3bf315f290b348688a56",
|
| 510 |
+
"bytes": 3834
|
| 511 |
},
|
| 512 |
"index.html": {
|
| 513 |
+
"sha256": "982ed2dd813268128bbad2312ef0e26787202bda62244b746b04629bf2207018",
|
| 514 |
+
"bytes": 2757
|
| 515 |
},
|
| 516 |
"style.css": {
|
| 517 |
+
"sha256": "dd5a4ff7da2c328d2a7da99deb4ae5026ecc38770fd4f88474a770eb0293ba09",
|
| 518 |
+
"bytes": 13140
|
| 519 |
}
|
| 520 |
}
|
| 521 |
}
|
data/report.json
CHANGED
|
@@ -48,7 +48,13 @@
|
|
| 48 |
"observation": "The frozen policy receives the full task and completes the manipulation.",
|
| 49 |
"path": "data/b0",
|
| 50 |
"session_messages": 0,
|
| 51 |
-
"tool_calls": 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
},
|
| 53 |
{
|
| 54 |
"method": "B1",
|
|
@@ -63,7 +69,13 @@
|
|
| 63 |
"observation": "The agent uses native arm and gripper commands. The episode reaches the 600-control-step limit without native success.",
|
| 64 |
"path": "data/b1",
|
| 65 |
"session_messages": 141,
|
| 66 |
-
"tool_calls": 82
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
},
|
| 68 |
{
|
| 69 |
"method": "B2",
|
|
@@ -78,7 +90,13 @@
|
|
| 78 |
"observation": "After inspecting the scene and interfaces, the agent delegates the full task in one accepted VLA call. No task decomposition is evident in this episode.",
|
| 79 |
"path": "data/b2",
|
| 80 |
"session_messages": 30,
|
| 81 |
-
"tool_calls": 20
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
}
|
| 83 |
]
|
| 84 |
}
|
|
|
|
| 48 |
"observation": "The frozen policy receives the full task and completes the manipulation.",
|
| 49 |
"path": "data/b0",
|
| 50 |
"session_messages": 0,
|
| 51 |
+
"tool_calls": 0,
|
| 52 |
+
"artifacts": 0,
|
| 53 |
+
"input_tokens": 0,
|
| 54 |
+
"output_tokens": 0,
|
| 55 |
+
"total_tokens": 0,
|
| 56 |
+
"estimated_api_equivalent_usd": 0.0,
|
| 57 |
+
"simulation_time_s": 3.8499999999997705
|
| 58 |
},
|
| 59 |
{
|
| 60 |
"method": "B1",
|
|
|
|
| 69 |
"observation": "The agent uses native arm and gripper commands. The episode reaches the 600-control-step limit without native success.",
|
| 70 |
"path": "data/b1",
|
| 71 |
"session_messages": 141,
|
| 72 |
+
"tool_calls": 82,
|
| 73 |
+
"artifacts": 2,
|
| 74 |
+
"input_tokens": 1802752,
|
| 75 |
+
"output_tokens": 18444,
|
| 76 |
+
"total_tokens": 1821196,
|
| 77 |
+
"estimated_api_equivalent_usd": 0.6493616,
|
| 78 |
+
"simulation_time_s": 29.999999999994113
|
| 79 |
},
|
| 80 |
{
|
| 81 |
"method": "B2",
|
|
|
|
| 90 |
"observation": "After inspecting the scene and interfaces, the agent delegates the full task in one accepted VLA call. No task decomposition is evident in this episode.",
|
| 91 |
"path": "data/b2",
|
| 92 |
"session_messages": 30,
|
| 93 |
+
"tool_calls": 20,
|
| 94 |
+
"artifacts": 1,
|
| 95 |
+
"input_tokens": 135208,
|
| 96 |
+
"output_tokens": 1311,
|
| 97 |
+
"total_tokens": 136519,
|
| 98 |
+
"estimated_api_equivalent_usd": 0.0706364,
|
| 99 |
+
"simulation_time_s": 3.9499999999997595
|
| 100 |
}
|
| 101 |
]
|
| 102 |
}
|
index.html
CHANGED
|
@@ -1,44 +1,25 @@
|
|
| 1 |
<!doctype html>
|
| 2 |
<html lang="en">
|
| 3 |
<head>
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
|
|
|
| 10 |
</head>
|
| 11 |
<body>
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
</section>
|
| 24 |
-
<div class="section-line"><h2>Three ways to act</h2><span>Native simulator outcomes</span></div>
|
| 25 |
-
<p class="scope" id="scope">Loading validated results…</p>
|
| 26 |
-
<div id="episodes" class="episode-grid" aria-live="polite"></div>
|
| 27 |
-
<p class="caption">Videos show simulation time. Planning and inference pauses are omitted; wall time is reported separately.</p>
|
| 28 |
-
<section id="inspection" class="inspection" hidden aria-labelledby="inspection-title">
|
| 29 |
-
<div class="section-line"><h2 id="inspection-title">Inside the episode</h2><button id="close-inspection" class="quiet">Close ×</button></div>
|
| 30 |
-
<p id="inspection-note"></p>
|
| 31 |
-
<div id="inspection-content"></div>
|
| 32 |
-
</section>
|
| 33 |
-
<section class="reading">
|
| 34 |
-
<p class="eyebrow">WHAT THIS RUN SHOWS</p>
|
| 35 |
-
<h2>Delegation worked.<br>Planning benefit remains an open question.</h2>
|
| 36 |
-
<p>B2 inspected the scene and interfaces, then passed the whole task to the VLA in one accepted call. There is no evident task decomposition in this episode. B0 also succeeded. These observations motivate controlled behavior comparisons; they do not establish a general advantage for agent + VLA.</p>
|
| 37 |
-
<p>B1 reached the native control-step limit. Its failure is retained alongside the successful episodes, with the full observable tool trace.</p>
|
| 38 |
-
</section>
|
| 39 |
-
<details class="protocol"><summary>Protocol, provenance & downloads</summary><div id="protocol-content"></div></details>
|
| 40 |
-
</main>
|
| 41 |
-
<footer><span>Programmable VLA / research in progress</span><nav><a href="data/report.json">Result JSON</a><a href="data/manifest.json">Checksums</a><a href="https://forge.coreweave.com/wandb/programmable_vla">W&B team ↗</a><a href="https://huggingface.co/spaces/RLE-Bench/programmable-vla/tree/main">Files ↗</a></nav></footer>
|
| 42 |
-
<noscript><p>Enable JavaScript to inspect the results, or download <a href="data/report.json">the result JSON</a>.</p></noscript>
|
| 43 |
</body>
|
| 44 |
</html>
|
|
|
|
| 1 |
<!doctype html>
|
| 2 |
<html lang="en">
|
| 3 |
<head>
|
| 4 |
+
<meta charset="utf-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
| 6 |
+
<meta name="description" content="Programmable VLA experiments: robot recordings, agent sessions, tool calls and measured usage.">
|
| 7 |
+
<meta name="theme-color" content="#756ee4">
|
| 8 |
+
<title>Programmable VLA — RLE-Bench</title>
|
| 9 |
+
<link rel="stylesheet" href="style.css">
|
| 10 |
+
<script src="app.js" defer></script>
|
| 11 |
</head>
|
| 12 |
<body>
|
| 13 |
+
<a class="skip" href="#main">Skip to results</a>
|
| 14 |
+
<header class="site-header"><div class="header-inner"><a class="brand" href="#B2/overview"><span class="brand-icon">P</span><strong>programVLA</strong><span class="brand-divider">/</span><span>experiments</span></a><nav><a href="#B2/overview">Results</a><a href="#protocol">Protocol</a><a href="https://forge.coreweave.com/wandb/programmable_vla" target="_blank" rel="noopener">W&B ↗</a></nav><a class="header-link" href="https://huggingface.co/spaces/RLE-Bench/programmable-vla/tree/main" target="_blank" rel="noopener">Hugging Face ↗</a></div></header>
|
| 15 |
+
<main id="main" tabindex="-1">
|
| 16 |
+
<section class="hero"><div><p class="eyebrow">AGENT × VISION-LANGUAGE-ACTION</p><h1>Programmable <span>VLA</span></h1><p>Compare execution, delegation and agent behavior.</p></div><div class="hero-facts"><div><strong>3</strong><span>valid episodes</span></div><div><strong>1</strong><span>LIBERO task</span></div><div><strong>0</strong><span>seed / init state</span></div></div></section>
|
| 17 |
+
<div id="methods" class="method-cards" aria-label="Select method"></div>
|
| 18 |
+
<section id="experiment"><div class="task-heading"><div><p class="eyebrow">LIBERO / SPATIAL-01</p><h2>Bowl between plate and ramekin → center of plate</h2></div><span class="pill">600 control steps</span></div><nav id="tabs" class="detail-nav" aria-label="Episode sections"></nav><div id="detail" aria-live="polite"><p class="loading">Loading recorded results…</p></div></section>
|
| 19 |
+
<details id="protocol" class="protocol panel"><summary>Protocol & sources</summary><div id="protocol-content"></div></details>
|
| 20 |
+
</main>
|
| 21 |
+
<footer><span>RLE-Bench · Programmable VLA</span><div><a href="data/report.json">Results JSON</a><a href="data/manifest.json">File manifest</a><a href="https://huggingface.co/spaces/RLE-Bench/kinex-benchmark-native-budget-with-robobridge">Kinex benchmark ↗</a></div></footer>
|
| 22 |
+
<dialog id="image-viewer"><div class="viewer-toolbar"><span id="image-label">Recorded observation</span><a id="image-original" target="_blank" rel="noopener">Original ↗</a><button id="close-viewer" aria-label="Close image">×</button></div><img id="viewer-image" alt="Recorded robot observation"></dialog>
|
| 23 |
+
<noscript><p><a href="data/report.json">Download the result index.</a></p></noscript>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
</body>
|
| 25 |
</html>
|
style.css
CHANGED
|
@@ -1,4 +1,5 @@
|
|
| 1 |
-
:root{color-
|
| 2 |
-
*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:15px/1.6 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}a{color:inherit;text-underline-offset:4px}a:hover{color:var(--green)}button,select{font:inherit}button,a,summary,select{touch-action:manipulation}button,summary,select{cursor:pointer}:focus-visible{outline:3px solid #b78220;outline-offset:4px}header,main,footer{max-width:1240px;margin:auto;padding:0 40px}header{height:94px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);font-size:12px}header a{text-decoration:none}.brand{display:flex;align-items:center;gap:12px;font-weight:750;letter-spacing:1.6px}.brand-icon{display:grid;place-items:center;width:32px;height:32px;background:var(--green);color:white;border-radius:9px;font-size:20px;font-family:Georgia,serif}.intro{padding:66px 0 52px}.eyebrow{font-size:11px;letter-spacing:1.8px;font-weight:750;margin:0 0 18px}.eyebrow span{color:var(--muted);margin-left:18px;font-weight:500}h1{font-size:clamp(42px,5.5vw,72px);font-weight:500;line-height:1.06;letter-spacing:-3px;margin:0 0 24px}h2{font-weight:600;letter-spacing:-.5px;line-height:1.25;margin:0}h3{margin:0;font-size:18px}.lead{font-size:18px;color:var(--muted);max-width:590px}.tags{display:flex;gap:8px;flex-wrap:wrap;margin-top:27px}.tags span{font-size:11px;border:1px solid var(--line);padding:5px 10px;border-radius:4px}.tags span:first-child{background:#e4ece3;border-color:#e4ece3}.task-panel{display:grid;grid-template-columns:1fr 240px;background:#edf0e6;border:1px solid var(--line);padding:26px 30px;border-radius:10px;gap:40px;margin-bottom:40px}.task-panel .eyebrow{margin-bottom:8px}.task-panel h2{font-size:24px}.task-panel p:last-child{max-width:650px;margin:10px 0 0}.task-meta{display:flex;flex-direction:column;justify-content:center;padding-left:25px;border-left:1px solid #cbd4c6;font-size:12px;color:var(--muted);gap:3px}.task-meta strong{color:var(--ink);margin-bottom:4px}.section-line{display:flex;align-items:center;justify-content:space-between;gap:12px}.section-line h2{font-size:23px}.section-line>span{font-size:12px;color:var(--muted)}.scope{color:var(--muted);font-size:13px;max-width:850px;margin:12px 0 24px}.episode-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.episode{background:#fff;border:1px solid var(--line);border-radius:10px;overflow:hidden}.card-top{padding:18px 18px 15px;display:flex;justify-content:space-between;align-items:center}.method{display:inline-block;font-size:11px;letter-spacing:1px;color:var(--muted);margin-bottom:5px}.badge{border-radius:20px;padding:4px 9px;font-size:11px;white-space:nowrap;background:#e5efe6;color:#236040}.badge.fail{background:#fbefd8;color:#875c17}.episode video{display:block;width:100%;aspect-ratio:1;object-fit:contain;background:#e8e7e0}.camera-bar{padding:9px 18px;background:#f7f8f4;display:flex;align-items:center;justify-content:space-between;font-size:11px;color:var(--muted)}select{background:transparent;color:var(--ink);font-size:11px;border:1px solid var(--line);padding:4px 6px;border-radius:4px;max-width:150px}.metrics{display:grid;grid-template-columns:1fr 1fr;gap:17px 12px;padding:18px;margin:0}.metrics dt{font-size:11px;color:var(--muted)}.metrics dd{font-size:20px;line-height:1.4;font-variant-numeric:tabular-nums;margin:2px 0 0}.metrics small{font-size:11px;color:var(--muted)}.inspect{margin:0 18px 18px;width:calc(100% - 36px);padding:10px 12px;background:#f3f5ee;border:1px solid var(--line);border-radius:5px;text-align:left;color:var(--ink);display:flex;justify-content:space-between;font-size:12px}.inspect:hover{background:#e6eddf}.caption{font-size:11px;color:var(--muted);margin:16px 0 0}.inspection{margin-top:32px;border:1px solid #bbccbd;background:white;border-radius:10px;padding:26px}.quiet{border:0;background:transparent;color:var(--muted);font-size:12px}.inspection>p{font-size:14px;max-width:800px;color:var(--muted)}details{border-top:1px solid var(--line);padding:16px 0}summary{font-size:14px;font-weight:600}details[open]>summary{margin-bottom:16px}pre{font:12px/1.65 ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere;background:#f2f4ee;border-radius:6px;padding:16px;max-height:460px;overflow:auto}p,code{overflow-wrap:anywhere}.download-links{display:flex;flex-wrap:wrap;gap:8px 18px;font-size:12px;margin:16px 0}.io-grid,.image-pair{display:grid;grid-template-columns:1fr 1fr;gap:16px}.io-grid h3{font-size:13px}.image-pair img{width:100%;max-width:340px;border-radius:5px}.policy-view{margin:18px 0}.policy-view label{font-size:12px;display:block;margin-bottom:15px}.policy-view select{margin-left:10px}.session-message{padding:12px 0}.session-message summary{font-size:12px;font-weight:500}.session-message img{max-width:100%;max-height:400px;object-fit:contain}.reading{margin:62px 0 42px;display:grid;grid-template-columns:1fr 1fr;gap:10px 45px}.reading .eyebrow{grid-column:1/-1;margin-bottom:7px;color:var(--green)}.reading h2{font-size:29px;line-height:1.28;grid-row:2/4;max-width:450px}.reading>p:not(.eyebrow){margin:0;font-size:14px;color:var(--muted)}.protocol{padding:20px 0 26px}.protocol p{font-size:13px;max-width:900px}footer{padding-top:24px;padding-bottom:36px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:20px;font-size:11px;color:var(--muted)}footer nav{display:flex;gap:20px;flex-wrap:wrap}.error{color:#a14026;background:#ffede3;padding:16px;border-radius:6px}body:has(.inspection:not([hidden])) .inspect[aria-expanded="true"]{background:var(--green);color:white}
|
| 3 |
-
@media(max-width:
|
| 4 |
-
@media(max-width:
|
|
|
|
|
|
| 1 |
+
:root{font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#272b34;background:#f7f8fb;font-size:14px;--ink:#272b34;--muted:#687083;--line:#e5e7ef;--purple:#756ee4;--purple-dark:#5d56ca;--lavender:#f0effd;--green:#1e755c;--red:#a14b47;--radius:14px;color-scheme:light;font-synthesis:none}
|
| 2 |
+
*{box-sizing:border-box}body{margin:0}a{color:inherit;text-decoration:none}a:hover{color:var(--purple-dark)}button,input,select{font:inherit}button{cursor:pointer;color:inherit;border:0;background:none}button,a,input,select,summary{touch-action:manipulation}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid #b7b2ff;outline-offset:3px}h1,h2,h3,p{margin:0}h1,h2,h3{letter-spacing:-.035em}h1{font-size:43px;font-weight:680;line-height:1.13}h2{font-size:21px;font-weight:650}h3{font-size:15px;font-weight:650}p{line-height:1.65}code,pre{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}pre{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.65;font-size:12px;font-variant-ligatures:none;max-height:540px;overflow:auto}p,code{overflow-wrap:anywhere}[hidden]{display:none!important}.skip{position:absolute;top:-80px;background:#fff;padding:12px;z-index:100}.skip:focus{top:0}.site-header{background:#fffffff2;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20;backdrop-filter:blur(12px)}.header-inner{max-width:1440px;margin:auto;padding:0 46px;min-height:76px;display:flex;align-items:center;gap:30px}.brand{display:flex;align-items:center;gap:11px;margin-right:auto;white-space:nowrap;font-size:15px}.brand strong{font-size:22px;letter-spacing:-.8px}.brand-icon{display:grid;place-items:center;background:var(--purple);color:white;width:33px;height:33px;border-radius:9px;font-size:23px;font-weight:750}.brand-divider{color:#d3d4df;font-size:22px}.header-inner nav{display:flex;gap:25px;font-size:12px;color:var(--muted)}.header-link{font-size:11px;border-left:1px solid var(--line);padding-left:25px;color:var(--muted)}main{max-width:1440px;padding:34px 46px 45px;margin:auto;min-height:75vh;outline:none}.eyebrow{font-size:10px;letter-spacing:1.45px;font-weight:650;color:var(--purple);line-height:1.5;text-transform:uppercase}.hero{display:flex;align-items:center;justify-content:space-between;gap:30px;margin:4px 0 30px}.hero .eyebrow{margin-bottom:12px}.hero h1 span{color:var(--purple)}.hero p:not(.eyebrow){color:var(--muted);margin-top:12px}.hero-facts{display:flex;text-align:center;gap:0}.hero-facts>div{padding:0 25px;border-left:1px solid var(--line)}.hero-facts>div:first-child{border:0}.hero-facts strong{display:block;font-size:29px;font-weight:600}.hero-facts span{font-size:11px;color:var(--muted)}.method-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.method-card{position:relative;display:block;border:1px solid var(--line);border-radius:var(--radius);background:#fff;padding:19px 21px;overflow:hidden;box-shadow:0 3px 5px #29274903;text-align:left;transition:border-color .15s,box-shadow .15s}.method-card:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--variant)}.method-card.active{border-color:var(--variant);box-shadow:0 0 0 1px var(--variant)}.method-card:hover{color:inherit;box-shadow:0 5px 17px #3029660c}.card-header{display:flex;align-items:center;justify-content:space-between;gap:10px}.method-label{font-weight:650;font-size:15px}.method-id{font-size:11px;color:var(--variant);margin-right:8px}.badge{font-size:10px;border-radius:20px;background:#eaf5ef;color:var(--green);padding:4px 9px;white-space:nowrap}.badge.fail{background:#fcf0ed;color:var(--red)}.card-model{font-size:11px;color:var(--muted);margin-top:8px}.card-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:17px}.card-stats strong{display:block;font-size:18px;letter-spacing:-.5px;font-weight:600;font-variant-numeric:tabular-nums}.card-stats span{font-size:10px;color:var(--muted)}.task-heading{display:flex;align-items:center;justify-content:space-between;gap:20px;margin:34px 0 20px}.task-heading .eyebrow{margin-bottom:7px}.task-heading h2{font-size:22px}.pill{font-size:11px;color:var(--muted);border:1px solid var(--line);padding:6px 10px;border-radius:6px;white-space:nowrap}.detail-nav{display:flex;gap:24px;align-items:center;border-bottom:1px solid var(--line);margin-bottom:22px;overflow:auto;white-space:nowrap}.detail-nav a{padding:0 0 13px;font-size:12px;color:var(--muted);border-bottom:2px solid transparent}.detail-nav a.active{color:var(--purple-dark);border-color:var(--purple);font-weight:650}.detail-nav small{font-size:10px;margin-left:5px;background:#eceef5;padding:2px 5px;border-radius:4px}.panel{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:22px}.episode-layout{display:grid;grid-template-columns:minmax(0,1fr) 295px;gap:20px;align-items:stretch}.video-panel{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:#fff;display:flex;flex-direction:column}.video-caption,.video-toolbar{display:flex;align-items:center;justify-content:space-between;padding:11px 16px;font-size:11px;color:var(--muted);gap:12px}.video-caption{border-bottom:1px solid var(--line)}video{width:100%;display:block;aspect-ratio:2/1;background:#17191d}.video-toolbar{margin-top:auto}.video-toolbar>div{display:flex;gap:8px}.video-toolbar label{display:flex;align-items:center;gap:8px}.video-toolbar select{font-size:11px}.button{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line);background:#fff;border-radius:6px;padding:7px 11px;font-size:11px;gap:6px}.button:hover{background:var(--lavender);color:var(--purple-dark)}select,input{border:1px solid var(--line);border-radius:6px;background:#fff;padding:8px 10px;color:var(--ink);font-size:12px}select{max-width:100%}.result-head{display:flex;justify-content:space-between;align-items:center}.result-number{font-size:35px;letter-spacing:-1px;font-weight:650;margin-top:18px;line-height:1.3}.result-number span{font-size:12px;color:var(--muted);letter-spacing:0;font-weight:400}.completion-track{background:#eceef6;border-radius:6px;height:5px;overflow:hidden;margin:12px 0 20px}.completion-track span{display:block;height:100%;background:var(--purple)}.facts{display:grid;grid-template-columns:1fr auto;gap:10px;font-size:12px;margin:0}.facts dt{color:var(--muted)}.facts dd{margin:0;font-variant-numeric:tabular-nums;text-align:right}.metric-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:18px 0}.metric{padding:18px 20px;background:#fff;border:1px solid var(--line);border-radius:10px}.metric strong{display:block;font-size:23px;font-weight:600;letter-spacing:-.7px;font-variant-numeric:tabular-nums}.metric span{display:block;font-size:11px;color:var(--muted);margin-top:5px}.observation{display:flex;align-items:baseline;gap:18px;font-size:13px;margin:20px 0 0}.observation span{color:var(--muted)}.panel-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px}.panel-heading h2{font-size:18px}.links{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--purple-dark)}.instruction{font-size:17px;line-height:1.7;max-width:900px}.instruction-full{margin-top:20px}details summary{cursor:pointer;font-size:13px}details[open]>summary{margin-bottom:14px}.code{background:#f6f7fa;border:1px solid #eef0f5;border-radius:7px;padding:16px}.session-toolbar{display:flex;gap:10px;align-items:center;margin-bottom:18px;flex-wrap:wrap}.session-toolbar input{flex:1;min-width:160px}.session-toolbar span{font-size:11px;color:var(--muted)}.event{border:1px solid var(--line);border-radius:8px;margin-top:10px;overflow:hidden}.event summary{display:flex;align-items:center;gap:12px;list-style:none;padding:13px 15px;font-size:12px;background:#fafbfe}.event summary::before{content:'›';color:var(--purple);font-size:18px}.event[open]>summary{margin-bottom:0}.event[open]>summary::before{transform:rotate(90deg)}.event .event-id{color:var(--muted);font-size:10px;font-variant-numeric:tabular-nums}.event .event-name{font-weight:600}.event .event-preview{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.event-body{padding:16px;display:grid;gap:14px}.event-body h3{font-size:12px}.event-body img{display:block;max-width:100%;max-height:320px;object-fit:contain;cursor:zoom-in}.session-more{margin-top:18px;text-align:center}.io-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.io-grid h3{margin-bottom:10px}.image-pair{display:grid;grid-template-columns:1fr 1fr;gap:15px;margin:16px 0}.image-pair figure{margin:0}.image-pair img{width:100%;max-width:360px;cursor:zoom-in;border-radius:6px}.image-pair figcaption{font-size:11px;color:var(--muted);margin-top:4px}.section-gap{margin-top:20px}.artifact-list{display:grid;grid-template-columns:280px minmax(0,1fr);gap:20px}.artifact-nav{display:flex;flex-direction:column;gap:6px}.artifact-nav button{padding:11px;text-align:left;border:1px solid var(--line);border-radius:6px;font-size:11px;overflow-wrap:anywhere}.artifact-nav button.active{background:var(--lavender);border-color:#c9c5f4;color:var(--purple-dark)}.data-table{width:100%;border-collapse:collapse;font-size:12px}.data-table th{text-align:left;color:var(--muted);font-weight:500;background:#f8f9fc}.data-table td,.data-table th{padding:12px 14px;border-bottom:1px solid var(--line)}.data-table td:not(:first-child),.data-table th:not(:first-child){text-align:right;font-variant-numeric:tabular-nums}.table-wrap{overflow:auto}.caption{font-size:11px;color:var(--muted);margin-top:14px;line-height:1.6}.protocol{margin-top:28px;scroll-margin-top:100px}.protocol summary{font-weight:600}.protocol p{font-size:13px;margin-top:12px;max-width:950px}.protocol .links{margin-top:16px}.loading{padding:45px;text-align:center;color:var(--muted)}.empty{padding:28px;color:var(--muted);font-size:13px;text-align:center}.error{padding:16px;background:#fcf0ed;color:var(--red);border-radius:6px}.gallery{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.gallery img{width:100%;cursor:zoom-in}.gallery figure{margin:0}.gallery figcaption{font-size:11px;color:var(--muted)}footer{max-width:1440px;margin:auto;padding:24px 46px 35px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:20px;font-size:11px;color:var(--muted)}footer>div{display:flex;gap:18px;flex-wrap:wrap}dialog{border:1px solid var(--line);border-radius:12px;padding:18px;max-width:94vw;max-height:94vh}dialog::backdrop{background:#131625bb;backdrop-filter:blur(4px)}.viewer-toolbar{display:flex;gap:25px;align-items:center;margin-bottom:12px;font-size:12px}.viewer-toolbar span{margin-right:auto}.viewer-toolbar button{font-size:25px}dialog>img{max-width:86vw;max-height:77vh;object-fit:contain;display:block}#experiment{scroll-margin-top:96px}
|
| 3 |
+
@media(max-width:1000px){.header-inner,main,footer{padding-left:26px;padding-right:26px}.header-inner{gap:20px}.header-link{display:none}.hero-facts>div{padding:0 16px}.episode-layout{grid-template-columns:minmax(0,1fr) 240px}.result-panel{padding:18px}.method-card{padding:16px}.method-label{font-size:14px}.card-stats strong{font-size:16px}.detail-nav{gap:20px}.artifact-list{grid-template-columns:220px minmax(0,1fr)}}
|
| 4 |
+
@media(max-width:720px){.header-inner,main,footer{padding-left:18px;padding-right:18px}.header-inner{min-height:65px}.brand>span:last-child,.brand-divider{display:none}.brand strong{font-size:19px}.header-inner nav{gap:14px;font-size:11px}.hero{align-items:flex-start;flex-direction:column;gap:20px;margin-bottom:24px}h1{font-size:35px}.hero-facts{width:100%;justify-content:space-between}.hero-facts>div{flex:1;padding:0 10px}.hero-facts strong{font-size:25px}.method-cards{grid-template-columns:1fr;gap:10px}.method-card{padding:13px 16px}.card-stats{margin-top:10px}.card-model{margin-top:4px}.card-stats strong{font-size:17px}.task-heading{margin-top:25px;gap:10px}.task-heading h2{font-size:19px}.task-heading>.pill{display:none}.detail-nav{gap:19px}.episode-layout{grid-template-columns:1fr}.result-panel .facts{grid-template-columns:1fr 1fr}.result-number{margin-top:12px}.metric-grid{grid-template-columns:1fr 1fr;gap:10px}.metric{padding:14px}.metric strong{font-size:21px}.observation{display:block}.observation strong{display:block;margin-bottom:7px}.panel{padding:17px}.panel-heading{align-items:flex-start}.panel-heading h2{font-size:16px}.io-grid{grid-template-columns:1fr}.artifact-list{grid-template-columns:1fr}.artifact-nav{flex-direction:row;overflow:auto}.artifact-nav button{min-width:170px}.image-pair{gap:10px}.gallery{grid-template-columns:1fr 1fr}.video-toolbar{padding:10px}.video-toolbar>div{gap:5px}.video-toolbar .button{padding:6px}.event summary{padding:10px;gap:8px}.event-preview{display:none}.event-body{padding:12px}.session-toolbar input{min-width:130px}.data-table td,.data-table th{padding:10px 8px}footer{flex-direction:column}main{padding-top:24px}}
|
| 5 |
+
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
|