TheDocumentation Index
Fetch the complete documentation index at: https://daily-docs-pr-4386.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
StartupTimingObserver measures how long each processor’s start() method takes during pipeline startup, and tracks transport connection timing. This is useful for diagnosing startup slowness and identifying initialization bottlenecks such as WebSocket connections, API authentication, or model loading.
Features
- Measures per-processor
start()duration by trackingStartFramepropagation - Reports total pipeline startup time and per-processor breakdown
- Tracks transport connection milestones (bot connected, client connected)
- Emits
on_startup_timing_reportwith processor timing data - Emits
on_transport_timing_reportwith transport connection timing - Supports filtering to measure only specific processor types
- Excludes internal pipeline processors by default
Usage
Basic Startup Monitoring
Add startup monitoring to your pipeline and handle the events:Filtering Processor Types
To measure only specific processor types, pass aprocessor_types tuple:
Configuration
Optional tuple of processor types to measure. If
None, all non-internal
processors are measured. Internal pipeline processors (PipelineSource,
Pipeline) are always excluded.Event Handlers
on_startup_timing_report
Called once after the pipeline has fully started, with timing data for all measured processors.StartupTimingReport):
| Field | Type | Description |
|---|---|---|
start_time | float | Unix timestamp when the first processor began starting |
total_duration_secs | float | Sum of all measured processor start() durations |
processor_timings | List[ProcessorStartupTiming] | Per-processor timing data, in pipeline order |
ProcessorStartupTiming):
| Field | Type | Description |
|---|---|---|
processor_name | str | The name of the processor |
start_offset_secs | float | Offset from the StartFrame to when this processor’s start began |
duration_secs | float | How long the processor’s start() took |
on_transport_timing_report
Called once when the first client connects, with transport connection timing relative to theStartFrame.
TransportTimingReport):
| Field | Type | Description |
|---|---|---|
start_time | float | Unix timestamp of the StartFrame (pipeline start) |
bot_connected_secs | Optional[float] | Seconds from StartFrame to BotConnectedFrame (SFU transports only) |
client_connected_secs | Optional[float] | Seconds from StartFrame to first ClientConnectedFrame |
bot_connected_secs is only set for SFU transports (Daily, LiveKit, HeyGen,
Tavus) that emit a BotConnectedFrame when the bot joins the room. Non-SFU
transports (WebSocket, SmallWebRTC) will have this field set to None.