Skip to content

Commit df4d552

Browse files
authored
support tool wait in benchmark (#8107)
1 parent ea003c0 commit df4d552

2 files changed

Lines changed: 25 additions & 0 deletions

File tree

benchmarks/backend_request_func.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
# This file is modified from https://github.com/vllm-project/vllm/blob/main/benchmarks/backend_request_func.py
1818

1919

20+
import asyncio
2021
import copy
2122
import io
2223
import json
@@ -91,6 +92,8 @@ class RequestFuncOutput:
9192
metrics: dict = field(default_factory=dict)
9293
tool_calls: list = field(default_factory=list)
9394
output_ids: list = field(default_factory=list)
95+
# 本轮请求之前的环境交互等待时长(秒),来自数据集里对应 tool 消息的 env_interact_time
96+
env_wait_time: float = 0.0
9497

9598

9699
@dataclass
@@ -788,6 +791,19 @@ async def async_request_eb_openai_chat_completions_multi_turn(
788791
) as session:
789792
for i, message in enumerate(ori_history):
790793
if message["role"] == "user" or message["role"] == "tool":
794+
# 模拟真实 rollout 里工具执行 / 环境交互的等待时间:
795+
# 数据集里 tool 消息可能带 env_interact_time(秒), 表示上一步 assistant 生成完到 tool 结果返回的耗时。
796+
turn_env_wait = 0.0
797+
env_delay = message.get("env_interact_time") if isinstance(message, dict) else None
798+
if env_delay and os.environ.get("DISABLE_ENV_TOOL_WAIT", "").lower() not in ("1", "true", "yes", "on"):
799+
try:
800+
delay_sec = float(env_delay)
801+
except (TypeError, ValueError):
802+
delay_sec = 0.0
803+
if delay_sec > 0:
804+
turn_env_wait = delay_sec
805+
await asyncio.sleep(delay_sec)
806+
791807
history.append(message)
792808
round_input = copy.deepcopy(request_func_input)
793809
round_input.history_QA = history
@@ -841,6 +857,7 @@ async def async_request_eb_openai_chat_completions_multi_turn(
841857
)
842858
s1 = time.perf_counter()
843859
llm_time += s1 - s0
860+
output.env_wait_time = turn_env_wait
844861

845862
outputs.append(output)
846863

benchmarks/benchmark_serving.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -995,6 +995,14 @@ def process_one_length(
995995
if args.multi_turn:
996996
process_session_metrics(session_metrics, "session_e2e_time", "Session E2EL")
997997
process_session_metrics(session_metrics, "pure_llm_time", "Session llm_E2EL")
998+
# per-turn 环境等待时长(来自 RequestFuncOutput.env_wait_time)
999+
if "env_wait" in selected_percentile_metrics:
1000+
env_wait_values = [
1001+
o.env_wait_time
1002+
for o in outputs
1003+
if getattr(o, "success", False) and getattr(o, "env_wait_time", 0.0) > 0
1004+
]
1005+
print_metric_from_array(env_wait_values, "Env Wait", is_time=True)
9981006
process_session_metrics(session_metrics, "tool_calls", "Tool Calls", is_time=False)
9991007
process_session_metrics(session_metrics, "input_tokens", "Session Input Tokens", is_time=False)
10001008
process_session_metrics(session_metrics, "output_tokens", "Session Output Tokens", is_time=False)

0 commit comments

Comments
 (0)