The Trajectory tab

Every chat keeps a record of its work, and the Trajectory tab beside Chat replays that record as a ledger: the turns, the requests Oda sent to the model, the tool calls it made, and the timings it measured while it worked. Open it to see exactly how something was produced, or to inspect what a single request carried. Reading it changes nothing: it replays recorded work and sends nothing to a model.

Open the Trajectory tab

  1. Open a chat and look at the pair of tabs at the top of the conversation.
  2. Select Trajectory next to Chat.

Use the toolbar

The toolbar heads the view, above the timeline.

Watch the timeline

Above the ledger, the timeline draws the same activity in three lanes: Input, Model and Tools.

Read the ledger

The ledger lists the chat's recorded activity in order. Each turn starts with a header reading Turn 1, Turn 2 and so on, and rows gather under Message and Step {step} headings. A compaction that stands alone takes its own Between turns section, headed Compaction {seq}.

Inspect a record

Selecting a row opens Event details beside the ledger. On a narrow window the panel covers the view instead.

Page back through older history

A long chat opens at its newest records, so the oldest part of the record is not loaded at first.

  1. Select Load earlier history at the top of the ledger, or the … strip at the left of the timeline.
  2. While a page loads, the control is disabled and reads Loading earlier history….
  3. When the page arrives, the older records appear above and the row you were reading stays in place.

Questions, answered

What does the Duration control change?

It changes what decides the width of each span in the timeline. By default every operation gets the same width, so the strip shows order and grouping. Press Duration and the spans follow each operation's recorded time instead, so a long call takes a longer span. The tooltip tells you what the press will do: Use actual duration or Use equal-width operations.

Why are some rows dimmed in the ledger?

Because you drew a range on the timeline: the ledger keeps the records active in that range lit and dims the rest. It is a focus, not a filter, and nothing is hidden. Select a span, select empty space, or press Escape or double-click the timeline to clear the range.

What is a SUBTOOL row?

A call Oda made from inside a program it ran. Such calls sit under the call that made them, tagged SUBTOOL, in the order they happened, so you can follow the program's own steps before its result.

Why does a row say Interrupted?

The call was still running when its step or turn closed, so Oda recorded it as an interrupted call and its result was never recorded. Open the row to see what was kept, and run the work again if it is still needed. Oda's steps and tool results shows how the same call looks in the chat itself.

What do Failed, Pending and Completed mean?

Completed means the record finished. Pending means it has not finished yet: a call with no recorded result, or a compaction still running. Failed means it ended in an error, and the failure is kept in the record's details.

What is a Compaction row?

When a long chat no longer fits the model's reading space, Oda shortens its older part and records that as a compaction. In the ledger it shows as a Compaction {seq} row, and one that stands outside a turn sits in Between turns. While it runs it reads Compacting context…; a finished one reads Context compacted; a failed one reads Compaction failed, and one cut off by the chat ending keeps Compaction was interrupted before completion. The chat keeps its full record; the compaction changes what is sent to the model. See System prompt, context and compaction.

Why does a tool record open a Payload tab instead of Code?

The Code tab needs the recorded program together with its arguments. When those arguments were not recorded in a readable form, the record offers Payload with the raw arguments instead of guessing. For a readable program, Code shows the numbered source and offers Copy code.

How do I copy a record's code, output or JSON?

Open the record's Event details and use the copy control in the tab: Copy code for a program's source, Copy output for its result, Copy JSON for recorded JSON. The control confirms with Copied.

What does clicking the Started value switch?

It switches the Started value between your local time, down to milliseconds, and a Unix timestamp in seconds. The tooltip names the next format: Show Unix timestamp or Show local time.

Why does a failed request show a short message instead of the model's error?

When the request needed your DataMind sign-in and it no longer worked, the ledger shows the short sentence Oda uses, such as Your DataMind sign-in ended. Sign in again., Your password changed. Sign in to DataMind again. or DataMind refused access: {reason} Ask your administrator. Sign in again, then send the request; your chats are kept. When a model request failed an authentication check instead, the record shows API key is invalid and never the model service's own text. The full set of messages is in Failures and recovery and Troubleshooting.

Why do the tags and turn numbers change in a narrow window?

To keep the rows readable: when the view is narrow, the kind tags collapse to small icons and turn headers shorten from Turn 1 to #1. Widen the window and the full labels return.

Why does the timeline say No timing data?

Because the chat has nothing recorded to draw yet. The timeline builds its spans from recorded start and time facts; until the chat records some, it shows this line instead of an empty strip.