

import copy

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


a__				=		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(__lowercase   )
class 				UpperCAmelCase_		(			__lowercase   ):
							"""simple docstring"""







							UpperCAmelCase__       :						List[str]	    =    "rag"
							UpperCAmelCase__       :						Union[str, Any]	    =    True


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

												from ..auto.configuration_auto import AutoConfig

												_a	:    Optional[Any]         =		AutoConfig.for_model(_a       ,							**_a       )
												_a	:    Tuple         =		AutoConfig.for_model(_a       ,							**_a       )

												_a	:    List[Any]         =		reduce_loss
												_a	:    Optional[Any]         =		label_smoothing
												_a	:    Optional[Any]         =		exclude_bos_score
												_a	:    Tuple         =		do_marginalize

												_a	:    Optional[int]         =		title_sep
												_a	:    Dict         =		doc_sep
												_a	:    List[str]         =		n_docs
												_a	:    Tuple         =		max_combined_length

												_a	:    Union[str, Any]         =		dataset
												_a	:    Optional[Any]         =		dataset_split
												_a	:    List[str]         =		index_name

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

												_a	:    Union[str, Any]         =		output_retrieved

												_a	:    Any         =		do_deduplication

												_a	:    Dict         =		use_cache

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


							@classmethod
							def 				__lowercase				(			cls       ,							_a       ,							_a       ,							**_a       )    ->    PretrainedConfig:
												return cls(question_encoder=question_encoder_config.to_dict()       ,							generator=generator_config.to_dict()       ,							**_a       )




							def 				__lowercase				(			self       )    ->    Dict:
												_a	:    Any         =		copy.deepcopy(self.__dict__       )
												_a	:    Optional[Any]         =		self.question_encoder.to_dict()
												_a	:    List[Any]         =		self.generator.to_dict()
												_a	:    Union[str, Any]         =		self.__class__.model_type
												return output






import operator as op


a__				=		'''scaler.pt'''
a__				=		'''pytorch_model'''
a__				=		'''random_states'''
a__				=		'''optimizer'''
a__				=		'''scheduler'''
a__				=		'''pytorch_model.bin'''
a__				=		'''pytorch_model.bin.index.json'''
a__				=		'''model.safetensors'''
a__				=		'''model.safetensors.index.json'''
a__				=		'''1.10.2'''
a__				=		'''py38'''
a__				=		'''4.17.0'''
a__				=		['''ml.p3.16xlarge''', '''ml.p3dn.24xlarge''', '''ml.p4dn.24xlarge''']
a__				=		['''FULL_SHARD''', '''SHARD_GRAD_OP''', '''NO_SHARD''', '''HYBRID_SHARD''', '''HYBRID_SHARD_ZERO2''']
a__				=		['''TRANSFORMER_BASED_WRAP''', '''SIZE_BASED_WRAP''', '''NO_WRAP''']
a__				=		['''BACKWARD_PRE''', '''BACKWARD_POST''', '''NO_PREFETCH''']
a__				=		['''FULL_STATE_DICT''', '''LOCAL_STATE_DICT''', '''SHARDED_STATE_DICT''']
a__				=		'''2.0.1'''
a__				=		['''pdsh''', '''standard''', '''openmpi''', '''mvapich''']
a__				=		['''default''', '''reduce-overhead''', '''max-autotune''']

a__				=		{'''>''': op.gt, '''>=''': op.ge, '''==''': op.eq, '''!=''': op.ne, '''<=''': op.le, '''<''': op.lt}

# These are the args for `torch.distributed.launch` for pytorch < 1.9
a__				=		[
    '''nnodes''',
    '''nproc_per_node''',
    '''rdzv_backend''',
    '''rdzv_endpoint''',
    '''rdzv_id''',
    '''rdzv_conf''',
    '''standalone''',
    '''max_restarts''',
    '''monitor_interval''',
    '''start_method''',
    '''role''',
    '''module''',
    '''m''',
    '''no_python''',
    '''run_path''',
    '''log_dir''',
    '''r''',
    '''redirects''',
    '''t''',
    '''tee''',
    '''node_rank''',
    '''master_addr''',
    '''master_port''',
]

a__				=		['''DEEPSPEED''', '''MULTI_GPU''', '''FSDP''', '''MEGATRON_LM''']
a__				=		['''DEEPSPEED''', '''MULTI_XPU''', '''FSDP''']



