Ë
    l^(hv  ã                  ó  — d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZ  e«       rd d	lmZmZmZmZmZmZ  ej2                  e«      Ze	rd d
lmZ  G d„ de«      Ze G d„ de«      «       Zdd„Z y)é    )ÚannotationsN)Ú	dataclassÚfield)ÚPath)ÚTYPE_CHECKINGÚAny)Ú	ModelCard)Ú$SentenceTransformerModelCardCallbackÚ SentenceTransformerModelCardData)Úis_datasets_available)ÚDatasetÚDatasetDictÚIterableDatasetÚIterableDatasetDictÚSequenceÚValue)ÚCrossEncoderc                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚCrossEncoderModelCardCallbackc                ó$   •— t         ‰| �  |«       y ©N)ÚsuperÚ__init__)ÚselfÚdefault_args_dictÚ	__class__s     €úl/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sentence_transformers/cross_encoder/model_card.pyr   z&CrossEncoderModelCardCallback.__init__   s   ø€ Ü‰ÑÐ*Õ+ó    )r   údict[str, Any]ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__r   Ú__classcell__©r   s   @r   r   r      s   ø„ ÷,ñ ,r   r   c                  óÔ   ‡ — e Zd ZU dZ ed¬«      Zded<    ed„ ¬«      Zded	<    edd
¬«      Zded<    edd
¬«      Z	ded<    edd
d
¬«      Z
ded<   dd„Zdˆ fd„Zdd„Zdd„Zˆ xZS )ÚCrossEncoderModelCardDataa'  A dataclass storing data used in the model card.

    Args:
        language (`Optional[Union[str, List[str]]]`): The model language, either a string or a list,
            e.g. "en" or ["en", "de", "nl"]
        license (`Optional[str]`): The license of the model, e.g. "apache-2.0", "mit",
            or "cc-by-nc-sa-4.0"
        model_name (`Optional[str]`): The pretty name of the model, e.g. "CrossEncoder based on answerdotai/ModernBERT-base".
        model_id (`Optional[str]`): The model ID when pushing the model to the Hub,
            e.g. "tomaarsen/ce-mpnet-base-ms-marco".
        train_datasets (`List[Dict[str, str]]`): A list of the names and/or Hugging Face dataset IDs of the training datasets.
            e.g. [{"name": "SNLI", "id": "stanfordnlp/snli"}, {"name": "MultiNLI", "id": "nyu-mll/multi_nli"}, {"name": "STSB"}]
        eval_datasets (`List[Dict[str, str]]`): A list of the names and/or Hugging Face dataset IDs of the evaluation datasets.
            e.g. [{"name": "SNLI", "id": "stanfordnlp/snli"}, {"id": "mteb/stsbenchmark-sts"}]
        task_name (`str`): The human-readable task the model is trained on,
            e.g. "semantic search and paraphrase mining".
        tags (`Optional[List[str]]`): A list of tags for the model,
            e.g. ["sentence-transformers", "cross-encoder"].

    .. tip::

        Install `codecarbon <https://github.com/mlco2/codecarbon>`_ to automatically track carbon emission usage and
        include it in your model cards.

    Example::

        >>> model = CrossEncoder(
        ...     "microsoft/mpnet-base",
        ...     model_card_data=CrossEncoderModelCardData(
        ...         model_id="tomaarsen/ce-mpnet-base-allnli",
        ...         train_datasets=[{"name": "SNLI", "id": "stanfordnlp/snli"}, {"name": "MultiNLI", "id": "nyu-mll/multi_nli"}],
        ...         eval_datasets=[{"name": "SNLI", "id": "stanfordnlp/snli"}, {"name": "MultiNLI", "id": "nyu-mll/multi_nli"}],
        ...         license="apache-2.0",
        ...         language="en",
        ...     ),
        ... )
    N)ÚdefaultÚstrÚ	task_namec                 ó
   — ddgS )Nzsentence-transformerszcross-encoder© r-   r   r   ú<lambda>z"CrossEncoderModelCardData.<lambda>F   s   € Ø#Øð!
€ r   )Údefault_factoryzlist[str] | NoneÚtagsF)r)   Úinitzlist[list[str]] | NoneÚpredict_exampleÚpipeline_tag)r)   r1   ÚreprzCrossEncoder | NoneÚmodelc                ó  — t        |t        «      r|t        |j                  «       «      d      }t        |t        t
        f«      ryt        |«      dk(  ry|j                  j                  «       D ��cg c]g  \  }}t        |t        «      r|j                  dv sBt        |t        «      r4t        |j                  t        «      r|j                  j                  dv r|‘Œi }}}t        |«      dk  ry|d   }|d   }t        |d   |   «      }t        |d   |   «      }|dd |   }	|dd |   }
|t        u r|
d   dd }
|	d   gt        |
«      z  }	|t        u r't        |	|
«      D ��cg c]	  \  }}||g‘Œ c}}| _        yyc c}}w c c}}w )a  
        We don't set widget examples, but only load the prediction example.
        This is because the Hugging Face Hub doesn't currently have a Sentence Ranking
        or Text Classification widget that accepts pairs, which is what CrossEncoder
        models require.
        r   N>   ÚstringÚlarge_stringé   é   é   )Ú
isinstancer   ÚlistÚkeysr   r   ÚlenÚfeaturesÚitemsr   Údtyper   ÚfeatureÚtyper*   Úzipr2   )r   ÚdatasetÚcolumnrC   ÚcolumnsÚquery_columnÚanswer_columnÚ
query_typeÚanswer_typeÚqueriesÚanswersÚqueryÚresponses                r   Úset_widget_examplesz-CrossEncoderModelCardData.set_widget_examplesU   s�  € ô �gœ{Ô+Øœd 7§<¡<£>Ó2°1Ñ5Ñ6ˆGä�g¤Ô1DÐEÔFàäˆw‹<˜1ÒØð $+×#3Ñ#3×#9Ñ#9Ó#;÷	
á�˜Ü˜7¤EÔ*¨w¯}©}Ð@ZÑ/Zä˜7¤HÔ-Ü˜wŸ™´Ô6Ø—O‘O×)Ñ)Ð-GÑGò ð	
ˆñ 	
ô ˆw‹<˜!ÒØà˜q‘zˆØ ™
ˆä˜' !™* \Ñ2Ó3ˆ
Ü˜7 1™: mÑ4Ó5ˆà˜"˜1�+˜lÑ+ˆØ˜"˜1�+˜mÑ,ˆð œ$ÑØ˜a‘j  !�nˆGØ˜q‘z�l¤S¨£\Ñ1ˆGàœÑÜMPÐQXÐZaÓMb×#c¹/¸%À U¨HÒ$5Ó#cˆDÕ ð ùó7	
ùó8 $ds   Á3A,E?Å&Fc                ó¶   •— t         ‰| �  |«       | j                  €|j                  dk(  rdnd| _        | j                  €|j                  dk(  rdnd| _        y y )Nr:   z"text reranking and semantic searchztext pair classificationztext-rankingztext-classification)r   Úregister_modelr+   Ú
num_labelsr3   )r   r5   r   s     €r   rS   z(CrossEncoderModelCardData.register_model„   s`   ø€ Ü‰Ñ˜uÔ%à�>‰>Ð!à8=×8HÑ8HÈAÒ8MÑ4ÐSmð ŒNð ×ÑÐ$Ø27×2BÑ2BÀaÒ2G¡ÐMbˆDÕð %r   c                ó8   — | j                   j                  |«      S r   )r5   Ú	tokenizer)r   Útexts     r   Útokenizez"CrossEncoderModelCardData.tokenizeŽ   s   € Ø�z‰z×#Ñ# DÓ)Ð)r   c                ó\   — | j                   j                  | j                   j                  dœS )N)Úmodel_max_lengthÚmodel_num_labels)r5   Ú
max_lengthrT   )r   s    r   Úget_model_specific_metadataz5CrossEncoderModelCardData.get_model_specific_metadata‘   s&   € à $§
¡
× 5Ñ 5Ø $§
¡
× 5Ñ 5ñ
ð 	
r   )rF   zDataset | DatasetDictr    r!   )r    r!   )rW   zstr | list[str]r    r   )r    r   )r"   r#   r$   Ú__doc__r   r+   Ú__annotations__r0   r2   r3   r5   rQ   rS   rX   r]   r%   r&   s   @r   r(   r(      s…   ø… ñ$ñN  4Ô(€IˆsÓ(Ù"ñ
ô€DÐ
ó ñ /4¸DÀuÔ.M€OÐ+ÓMñ  d°Ô7€L�#Ó7ñ "'¨t¸%ÀeÔ!L€EÐÓLó-dõ^có*÷
r   r(   c                ó–   — t        t        «      j                  dz  }t        j                  | j
                  |d¬«      }|j                  S )Nzmodel_card_template.mdu   ðŸ¤—)Ú	card_dataÚtemplate_pathÚhf_emoji)r   Ú__file__Úparentr	   Úfrom_templateÚmodel_card_dataÚcontent)r5   rb   Ú
model_cards      r   Úgenerate_model_cardrj   ˜   s?   € Üœ“N×)Ñ)Ð,DÑD€MÜ×(Ñ(°5×3HÑ3HÐXeÐpvÔw€JØ×ÑÐr   )r5   r   r    r*   )!Ú
__future__r   ÚloggingÚdataclassesr   r   Úpathlibr   Útypingr   r   Úhuggingface_hubr	   Ú sentence_transformers.model_cardr
   r   Úsentence_transformers.utilr   Údatasetsr   r   r   r   r   r   Ú	getLoggerr"   ÚloggerÚ0sentence_transformers.cross_encoder.CrossEncoderr   r   r(   rj   r-   r   r   ú<module>rw      ss   ðÝ "ã ß (Ý ß %å %ç sÝ <áÔßd×dà	ˆ×	Ñ	˜8Ó	$€áÝMô,Ð$Hô ,ð
 ôy
Ð @ó y
ó ðy
ôxr   