
import gc
import threading
import time

import psutil
import torch
class       _lowerCAmelCase  :

 """simple docstring"""

 def __init__(						self			:			Optional[int]   ):






      """simple docstring"""



      UpperCamelCase						    =					psutil.Process()
      UpperCamelCase						    =					False

 def      __lowerCAmelCase  (						self			:			Optional[int]   ):






      """simple docstring"""



      UpperCamelCase						    =					-1

      while True:
           UpperCamelCase						    =					max(self.process.memory_info().rss					, self.cpu_memory_peak   )

           # can't sleep or will not catch the peak right (this comment is here on purpose)
           if not self.peak_monitoring:
                break

 def      __lowerCAmelCase  (						self			:			List[str]   ):






      """simple docstring"""



      UpperCamelCase						    =					True
      UpperCamelCase						    =					threading.Thread(target=self.peak_monitor   )
      UpperCamelCase						    =					True
      self.thread.start()






 def      __lowerCAmelCase  (						self			:			Tuple   ):






      """simple docstring"""



      UpperCamelCase						    =					False
      self.thread.join()
      return self.cpu_memory_peak




_snake_case      = PeakCPUMemory()

def  __lowerCamelCase					( )       ->      Optional[int]:
     # Time
     UpperCamelCase						    =					{'time': time.time()}

     gc.collect()
     torch.cuda.empty_cache()

     # CPU mem
     UpperCamelCase						    =					psutil.Process().memory_info().rss
     cpu_peak_tracker.start()

     # GPU mem
     for i in range(torch.cuda.device_count()			):
          UpperCamelCase						    =					torch.cuda.memory_allocated(_lowercase			)
     torch.cuda.reset_peak_memory_stats()

     return measures

def  __lowerCamelCase					( _lowercase			)       ->      Union[str, Any]:
     # Time
     UpperCamelCase						    =					{'time': time.time() - start_measures['time']}

     gc.collect()
     torch.cuda.empty_cache()

     # CPU mem
     UpperCamelCase						    =					(psutil.Process().memory_info().rss - start_measures['cpu']) / 2**20
     UpperCamelCase						    =					(cpu_peak_tracker.stop() - start_measures['cpu']) / 2**20

     # GPU mem
     for i in range(torch.cuda.device_count()			):
          UpperCamelCase						    =					(torch.cuda.memory_allocated(_lowercase			) - start_measures[str(_lowercase			)]) / 2**20
          UpperCamelCase						    =					(torch.cuda.max_memory_allocated(_lowercase			) - start_measures[str(_lowercase			)]) / 2**20

     return measures







def  __lowerCamelCase					( _lowercase						,     _lowercase			)       ->      str:
     print(F'{description}:'			)
     print(F'- Time: {measures["time"]:.2f}s'			)
     for i in range(torch.cuda.device_count()			):
          print(F'- GPU {i} allocated: {measures[str(_lowercase			)]:.2f}MiB'			)
          UpperCamelCase						    =					measures[F'{i}-peak']
          print(F'- GPU {i} peak: {peak:.2f}MiB'			)
     print(F'- CPU RAM allocated: {measures["cpu"]:.2f}MiB'			)
     print(F'- CPU RAM peak: {measures["cpu-peak"]:.2f}MiB'			)




# Copyright 2023 The HuggingFace Inc. team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from ..models.whisper import WhisperForConditionalGeneration, WhisperProcessor
from .base import PipelineTool
class       _lowerCAmelCase  (		__magic_name__							):

 """simple docstring"""
 SCREAMING_SNAKE_CASE_				:					Tuple       						="openai/whisper-base"
 SCREAMING_SNAKE_CASE_				:					List[str]       						=(
     "This is a tool that transcribes an audio into text. It takes an input named `audio` and returns the "
     "transcribed text."
 )
 SCREAMING_SNAKE_CASE_				:					int       						="transcriber"
 SCREAMING_SNAKE_CASE_				:					Tuple       						=WhisperProcessor
 SCREAMING_SNAKE_CASE_				:					List[Any]       						=WhisperForConditionalGeneration

 SCREAMING_SNAKE_CASE_				:					Union[str, Any]       						=["audio"]
 SCREAMING_SNAKE_CASE_				:					Any       						=["text"]

 def      __lowerCAmelCase  (						self			:			List[Any]					, SCREAMING_SNAKE_CASE__			:			List[Any]   ):






      """simple docstring"""



      return self.pre_processor(SCREAMING_SNAKE_CASE__					, return_tensors='pt'   ).input_features

 def      __lowerCAmelCase  (						self			:			Tuple					, SCREAMING_SNAKE_CASE__			:			Union[str, Any]   ):






      """simple docstring"""



      return self.model.generate(inputs=SCREAMING_SNAKE_CASE__   )






 def      __lowerCAmelCase  (						self			:			List[str]					, SCREAMING_SNAKE_CASE__			:			List[str]   ):






      """simple docstring"""



      return self.pre_processor.batch_decode(SCREAMING_SNAKE_CASE__					, skip_special_tokens=SCREAMING_SNAKE_CASE__   )[0]


