


import unittest

from transformers import (
    MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING,
    TF_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING,
    TextaTextGenerationPipeline,
    pipeline,
)
from transformers.testing_utils import is_pipeline_test, require_tf, require_torch
from transformers.utils import is_torch_available

from .test_pipelines_common import ANY


if is_torch_available():
   import torch
@is_pipeline_test
class 	UpperCAmelCase_					(					unittest.TestCase    ):

   '''simple docstring'''




   __A :      List[str]     		=		MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING
   __A :      List[str]     		=		TF_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING






   def _snake_case    (		self						,				__A						,				__A						,				__A ):






     """simple docstring"""





     lowerCamelCase :					Optional[Any]    =				TextaTextGenerationPipeline(model=__A						,				tokenizer=__A )
     return generator, ["Something to write", "Something else"]






   def _snake_case    (		self						,				__A						,				__A ):






     """simple docstring"""





     lowerCamelCase :					str    =				generator("Something there" )
     self.assertEqual(__A						,				[{"generated_text": ANY(__A )}] )
     # These are encoder decoder, they don't just append to incoming string
     self.assertFalse(outputs[0]["generated_text"].startswith("Something there" ) )

     lowerCamelCase :					List[str]    =				generator(["This is great !", "Something else"]						,				num_return_sequences=2						,				do_sample=__A )
     self.assertEqual(
         __A						,				[
             [{"generated_text": ANY(__A )}, {"generated_text": ANY(__A )}],
             [{"generated_text": ANY(__A )}, {"generated_text": ANY(__A )}],
         ]						,				)

     lowerCamelCase :					Optional[Any]    =				generator(
         ["This is great !", "Something else"]						,				num_return_sequences=2						,				batch_size=2						,				do_sample=__A )
     self.assertEqual(
         __A						,				[
             [{"generated_text": ANY(__A )}, {"generated_text": ANY(__A )}],
             [{"generated_text": ANY(__A )}, {"generated_text": ANY(__A )}],
         ]						,				)

     with self.assertRaises(__A ):
       generator(4 )






   @require_torch
   def _snake_case    (		self ):






     """simple docstring"""





     lowerCamelCase :					Any    =				pipeline("text2text-generation"						,				model="patrickvonplaten/t5-tiny-random"						,				framework="pt" )
     # do_sample=False necessary for reproducibility
     lowerCamelCase :					int    =				generator("Something there"						,				do_sample=__A )
     self.assertEqual(__A						,				[{"generated_text": ""}] )

     lowerCamelCase :					Optional[Any]    =				3
     lowerCamelCase :					Union[str, Any]    =				generator(
         "Something there"						,				num_return_sequences=__A						,				num_beams=__A						,				)
     lowerCamelCase :					Any    =				[
         {"generated_text": "Beide Beide Beide Beide Beide Beide Beide Beide Beide"},
         {"generated_text": "Beide Beide Beide Beide Beide Beide Beide Beide"},
         {"generated_text": ""},
     ]
     self.assertEqual(__A						,				__A )

     lowerCamelCase :					Any    =				generator("This is a test"						,				do_sample=__A						,				num_return_sequences=2						,				return_tensors=__A )
     self.assertEqual(
         __A						,				[
             {"generated_token_ids": ANY(torch.Tensor )},
             {"generated_token_ids": ANY(torch.Tensor )},
         ]						,				)
     lowerCamelCase :					Optional[Any]    =				generator.model.config.eos_token_id
     lowerCamelCase :					int    =				"<pad>"
     lowerCamelCase :					List[Any]    =				generator(
         ["This is a test", "This is a second test"]						,				do_sample=__A						,				num_return_sequences=2						,				batch_size=2						,				return_tensors=__A						,				)
     self.assertEqual(
         __A						,				[
             [
                 {"generated_token_ids": ANY(torch.Tensor )},
                 {"generated_token_ids": ANY(torch.Tensor )},
             ],
             [
                 {"generated_token_ids": ANY(torch.Tensor )},
                 {"generated_token_ids": ANY(torch.Tensor )},
             ],
         ]						,				)






   @require_tf
   def _snake_case    (		self ):






     """simple docstring"""





     lowerCamelCase :					str    =				pipeline("text2text-generation"						,				model="patrickvonplaten/t5-tiny-random"						,				framework="tf" )
     # do_sample=False necessary for reproducibility
     lowerCamelCase :					str    =				generator("Something there"						,				do_sample=__A )
     self.assertEqual(__A						,				[{"generated_text": ""}] )







# 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 	UpperCAmelCase_					(					UpperCamelCase    ):

   '''simple docstring'''




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

   __A :      Any     		=		["audio"]
   __A :      List[str]     		=		["text"]






   def _snake_case    (		self						,				__A ):






     """simple docstring"""





     return self.pre_processor(__A						,				return_tensors="pt" ).input_features






   def _snake_case    (		self						,				__A ):






     """simple docstring"""





     return self.model.generate(inputs=__A )






   def _snake_case    (		self						,				__A ):






     """simple docstring"""





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



