///|
pub(all) struct Session {
messages : Array[Message]
metadata : Map[String, Json]
} derive(Eq, Debug)
///|
pub(all) enum TurnEvent {
TurnStarted
ToolCallPending(ToolCall)
ToolCallResult(call~ : ToolCall, result~ : ToolResult, is_error~ : Bool)
ModelResponseReceived(
message~ : Message,
usage~ : Usage?,
reasoning_content~ : String?
)
SessionRedirect(
from~ : String,
to~ : String,
messages_before~ : Int,
messages_after~ : Int
)
TurnCompleted
TurnFailed(String)
ToolCallDeferred(call~ : ToolCall, reason~ : String)
StreamChunkReceived(chunk~ : StreamChunk)
Custom(source~ : String, label~ : String, data~ : Json)
} derive(Eq, Debug)
///|
pub impl Show for TurnEvent with fn to_string(self) -> String {
match self {
TurnStarted => "TurnStarted"
ToolCallPending(call) => "ToolCallPending(\{call.id})"
ToolCallResult(call~, is_error~, ..) =>
"ToolCallResult(\{call.id}, is_error=\{is_error})"
ModelResponseReceived(..) => "ModelResponseReceived"
SessionRedirect(from~, to~, ..) => "SessionRedirect(from:\{from}, to:\{to})"
TurnCompleted => "TurnCompleted"
TurnFailed(msg) => "TurnFailed(\{msg})"
ToolCallDeferred(call~, reason~) =>
"ToolCallDeferred(\{call.id}, \{reason})"
StreamChunkReceived(..) => "StreamChunkReceived"
Custom(source~, label~, ..) => "Custom(source:\{source}, label:\{label})"
}
}
///|
pub(all) struct TurnResult {
message : Message
tool_results : Array[ToolResult]
final_session_id : String
} derive(Eq, Debug)