o
    [۷io                     @  s   d dl m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	m
Z
mZ d dlmZ ddlmZ d dlZedZeG d	d
 d
ZdS )    )annotationsN)Path)AnyLiteralOptional)	dataclass   )Keysmetadatac                   @  sD  e Zd ZU dZded< dZded< dZded< dZded< dZded	< dZ	ded
< dZ
ded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded < dZ ded!< dZ!ded"< dZ"ded#< dZ#ded$< dZ$d%ed&< dZ%d'ed(< dZ&d'ed)< dZ'd%ed*< e(dNdOd3d4Z)e(dPdQd6d7Z*e(dPdRd8d9Z+e(dPdRd:d;Z,e(dPdRd<d=Z-e(d>d? Z.e(dSdTdBdCZ/e(dNdUdHdIZ0dVdLdMZ1dS )WMetadataNOptional[str]sampling_sequencezOptional[int]sampling_top_kzOptional[float]sampling_top_psampling_min_psampling_xtc_probabilitysampling_xtc_thresholdsampling_tempsampling_penalty_last_nsampling_penalty_repeatsampling_mirostatsampling_mirostat_tausampling_mirostat_etanameauthorversionorganizationfinetunebasenamedescriptionquantized_by
size_labelurldoiuuidrepo_url
source_url
source_doisource_uuidsource_repo_urllicenselicense_namelicense_linkzOptional[list[dict]]base_modelszOptional[list[str]]tags	languagesdatasetsr   metadata_override_pathOptional[Path]
model_path
model_nametotal_paramsintreturnc           	      C  s  t  }t |}t |}t |}t |||||}|r}|d|j|_|d|j|_|d|j|_|d|j	|_	|d|j
|_
|d|j|_|d|j|_|d|j|_|d	|j|_|d
|j|_|d|j|_|d|j|_t | }|tjj|j|_|tjj|j|_|tjj|j|_|tjj|j	|_	|tjj|j
|_
|tjj|j|_|tjj|j|_|tjj|j|_|tjj|j|_|tjj|j|_|tjj|j|_|tjj |j|_|tjj!|j"|_"|tjj#|j$|_$|tjj%|j&|_&|tjj'|j(|_(|tjj)|j*|_*|tjj+|j,|_,|tjj-|j.|_.|tjj/|j0|_0|tjj1|j2|_2|tjj3|j4|_4|tjj5|j6|_6|tjj7|j8|_8|tjj9|j:|_:|tjj;|j<|_<|tjj=|j>|_>|tjj?|j@|_@|tjjA|jB|_B|tjjC|jD|_D|tjjE|jF|_F|d|jG|_G|d|jH|_H|tjjI|jJ|_J|tjjK|jL|_L|d ur||_"|S )Nsequencetop_ktop_pmin_pxtc_probabilityxtc_thresholdtemperaturepenalty_last_npenalty_repeatmirostatmirostat_taumirostat_etazgeneral.base_modelszgeneral.datasets)Mr   load_model_cardload_hf_parametersload_generation_configapply_metadata_heuristicgetr   r   r   r   r   r   r   r   r   r   r   r   load_metadata_overrider	   GeneralSAMPLING_SEQUENCESAMPLING_TOP_KSAMPLING_TOP_PSAMPLING_MIN_PSAMPLING_XTC_PROBABILITYSAMPLING_XTC_THRESHOLDSAMPLING_TEMPSAMPLING_PENALTY_LAST_NSAMPLING_PENALTY_REPEATSAMPLING_MIROSTATSAMPLING_MIROSTAT_TAUSAMPLING_MIROSTAT_ETANAMEr   AUTHORr   VERSIONr   ORGANIZATIONr   FINETUNEr   BASENAMEr   DESCRIPTIONr   QUANTIZED_BYr    
SIZE_LABELr!   LICENSE_NAMEr+   LICENSE_LINKr,   URLr"   DOIr#   UUIDr$   REPO_URLr%   
SOURCE_URLr&   
SOURCE_DOIr'   SOURCE_UUIDr(   SOURCE_REPO_URLr)   r-   r0   TAGSr.   	LANGUAGESr/   )	r1   r3   r4   r5   r
   
model_card	hf_params
gen_configmetadata_override rp   C/home/ubuntu/vllm_env/lib/python3.10/site-packages/gguf/metadata.pyload<   sr   




zMetadata.loaddict[str, Any]c                 C  sP   | d u s|   s
i S t| ddd}t|W  d    S 1 s!w   Y  d S )Nrutf-8encoding)is_fileopenjsonrr   )r1   frp   rp   rq   rI      s
   $zMetadata.load_metadata_overridec           	      C  s>  | d u s|   s
i S | d }| si S d}t|dddQ}| }| }g }t|dkr7i W  d    S t|dkrL|d dkrLi W  d    S |dd  D ]}|dkrZ n|| qRd	|d	 }W d    n1 sqw   Y  |d
d}|dd}|rt	
|}t|tr|S tdt| d i S i S )Nz	README.md rt   ru   rv   r   z---r   
z- no
z- "no"
	z  z3while reading YAML model card frontmatter, data is z instead of dict)is_dirrx   ry   read
splitlineslenappendjoinreplaceyaml	safe_load
isinstancedictloggererrortype)	r3   model_card_pathyaml_contentr{   contentlines
lines_yamllinedatarp   rp   rq   rD      s>   


zMetadata.load_model_cardc                 C  sd   | d u s|   s
i S | d }| si S t|ddd}t|W  d    S 1 s+w   Y  d S )Nzconfig.jsonrt   ru   rv   )r   rx   ry   rz   rr   )r3   config_pathr{   rp   rp   rq   rE      s   $zMetadata.load_hf_parametersc              	   C  s   | d u s|   s
i S | d }| si S z t|ddd}t|W  d    W S 1 s-w   Y  W d S  tjtfyB   i  Y S w )Nzgeneration_config.jsonrt   ru   rv   )r   rx   ry   rz   rr   JSONDecodeErrorIOError)r3   generation_config_pathr{   rp   rp   rq   rF      s   (zMetadata.load_generation_configc                 C  s$   d dd |  dd D S )N c                 S  s,   g | ]}|  rtd |s| n|qS )z^(v\d+(?:\.\d+)*|\d.*)$)islowerrematchtitle).0wrp   rp   rq   
<listcomp>   s   , z(Metadata.id_to_title.<locals>.<listcomp>-)r   stripr   split)stringrp   rp   rq   id_to_title   s   $zMetadata.id_to_titlemodel_idMtuple[str | None, str | None, str | None, str | None, str | None, str | None]c              	   C  s  | d u rdS d| v r| d d d d d fS d| v r|  dd\}}nd | }}|d ur6t|dkr6|d dkr6d }| d}ttt|D ]}t|| dkrP||= qCdd	 |D }t|D ]\}}td
|tjrq|| d q\td|tjr|| d |	 ||< q\|dkr:td|tjr:|
dd}|d  r|d d d |d  |d  }t|dkr|d  r|d dv r|d d |d 	  }|dkr%zFt|d d tdd|d  }|dk r|t|d k s|dkrt|| d| d kr|| d |d d |d   }W n
 ty$   Y nw t|| dkr5|| d |||< q\|dkrctd|tjrc|dk r\| dkr\|| d q\|| d q\tdd t||D rt||D ]\}	}
d|
v rtdd |	D r|
d qvd}t||D ]3\}}
|rt|
dkr|d  sd|
v r|
d q|rd }t|
dkr|
d qtt|t|D ]\}}
d|
v rt|
dkr|
d q dd!d t||D pd }dtd"d t||D  pd }dd#d t||D p d }dd$d t||D p0d }|d u rB|d u rB|d u rBd }||||||fS )%N)NNNNNNr   /r   r   .r   c                 S  s   g | ]}t  qS rp   )set)r   _rp   rp   rq   r     s    z4Metadata.get_model_id_components.<locals>.<listcomp>z(v|iter)?\d+([.]\d+)*r   zi?q\d(_\w)*|b?fp?(16|32)r   zD(([A]|\d+[x])?\d+([._]\d+)?[KMBT][\d]?|small|mini|medium|large|x?xl)r   kmbti  z KMBT      r   r!   zchat|instruct|vision|loralorac                 s  s.    | ]\}}d |v r|D ]}|  V  qqdS r!   N)	isdecimal)r   ntcrp   rp   rq   	<genexpr>F  s   , z3Metadata.get_model_id_components.<locals>.<genexpr>c                 s  s    | ]}|  V  qd S N)isalpha)r   r   rp   rp   rq   r   I  s    Tr   Fc                 s       | ]\}}d |v r|V  qdS )r   Nrp   )r   r   r   rp   rp   rq   r   ^      c                 s  r   r   rp   )r   sr   rp   rp   rq   r   `  r   c                 s  r   )r   Nrp   )r   r{   r   rp   rp   rq   r   a  r   c                 s  s(    | ]\}}d |v rd|vr|V  qdS )r   r   Nrp   )r   vr   rp   rp   rq   r   d  s   & )r   r   reversedrange	enumerater   	fullmatch
IGNORECASEaddupperr   r   floatpowfindabslower
ValueErroranyzipallremover   r   r   fromkeyskeys)r   r5   org_componentmodel_full_name_component
name_partsi
name_typespartlabel_paramsr   r   at_startr   r!   r   r   rp   rp   rq   get_model_id_components   s   
 
 
$$


,
 *  z Metadata.get_model_id_componentsr
   rl   Optional[dict]rm   c              
     sF  d urd@ fdd}d@ fdd}|dd |d	d	 |d
d
 |dd |dd |dd |dd |dd |dd |dd |dd |dd |dd |d	d |d
d |dd |dd |dd |dd |dd |dd  |dd! |dd" |dd# |dd |d	d$ |dd% d&v sd'v sd(v rg } d& d' d(d }|d urt|tr|| n
t|tr||  jd u rg  _|D ]}	i }
t|	tr}|	d)s|	d*s|	d+r;|	|
d< d,|	v r:t	d-|	}|r:|
d.}t||\}}}}}}|d ur%t||
d< |d ur1t||
d< |d ur:||
d
< nVt|	|\}}}}}}|d urSt||
d< |d ur_t||
d< |d urh||
d
< |d ur||d ur|d/| d0| |
d< nt|	tr|	}
ntd1t|	 d2  j|
 qd3v sd4v sd5v rg } d3 d4 d5d }|d urt|tr|| nt|tr||  jd u rg  _|D ]}i }t|tru|d6r3||d< d,|v r2t	d-|}|r2|
d.}t||\}}}}}}|d urt||d< |d ur)t||d< |d ur2||d
< nVt||\}}}}}}|d urKt||d< |d urWt||d< |d ur`||d
< |d urt|d urtd/| d0| |d< nt|tr~|}ntd7t| d2  j| q|d8d8 |d9d9 |d:d: |d;d; |d;d< |d=d= |d=d> |d ur3| d?}|d ur3|d0d.kr3|}	t|	|\}}}}}} jd u r|d urt| _ jd u r|d urt| _ jd u r	|d ur	| _ jd u r|d ur| _ jd u r%|d ur%| _ jd u r3|d ur3| _|d ur|j}	t|	|\}}}}}} jd u rX|d urXt| _ jd u ri|d urit| _ jd u rw|d urw| _ jd u r|d ur| _ jd u r|d ur| _ jd u r|d ur| _ S )ANmetadata_keystrmodel_card_keyc                   s6   |v rt  | d d u rt | | d S d S d S r   )getattrsetattrrH   )r   r   r
   rl   rp   rq   use_model_card_metadatat  s   zBMetadata.apply_metadata_heuristic.<locals>.use_model_card_metadatac                   sj    |d }|d u rd S t | d }|d u rg }t|tr#|| n
t|tr-|| t | | d S r   )rH   r   r   r   r   listextendr   )r   r   
tags_valuecurrent_valuer   rp   rq   use_array_model_card_metadatax  s   


zHMetadata.apply_metadata_heuristic.<locals>.use_array_model_card_metadatar   r   r   r   r   r   r   r!   r&   r"   r'   r#   r(   r$   r)   r%   r4   model_authormodel_versionmodel_organizationmodel_descriptionmodel_finetunemodel_basenamemodel_size_label	model_url	model_doi
model_uuidmodel_repo_urlmodel_creator
model_type
base_modelr-   base_model_sourceshttp://https://ssh://zhuggingface.coz&https?://huggingface.co/([^/]+/[^/]+)$r   zhttps://huggingface.co/r   zbase model entry 'z' not in a known formatr0   datasetdataset_sources)r   r   r   zdataset entry 'r*   r+   r,   r.   pipeline_tagr/   language_name_or_path)r   r   r   r   )rH   r   r   r   r   r   r-   
startswithr   r   groupr   r   r   r   r   r   r0   countr   r   r   r   r   r!   )r
   rl   rm   r3   r5   r   r   metadata_base_modelsbase_model_valuer   r   r   model_id_componentr   r   r   r   r   r!   metadata_datasetsdataset_value
dataset_idr   dataset_id_componentdataset_name_componenthf_name_or_pathrp   r   rq   rG   l  s0  































 



























z!Metadata.apply_metadata_heuristicgguf_writergguf.GGUFWriterc                 C  sj  | j d usJ | jd ur|| j | jd ur|| j | jd ur(|| j | jd ur3|| j | j	d ur>|
| j	 | jd urI|| j | jd urT|| j | jd ur_|| j | jd urj|| j | jd uru|| j | jd ur|| j | jd ur|| j || j  | jd ur|| j | jd ur|| j | jd ur|| j | j d ur|!| j  | j"d ur|#| j" | j$d ur|%| j$ | j&d ur|'| j& | j(d ur|)| j( | j*d urt+| j*t,r|-d.| j* n|-| j* | j/d ur|0| j/ | j1d ur|2| j1 | j3d ur)|4| j3 | j5d ur5|6| j5 | j7d urA|8| j7 | j9d urM|:| j9 | j;d urY|<| j; | j=d ure|>| j= | j?d urq|@| j? | jAd ur}|B| jA | jCd ur|DtE| jC tF| jCD ]z\}}d|v r|G||d  d|v r|H||d  d|v r|I||d  d|v r|J||d  d|v r|K||d  d|v r|L||d  d|v r|M||d  d	|v r|N||d	  d
|v r	|O||d
  q| jPd ur|QtE| jP tF| jPD ]z\}}d|v r/|R||d  d|v r<|S||d  d|v rI|T||d  d|v rV|U||d  d|v rc|V||d  d|v rp|W||d  d|v r}|X||d  d	|v r|Y||d	  d
|v r|Z||d
  q| j[d ur|\| j[ | j]d ur|^| j] d S d S )N,r   r   r   r   r   r"   r#   r$   r%   )_r   r   add_sampling_sequencer   add_sampling_top_kr   add_sampling_top_pr   add_sampling_min_pr   add_sampling_xtc_probabilityr   add_sampling_xtc_thresholdr   add_sampling_tempr   add_sampling_penalty_last_nr   add_sampling_penalty_repeatr   add_sampling_mirostatr   add_sampling_mirostat_taur   add_sampling_mirostat_etaadd_namer   
add_authorr   add_versionr   add_organizationr   add_finetuner   add_basenamer   add_descriptionr    add_quantized_byr!   add_size_labelr*   r   r   add_licenser   r+   add_license_namer,   add_license_linkr"   add_urlr#   add_doir$   add_uuidr%   add_repo_urlr&   add_source_urlr'   add_source_doir(   add_source_uuidr)   add_source_repo_urlr-   add_base_model_countr   r   add_base_model_nameadd_base_model_authoradd_base_model_versionadd_base_model_organizationadd_base_model_descriptionadd_base_model_urladd_base_model_doiadd_base_model_uuidadd_base_model_repo_urlr0   add_dataset_countadd_dataset_nameadd_dataset_authoradd_dataset_versionadd_dataset_organizationadd_dataset_descriptionadd_dataset_urladd_dataset_doiadd_dataset_uuidadd_dataset_repo_urlr.   add_tagsr/   add_languages)selfr	  keybase_model_entrydataset_entryrp   rp   rq   set_gguf_meta_model^  s   





































zMetadata.set_gguf_meta_model)NNNr   )
r1   r2   r3   r2   r4   r   r5   r6   r7   r   r   )r1   r2   r7   rs   )r3   r2   r7   rs   )Nr   )r   r   r5   r6   r7   r   )r
   r   rl   r   rm   r   r3   r2   r5   r6   r7   r   )r	  r
  )2__name__
__module____qualname__r   __annotations__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   staticmethodrr   rI   rD   rE   rF   r   r   rG   rF  rp   rp   rp   rq   r      sn   
 W/
| rr   )
__future__r   r   rz   r   loggingpathlibr   typingr   r   r   dataclassesr   	constantsr	   gguf	getLoggerr   r   rp   rp   rp   rq   <module>   s    
