





import copy

from ...configuration_utils import PretrainedConfig
from ...utils import add_start_docstrings


_lowercase		:  int			       =r"""
    [`RagConfig`] stores the configuration of a *RagModel*. Configuration objects inherit from [`PretrainedConfig`] and
    can be used to control the model outputs. Read the documentation from [`PretrainedConfig`] for more information.

    Args:
        title_sep (`str`, *optional*, defaults to  `\" / \"`):
            Separator inserted between the title and the text of the retrieved document when calling [`RagRetriever`].
        doc_sep (`str`, *optional*, defaults to  `\" // \"`):
            Separator inserted between the text of the retrieved document and the original input when calling
            [`RagRetriever`].
        n_docs (`int`, *optional*, defaults to 5):
            Number of documents to retrieve.
        max_combined_length (`int`, *optional*, defaults to 300):
            Max length of contextualized input returned by [`~RagRetriever.__call__`].
        retrieval_vector_size (`int`, *optional*, defaults to 768):
            Dimensionality of the document embeddings indexed by [`RagRetriever`].
        retrieval_batch_size (`int`, *optional*, defaults to 8):
            Retrieval batch size, defined as the number of queries issues concurrently to the faiss index encapsulated
            [`RagRetriever`].
        dataset (`str`, *optional*, defaults to `\"wiki_dpr\"`):
            A dataset identifier of the indexed dataset in HuggingFace Datasets (list all available datasets and ids
            using `datasets.list_datasets()`).
        dataset_split (`str`, *optional*, defaults to `\"train\"`)
            Which split of the `dataset` to load.
        index_name (`str`, *optional*, defaults to `\"compressed\"`)
            The index name of the index associated with the `dataset`. One can choose between `\"legacy\"`, `\"exact\"` and
            `\"compressed\"`.
        index_path (`str`, *optional*)
            The path to the serialized faiss index on disk.
        passages_path (`str`, *optional*):
            A path to text passages compatible with the faiss index. Required if using
            [`~models.rag.retrieval_rag.LegacyIndex`]
        use_dummy_dataset (`bool`, *optional*, defaults to `False`)
            Whether to load a \"dummy\" variant of the dataset specified by `dataset`.
        label_smoothing (`float`, *optional*, defaults to 0.0):
            Only relevant if `return_loss` is set to `True`. Controls the `epsilon` parameter value for label smoothing
            in the loss calculation. If set to 0, no label smoothing is performed.
        do_marginalize (`bool`, *optional*, defaults to `False`):
            If `True`, the logits are marginalized over all documents by making use of
            `torch.nn.functional.log_softmax`.
        reduce_loss (`bool`, *optional*, defaults to `False`):
            Whether or not to reduce the NLL loss using the `torch.Tensor.sum` operation.
        do_deduplication (`bool`, *optional*, defaults to `True`):
            Whether or not to deduplicate the generations from different context documents for a given input. Has to be
            set to `False` if used while training with distributed backend.
        exclude_bos_score (`bool`, *optional*, defaults to `False`):
            Whether or not to disregard the BOS token when computing the loss.
        output_retrieved(`bool`, *optional*, defaults to `False`):
            If set to `True`, `retrieved_doc_embeds`, `retrieved_doc_ids`, `context_input_ids` and
            `context_attention_mask` are returned. See returned tensors for more detail.
        use_cache (`bool`, *optional*, defaults to `True`):
            Whether or not the model should return the last key/values attentions (not used by all models).
        forced_eos_token_id (`int`, *optional*):
            The id of the token to force as the last generated token when `max_length` is reached. Usually set to
            `eos_token_id`.
"""






@add_start_docstrings(snake_case__							)
class 						UpperCamelCase_  (  snake_case__							):
					_a      :						List[Any]						    =					'rag'
					_a      :						Dict						    =					True



					def __init__(		self     :     List[Any]       ,      lowerCamelCase     :     Optional[Any]=None       ,      lowerCamelCase     :     List[Any]=True       ,      lowerCamelCase     :     Any=None       ,      lowerCamelCase     :     Optional[Any]=None       ,      lowerCamelCase     :     List[Any]=None       ,      lowerCamelCase     :     Union[str, Any]=None       ,      lowerCamelCase     :     str=None       ,      lowerCamelCase     :     Dict=" / "       ,      lowerCamelCase     :     int=" // "       ,      lowerCamelCase     :     Any=5       ,      lowerCamelCase     :     List[Any]=3_00       ,      lowerCamelCase     :     Tuple=7_68       ,      lowerCamelCase     :     Optional[int]=8       ,      lowerCamelCase     :     str="wiki_dpr"       ,      lowerCamelCase     :     Union[str, Any]="train"       ,      lowerCamelCase     :     Union[str, Any]="compressed"       ,      lowerCamelCase     :     List[str]=None       ,      lowerCamelCase     :     Tuple=None       ,      lowerCamelCase     :     Tuple=False       ,      lowerCamelCase     :     List[Any]=False       ,      lowerCamelCase     :     str=0.0       ,      lowerCamelCase     :     List[Any]=True       ,      lowerCamelCase     :     List[Any]=False       ,      lowerCamelCase     :     Optional[Any]=False       ,      lowerCamelCase     :     Union[str, Any]=False       ,      lowerCamelCase     :     Tuple=True       ,      lowerCamelCase     :     Optional[Any]=None       ,      **lowerCamelCase     :     Optional[Any]       ,      ):
							super().__init__(
							    bos_token_id=lowerCamelCase       ,      pad_token_id=lowerCamelCase       ,      eos_token_id=lowerCamelCase       ,      decoder_start_token_id=lowerCamelCase       ,      forced_eos_token_id=lowerCamelCase       ,      is_encoder_decoder=lowerCamelCase       ,      prefix=lowerCamelCase       ,      vocab_size=lowerCamelCase       ,      **lowerCamelCase       ,      )
							assert (
							    "question_encoder" in kwargs and "generator" in kwargs
							), "Config has to be initialized with question_encoder and generator config"
							lowerCamelCase_	:     Optional[Any] 						=      kwargs.pop('question_encoder'						)
							lowerCamelCase_	:     Any 						=      question_encoder_config.pop('model_type'						)
							lowerCamelCase_	:     Any 						=      kwargs.pop('generator'						)
							lowerCamelCase_	:     Any 						=      decoder_config.pop('model_type'						)

							from ..auto.configuration_auto import AutoConfig

							lowerCamelCase_	:     Tuple 						=      AutoConfig.for_model(lowerCamelCase       ,      **lowerCamelCase						)
							lowerCamelCase_	:     int 						=      AutoConfig.for_model(lowerCamelCase       ,      **lowerCamelCase						)

							lowerCamelCase_	:     str 						=      reduce_loss
							lowerCamelCase_	:     str 						=      label_smoothing
							lowerCamelCase_	:     Optional[int] 						=      exclude_bos_score
							lowerCamelCase_	:     Optional[Any] 						=      do_marginalize

							lowerCamelCase_	:     Dict 						=      title_sep
							lowerCamelCase_	:     Union[str, Any] 						=      doc_sep
							lowerCamelCase_	:     int 						=      n_docs
							lowerCamelCase_	:     List[Any] 						=      max_combined_length

							lowerCamelCase_	:     int 						=      dataset
							lowerCamelCase_	:     str 						=      dataset_split
							lowerCamelCase_	:     int 						=      index_name

							lowerCamelCase_	:     Optional[Any] 						=      retrieval_vector_size
							lowerCamelCase_	:     int 						=      retrieval_batch_size
							lowerCamelCase_	:     Tuple 						=      passages_path
							lowerCamelCase_	:     List[str] 						=      index_path
							lowerCamelCase_	:     Any 						=      use_dummy_dataset

							lowerCamelCase_	:     Optional[int] 						=      output_retrieved

							lowerCamelCase_	:     Optional[Any] 						=      do_deduplication

							lowerCamelCase_	:     Dict 						=      use_cache

							if self.forced_eos_token_id is None:
									lowerCamelCase_	:     List[Any] 						=      getattr(self.generator       ,      'forced_eos_token_id'       ,      lowerCamelCase						)



					@classmethod
					def   __a     (		cls     :     Optional[int]       ,      lowerCamelCase     :     PretrainedConfig       ,      lowerCamelCase     :     PretrainedConfig       ,      **lowerCamelCase     :     Tuple						):
							return cls(question_encoder=question_encoder_config.to_dict()       ,      generator=generator_config.to_dict()       ,      **lowerCamelCase						)





					def   __a     (		self     :     Any						):
							lowerCamelCase_	:     Optional[Any] 						=      copy.deepcopy(self.__dict__						)
							lowerCamelCase_	:     Dict 						=      self.question_encoder.to_dict()
							lowerCamelCase_	:     List[Any] 						=      self.generator.to_dict()
							lowerCamelCase_	:     List[str] 						=      self.__class__.model_type
							return output







from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_torch_available,
)


_lowercase		:  Dict			       ={
    """configuration_resnet""": ["""RESNET_PRETRAINED_CONFIG_ARCHIVE_MAP""", """ResNetConfig""", """ResNetOnnxConfig"""]
}

try:
		if not is_torch_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		_lowercase		:  Union[str, Any]			       =[
		    """RESNET_PRETRAINED_MODEL_ARCHIVE_LIST""",
		    """ResNetForImageClassification""",
		    """ResNetModel""",
		    """ResNetPreTrainedModel""",
		    """ResNetBackbone""",
		]

try:
		if not is_tf_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		_lowercase		:  Union[str, Any]			       =[
		    """TF_RESNET_PRETRAINED_MODEL_ARCHIVE_LIST""",
		    """TFResNetForImageClassification""",
		    """TFResNetModel""",
		    """TFResNetPreTrainedModel""",
		]

try:
		if not is_flax_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		_lowercase		:  Tuple			       =[
		    """FlaxResNetForImageClassification""",
		    """FlaxResNetModel""",
		    """FlaxResNetPreTrainedModel""",
		]

if TYPE_CHECKING:
		from .configuration_resnet import RESNET_PRETRAINED_CONFIG_ARCHIVE_MAP, ResNetConfig, ResNetOnnxConfig

		try:
				if not is_torch_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_resnet import (
				    RESNET_PRETRAINED_MODEL_ARCHIVE_LIST,
				    ResNetBackbone,
				    ResNetForImageClassification,
				    ResNetModel,
				    ResNetPreTrainedModel,
				)

		try:
				if not is_tf_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_tf_resnet import (
				    TF_RESNET_PRETRAINED_MODEL_ARCHIVE_LIST,
				    TFResNetForImageClassification,
				    TFResNetModel,
				    TFResNetPreTrainedModel,
				)

		try:
				if not is_flax_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_flax_resnet import FlaxResNetForImageClassification, FlaxResNetModel, FlaxResNetPreTrainedModel


else:
		import sys

		_lowercase		:  Union[str, Any]			       =_LazyModule(__name__, globals()["""__file__"""], _import_structure)
