

'''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.auto import AutoModelForSeqaSeqLM, AutoTokenizer
from .base import PipelineTool


SCREAMING_SNAKE_CASE_    =   "Here is a text containing a lot of information: '''{text}'''.\n\nCan you answer this question about the text: '{question}'"

class 			SCREAMING_SNAKE_CASE					(							lowercase_					):






      '''simple docstring'''






      SCREAMING_SNAKE_CASE__ :				Optional[int]    =				'''google/flan-t5-base'''
      SCREAMING_SNAKE_CASE__ :				str    =				(
          '''This is a tool that answers questions related to a text. It takes two arguments named `text`, which is the '''
          '''text where to find the answer, and `question`, which is the question, and returns the answer to the question.'''
      )
      SCREAMING_SNAKE_CASE__ :				List[Any]    =				'''text_qa'''
      SCREAMING_SNAKE_CASE__ :				int    =				AutoTokenizer
      SCREAMING_SNAKE_CASE__ :				int    =				AutoModelForSeqaSeqLM

      SCREAMING_SNAKE_CASE__ :				Any    =				['''text''', '''text''']
      SCREAMING_SNAKE_CASE__ :				List[Any]    =				['''text''']




      def 	__UpperCAmelCase			(					self :		List[Any]     ,					snake_case :		str     ,					snake_case :		str   ):



          """simple docstring"""





          _snake_case : Tuple												=		QA_PROMPT.format(text=snake_case     ,					question=snake_case   )
          return self.pre_processor(snake_case     ,					return_tensors='pt'   )




      def 	__UpperCAmelCase			(					self :		Tuple     ,					snake_case :		Optional[int]   ):



          """simple docstring"""





          _snake_case : Tuple												=		self.model.generate(**snake_case   )

          _snake_case					,							_snake_case : List[str]												=		inputs['input_ids'].shape
          _snake_case : int												=		output_ids.shape[0]

          return output_ids.reshape(snake_case     ,					out_b // in_b     ,					*output_ids.shape[1:]   )[0][0]




      def 	__UpperCAmelCase			(					self :		Tuple     ,					snake_case :		int   ):



          """simple docstring"""





          return self.pre_processor.decode(snake_case     ,					skip_special_tokens=snake_case     ,					clean_up_tokenization_spaces=snake_case   )






'''simple docstring'''



import copy

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


SCREAMING_SNAKE_CASE_    =   logging.get_logger(__name__)

SCREAMING_SNAKE_CASE_    =   {}

class 			SCREAMING_SNAKE_CASE					(							lowercase_					):






      '''simple docstring'''






      SCREAMING_SNAKE_CASE__ :				Optional[Any]    =				'''fsmt_decoder'''




      def __init__(					self :		Any     ,					snake_case :		int=0     ,					snake_case :		Dict=0   ):



          """simple docstring"""





          super().__init__()
          _snake_case : int												=		vocab_size
          _snake_case : Dict												=		bos_token_id



class 			SCREAMING_SNAKE_CASE					(							lowercase_					):






      '''simple docstring'''






      SCREAMING_SNAKE_CASE__ :				Union[str, Any]    =				'''fsmt'''
      SCREAMING_SNAKE_CASE__ :				Union[str, Any]    =				{'''num_attention_heads''': '''encoder_attention_heads''', '''hidden_size''': '''d_model'''}




      def __init__(					self :		Optional[int]     ,					snake_case :		Tuple=["en", "de"]     ,					snake_case :		Optional[int]=42024     ,					snake_case :		List[str]=42024     ,					snake_case :		Union[str, Any]="relu"     ,					snake_case :		Optional[Any]=1024     ,					snake_case :		Union[str, Any]=200     ,					snake_case :		int=1024     ,					snake_case :		str=4096     ,					snake_case :		Dict=12     ,					snake_case :		str=16     ,					snake_case :		List[str]=0.0     ,					snake_case :		List[Any]=4096     ,					snake_case :		str=12     ,					snake_case :		str=16     ,					snake_case :		Optional[int]=0.0     ,					snake_case :		Optional[int]=0.0     ,					snake_case :		str=0.1     ,					snake_case :		Tuple=0.0     ,					snake_case :		Optional[int]=0.02     ,					snake_case :		List[str]=2     ,					snake_case :		int=True     ,					snake_case :		Any=True     ,					snake_case :		str=False     ,					snake_case :		Union[str, Any]=5     ,					snake_case :		Dict=1.0     ,					snake_case :		Union[str, Any]=False     ,					snake_case :		Optional[Any]=True     ,					snake_case :		Optional[int]=1     ,					snake_case :		int=0     ,					snake_case :		Optional[int]=2     ,					snake_case :		Optional[Any]=2     ,					**snake_case :		Any     ,					):



          """simple docstring"""





          _snake_case : int												=		langs
          _snake_case : str												=		src_vocab_size
          _snake_case : List[Any]												=		tgt_vocab_size
          _snake_case : Optional[int]												=		d_model  # encoder_embed_dim and decoder_embed_dim

          _snake_case : Optional[Any]												=		encoder_ffn_dim
          _snake_case : Dict												=		encoder_layers
          _snake_case : List[Any]												=		encoder_attention_heads
          _snake_case : Any												=		encoder_layerdrop
          _snake_case : List[str]												=		decoder_layerdrop
          _snake_case : str												=		decoder_ffn_dim
          _snake_case : Union[str, Any]												=		decoder_layers
          _snake_case : Tuple												=		decoder_attention_heads
          _snake_case : str												=		max_position_embeddings
          _snake_case : Dict												=		init_std  # Normal(0, this parameter)
          _snake_case : List[str]												=		activation_function

          _snake_case : Any												=		DecoderConfig(vocab_size=snake_case     ,					bos_token_id=snake_case   )
          if "decoder" in common_kwargs:
              del common_kwargs["decoder"]

          _snake_case : str												=		scale_embedding  # scale factor will be sqrt(d_model) if True

          # 3 Types of Dropout
          _snake_case : int												=		attention_dropout
          _snake_case : List[Any]												=		activation_dropout
          _snake_case : Optional[int]												=		dropout

          _snake_case : Union[str, Any]												=		use_cache
          super().__init__(
              pad_token_id=snake_case     ,					bos_token_id=snake_case     ,					eos_token_id=snake_case     ,					decoder_start_token_id=snake_case     ,					is_encoder_decoder=snake_case     ,					tie_word_embeddings=snake_case     ,					forced_eos_token_id=snake_case     ,					max_length=snake_case     ,					num_beams=snake_case     ,					length_penalty=snake_case     ,					early_stopping=snake_case     ,					**snake_case     ,					)




      def 	__UpperCAmelCase			(					self :		Optional[int]   ):



          """simple docstring"""





          _snake_case : Any												=		copy.deepcopy(self.__dict__   )
          _snake_case : str												=		self.decoder.to_dict()
          _snake_case : Dict												=		self.__class__.model_type
          return output



