diff --git a/src/cli.rs b/src/cli.rs index 2493931..b919e6b 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -1377,6 +1377,8 @@ fn response_debug_report( latency_ms: response.elapsed_ms, ttft_ms: response.first_token_ms, ttft_latency_delta_ms, + chunk_count: response.chunk_elapsed_ms.len(), + chunk_elapsed_ms: response.chunk_elapsed_ms.clone(), has_think_tags, }) } @@ -2013,6 +2015,7 @@ mod tests { status: 200, elapsed_ms: 1_500, first_token_ms: Some(750), + chunk_elapsed_ms: vec![100, 750], }; let debug = response_debug_report( @@ -2031,6 +2034,8 @@ mod tests { assert_eq!(debug.latency_ms, 1_500); assert_eq!(debug.ttft_ms, Some(750)); assert_eq!(debug.ttft_latency_delta_ms, Some(750)); + assert_eq!(debug.chunk_count, 2); + assert_eq!(debug.chunk_elapsed_ms, vec![100, 750]); assert!(!debug.has_think_tags); } @@ -2041,6 +2046,7 @@ mod tests { status: 200, elapsed_ms: 5_000, first_token_ms: Some(100), + chunk_elapsed_ms: vec![100], }; let debug = response_debug_report(None, None, None, "prompt".to_string(), &response) @@ -2058,6 +2064,7 @@ mod tests { status: 200, elapsed_ms: 2_000, first_token_ms: None, + chunk_elapsed_ms: Vec::new(), }; let debug = response_debug_report( diff --git a/src/protocols/anthropic.rs b/src/protocols/anthropic.rs index fbff5fa..9c42bc8 100644 --- a/src/protocols/anthropic.rs +++ b/src/protocols/anthropic.rs @@ -114,6 +114,7 @@ pub async fn send(client: &Client, request: &ModelRequest) -> Result Result = None; + let mut chunk_elapsed_ms = Vec::new(); let mut current_event = String::new(); let mut done = false; @@ -207,6 +209,7 @@ pub async fn send_stream(client: &Client, request: &ModelRequest) -> Result Result Result Result = None; + let mut chunk_elapsed_ms = Vec::new(); while let Some(chunk) = stream.next().await { let chunk = match chunk { @@ -200,6 +202,7 @@ pub async fn send_stream(client: &Client, request: &ModelRequest) -> Result Result Result Result = None; + let mut chunk_elapsed_ms = Vec::new(); let mut done = false; while let Some(chunk) = stream.next().await { @@ -197,6 +199,7 @@ pub async fn send_stream(client: &Client, request: &ModelRequest) -> Result Result, pub ttft_latency_delta_ms: Option, + pub chunk_count: usize, + pub chunk_elapsed_ms: Vec, pub has_think_tags: bool, } @@ -416,6 +418,8 @@ mod tests { latency_ms: 1000, ttft_ms: Some(1000), ttft_latency_delta_ms: Some(0), + chunk_count: 2, + chunk_elapsed_ms: vec![100, 1000], has_think_tags: true, }], }; @@ -427,6 +431,8 @@ mod tests { assert!(json.contains("\"duration\":\"60s\"")); assert!(json.contains("\"debug_requests\"")); assert!(json.contains("\"reason\":\"near_ttft_latency\"")); + assert!(json.contains("\"chunk_count\":2")); + assert!(json.contains("\"chunk_elapsed_ms\":[100,1000]")); assert!(json.contains("\"has_think_tags\":true")); } diff --git a/src/runner.rs b/src/runner.rs index 1519334..bfb11ec 100644 --- a/src/runner.rs +++ b/src/runner.rs @@ -243,6 +243,7 @@ pub struct ModelResponse { pub status: u16, pub elapsed_ms: u128, pub first_token_ms: Option, + pub chunk_elapsed_ms: Vec, } pub async fn run_model_request(