Callbacks

React to streaming events for logging, UI updates, and integrations

Stream events let you react to agent activity – update UI, log activity, or integrate with other systems.

Diagram

Event Flow

🤖 Agent

📡 StreamEvent

🖥️ UI Update

📝 Logging

🔗 Integration

Quick Start

  1. Create Stream Events
    rust
    use praisonai::{StreamEvent, StreamEventType};
    
    // Create a text delta event
    let event = StreamEvent::delta_text("Hello, ");
    
    // Create events for different stages
    let start = StreamEvent::request_start();
    let first = StreamEvent::first_token("The");
    let end = StreamEvent::stream_end();
  2. Handle Events
    rust
    use praisonai::{StreamEvent, StreamEventType};
    
    fn handle_event(event: &StreamEvent) {
        match event.event_type {
            StreamEventType::RequestStart => println!("Starting..."),
            StreamEventType::FirstToken => println!("First token: {:?}", event.content),
            StreamEventType::DeltaText => print!("{}", event.content.as_deref().unwrap_or("")),
            StreamEventType::ToolCallEnd => println!("Tool complete"),
            StreamEventType::StreamEnd => println!("\nDone!"),
            StreamEventType::Error => eprintln!("Error: {:?}", event.error),
            _ => {}
        }
    }
  3. Track Metrics
    rust
    use praisonai::StreamMetrics;
    
    let mut metrics = StreamMetrics::new();
    metrics.start();
    
    // ... process stream ...
    
    metrics.end();
    println!("Time to First Token: {:?}ms", metrics.time_to_first_token());
    println!("Total Tokens: {}", metrics.total_tokens());

StreamEventType

Events emitted during streaming.

rust
pub enum StreamEventType {
    RequestStart,    // Before API call
    HeadersReceived, // HTTP headers arrived
    FirstToken,      // First content (TTFT marker)
    DeltaText,       // Text content chunk
    DeltaToolCall,   // Tool call in progress
    ToolCallEnd,     // Tool call complete
    LastToken,       // Final content chunk
    StreamEnd,       // Stream completed
    Error,           // Error occurred
}
EventWhen Triggered
RequestStartBefore API call
HeadersReceivedHTTP headers received
FirstTokenFirst token arrives
DeltaTextEach text chunk
DeltaToolCallTool call delta
ToolCallEndTool execution done
LastTokenFinal token
StreamEndStream finishes
ErrorError occurs

StreamEvent

Structure for streaming events.

rust
pub struct StreamEvent {
    pub event_type: StreamEventType,
    pub content: Option<String>,
    pub tool_call: Option<ToolCallData>,
    pub error: Option<String>,
    pub timestamp: DateTime<Utc>,
    // ... more fields
}

Factory Methods

MethodDescription
request_start()Create start event
first_token(content)Create first token event
delta_text(content)Create text delta event
stream_end()Create end event
error_event(msg)Create error event

Builder Methods

MethodDescription
.content(text)Set content
.tool_call(data)Set tool call data
.error(msg)Set error
.agent_id(id)Set agent ID
.session_id(id)Set session ID
.metadata(k, v)Add metadata

Best Practices

Handle events efficiently

Process events quickly – avoid blocking the stream.

Use for observability

Great for logging, metrics, progress updates, and debugging.

Track TTFT

Use FirstToken event to measure Time To First Token.


Related