Run training and watch jobs
Studio’s Home page (#/) is split into two columns: Run training on the left, the Jobs list on the right. Clicking a job in the list navigates to Job detail (#/jobs/:id), which is where the live event stream and the loss chart live.
Run training
The Run training panel calls/api/manifest once when the page loads. The response is the project’s createArkor({ trainer }) summary, which the panel uses to label the action:
Run training: <trainer name>once a trainer is found.No trainer in src/arkor/index.ts yet. Add createTrainer(...) and pass it to createArkor.if the bundle imported but exposed nothing.Couldn't read manifest: <error>if the build itself failed (typo insrc/arkor/, etc.).
POST /api/train. The backend spawns arkor start in a subprocess and streams its stdout / stderr back as raw text. The pre-formatted log box auto-scrolls; what you see is exactly what the spawned arkor start would print in a terminal.
There is no input form for picking the trainer or passing flags: Studio always runs the trainer registered through createArkor, and arkor start reuses .arkor/build/index.mjs if it already exists. Edits to src/arkor/ are not picked up automatically across multiple clicks on the same page; reload the Run training page (or run arkor build from a terminal) between edits and the next click. See CLI § build / start for the precise rebuild rules.
Jobs list
The Jobs list pollsGET /api/jobs once at mount, then every 5 seconds. There is no manual refresh button; the interval is fixed.
The list shows whatever order the backend returned. There is no client-side filter, search, or pagination. When the project has no jobs yet, the panel reads
No jobs yet..
Job detail
#/jobs/:id opens a Server-Sent Events connection to GET /api/jobs/:id/events via EventSource. The page listens for five named events plus a stream sentinel:
Stream errors append
[stream error] to the log; reconnect is left to the browser’s EventSource retry behaviour.
The event log keeps only the last 50 lines (older lines drop off as new ones arrive). It is a raw <pre> block, intended for quick inspection rather than full forensic logs; for the complete history, look at the cloud-api directly.
The loss chart is a single SVG path (640 × 200) drawn from training.log events that include a numeric loss. It uses min-max scaling on the y-axis and the step number on the x-axis. There is no zoom, no tooltip, and no export. If no training.log event has arrived yet, the chart slot reads No training.log events yet..
Things this page does not do
- No cancel button. To stop a running job, call
trainer.cancel()from your own code that drives the trainer. Studio does not expose this in the UI today. - No artifact browser. The page reports the artifact count for completed jobs but does not list or link to individual artifacts. For full artifact access, use the cloud-api or the SDK’s
onCompleted({ artifacts })callback during the run. - No mid-run inference. The Playground is for completed jobs only (see Playground). For live inspection during a run, use the SDK’s
onCheckpoint({ infer }).