

# 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


UpperCAmelCase_       :				str		   =      '''Here is a text containing a lot of information: \'\'\'{text}\'\'\'.

Can you answer this question about the text: \'{question}\''''






class     lowerCamelCase_			(  _lowercase  ):
 _lowercase		:      Tuple    				=							'''google/flan-t5-base'''
 _lowercase		:      Optional[int]    				=							(
     '''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.'''
 )
 _lowercase		:      List[Any]    				=							'''text_qa'''
 _lowercase		:      Optional[Any]    				=							AutoTokenizer
 _lowercase		:      Union[str, Any]    				=							AutoModelForSeqaSeqLM

 _lowercase		:      Union[str, Any]    				=							['''text''', '''text''']
 _lowercase		:      str    				=							['''text''']




 def 					lowerCAmelCase_					(    self	:    str				,			__A	:    str				,			__A	:    str       ):
  __A   : Optional[Any]								= QA_PROMPT.format(text=__A				,			question=__A       )
  return self.pre_processor(__A				,			return_tensors="""pt"""       )




 def 					lowerCAmelCase_					(    self	:    Dict				,			__A	:    Tuple       ):
  __A   : Optional[int]								= self.model.generate(**__A       )

  __A   : Optional[Any]								= inputs["""input_ids"""].shape
  __A   : Optional[Any]								= output_ids.shape[0]

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




 def 					lowerCAmelCase_					(    self	:    Tuple				,			__A	:    str       ):
  return self.pre_processor.decode(__A				,			skip_special_tokens=__A				,			clean_up_tokenization_spaces=__A       )








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


UpperCAmelCase_       :				Optional[Any]		   =      logging.get_logger(__name__)

UpperCAmelCase_       :				List[str]		   =      {
    '''uw-madison/nystromformer-512''': '''https://huggingface.co/uw-madison/nystromformer-512/resolve/main/config.json''',
    # See all Nystromformer models at https://huggingface.co/models?filter=nystromformer
}






class     lowerCamelCase_			(  _lowercase  ):
	_lowercase		:      Optional[Any]    				=							'''nystromformer'''




	def __init__(    self	:    Optional[Any]				,			__A	:    Optional[Any]=3_0000				,			__A	:    Optional[int]=768				,			__A	:    List[str]=12				,			__A	:    str=12				,			__A	:    Tuple=3072				,			__A	:    List[Any]="gelu_new"				,			__A	:    Dict=0.1				,			__A	:    Optional[int]=0.1				,			__A	:    int=510				,			__A	:    Union[str, Any]=2				,			__A	:    Optional[int]=64				,			__A	:    str=64				,			__A	:    List[str]=65				,			__A	:    Tuple=False				,			__A	:    List[str]=0.0_2				,			__A	:    Tuple=1e-5				,			__A	:    List[str]=1				,			__A	:    int=0				,			__A	:    Tuple=2				,			**__A	:    Dict				,			):
		__A   : str								= vocab_size
		__A   : Union[str, Any]								= max_position_embeddings
		__A   : Optional[int]								= hidden_size
		__A   : Optional[int]								= num_hidden_layers
		__A   : List[Any]								= num_attention_heads
		__A   : Dict								= intermediate_size
		__A   : Union[str, Any]								= hidden_act
		__A   : int								= hidden_dropout_prob
		__A   : Tuple								= attention_probs_dropout_prob
		__A   : Optional[Any]								= initializer_range
		__A   : int								= type_vocab_size
		__A   : Optional[int]								= segment_means_seq_len
		__A   : List[str]								= num_landmarks
		__A   : Dict								= conv_kernel_size
		__A   : Union[str, Any]								= inv_coeff_init_option
		__A   : Union[str, Any]								= layer_norm_eps
		super().__init__(pad_token_id=__A				,			bos_token_id=__A				,			eos_token_id=__A				,			**__A       )





