Skip to main content

ChatEvent

Enum ChatEvent 

Source
pub enum ChatEvent {
    SessionStarted {
        meta: EventMeta,
        session_id: String,
        model: String,
    },
    SessionCompleted {
        meta: EventMeta,
        session_id: String,
        status: SessionStatus,
    },
    RoundStarted {
        meta: EventMeta,
        round_id: String,
        session_id: String,
        model: String,
    },
    RoundCompleted {
        meta: EventMeta,
        round_id: String,
        session_id: String,
        status: RoundStatus,
        usage: TokenUsage,
        latency_ms: u64,
        error: Option<String>,
    },
    ToolCalled {
        meta: EventMeta,
        tool_call_id: String,
        round_id: String,
        session_id: String,
        tool_name: String,
        latency_ms: u64,
        success: bool,
    },
    MessageCountUpdated {
        meta: EventMeta,
        session_id: String,
        message_count: u32,
    },
}
Expand description

Events emitted by the agent loop during chat sessions.

These events track the complete lifecycle of chat interactions within the agent, from session initialization to completion, including all intermediate operations like rounds and tool calls.

§Event Lifecycle

A typical chat session produces events in this order:

  1. SessionStarted - When a new conversation begins
  2. RoundStarted - When the agent begins processing a message
  3. ToolCalled (multiple) - For each tool invocation during the round
  4. RoundCompleted - When the agent finishes processing the message
  5. MessageCountUpdated - When the message count changes
  6. SessionCompleted - When the conversation ends

§Usage

These events are primarily used for:

  • Performance monitoring (latency tracking)
  • Resource usage analysis (token consumption)
  • Behavior analytics (tool usage patterns)
  • Error tracking and debugging

Variants§

§

SessionStarted

Emitted when a new chat session is initialized.

This marks the beginning of a conversation between the user and agent.

Fields

§meta: EventMeta

Event metadata including unique ID and timestamp

§session_id: String

Unique identifier for this chat session

§model: String

The AI model being used for this session (e.g., “gpt-4”, “claude-3”)

§

SessionCompleted

Emitted when a chat session completes or terminates.

This marks the end of a conversation, whether successful or due to an error.

Fields

§meta: EventMeta

Event metadata including unique ID and timestamp

§session_id: String

Unique identifier for the chat session that completed

§status: SessionStatus

Final status of the session (completed, failed, or cancelled)

§

RoundStarted

Emitted when the agent starts processing a new message round.

A round represents a single request-response cycle within a session. Each user message typically triggers one round.

Fields

§meta: EventMeta

Event metadata including unique ID and timestamp

§round_id: String

Unique identifier for this round

§session_id: String

Session this round belongs to

§model: String

The AI model being used for this round

§

RoundCompleted

Emitted when the agent completes processing a message round.

Contains comprehensive metrics about the round including token usage, latency, and any errors that occurred.

Fields

§meta: EventMeta

Event metadata including unique ID and timestamp

§round_id: String

Unique identifier for the round that completed

§session_id: String

Session this round belongs to

§status: RoundStatus

Final status of the round (success or failed)

§usage: TokenUsage

Token consumption during this round

§latency_ms: u64

Total time to process the round in milliseconds

§error: Option<String>

Error message if the round failed, None on success

§

ToolCalled

Emitted when the agent invokes a tool during a round.

Tracks tool execution for understanding agent behavior and measuring tool performance.

Fields

§meta: EventMeta

Event metadata including unique ID and timestamp

§tool_call_id: String

Unique identifier for this tool invocation

§round_id: String

Round this tool call belongs to

§session_id: String

Session this tool call belongs to

§tool_name: String

Name of the tool being invoked (e.g., “read_file”, “execute_command”)

§latency_ms: u64

Time taken to execute the tool in milliseconds

§success: bool

Whether the tool execution succeeded

§

MessageCountUpdated

Emitted when the message count for a session is updated.

This tracks the total number of messages exchanged in the session, including both user and assistant messages.

Fields

§meta: EventMeta

Event metadata including unique ID and timestamp

§session_id: String

Session whose message count was updated

§message_count: u32

New total message count for the session

Trait Implementations§

Source§

impl Clone for ChatEvent

Source§

fn clone(&self) -> ChatEvent

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ChatEvent

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for ChatEvent

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for ChatEvent

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,