@@ -75,28 +75,41 @@ export async function make_api_request(params: {
7575
7676 let stream_start_time = 0
7777 let last_on_chunk_time = 0
78+ let last_total_tokens = 0
7879 let total_tokens = 0
80+ let first_chunk_reported = false
7981
8082 const handle_chunk_metrics = ( chunk : string ) => {
8183 if ( ! params . on_chunk || ! chunk ) return
8284
8385 total_tokens += Math . ceil ( chunk . length / 4 )
84- if ( stream_start_time == 0 ) {
86+ if ( stream_start_time === 0 ) {
8587 stream_start_time = Date . now ( )
8688 last_on_chunk_time = stream_start_time
8789 // Don't calculate TPS on the first chunk, as elapsed time is 0
8890 return
8991 }
9092
9193 const current_time = Date . now ( )
92- if ( current_time - last_on_chunk_time >= 1000 ) {
93- last_on_chunk_time = current_time
94+ const elapsed_since_last = current_time - last_on_chunk_time
95+ if ( elapsed_since_last >= 1000 ) {
96+ // Skip the very first report to avoid inflated TPS
97+ if ( ! first_chunk_reported ) {
98+ first_chunk_reported = true
99+ last_on_chunk_time = current_time
100+ last_total_tokens = total_tokens
101+ return
102+ }
94103
95- const elapsed_seconds = ( current_time - stream_start_time ) / 1000
104+ const tokens_since_last = total_tokens - last_total_tokens
105+ const seconds_since_last = elapsed_since_last / 1000
96106 const tokens_per_second =
97- elapsed_seconds > 0 ? Math . round ( total_tokens / elapsed_seconds ) : 0
98-
107+ seconds_since_last > 0
108+ ? Math . round ( tokens_since_last / seconds_since_last )
109+ : 0
99110 params . on_chunk ( tokens_per_second , total_tokens )
111+ last_on_chunk_time = current_time
112+ last_total_tokens = total_tokens
100113 }
101114 }
102115
0 commit comments