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   úZ/lsinfo/ai/hellotax_ai/llm_service/venv_vllm/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_idúMtuple[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 rŽtdd„ |	D ƒƒrŽ|
 d¡ qvd}t||ƒD ]3\}}
|r¸t|
ƒdkr¬|d  ¡ s±d|
v r¸|
 d¡ q—|r½d }t|
ƒdkrÉ|
 d¡ q—tt|ƒt|ƒƒD ]\}}
d|
v rët|
ƒdkrë|
 d¡ qÔ d d!d„ t||ƒD ƒ¡pûd }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r´d@‡ ‡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 s©d'ˆv s©d(ˆv r˜g }ˆ  d&ˆ  d'ˆ  d(d ¡¡¡}|d urÒt|tƒrÈ| |¡ n
t|tƒrÒ| |¡ ˆ jd u rÚg ˆ _|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 |
¡ qÜd3ˆv s§d4ˆv s§d5ˆv r‘g }ˆ  d3ˆ  d4ˆ  d5d ¡¡¡}|d urÓt|tƒrÈ| |¡ nt|tƒrÓ| |¡ ˆ jd u rÜg ˆ _|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rêt |¡ˆ _ˆ jd u rû|d urût |¡ˆ _ˆ 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    
