Recovering sessions after a crash

DataMind Oda saves your chats as session log files on your computer as you work. If Oda stops suddenly, for example in a power cut or a forced restart, everything the chat had saved is kept; Oda repairs the unfinished part when you open the chat again.

What Oda keeps after a sudden stop

A stop in the middle of a save can leave an incomplete piece at the end of a chat's log, one that was never finished. When Oda opens that chat again, it serves every complete record and skips only the incomplete piece. It records the recovery with the note:

session "<id>" recovered from a torn tail; incomplete tail bytes were discarded

You do not need to do anything. The next time Oda writes to the chat, it clears the incomplete bytes and saves the recovered records.

For where session logs live and how Oda keeps them, see Session files on your computer.

The turn that was running

If Oda stops in the middle of an answer, the chat's last turn is left open. When you open the chat again, Oda closes it without inventing content:

Earlier messages are unchanged, and the chat is ready to continue.

A command caught by the crash

Oda saves before it acts, so a crash can leave an interrupted call in one of two states:

When you stop a task

If you press Stop in the message box while Oda is still saving a step, before a command starts, the command does not run. The call is recorded as cancelled before dispatch (ABORTED_BEFORE_DISPATCH) and its result says Error: tool call aborted before dispatch. Nothing was executed, so you can ask again if you still need it. See Chat with Oda for stopping a task.

The save points before Oda acts

Oda saves the chat at three points:

  1. Before a request is sent to the model.
  2. Before a command or another tool action runs.
  3. At the end of each step, before the next request is built.

If a save fails, Oda stops instead of continuing on unsaved state: the request or action is refused, you may see Error: disk unavailable, and the turn fails. Work that runs inside a command shares that command's save point. None of these points can be configured.

When another copy is holding the chat

A chat can be held for writing by only one copy of DataMind Oda at a time. When another copy holds the chat, for example because the desktop app and the web app are open side by side, the chat does not open: the refusal carries the code session/writer-held, and the app asks you to quit the other running instances before you try again. This is not damage to the log; the other copy still holds the chat, and quitting it lets the chat open normally.

A damaged record in the log

A crash can also leave a damaged or out-of-order record in the middle of a log. When Oda reads such a log:

For the messages these cases can produce, see Session log problems. A chat written by a different version of Oda is a separate case; see Opening sessions from other versions.

Questions, answered

Why will the chat not open while another copy of Oda is running?

One chat has one writer at a time. When another copy of DataMind Oda, such as the desktop app or the web app, is holding the chat, the open is refused with session/writer-held and the app asks you to quit the other running instances. It is not a problem with the log: quit the other copy, then open the chat again.

Will I lose work when Oda stops suddenly?

No. Everything the chat had saved before the stop is kept. The unfinished part is repaired: an open turn is closed as interrupted, and a call without a saved result is marked so it is not repeated blindly.

What does recovered from a torn tail mean?

Oda found an incomplete piece at the end of the chat's log, usually from a stop in the middle of a save. It opens the chat with every complete record and skips the incomplete piece. The next time Oda writes to the chat, it clears the incomplete bytes.

What happened to the turn that was running?

Oda closes it as interrupted when you open the chat again: the open step ends, calls that had not finished get error results, and the turn is closed. Oda does not invent an answer for the part that never arrived.

Why does a result say a tool call was interrupted?

A stop between a call and its result leaves one of two repairs. If the call had been recorded as started, its outcome is marked as unknown (TOOL_OUTCOME_UNKNOWN). If it had not been recorded as started, it is marked as not started (TOOL_NOT_STARTED), with a note that it can be retried if it is still needed.

What does Do not retry blindly mean?

After an interrupted call with an unknown outcome, Oda cannot tell whether the action ran. The note tells Oda to check what the action did, for example whether a file was written, before repeating it, so the same work is not done twice.

I pressed Stop before a command ran. Did it run?

No. When a stop arrives while Oda is still saving the step, before a command starts, the command does not run: the call is recorded as cancelled before dispatch (ABORTED_BEFORE_DISPATCH) and its result says Error: tool call aborted before dispatch. Ask again if you still need it.

What does Error: disk unavailable mean?

A step could not be saved, so Oda refused to go on: the step was not run and the turn failed. Check the computer's storage and try the request again.

Can I change how Oda saves and recovers chats?

No. The save points and the repairs are part of how Oda runs; there is no setting for them. For where chat logs live on your computer, see Session files on your computer.