> ## Documentation Index
> Fetch the complete documentation index at: https://praison.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Events

> React to agent lifecycle events via streaming

Events notify you when important things happen during agent execution. Use the StreamEvent system to track agent progress.

```mermaid theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
graph LR
    subgraph "Event Flow"
        A[🤖 Agent] --> E[📡 StreamEvent]
        E --> S[RequestStart]
        E --> T[DeltaToolCall]
        E --> M[DeltaText]
        E --> D[StreamEnd]
    end
    
    classDef agent fill:#6366F1,stroke:#7C90A0,color:#fff
    classDef event fill:#F59E0B,stroke:#7C90A0,color:#fff
    
    class A agent
    class E,S,T,M,D event
```

## Quick Start

<Steps>
  <Step title="Create and Handle Events">
    ```rust theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
    use praisonai::{StreamEvent, StreamEventType};

    fn handle_event(event: &StreamEvent) {
        match event.event_type {
            StreamEventType::RequestStart => println!("🚀 Starting..."),
            StreamEventType::FirstToken => println!("💬 First response"),
            StreamEventType::DeltaText => {
                if let Some(content) = &event.content {
                    print!("{}", content);
                }
            }
            StreamEventType::DeltaToolCall => println!("🔧 Tool call"),
            StreamEventType::ToolCallEnd => println!("✅ Tool done"),
            StreamEventType::StreamEnd => println!("\n🏁 Complete"),
            StreamEventType::Error => {
                if let Some(err) = &event.error {
                    eprintln!("❌ Error: {}", err);
                }
            }
            _ => {}
        }
    }
    ```
  </Step>

  <Step title="Create Events">
    ```rust theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
    use praisonai::StreamEvent;

    // Factory methods for common events
    let start = StreamEvent::request_start();
    let text = StreamEvent::delta_text("Hello, world!");
    let end = StreamEvent::stream_end();
    let error = StreamEvent::error_event("Something went wrong");
    ```
  </Step>
</Steps>

***

## StreamEventType

| Event             | When                    |
| ----------------- | ----------------------- |
| `RequestStart`    | Before API call         |
| `HeadersReceived` | HTTP headers arrive     |
| `FirstToken`      | First content received  |
| `DeltaText`       | Text content chunk      |
| `DeltaToolCall`   | Tool call in progress   |
| `ToolCallEnd`     | Tool finished executing |
| `LastToken`       | Final content chunk     |
| `StreamEnd`       | Stream completed        |
| `Error`           | Error occurred          |

***

## StreamEvent Structure

```rust theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
pub struct StreamEvent {
    pub event_type: StreamEventType,
    pub content: Option<String>,
    pub tool_call: Option<ToolCallData>,
    pub error: Option<String>,
    pub timestamp: DateTime<Utc>,
    pub is_reasoning: bool,
    pub agent_id: Option<String>,
    pub session_id: Option<String>,
}
```

***

## Related

<CardGroup cols={2}>
  <Card title="Streaming" icon="stream" href="/docs/rust/streaming">
    Enable streaming responses
  </Card>

  <Card title="Callbacks" icon="phone" href="/docs/rust/callbacks">
    React to stream events
  </Card>
</CardGroup>
