

"""simple docstring"""






# 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        _lowercase					(     _A     ):
     _lowerCamelCase     =       '''openai/whisper-base'''
     _lowerCamelCase     =       (
         '''This is a tool that transcribes an audio into text. It takes an input named `audio` and returns the '''
         '''transcribed text.'''
     )
     _lowerCamelCase     =       '''transcriber'''
     _lowerCamelCase     =       WhisperProcessor
     _lowerCamelCase     =       WhisperForConditionalGeneration

     _lowerCamelCase     =       ['''audio''']
     _lowerCamelCase     =       ['''text''']







     def 	lowerCAmelCase__    (      self ,						UpperCamelCase_       ):
      return self.pre_processor(UpperCamelCase__ ,						return_tensors='''pt'''       ).input_features







     def 	lowerCAmelCase__    (      self ,						UpperCamelCase_       ):
      return self.model.generate(inputs=UpperCamelCase__       )







     def 	lowerCAmelCase__    (      self ,						UpperCamelCase_       ):
      return self.pre_processor.batch_decode(UpperCamelCase__ ,						skip_special_tokens=UpperCamelCase__       )[0]




"""simple docstring"""






import unittest

from transformers import is_torch_available
from transformers.testing_utils import require_sentencepiece, require_tokenizers, require_torch, slow, torch_device


if is_torch_available():
 from transformers import AutoModelForSeqaSeqLM, AutoTokenizer
@require_torch
@require_sentencepiece
@require_tokenizers
class        _lowercase					(     unittest.TestCase     ):







     @slow
     def 	lowerCAmelCase__    (      self       ):
      __magic_name__     =      AutoModelForSeqaSeqLM.from_pretrained('''google/mt5-small''' ,						return_dict=UpperCamelCase_       ).to(UpperCamelCase_       )
      __magic_name__     =      AutoTokenizer.from_pretrained('''google/mt5-small'''       )

      __magic_name__     =      tokenizer('''Hello there''' ,						return_tensors='''pt'''       ).input_ids
      __magic_name__     =      tokenizer('''Hi I am''' ,						return_tensors='''pt'''       ).input_ids

      __magic_name__     =      model(input_ids.to(UpperCamelCase_       ) ,						labels=labels.to(UpperCamelCase_       )       ).loss
      __magic_name__     =      -(labels.shape[-1] * loss.item())

      __magic_name__     =      -8_4.9_1_2_7
      self.assertTrue(abs(mtf_score - EXPECTED_SCORE       ) < 1E-4       )

