
    gt                        d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlmZ ddlmZ ddlmZmZmZmZmZ ddlmZ ddlmZmZmZmZmZmZ  ej        e           Z! e
j"                    Z#d	 Z$d
ee%ej&        f         ddfdZ'dee%ej&        f         dee%         fdZ(dee%ej&        f         dee%         fdZ)dee%ej&        f         dee%         fdZ*dee%ej&        f         dee%         fdZ+ddde%dee%ej&        f         de,dej-        fdZ.	 	 	 	 	 	 	 	 	 d.dee%ej&        f         de%deee%ej&        f                  de,dee,         deee%e%f                  deee,e%f                  dee%         d e,d!ee%         d"ee%         de%fd#Z/	 	 	 	 	 	 	 	 	 d.d$e%dee%ej&        f         deee%ej&        f                  de,dee,         deee%e%f                  deee,e%f                  dee%         d e,d!ee%         d%ee%         dej-        fd&Z0d/d'ed(ee%ej&        f         d)ee         dee%         fd*Z1d+ Z2d,Z3d- Z4dS )0z3Utilities to dynamically load objects from the Hub.    N)Path)
ModuleType)AnyDictListOptionalUnion)try_to_load_from_cache   )HF_MODULES_CACHE TRANSFORMERS_DYNAMIC_MODULE_NAMEcached_fileextract_commit_hashis_offline_modeloggingc                  V   t           t          j        v rdS t          j                            t                      t	          j        t           d           t          t                     dz  } |                                 s)|                                  t          j
                     dS dS )z_
    Creates the cache directory for modules with an init, and adds it to the Python path.
    NTexist_ok__init__.py)r   syspathappendosmakedirsr   existstouch	importlibinvalidate_caches)	init_paths    ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/transformers/dynamic_module_utils.pyinit_hf_modulesr!   1   s    
 38##HOO$%%%K 40000%&&6I &#%%%%%& &    namereturnc                 ~   t                       t          t                    | z                                  }|j                                        st          |j                   t          j        |d           |dz  }|                                s)|	                                 t          j                     dS dS )z
    Creates a dynamic module in the cache directory for modules.

    Args:
        name (`str` or `os.PathLike`):
            The name of the dynamic module to create.
    Tr   r   N)r!   r   r   resolveparentr   create_dynamic_moduler   r   r   r   r   )r#   dynamic_module_pathr   s      r    r(   r(   A   s      011D8AACC%,,.. :18999K#d3333#m3I & 	#%%%%%	& &r"   module_filec                 @   t          | dd          5 }|                                }ddd           n# 1 swxY w Y   t          j        d|t          j                  }|t          j        d|t          j                  z  }t          t          |                    S )z
    Get the list of modules that are relatively imported in a module file.

    Args:
        module_file (`str` or `os.PathLike`): The module file to inspect.

    Returns:
        `List[str]`: The list of relative imports in the module.
    rutf-8encodingNz^\s*import\s+\.(\S+)\s*$flagsz^\s*from\s+\.(\S+)\s+import)openreadrefindall	MULTILINElistset)r*   fcontentrelative_importss       r    get_relative_importsr<   W   s     
k3	1	1	1 Q&&((               z"=wbl[[[
#A7RTR^____$%%&&&   488c                 :   d}| g}g |sg }|D ]$}|                     t          |                     %t          |           j        fd|D             }fd|D             }d |D             }t	          |          dk    }                     |           |S )a  
    Get the list of all files that are needed for a given module. Note that this function recurses through the relative
    imports (if a imports b and b imports c, it will return module files for b and c).

    Args:
        module_file (`str` or `os.PathLike`): The module file to inspect.

    Returns:
        `List[str]`: The list of all relative imports a given module needs (recursively), which will give us the list
        of module files a given module needs.
    Fc                 4    g | ]}t          |z            S  )str).0mmodule_paths     r    
<listcomp>z-get_relative_import_files.<locals>.<listcomp>   s%    FFFQCa00FFFr"   c                     g | ]}|v|	S r@   r@   )rB   r9   all_relative_importss     r    rE   z-get_relative_import_files.<locals>.<listcomp>   s$    YYY!1DX;X;XA;X;X;Xr"   c                     g | ]}| d S ).pyr@   rB   r9   s     r    rE   z-get_relative_import_files.<locals>.<listcomp>   s    >>>Q)))>>>r"   r   )extendr<   r   r'   len)r*   	no_changefiles_to_checknew_importsr9   new_import_filesrG   rD   s         @@r    get_relative_import_filesrQ   l   s     I!]N  4 	8 	8A3A667777;''.FFFF+FFFYYYY'7YYY>>-=>>>())Q.	##N333  4  r"   filenamec                    t          | dd          5 }|                                }ddd           n# 1 swxY w Y   t          j        dd|t          j        t          j        z            }t          j        dd|t          j                  }t          j        d	|t          j                  }|t          j        d
|t          j                  z  }d |D             }t          t          |                    S )a  
    Extracts all the libraries (not relative imports this time) that are imported in a file.

    Args:
        filename (`str` or `os.PathLike`): The module file to inspect.

    Returns:
        `List[str]`: The list of all packages required to use the input module.
    r,   r-   r.   Nz \s*try\s*:\s*.*?\s*except\s*.*?: r0   zHif is_flash_attn[a-zA-Z0-9_]+available\(\):\s*(from flash_attn\s*.*\s*)+z^\s*import\s+(\S+)\s*$z^\s*from\s+(\S+)\s+importc                 n    g | ]2}|                     d           |                    d           d         3S ).r   )
startswithsplit)rB   imps     r    rE   zget_imports.<locals>.<listcomp>   s8    OOOS3>>#;N;NOsyy~~a OOOr"   )	r2   r3   r4   subr6   DOTALLr5   r7   r8   )rR   r9   r:   importss       r    get_importsr]      s#    
hg	.	.	. !&&((               f8"gR\\^\eMefffGfSUWY`hjht  G
 j2G2<PPPGrz6r|TTTTGOOGOOOGGr=   c                    t          |           }g }|D ]v}	 t          j        |           # t          $ rR}t                              d| d|            dt          |          v r|                    |           n Y d}~od}~ww xY wt          |          dk    r<t          dd	                    |           dd		                    |           d
          t          |           S )a.  
    Check if the current Python environment contains all the libraries that are imported in a file. Will raise if a
    library is missing.

    Args:
        filename (`str` or `os.PathLike`): The module file to check.

    Returns:
        `List[str]`: The list of relative imports in the file.
    z&Encountered exception while importing z: zNo module namedNr   z\This modeling file requires the following packages that were not found in your environment: z, z. Run `pip install  `)r]   r   import_moduleImportErrorloggerwarningrA   r   rL   joinr<   )rR   r\   missing_packagesrY   	exceptions        r    check_importsrh      s;    (##G  
	#C(((( 	 	 	NNVCVV9VVWWW !C	NN22 '',,,, -,,,,	 q  ]yy)**] ]?BxxHX?Y?Y] ] ]
 
 	

  )))s   ,
BABBFforce_reload
class_namerD   rj   c          
          t           j                            |          }|                    d          r
|dd         }|                    t           j        j        d          }t          t                    |z  }t          5  |r3t          j
                            |d           t          j                     t          j
                            |          }t          j                            ||          }|gt#          t%          t          t'          |                              z   }t)          j        d                    d |D                                                                 }|/t          j                            |          }	|	t          j
        |<   n|}	t3          |	dd	          |k    r!|j                            |	           ||	_        t3          |	|           cddd           S # 1 swxY w Y   dS )
a  
    Import a module on the cache directory for modules and extract a class from it.

    Args:
        class_name (`str`): The name of the class to import.
        module_path (`str` or `os.PathLike`): The path to the module to import.
        force_reload (`bool`, *optional*, defaults to `False`):
            Whether to reload the dynamic module from file if it already exists in `sys.modules`.
            Otherwise, the module is only reloaded if the file has changed.

    Returns:
        `typing.Type`: The class looked for.
    rI   NrV   )locationr"   c              3   ^   K   | ](}t          |          |                                z   V  )d S N)bytes
read_bytesrJ   s     r    	<genexpr>z&get_class_in_module.<locals>.<genexpr>   s6      2c2cQR588allnn3L2c2c2c2c2c2cr"   __transformers_module_hash__rT   )r   r   normpathendswithreplacesepr   r   _HF_REMOTE_CODE_LOCKr   modulespopr   r   getutilspec_from_file_locationsortedmaprQ   hashlibsha256re   	hexdigestmodule_from_specgetattrloaderexec_modulert   )
rk   rD   rj   r#   r*   cached_modulemodule_specmodule_filesmodule_hashmodules
             r    get_class_in_moduler      s   & 7K((D}}U CRCy<<S))D-..<K	 + + 	*KOOD$''''))).1kood.C.Cn<<TK<XX %0=6#dD]^iDjDj:k:k3l3l#l">#((2c2cVb2c2c2c*c*cddnnpp  ^44[AAF &CK"F692>>+MM**62222=F/vz**-+ + + + + + + + + + + + + + + + + +s   E$G33G7:G7pretrained_model_name_or_path	cache_dirforce_downloadresume_downloadproxiestokenrevisionlocal_files_only	repo_type_commit_hashc                 P   |                     dd          }|-t          j        dt                     |t	          d          |}t                      r|st                              d           d}t          |           } t          j
                            |           }|r t          j
                            |           }n9|                     dt          j
        j                  }t          | |||
|	          }g }	 t!          | |||||||||	|
	          }|s||k    r|                    |           n0# t$          $ r# t                              d
| d|  d            w xY wt)          |          }t*          t          j
        j        z   |z   }t-          |           t/          t0                    |z  }|t          j
                            |           k    r||z                                  r%t5          j        |t          ||z                      s+t9          j        |||z             t=          j                     |D ]}| d}t          j
                             | |          }||z                                  r%t5          j        |t          ||z                      s+t9          j        |||z             t=          j                     ntC          ||
          }||z  }|t          j
        j        z   |z   }t-          |           ||z                                  s+t9          j        |||z             t=          j                     |D ]P}|| dz                                  s4tE          | | d||||||||
  
         |                    | d           QtG          |          dk    rR|Pd                     d |D                       }|	dn|	 d}d| |  }t          $                    d| d| d           t          j
                             ||          S )a	  
    Prepares Downloads a module from a local folder or a distant repo and returns its path inside the cached
    Transformers module.

    Args:
        pretrained_model_name_or_path (`str` or `os.PathLike`):
            This can be either:

            - a string, the *model id* of a pretrained model configuration hosted inside a model repo on
              huggingface.co.
            - a path to a *directory* containing a configuration file saved using the
              [`~PreTrainedTokenizer.save_pretrained`] method, e.g., `./my_model_directory/`.

        module_file (`str`):
            The name of the module file containing the class to look for.
        cache_dir (`str` or `os.PathLike`, *optional*):
            Path to a directory in which a downloaded pretrained model configuration should be cached if the standard
            cache should not be used.
        force_download (`bool`, *optional*, defaults to `False`):
            Whether or not to force to (re-)download the configuration files and override the cached versions if they
            exist.
        resume_download:
            Deprecated and ignored. All downloads are now resumed by default when possible.
            Will be removed in v5 of Transformers.
        proxies (`Dict[str, str]`, *optional*):
            A dictionary of proxy servers to use by protocol or endpoint, e.g., `{'http': 'foo.bar:3128',
            'http://hostname': 'foo.bar:4012'}.` The proxies are used on each request.
        token (`str` or *bool*, *optional*):
            The token to use as HTTP bearer authorization for remote files. If `True`, will use the token generated
            when running `huggingface-cli login` (stored in `~/.huggingface`).
        revision (`str`, *optional*, defaults to `"main"`):
            The specific model version to use. It can be a branch name, a tag name, or a commit id, since we use a
            git-based system for storing models and other artifacts on huggingface.co, so `revision` can be any
            identifier allowed by git.
        local_files_only (`bool`, *optional*, defaults to `False`):
            If `True`, will only try to load the tokenizer configuration from local files.
        repo_type (`str`, *optional*):
            Specify the repo type (useful when downloading from a space for instance).

    <Tip>

    Passing `token=True` is required when you want to use a private model.

    </Tip>

    Returns:
        `str`: The path to the module inside the cache.
    use_auth_tokenNrThe `use_auth_token` argument is deprecated and will be removed in v5 of Transformers. Please use `token` instead.V`token` and `use_auth_token` are both specified. Please set only the argument `token`.z+Offline mode: forcing local_files_only=TrueT/)r   r   r   )	r   r   r   r   r   r   r   r   r   zCould not locate the z inside rV   rI   )r   r   r   r   r   r   r   r   r   
c                     g | ]}d | S )z- r@   rJ   s     r    rE   z*get_cached_module_file.<locals>.<listcomp>  s    ;;;AxAxx;;;r"   rT   zs/zhttps://huggingface.co/z9A new version of the following files was downloaded from z:
z
. Make sure to double-check they do not contain any added malicious code. To avoid downloading new versions of the code file, you can pin a revision.)%r{   warningswarnFutureWarning
ValueErrorr   rc   inforA   r   r   isdirbasenamerw   rx   r
   r   r   EnvironmentErrorerrorrh   r   r(   r   r   r   filecmpcmpshutilcopyr   r   re   r   get_cached_module_filerL   rd   )r   r*   r   r   r   r   r   r   r   r   r   deprecated_kwargsr   is_local	submoduler   	new_filesresolved_module_filemodules_neededfull_submodulesubmodule_pathmodule_neededmodule_needed_filecommit_hashrepo_type_strurls                             r    r   r      s   | '**+;TBBN! A	
 	
 	
 uvvv  !1  ABBB %((E$F$F!w}}:;;H 
G$$%BCC		199#rw{KK	.);)Vbnw
 
 
 I*))+-% 
  
  
  	*M-AAA[)))   b[bbB_bbbccc
 ##788N 6CiON.)))*++n<NBG$$%BCCCC ,4466 	*gk #n{&B"C"C?
 ?
 	* K,n{.JKKK')))+ 	. 	.M,111M!#.K]![!["]2::<< .GK"C(F$G$GE E . .0NOOO+---	. **>MM (+5'"'+5Cn---,4466 	*K,n{.JKKK')))+ 	8 	8M"%:%:%::BBDD 8&1$)))'#1$3#%%5!,      M!6!6!6777
9~~h.II;;;;;<<	'/	5E5E5EVV7TVVA A APY A A A	
 	
 	
 7<<444s   >7D6 6-E#class_referencecode_revisionc                 j   |                     dd          }|-t          j        dt                     |t	          d          |}d| v r|                     d          \  }} n|}|                     d          \  }}|
||k    r|}
t          ||dz   ||||||
||	
  
        }t          |||	          S )
a>  
    Extracts a class from a module file, present in the local folder or repository of a model.

    <Tip warning={true}>

    Calling this function will execute the code in the module file found locally or downloaded from the Hub. It should
    therefore only be called on trusted repos.

    </Tip>



    Args:
        class_reference (`str`):
            The full name of the class to load, including its module and optionally its repo.
        pretrained_model_name_or_path (`str` or `os.PathLike`):
            This can be either:

            - a string, the *model id* of a pretrained model configuration hosted inside a model repo on
              huggingface.co.
            - a path to a *directory* containing a configuration file saved using the
              [`~PreTrainedTokenizer.save_pretrained`] method, e.g., `./my_model_directory/`.

            This is used when `class_reference` does not specify another repo.
        module_file (`str`):
            The name of the module file containing the class to look for.
        class_name (`str`):
            The name of the class to import in the module.
        cache_dir (`str` or `os.PathLike`, *optional*):
            Path to a directory in which a downloaded pretrained model configuration should be cached if the standard
            cache should not be used.
        force_download (`bool`, *optional*, defaults to `False`):
            Whether or not to force to (re-)download the configuration files and override the cached versions if they
            exist.
        resume_download:
            Deprecated and ignored. All downloads are now resumed by default when possible.
            Will be removed in v5 of Transformers.
        proxies (`Dict[str, str]`, *optional*):
            A dictionary of proxy servers to use by protocol or endpoint, e.g., `{'http': 'foo.bar:3128',
            'http://hostname': 'foo.bar:4012'}.` The proxies are used on each request.
        token (`str` or `bool`, *optional*):
            The token to use as HTTP bearer authorization for remote files. If `True`, will use the token generated
            when running `huggingface-cli login` (stored in `~/.huggingface`).
        revision (`str`, *optional*, defaults to `"main"`):
            The specific model version to use. It can be a branch name, a tag name, or a commit id, since we use a
            git-based system for storing models and other artifacts on huggingface.co, so `revision` can be any
            identifier allowed by git.
        local_files_only (`bool`, *optional*, defaults to `False`):
            If `True`, will only try to load the tokenizer configuration from local files.
        repo_type (`str`, *optional*):
            Specify the repo type (useful when downloading from a space for instance).
        code_revision (`str`, *optional*, defaults to `"main"`):
            The specific revision to use for the code on the Hub, if the code leaves in a different repository than the
            rest of the model. It can be a branch name, a tag name, or a commit id, since we use a git-based system for
            storing models and other artifacts on huggingface.co, so `revision` can be any identifier allowed by git.

    <Tip>

    Passing `token=True` is required when you want to use a private model.

    </Tip>

    Returns:
        `typing.Type`: The class, dynamically imported from the module.

    Examples:

    ```python
    # Download module `modeling.py` from huggingface.co and cache then extract the class `MyBertModel` from this
    # module.
    cls = get_class_from_dynamic_module("modeling.MyBertModel", "sgugger/my-bert-model")

    # Download module `modeling.py` from a given repo and cache then extract the class `MyBertModel` from this
    # module.
    cls = get_class_from_dynamic_module("sgugger/my-bert-model--modeling.MyBertModel", "sgugger/another-bert-model")
    ```r   Nr   r   z--rV   rI   )r   r   r   r   r   r   r   r   ri   )r{   r   r   r   r   rX   r   r   )r   r   r   r   r   r   r   r   r   r   r   kwargsr   repo_idr*   rk   final_modules                    r    get_class_from_dynamic_moduler     s    t ZZ 0$77N! A	
 	
 	
 uvvv #2#8#8#>#> /-33C88K!>'!I!I )e%')  L z<nUUUUr"   objfolderconfigc                 z     j         dk    r#t                              d  d| d           dS  fd}t          |t          t
          f          r|D ]} ||           n| ||           g }t          j         j                  j        }t          |          t          |          j
        z  }t          j        ||           |                    |           t          |          D ]P}t          |          t          |          j
        z  }t          j        ||           |                    |           Q|S )a  
    Save the modeling files corresponding to a custom model/configuration/tokenizer etc. in a given folder. Optionally
    adds the proper fields in a config.

    Args:
        obj (`Any`): The object for which to save the module files.
        folder (`str` or `os.PathLike`): The folder where to save.
        config (`PretrainedConfig` or dictionary, `optional`):
            A config in which to register the auto_map corresponding to this custom object.

    Returns:
        `List[str]`: The list of files saved.
    __main__z We can't save the code defining z in z as it's been defined in __main__. You should put this code in a separate module so we can include it in the saved folder and make it easier to share via the Hub.Nc                    
j         j        }|                    d          d         }| d
j         j         }d|v rd }d }
j         j                            d          ra| d
j         j         }t          
dd           >t          
d          }|j        }|                    d          d         }| d|j         }n| d
j         j         }||f}t          | t                    r'|                     di           }	||	
j	        <   |	| d<   d S t          | dd           || j
        
j	        <   d S 
j	        |i| _
        d S )NrV   	TokenizerFastslow_tokenizer_classauto_map)	__class__
__module__rX   __name__rv   r   
isinstancedictr|   _auto_classr   )_configmodule_namelast_module	full_namer   fast_tokenizer_classslow_tokenizerslow_tok_module_namelast_slow_tok_moduler   r   s             r    _set_auto_map_in_configz3custom_object_save.<locals>._set_auto_map_in_configA  s   m.!'',,R0"==S]%;==	)###' #' }%..v66 
Q*5'P'P8N'P'P$3 6==I%,S2H%I%IN+9+D(+?+E+Ec+J+J2+N(.B+^+^^E\+^+^( +6'P'P8N'P'P$-/CDIgt$$ 	<{{:r22H(1HS_%"*GJWj$//;09GS_--- #;Gr"   )r   rc   rd   r   r7   tupler   rz   __file__r   r#   r   r   r   rQ   )	r   r   r   r   cfgresultobject_file	dest_fileneeded_files	   `        r    custom_object_saver   +  sw    ~##s     	
 	
 	

 	< < < < <@ &4-(( ( 	) 	)C##C((((	)		'''F+cn-6KV[ 1 1 67I
KY'''
MM) 1== ! !LLD$5$5$:;	K+++i    Mr"   c                      t          d          )NzLoading this model requires you to execute custom code contained in the model repository on your local machine. Please set the option `trust_remote_code=True` to permit loading of this model.)r   )signumframes     r    _raise_timeout_errorr   w  s    
	c  r"      c                    | ]|rd} nW|rBt           dk    r6d }	 t          j        t          j        t                    }t          j        t                      | It          d| d| d          }|                                dv rd} n|                                dv rd} | It          j        d           n$# t          $ r t          d| d| d	          w xY w	 |3t          j        t          j        |           t          j        d           nM# |4t          j        t          j        |           t          j        d           w w xY w|rt          d d            |r|s| st          d
| d          | S )NFr   zThe repository for z contains custom code which must be executed to correctly load the model. You can inspect the repository content at https://hf.co/z.
You can avoid this prompt in future by passing the argument `trust_remote_code=True`.

Do you wish to run the custom code? [y/N] )yesy1T)non0rT   zS.
Please pass the argument `trust_remote_code=True` to allow custom code to be run.zLoading z requires you to execute the configuration file in that repo on your local machine. Make sure you have read the code there to avoid malicious use, then set the option `trust_remote_code=True` to remove this error.)	TIME_OUT_REMOTE_CODEsignalSIGALRMr   alarminputlower	Exceptionr   )trust_remote_code
model_namehas_local_codehas_remote_codeprev_sig_handleranswers         r    resolve_trust_remote_coder     s      	- % 	-!5!9!9#$#)=AU#V#V 1222'/"Fj F FcmF F F F ||~~):::,0))+???,1) (/ Q    i* i i_ii i i     $/M&.2BCCCLOOO $/M&.2BCCCLOOOO 0  	- t,,, 
~ 
6G 
Mz M M M
 
 	
 s   BB9 8D 9!CD 8E)	NFNNNNFNNrp   )5__doc__r   r   r   importlib.utilr   r4   r   r   r   	threadingtypingr   pathlibr   typesr   r   r   r   r   r	   huggingface_hubr
   utilsr   r   r   r   r   r   
get_loggerr   rc   Lockry   r!   rA   PathLiker(   r<   rQ   r]   rh   boolTyper   r   r   r   r   r   r   r@   r"   r    <module>r
     sU   : 9           				 				   



                   3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2                
	H	%	%%y~'' & & & &c2;&6 7 &D & & & &,'eC,<&= '$s) ' ' ' '* 5bk1A+B  tCy        B%R[ 01 d3i    : *E#r{"23  *S	  *  *  *  *N 	.+ .+ .+.+sBK'(.+ 	.+
 [.+ .+ .+ .+h 48 &*(,(,""#"&m5 m5#(bk)9#:m5m5 c2;./0m5 	m5
 d^m5 d38n%m5 E$)$%m5 smm5 m5 }m5 3-m5 	m5 m5 m5 m5f 48 &*(,(,""##'zV zVzV#(bk)9#:zV c2;./0zV 	zV
 d^zV d38n%zV E$)$%zV smzV zV }zV C=zV [zV zV zV zVzI IC IsBK/?)@ I(SW. Idhildm I I I IX    + + + + +r"   