--- /tmp/evalscope-sync/src-v191/evalscope/models/openai_responses.py 2026-07-21 03:18:18.000000000 +0000 +++ /data1/syy/evalscope/evalstone/evalscope/evalscope/models/openai_responses.py 2026-09-01 03:48:30.959904179 +0000 @@ -74,27 +74,29 @@ ) -> ModelOutput: request, tools, config = self._build_request(input, tools, tool_choice, config) - try: - t_start = time.monotonic() - ttft: Optional[float] = None - - response = retry_call( - self.client.responses.create, - retries=config.retries, - sleep_interval=config.retry_interval, - **request, - ) - if not self._is_response_object(response): - response, ttft = collect_response_stream(response, request_start=t_start) - - total_time = time.monotonic() - t_start - return self._build_output(response, tools, total_time, ttft) - - except (BadRequestError, UnprocessableEntityError, PermissionDeniedError) as ex: - return self.handle_bad_request(ex) - except ValueError as ex: - logger.error(f'Model [{self.model_name}] returned an invalid response: {ex}') - raise + with self._track_logical_request(): + try: + t_start = time.monotonic() + ttft: Optional[float] = None + + response = retry_call( + self.client.responses.create, + retries=config.retries, + sleep_interval=config.retry_interval, + on_attempt=self.request_stats.on_attempt, + **request, + ) + if not self._is_response_object(response): + response, ttft = collect_response_stream(response, request_start=t_start) + + total_time = time.monotonic() - t_start + return self._build_output(response, tools, total_time, ttft) + + except (BadRequestError, UnprocessableEntityError, PermissionDeniedError) as ex: + return self.handle_bad_request(ex) + except ValueError as ex: + logger.error(f'Model [{self.model_name}] returned an invalid response: {ex}') + raise async def generate_async( self, @@ -105,27 +107,29 @@ ) -> ModelOutput: request, tools, config = self._build_request(input, tools, tool_choice, config) - try: - t_start = time.monotonic() - ttft: Optional[float] = None - - response = await async_retry_call( - self.async_client.responses.create, - retries=config.retries, - sleep_interval=config.retry_interval, - **request, - ) - if not self._is_response_object(response): - response, ttft = await async_collect_response_stream(response, request_start=t_start) - - total_time = time.monotonic() - t_start - return self._build_output(response, tools, total_time, ttft) - - except (BadRequestError, UnprocessableEntityError, PermissionDeniedError) as ex: - return self.handle_bad_request(ex) - except ValueError as ex: - logger.error(f'Model [{self.model_name}] returned an invalid response: {ex}') - raise + with self._track_logical_request(): + try: + t_start = time.monotonic() + ttft: Optional[float] = None + + response = await async_retry_call( + self.async_client.responses.create, + retries=config.retries, + sleep_interval=config.retry_interval, + on_attempt=self.request_stats.on_attempt, + **request, + ) + if not self._is_response_object(response): + response, ttft = await async_collect_response_stream(response, request_start=t_start) + + total_time = time.monotonic() - t_start + return self._build_output(response, tools, total_time, ttft) + + except (BadRequestError, UnprocessableEntityError, PermissionDeniedError) as ex: + return self.handle_bad_request(ex) + except ValueError as ex: + logger.error(f'Model [{self.model_name}] returned an invalid response: {ex}') + raise def _build_request( self,