
    Nj                    4   d dl mZ d dlZd dlZd dlmZ d dlmZm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 d dlmZ d d	lmZmZ d d
lmZ d dlmZ  ej8                  e      Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 ddZ ddZ!ddZ"y)    )annotationsN)Path)Anycast)	save_file)	Tokenizer)create_model_card)get_metadata_from_readme)FOLDER_LAYOUTSLayout)maybe_get_cached_model_path)SafeOpenProtocolc                   |r| |z  n| } | j                  dd       d|i}	|||	d<   |||	d<   t        |	| dz         |j                  t        | dz        d	
       t	        |      }
t        j                  |j                        j                  |
d<   |t        |j                  d         |
d<   n|
j                  dd       t        j                  |
t        | dz  d      d       dddddg}|
j                  d      r|j                  ddddd       t        j                  |t        | dz  d      d       t         j#                  d|         |rt%        | fi | yy)a  Save a model to a folder.

    :param folder_path: The path to the folder.
    :param embeddings: The embeddings.
    :param tokenizer: The tokenizer.
    :param config: A metadata config.
    :param create_model_card: Whether to create a model card.
    :param subfolder: The subfolder to save the model in.
    :param weights: The weights of the model. If None, no weights are saved.
    :param mapping: The token mapping of the model. If None, there is no token mapping.
    :param **kwargs: Any additional arguments.
    T)exist_okparents
embeddingsNweightsmappingzmodel.safetensorsztokenizer.jsonF)prettyembedding_dtyper   vocabulary_quantizationzconfig.jsonw   )indent0.z,sentence_transformers.models.StaticEmbedding)idxnamepathtype	normalize   11_Normalizez&sentence_transformers.models.Normalizezmodules.jsonzSaved model to )mkdirr   savestrdictnpdtyper   intshapepopjsondumpopengetappendloggerinfomake_model_card)folder_pathr   	tokenizerconfigr	   	subfolderr   r   kwargsmodel_weightscfgmoduless               r/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/model2vec/persistence/persistence.pysave_pretrainedr?      sm   . .7+	)KKtT2!:.M#*i #*i m[+>>?NN3{%556uNE v,CXXj&6&67<<C),Z-=-=a-@)A%&)40IIc4m3S9!D #s<jklG
ww{q#}NvwxIIgtK.8#>qI
KK/+/0 .v.     c                z   t        |       } t        | ||      }|r||z  }t        |      }|dz  }t        t        t        j                  |j                  d            }|j                  rdnd}|j                  |      }		 |j                  d      }
	 |j                  d	      }|j                         rt        |      }ni }t        j                  t        |j                               }t#        j$                  t'        |j(                              }|	||||
|fS # t        $ r d}
Y w xY w# t        $ r d}Y w xY w)
ag  Loads a pretrained model from a folder.

    :param folder_or_repo_path: The folder or repo path to load from.
        - If this is a local path, we will load from the local path.
        - If the local path is not found, we will attempt to load from the huggingface hub.
    :param subfolder: The subfolder to load from.
    :param token: The huggingface token to use.
    :param force_download: Whether to force the download of the model. If False, the model is only downloaded if it is not
        already present in the cache.
    :return: The embeddings, tokenizer, config, metadata, weights and mapping.

    )folder_or_repo_pathtokenforce_downloadz	README.mdnumpy)	frameworkzembedding.weightr   r   Nr   )r   _resolve_folder
_get_pathsr   r   safetensors	safe_openr   is_sentence_transformers
get_tensor	Exceptionexistsr
   r   	from_filer'   r7   r.   loadr0   r8   )rB   r9   rC   rD   folderselected_layoutreadme_pathopened_tensor_fileembedding_namer   r   r   metadatar7   r8   s                  r>   load_pretrainedrW   Q   s?   $ 23 1DEbpqF)# (O;&K.0E0EoF`F`ls0tu+:+S+S'YeN#..~>J$//	:$//	: +K8$..s?3L3L/MNIYYtO2234Fy&(GWDD!  
  s$   D D, D)(D),D:9D:c                    | j                         r| S |st        t        |             x}r|S t        t	        j
                  t        | j                               d|            }|S )z2Resolve a folder locally or from hugging face hub.model)	repo_typerC   )rN   r   r'   r   huggingface_hubsnapshot_downloadas_posix)rB   rC   rD   rQ   s       r>   rG   rG      sh    !!#"" 05H1IJJ6JM))#.A.J.J.L*MY`hmnF Mr@   c                    t         D ]'  }|j                  |       }|j                         s%|c S  t        d|  d      )z-Get all paths by trying out multiple layouts.z'Could not find expected model files in zH. Tried model2vec, sentence-transformers, and 0_StaticEmbedding layouts.)r   with_parentis_valid
ValueError)rQ   layouts     r>   rH   rH      sM     ##F+??M !
 
1& :Q 	Q r@   )TNNN)r6   r   r   z
np.ndarrayr7   r   r8   zdict[str, Any]r	   boolr9   
str | Noner   np.ndarray | Noner   re   r:   r   returnNone)
rB   z
str | Pathr9   rd   rC   rd   rD   rc   rf   zbtuple[np.ndarray, Tokenizer, dict[str, Any], dict[str, Any], np.ndarray | None, np.ndarray | None])rB   r   rC   rd   rD   rc   rf   r   )rQ   r   rf   r   )#
__future__r   r.   loggingpathlibr   typingr   r   r[   rE   r)   rI   safetensors.numpyr   
tokenizersr   model2vec.modelcardsr	   r5   r
    model2vec.persistence.datamodelsr   r   model2vec.persistence.hfr   model2vec.utilsr   	getLogger__name__r3   r?   rW   rG   rH    r@   r>   <module>ru      s    "        '   E 9 C @ ,			8	$ # !%!%7/7/7/ 7/ 	7/
 7/ 7/ 7/ 7/ 7/ 
7/t3E#3E3E 3E 	3E
 h3El"
r@   