Skip to main content

ObserverEvent

Enum ObserverEvent 

Source
pub enum ObserverEvent {
Show 16 variants AgentStart { model_provider: String, model: String, }, LlmRequest { model_provider: String, model: String, messages_count: usize, }, LlmResponse { model_provider: String, model: String, duration: Duration, success: bool, error_message: Option<String>, input_tokens: Option<u64>, output_tokens: Option<u64>, }, AgentEnd { model_provider: String, model: String, duration: Duration, tokens_used: Option<u64>, cost_usd: Option<f64>, }, ToolCallStart { tool: String, tool_call_id: Option<String>, arguments: Option<String>, }, ToolCall { tool: String, tool_call_id: Option<String>, duration: Duration, success: bool, arguments: Option<String>, result: Option<String>, }, TurnComplete, ChannelMessage { channel: String, direction: String, }, HeartbeatTick, CacheHit { cache_type: String, tokens_saved: u64, }, CacheMiss { cache_type: String, }, Error { component: String, message: String, }, DeploymentStarted { deploy_id: String, }, DeploymentCompleted { deploy_id: String, commit_sha: String, }, DeploymentFailed { deploy_id: String, reason: String, }, RecoveryCompleted { deploy_id: String, },
}
Expand description

Discrete events emitted by the agent runtime for observability.

Each variant represents a lifecycle event that observers can record, aggregate, or forward to external monitoring systems. Events carry just enough context for tracing and diagnostics without exposing sensitive prompt or response content.

Variants§

§

AgentStart

The agent orchestration loop has started a new session.

Fields

§model_provider: String
§model: String
§

LlmRequest

A request is about to be sent to an LLM model_provider.

This is emitted immediately before a model_provider call so observers can print user-facing progress without leaking prompt contents.

Fields

§model_provider: String
§model: String
§messages_count: usize
§

LlmResponse

Result of a single LLM model_provider call.

Fields

§model_provider: String
§model: String
§duration: Duration
§success: bool
§error_message: Option<String>
§input_tokens: Option<u64>
§output_tokens: Option<u64>
§

AgentEnd

The agent session has finished.

Carries aggregate usage data (tokens, cost) when the model_provider reports it.

Fields

§model_provider: String
§model: String
§duration: Duration
§tokens_used: Option<u64>
§cost_usd: Option<f64>
§

ToolCallStart

A tool call is about to be executed.

Fields

§tool: String
§tool_call_id: Option<String>

Provider-assigned tool call identifier, when the underlying tool call originated from a native structured tool call block (e.g. OpenAI tool_calls[].id, Anthropic tool_use.id). None for text-parsed (XML/markdown) tool calls.

Observers can correlate ToolCallStartToolCall → the emitting LLM response via this id.

§arguments: Option<String>

Full JSON arguments the agent passed to the tool. None when arguments are unavailable at the call site.

§

ToolCall

A tool call has completed with a success/failure outcome.

Fields

§tool: String
§tool_call_id: Option<String>

Provider-assigned tool call identifier, when present. See ObserverEvent::ToolCallStart::tool_call_id.

§duration: Duration
§success: bool
§arguments: Option<String>

Full JSON arguments the agent passed to the tool.

Carried here (in addition to ToolCallStart) so observers that build a single completed span per tool call — e.g. the OTel exporter — can attach arguments at span-end time without holding per-call state.

§result: Option<String>

Scrubbed tool output or error reason. Populated for both success and failure outcomes so backends can show the actual tool result in trace viewers. Credentials are scrubbed before this field is emitted.

§

TurnComplete

The agent produced a final answer for the current user message.

§

ChannelMessage

A message was sent or received through a channel.

Fields

§channel: String

Channel name (e.g., "telegram", "discord").

§direction: String

"inbound" or "outbound".

§

HeartbeatTick

Periodic heartbeat tick from the runtime keep-alive loop.

§

CacheHit

Response cache hit — an LLM call was avoided.

Fields

§cache_type: String

"hot" (in-memory) or "warm" (SQLite).

§tokens_saved: u64

Estimated tokens saved by this cache hit.

§

CacheMiss

Response cache miss — the prompt was not found in cache.

Fields

§cache_type: String

"response" cache layer that was checked.

§

Error

An error occurred in a named component.

Fields

§component: String

Subsystem where the error originated (e.g., "model_provider", "gateway").

§message: String

Human-readable error description. Must not contain secrets or tokens.

§

DeploymentStarted

A deployment has started.

Fields

§deploy_id: String

Identifier for the deployment (e.g., commit SHA or release tag).

§

DeploymentCompleted

A deployment has completed successfully.

Fields

§deploy_id: String
§commit_sha: String

Commit SHA that was deployed.

§

DeploymentFailed

A deployment has failed.

Fields

§deploy_id: String
§reason: String

Human-readable failure reason.

§

RecoveryCompleted

Recovery from a failed deployment has completed.

Fields

§deploy_id: String

Trait Implementations§

Source§

impl Clone for ObserverEvent

Source§

fn clone(&self) -> ObserverEvent

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for ObserverEvent

Source§

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

Formats the value using the given formatter. 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, 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> 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.