

'''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.
import torch

from ..models.speechta import SpeechTaForTextToSpeech, SpeechTaHifiGan, SpeechTaProcessor
from ..utils import is_datasets_available
from .base import PipelineTool


if is_datasets_available():
							from datasets import load_dataset





class 		__SCREAMING_SNAKE_CASE							(			lowercase__      ):
				lowerCamelCase_		       =    'microsoft/speecht5_tts'
				lowerCamelCase_		       =    (
				    'This is a tool that reads an English text out loud. It takes an input named `text` which should contain the '
				    'text to read (in English) and returns a waveform object containing the sound.'
				)
				lowerCamelCase_		       =    'text_reader'
				lowerCamelCase_		       =    SpeechTaProcessor
				lowerCamelCase_		       =    SpeechTaForTextToSpeech
				lowerCamelCase_		       =    SpeechTaHifiGan

				lowerCamelCase_		       =    ['text']
				lowerCamelCase_		       =    ['audio']







				def  lowerCamelCase_	(       self     :		Union[str, Any]   ):
										'''simple docstring'''
										if self.post_processor is None:
																lowercase :							int    		='''microsoft/speecht5_hifigan'''
										super().setup()







				def  lowerCamelCase_	(       self     :		List[Any]		,					UpperCAmelCase__     :		Any		,					UpperCAmelCase__     :		List[Any]=None   ):
										'''simple docstring'''
										lowercase :							List[str]    		=self.pre_processor(text=UpperCAmelCase__		,					return_tensors='''pt'''		,					truncation=UpperCAmelCase__   )

										if speaker_embeddings is None:
																if not is_datasets_available():
																						raise ImportError('''Datasets needs to be installed if not passing speaker embeddings.'''   )

																lowercase :							List[str]    		=load_dataset('''Matthijs/cmu-arctic-xvectors'''		,					split='''validation'''   )
																lowercase :							Optional[Any]    		=torch.tensor(embeddings_dataset[7305]['''xvector''']   ).unsqueeze(0   )

										return {"input_ids": inputs["input_ids"], "speaker_embeddings": speaker_embeddings}







				def  lowerCamelCase_	(       self     :		List[str]		,					UpperCAmelCase__     :		List[str]   ):
										'''simple docstring'''
										with torch.no_grad():
																return self.model.generate_speech(**UpperCAmelCase__   )







				def  lowerCamelCase_	(       self     :		int		,					UpperCAmelCase__     :		Union[str, Any]   ):
										'''simple docstring'''
										with torch.no_grad():
																return self.post_processor(UpperCAmelCase__   ).cpu().detach()








'''simple docstring'''





from ...configuration_utils import PretrainedConfig
from ...utils import logging


UpperCamelCase_    						=       logging.get_logger(__name__)

UpperCamelCase_    						=       {
    """facebook/s2t-wav2vec2-large-en-de""": (
        """https://huggingface.co/facebook/s2t-wav2vec2-large-en-de/resolve/main/config.json"""
    ),
    # See all Speech2Text models at https://huggingface.co/models?filter=speech2text2
}





class 		__SCREAMING_SNAKE_CASE							(			lowercase__      ):
				lowerCamelCase_		       =    'speech_to_text_2'
				lowerCamelCase_		       =    ['past_key_values']
				lowerCamelCase_		       =    {'num_attention_heads': 'decoder_attention_heads', 'hidden_size': 'd_model'}







				def __init__(       self     :		int		,					UpperCAmelCase__     :		Dict=10000		,					UpperCAmelCase__     :		Optional[int]=6		,					UpperCAmelCase__     :		str=2048		,					UpperCAmelCase__     :		Optional[Any]=4		,					UpperCAmelCase__     :		Union[str, Any]=0.0		,					UpperCAmelCase__     :		Optional[Any]=True		,					UpperCAmelCase__     :		Optional[Any]="relu"		,					UpperCAmelCase__     :		List[str]=256		,					UpperCAmelCase__     :		Union[str, Any]=0.1		,					UpperCAmelCase__     :		List[Any]=0.0		,					UpperCAmelCase__     :		Optional[Any]=0.0		,					UpperCAmelCase__     :		Tuple=0.02		,					UpperCAmelCase__     :		int=2		,					UpperCAmelCase__     :		str=True		,					UpperCAmelCase__     :		str=1		,					UpperCAmelCase__     :		Optional[Any]=0		,					UpperCAmelCase__     :		Optional[int]=2		,					UpperCAmelCase__     :		List[Any]=1024		,					**UpperCAmelCase__     :		Dict		,					):
										'''simple docstring'''
										lowercase :							List[str]    		=vocab_size
										lowercase :							Optional[int]    		=d_model
										lowercase :							Optional[Any]    		=decoder_ffn_dim
										lowercase :							Any    		=decoder_layers
										lowercase :							Dict    		=decoder_attention_heads
										lowercase :							List[Any]    		=dropout
										lowercase :							List[Any]    		=attention_dropout
										lowercase :							Any    		=activation_dropout
										lowercase :							Optional[Any]    		=activation_function
										lowercase :							Optional[int]    		=init_std
										lowercase :							Dict    		=decoder_layerdrop
										lowercase :							Optional[int]    		=use_cache
										lowercase :							Optional[Any]    		=decoder_layers
										lowercase :							List[str]    		=scale_embedding  # scale factor will be sqrt(d_model) if True
										lowercase :							str    		=max_target_positions

										super().__init__(
										    pad_token_id=UpperCAmelCase__		,					bos_token_id=UpperCAmelCase__		,					eos_token_id=UpperCAmelCase__		,					decoder_start_token_id=UpperCAmelCase__		,					**UpperCAmelCase__		,					)





