diff --git a/vllm/benchmarks/lib/endpoint_request_func.py b/vllm/benchmarks/lib/endpoint_request_func.py index ee6ea65633..f426e78c74 100644 --- a/vllm/benchmarks/lib/endpoint_request_func.py +++ b/vllm/benchmarks/lib/endpoint_request_func.py @@ -376,13 +376,13 @@ async def async_request_openai_chat_completions( output.prompt_len = request_func_input.prompt_len generated_text = "" - ttft = 0.0 st = time.perf_counter() output.start_time = st most_recent_timestamp = st try: async with session.post(url=api_url, json=payload, headers=headers) as response: if response.status == 200: + first_chunk_received = False handler = StreamedResponseHandler() async for chunk_bytes in response.content.iter_any(): chunk_bytes = chunk_bytes.strip() @@ -406,9 +406,9 @@ async def async_request_openai_chat_completions( if choices := data.get("choices"): content = choices[0]["delta"].get("content") # First token - if ttft == 0.0: - ttft = timestamp - st - output.ttft = ttft + if not first_chunk_received: + first_chunk_received = True + output.ttft = timestamp - st # Decoding phase else: @@ -423,7 +423,14 @@ async def async_request_openai_chat_completions( most_recent_timestamp = timestamp output.generated_text = generated_text - output.success = True + if first_chunk_received: + output.success = True + else: + output.success = False + output.error = ( + "Never received a valid chunk to calculate TTFT." + "This response will be marked as failed!" + ) output.latency = most_recent_timestamp - st else: output.error = response.reason or "" @@ -494,7 +501,6 @@ async def async_request_openai_audio( output.input_audio_duration = input_audio_duration generated_text = "" - ttft = 0.0 st = time.perf_counter() output.start_time = st most_recent_timestamp = st @@ -503,6 +509,7 @@ async def async_request_openai_audio( url=api_url, data=form, headers=headers ) as response: if response.status == 200: + first_chunk_received = False handler = StreamedResponseHandler() async for chunk_bytes in response.content.iter_any(): @@ -522,9 +529,9 @@ async def async_request_openai_audio( if choices := data.get("choices"): content = choices[0]["delta"].get("content") # First token - if ttft == 0.0: - ttft = timestamp - st - output.ttft = ttft + if not first_chunk_received: + first_chunk_received = True + output.ttft = timestamp - st # Decoding phase else: @@ -541,7 +548,14 @@ async def async_request_openai_audio( most_recent_timestamp = timestamp output.generated_text = generated_text - output.success = True + if first_chunk_received: + output.success = True + else: + output.success = False + output.error = ( + "Never received a valid chunk to calculate TTFT." + "This response will be marked as failed!" + ) output.latency = most_recent_timestamp - st else: output.error = response.reason or ""