� ���g����p�ddlZddlZddlmZddlmZmZmZmZm Z m Z ddl Z ddl Z ddl mZddlmZddlmZmZmZmZmZmZmZddlmZmZmZdd lmZdd lm Z dd l!m"Z"m#Z#m$Z$e#j%e&��Z'ee(��j)d z d z Z*ee(��j)d z dz Z+ej,d��Z-Gd�d��Z.Gd�de.��Z/Gd�de.��Z0Gd�de.��Z1de2dedfd�Z3de e2efdeefd�Z4de e2efdeddfd�Z5dd ddddd!�d"e2d#e2d$e2d%e2d&e2d'ed(e2d)e2d*ee2d+e6d,ee2d-ee2d.ee2d/ee2defd0�Z7e$dd ddddd dd1�d2e2d3ed4ee2d5e6d6ee2d7ee2d8ee2d9ee2d:e6d;ee2de2fd<���Z8dS)=�N)�Path)�Any�Dict�Literal�Optional�Type�Union)�hf_hub_download)� upload_file)�CardData�DatasetCardData� EvalResult� ModelCardData� SpaceCardData�eval_results_to_model_index�model_index_to_eval_results)� get_session�is_jinja_available� yaml_dump�)� constants)�EntryNotFoundError)�SoftTemporaryDirectory�logging�validate_hf_hub_args� templateszmodelcard_template.mdzdatasetcard_template.mdz1^(\s*---[\r\n]+)([\S\s]*?)([\r\n]+---(\r\n|\n|$))c���eZdZeZeZdZddede fd�Z e d���Z e j defd���Z d�Zd eeeffd �Ze dd eeefd eedeede fd���Zdd eefd�Z ddedeed eedeedeedeedee deefd�Ze d dedeedeefd���Zd S)!�RepoCard�modelF�content�ignore_metadata_errorsc�"�||_||_dS)a�Initialize a RepoCard from string content. The content should be a Markdown file with a YAML block at the beginning and a Markdown body. Args: content (`str`): The content of the Markdown file. Example: ```python >>> from huggingface_hub.repocard import RepoCard >>> text = ''' ... --- ... language: en ... license: mit ... --- ... ... # My repo ... ''' >>> card = RepoCard(text) >>> card.data.to_dict() {'language': 'en', 'license': 'mit'} >>> card.text '\n# My repo\n' ``` <Tip> Raises the following error: - [`ValueError`](https://docs.python.org/3/library/exceptions.html#ValueError) when the content of the repo card metadata is not a dictionary. </Tip> N)r!r )�selfr r!s �h/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/huggingface_hub/repocard.py�__init__zRepoCard.__init__+s��H'=��#��� � � �c��t|j��pd}d|�|j�||j����|�d|�|j��S)zLThe content of the RepoCard, including the YAML block and the Markdown body.� �---)� line_break�original_order)�_detect_line_ending�_content�data�to_yaml�_original_order�text)r#r*s r$r zRepoCard.contentRs���)���7�7�?�4� �W�Z�W���!2�!2�j�Y]�Ym�!2�!n�!n�W�pz�W�W�@J�W�LP�LU�W�W� Wr&c���||_t�|��}|rs|�d��}||���d�|_t j|��}|�i}t|t��std���n#t� d��i}||_|j di|�d|ji��|_t!|�����|_dS)z Set the content of the RepoCard.�N�)repo card metadata block should be a dictzBRepo card metadata block was not found. Setting CardData to empty.r!�)r-�REGEX_YAML_BLOCK�search�group�endr1�yaml� safe_load� isinstance�dict� ValueError�logger�warning�card_data_classr!r.�list�keysr0)r#r �match� yaml_block� data_dicts r$r zRepoCard.contentXs��� �� � �'�'��0�0�� � ����Q���J��� � � � � � �.�D�I���z�2�2�I�� �� ��i��.�.� N� �!L�M�M�M� N� �N�N�_� `� `� `��I��D�I�(�D�(�i�i�9�i�i�T�Mh�i�i�i�� �#�I�N�N�$4�$4�5�5����r&c��|jS�N)r )r#s r$�__str__zRepoCard.__str__ss ���|�r&�filepathc���t|��}|j�dd���t|ddd���5}|�t |����ddd��dS#1swxYwYdS)a{Save a RepoCard to a file. Args: filepath (`Union[Path, str]`): Filepath to the markdown file to save. Example: ```python >>> from huggingface_hub.repocard import RepoCard >>> card = RepoCard("---\nlanguage: en\n---\n# This is a test repo card") >>> card.save("/tmp/test.md") ``` T)�parents�exist_ok�w��utf-8��mode�newline�encodingN)r�parent�mkdir�open�write�str)r#rJ�fs r$�savez RepoCard.savevs�����>�>������d�T��:�:�:� �(��b�7� C� C� C� �q� �G�G�C��I�I� � � � � � � � � � � � � � � ���� � � � � � s�#A/�/A3�6A3N�repo_id_or_path� repo_type�tokenc��t|�����rt|��}nZt|t��r2tt |t j|p|j|�����}ntd|�d����|� ddd���5}||� ��|���cd d d ��S#1swxYwYd S) a�Initialize a RepoCard from a Hugging Face Hub repo's README.md or a local filepath. Args: repo_id_or_path (`Union[str, Path]`): The repo ID associated with a Hugging Face Hub repo or a local filepath. repo_type (`str`, *optional*): The type of Hugging Face repo to push to. Defaults to None, which will use use "model". Other options are "dataset" and "space". Not used when loading from a local filepath. If this is called from a child class, the default value will be the child class's `repo_type`. token (`str`, *optional*): Authentication token, obtained with `huggingface_hub.HfApi.login` method. Will default to the stored token. ignore_metadata_errors (`str`): If True, errors while parsing the metadata section will be ignored. Some information might be lost during the process. Use it at your own risk. Returns: [`huggingface_hub.repocard.RepoCard`]: The RepoCard (or subclass) initialized from the repo's README.md file or filepath. Example: ```python >>> from huggingface_hub.repocard import RepoCard >>> card = RepoCard.load("nateraw/food") >>> assert card.data.tags == ["generated_from_trainer", "image-classification", "pytorch"] ``` )r]r^z.Cannot load RepoCard: path not found on disk (z).�rrOrPrQ)r!N) r�is_filer<rYr r� REPOCARD_NAMEr]r>rW�read)�clsr\r]r^r!� card_pathrZs r$�loadz RepoCard.load�sB��H �� � � (� (� *� *� c��_�-�-�I�I� ��� -� -� c���#��+�'�8�3�=�� �����I�I��a�o�a�a�a�b�b� b��^�^��b�7�^� C� C� P�q��3�q�v�v�x�x�8N�O�O�O� P� P� P� P� P� P� P� P� P� P� P� P���� P� P� P� P� P� Ps�$C�C�Cc�0�|p|j}|t|��d�}ddi} t���d||���}|���dS#t jj$r&}|jdkrt|j ���|�d}~wwxYw)a�Validates card against Hugging Face Hub's card validation logic. Using this function requires access to the internet, so it is only called internally by [`huggingface_hub.repocard.RepoCard.push_to_hub`]. Args: repo_type (`str`, *optional*, defaults to "model"): The type of Hugging Face repo to push to. Options are "model", "dataset", and "space". If this function is called from a child class, the default will be the child class's `repo_type`. <Tip> Raises the following errors: - [`ValueError`](https://docs.python.org/3/library/exceptions.html#ValueError) if the card fails validation checks. - [`HTTPError`](https://requests.readthedocs.io/en/latest/api/#requests.HTTPError) if the request to the Hub API fails for any other reason. </Tip> )�repoTyper �Acceptz text/plainz(https://huggingface.co/api/validate-yaml)�headersi�N) r]rYr�post�raise_for_status�requests� exceptions� HTTPError� status_coder>r1)r#r]�bodyrjr`�excs r$�validatezRepoCard.validate�s���,�/��� �"��4�y�y� � ���\�*�� �� � �"�"�#M�t�]d�"�e�e�A� � � � � � � � ���"�,� � � ��}��#�#� ���(�(�(�� �����  ���s�8A�B�/!B�B�repo_id�commit_message�commit_description�revision� create_pr� parent_commitc �l�|p|j}|�|���t��5} t| ��tjz } | �t|����tt| ��tj||||||||�� � } ddd��n #1swxYwY| S)aAPush a RepoCard to a Hugging Face Hub repo. Args: repo_id (`str`): The repo ID of the Hugging Face Hub repo to push to. Example: "nateraw/food". token (`str`, *optional*): Authentication token, obtained with `huggingface_hub.HfApi.login` method. Will default to the stored token. repo_type (`str`, *optional*, defaults to "model"): The type of Hugging Face repo to push to. Options are "model", "dataset", and "space". If this function is called by a child class, it will default to the child class's `repo_type`. commit_message (`str`, *optional*): The summary / title / first line of the generated commit. commit_description (`str`, *optional*) The description of the generated commit. revision (`str`, *optional*): The git revision to commit from. Defaults to the head of the `"main"` branch. create_pr (`bool`, *optional*): Whether or not to create a Pull Request with this commit. Defaults to `False`. parent_commit (`str`, *optional*): The OID / SHA of the parent commit, as a hexadecimal string. Shorthands (7 first characters) are also supported. If specified and `create_pr` is `False`, the commit will fail if `revision` does not point to `parent_commit`. If specified and `create_pr` is `True`, the pull request will be created from `parent_commit`. Specifying `parent_commit` ensures the repo has not changed before committing the changes, and can be especially useful if the repo is updated / committed to concurrently. Returns: `str`: URL of the commit which updated the card metadata. )r]) �path_or_fileobj� path_in_reportr^r]rurvrxrwryN) r]rsrrrrb� write_textrYr ) r#rtr^r]rurvrwrxry�tmpdir�tmp_path�urls r$� push_to_hubzRepoCard.push_to_hub�s���R�/��� � � � � � �*�*�*� #� %� %� ���F�|�|�i�&=�=�H� � � ��D� � � *� *� *�� #�H� � �&�4���#�-�#5�#�!�+� � � �C� � � � � � � � � � � ���� � � � �� s�A/B)�)B-�0B-� card_data� template_path� template_strc ���t��rddl}ntd���|������}|�|��|�!t |�����}|�&t |j�����}|� |��}|j dd|� ��i|��}||��S)a'Initialize a RepoCard from a template. By default, it uses the default template. Templates are Jinja2 templates that can be customized by passing keyword arguments. Args: card_data (`huggingface_hub.CardData`): A huggingface_hub.CardData instance containing the metadata you want to include in the YAML header of the repo card on the Hugging Face Hub. template_path (`str`, *optional*): A path to a markdown file with optional Jinja template variables that can be filled in with `template_kwargs`. Defaults to the default template. Returns: [`huggingface_hub.repocard.RepoCard`]: A RepoCard instance with the specified card data and content from the template. rNzjUsing RepoCard.from_template requires Jinja2 to be installed. Please install it with `pip install Jinja2`.r�r5) r�jinja2� ImportError�to_dict�copy�updater� read_text�default_template_path�Template�renderr/) rdr�r�r��template_kwargsr��kwargs�templater s r$� from_templatezRepoCard.from_template&s���0 � � � � �M�M�M�M��9��� � �"�"�$�$�)�)�+�+��� � �o�&�&�&� � $�� �.�.�8�8�:�:�L� � ��� 9�:�:�D�D�F�F�L��?�?�<�0�0��!�(�/�J�J�I�,=�,=�,?�,?�J�6�J�J���s�7�|�|�r&)F)NNFrH)NNNNNNN�NN)�__name__� __module__� __qualname__r rA�TEMPLATE_MODELCARD_PATHr�r]rY�boolr%�propertyr �setterrIr rr[� classmethodrrfrsr�r�r5r&r$rr&sH�������O�3���I�%�%��%�T�%�%�%�%�N�W�W��X�W�  �^�6�s�6�6�6��^�6�4����U�4��9�-�����(�$(�#�',� 3P�3P��s�D�y�)�3P��C�=�3P���}� 3P� !%� 3P�3P�3P��[�3P�j%�%�(�3�-�%�%�%�%�T $�#'�(,�,0�"&�$(�'+�=�=��=���}�=��C�=� =� !�� � =� %�S�M� =��3�-�=��D�>�=� ��}�=�=�=�=�~�(,�&*� (�(��(� ��}�(��s�m� (�(�(��[�(�(�(r&rc �f��eZdZeZeZdZe ddede e de e f�fd� ��Z �xZ S)� ModelCardrNr�r�r�c �<��t��j|||fi|��S)a� Initialize a ModelCard from a template. By default, it uses the default template, which can be found here: https://github.com/huggingface/huggingface_hub/blob/main/src/huggingface_hub/templates/modelcard_template.md Templates are Jinja2 templates that can be customized by passing keyword arguments. Args: card_data (`huggingface_hub.ModelCardData`): A huggingface_hub.ModelCardData instance containing the metadata you want to include in the YAML header of the model card on the Hugging Face Hub. template_path (`str`, *optional*): A path to a markdown file with optional Jinja template variables that can be filled in with `template_kwargs`. Defaults to the default template. Returns: [`huggingface_hub.ModelCard`]: A ModelCard instance with the specified card data and content from the template. Example: ```python >>> from huggingface_hub import ModelCard, ModelCardData, EvalResult >>> # Using the Default Template >>> card_data = ModelCardData( ... language='en', ... license='mit', ... library_name='timm', ... tags=['image-classification', 'resnet'], ... datasets=['beans'], ... metrics=['accuracy'], ... ) >>> card = ModelCard.from_template( ... card_data, ... model_description='This model does x + y...' ... ) >>> # Including Evaluation Results >>> card_data = ModelCardData( ... language='en', ... tags=['image-classification', 'resnet'], ... eval_results=[ ... EvalResult( ... task_type='image-classification', ... dataset_type='beans', ... dataset_name='Beans', ... metric_type='accuracy', ... metric_value=0.9, ... ), ... ], ... model_name='my-cool-model', ... ) >>> card = ModelCard.from_template(card_data) >>> # Using a Custom Template >>> card_data = ModelCardData( ... language='en', ... tags=['image-classification', 'resnet'] ... ) >>> card = ModelCard.from_template( ... card_data=card_data, ... template_path='./src/huggingface_hub/templates/modelcard_template.md', ... custom_template_var='custom value', # will be replaced in template if it exists ... ) ``` ��superr��rdr�r�r�r�� __class__s �r$r�zModelCard.from_templateWs)���R%�u�w�w�$�Y� �|�_�_��_�_�_r&r�) r�r�r�rrAr�r�r]r�rrYr�� __classcell__�r�s@r$r�r�Rs��������#�O�3���I��(,�&*� H`�H`� �H`� ��}�H`��s�m� H`�H`�H`�H`�H`��[�H`�H`�H`�H`�H`r&r�c �f��eZdZeZeZdZe ddede e de e f�fd� ��Z �xZ S)� DatasetCard�datasetNr�r�r�c �<��t��j|||fi|��S)a�Initialize a DatasetCard from a template. By default, it uses the default template, which can be found here: https://github.com/huggingface/huggingface_hub/blob/main/src/huggingface_hub/templates/datasetcard_template.md Templates are Jinja2 templates that can be customized by passing keyword arguments. Args: card_data (`huggingface_hub.DatasetCardData`): A huggingface_hub.DatasetCardData instance containing the metadata you want to include in the YAML header of the dataset card on the Hugging Face Hub. template_path (`str`, *optional*): A path to a markdown file with optional Jinja template variables that can be filled in with `template_kwargs`. Defaults to the default template. Returns: [`huggingface_hub.DatasetCard`]: A DatasetCard instance with the specified card data and content from the template. Example: ```python >>> from huggingface_hub import DatasetCard, DatasetCardData >>> # Using the Default Template >>> card_data = DatasetCardData( ... language='en', ... license='mit', ... annotations_creators='crowdsourced', ... task_categories=['text-classification'], ... task_ids=['sentiment-classification', 'text-scoring'], ... multilinguality='monolingual', ... pretty_name='My Text Classification Dataset', ... ) >>> card = DatasetCard.from_template( ... card_data, ... pretty_name=card_data.pretty_name, ... ) >>> # Using a Custom Template >>> card_data = DatasetCardData( ... language='en', ... license='mit', ... ) >>> card = DatasetCard.from_template( ... card_data=card_data, ... template_path='./src/huggingface_hub/templates/datasetcard_template.md', ... custom_template_var='custom value', # will be replaced in template if it exists ... ) ``` r�r�s �r$r�zDatasetCard.from_template�s)���r%�u�w�w�$�Y� �|�_�_��_�_�_r&r�) r�r�r�r rA�TEMPLATE_DATASETCARD_PATHr�r]r�rrYr�r�r�s@r$r�r��s��������%�O�5���I��(,�&*� 8`�8`�"�8`� ��}�8`��s�m� 8`�8`�8`�8`�8`��[�8`�8`�8`�8`�8`r&r�c��eZdZeZeZdZdS)� SpaceCard�spaceN)r�r�r�rrAr�r�r]r5r&r$r�r��s������#�O�3���I�I�Ir&r�r �return)� r(� Nc���|�d��}|�d��}|�d��}||zdkrdS||kr||krdS||krdSdS)z�Detect the line ending of a string. Used by RepoCard to avoid making huge diff on newlines. Uses same implementation as in Hub server, keep it in sync. Returns: str: The detected line ending of the string. r�r(r�rN)�count)r �cr�lf�crlfs r$r,r,�sr�� ���t� � �B� ���t� � �B� �=�=�� � �D� �B�w�!�|�|��t� �r�z�z�d�b�j�j��v� �B�w�w��t��tr&� local_pathc�"�t|�����}t�|��}|rQ|�d��}t j|��}|�t|t��r|Std���dS)Nr3r4) rr�r6r7r8r:r;r<r=r>)r�r rDrEr.s r$� metadata_loadr��s����:���(�(�*�*�G� � #� #�G� ,� ,�E� ���[�[��^�^� ��~�j�)�)�� �<�:�d�D�1�1�<��K��D�E�E�E��tr&r.c��d}d}tj�|��r�t|ddd���5}|���}t |jt��r|jd}n!t |jt��r|j}ddd��n #1swxYwYt|ddd���5}t|d |� ��}t� |��}|rE|d|� ���d |�|�d |��z||� ��d�z}n d |�|�d |�|��}|�|��|���ddd��dS#1swxYwYdS) a& Save the metadata dict in the upper YAML part Trying to preserve newlines as in the existing file. Docs about open() with newline="" parameter: https://docs.python.org/3/library/functions.html?highlight=open#open Does not work with "^M" linebreaks, which are replaced by r(rOr`�utf8)rSrTrNrNF)� sort_keysr*r))�os�path�existsrWrcr<�newlines�tuplerYrr6r7�startr9rX�close)r�r.r*r �readme� data_yamlrD�outputs r$� metadata_saver� s���J��G� �w�~�~�j�!�!�-� �*�c�2�� ?� ?� ?� -�6��k�k�m�m�G��&�/�5�1�1� -�#�_�Q�/� � ��F�O�S�1�1� -�#�_� �  -� -� -� -� -� -� -� -� -� -� -���� -� -� -� -� �j�#�r�F� ;� ;� ;� �v��d�e� �K�K�K� � �'�'��0�0�� � K��_�u�{�{�}�}�_�-�0\�j�0\�)�0\�0\�PZ�0\�0\�\�_f�gl�gp�gp�gr�gr�gt�gt�_u�u�F�F�J�:�J�y�J�J�Z�J��J�J�F�� � �V����� � ���� � � � � � � � � � � � ���� � � � � � s%�AB!�!B%�(B%�?B)E5�5E9�<E9F)�metrics_config�metrics_verified�dataset_config� dataset_split�dataset_revision�metrics_verification_token�model_pretty_name�task_pretty_name�task_id�metrics_pretty_name� metrics_id� metrics_value�dataset_pretty_name� dataset_idr�r�r�r�r�r�c�^�dt|t||||||||| | | | | �� � g���iS)u Creates a metadata dict with the result from a model evaluated on a dataset. Args: model_pretty_name (`str`): The name of the model in natural language. task_pretty_name (`str`): The name of a task in natural language. task_id (`str`): Example: automatic-speech-recognition. A task id. metrics_pretty_name (`str`): A name for the metric in natural language. Example: Test WER. metrics_id (`str`): Example: wer. A metric id from https://hf.co/metrics. metrics_value (`Any`): The value from the metric. Example: 20.0 or "20.0 ± 1.2". dataset_pretty_name (`str`): The name of the dataset in natural language. dataset_id (`str`): Example: common_voice. A dataset id from https://hf.co/datasets. metrics_config (`str`, *optional*): The name of the metric configuration used in `load_metric()`. Example: bleurt-large-512 in `load_metric("bleurt", "bleurt-large-512")`. metrics_verified (`bool`, *optional*, defaults to `False`): Indicates whether the metrics originate from Hugging Face's [evaluation service](https://huggingface.co/spaces/autoevaluate/model-evaluator) or not. Automatically computed by Hugging Face, do not set. dataset_config (`str`, *optional*): Example: fr. The name of the dataset configuration used in `load_dataset()`. dataset_split (`str`, *optional*): Example: test. The name of the dataset split used in `load_dataset()`. dataset_revision (`str`, *optional*): Example: 5503434ddd753f426f4b38109466949a1217c2bb. The name of the dataset dataset revision used in `load_dataset()`. metrics_verification_token (`bool`, *optional*): A JSON Web Token that is used to verify whether the metrics originate from Hugging Face's [evaluation service](https://huggingface.co/spaces/autoevaluate/model-evaluator) or not. Returns: `dict`: a metadata dict with the result from a model evaluated on a dataset. Example: ```python >>> from huggingface_hub import metadata_eval_result >>> results = metadata_eval_result( ... model_pretty_name="RoBERTa fine-tuned on ReactionGIF", ... task_pretty_name="Text Classification", ... task_id="text-classification", ... metrics_pretty_name="Accuracy", ... metrics_id="accuracy", ... metrics_value=0.2662102282047272, ... dataset_pretty_name="ReactionJPEG", ... dataset_id="julien-c/reactionjpeg", ... dataset_config="default", ... dataset_split="test", ... ) >>> results == { ... 'model-index': [ ... { ... 'name': 'RoBERTa fine-tuned on ReactionGIF', ... 'results': [ ... { ... 'task': { ... 'type': 'text-classification', ... 'name': 'Text Classification' ... }, ... 'dataset': { ... 'name': 'ReactionJPEG', ... 'type': 'julien-c/reactionjpeg', ... 'config': 'default', ... 'split': 'test' ... }, ... 'metrics': [ ... { ... 'type': 'accuracy', ... 'value': 0.2662102282047272, ... 'name': 'Accuracy', ... 'verified': False ... } ... ] ... } ... ] ... } ... ] ... } True ``` � model-index) � task_name� task_type� metric_name� metric_type� metric_value� dataset_name� dataset_type� metric_config�verified� verify_tokenr�r�r�)� model_name� eval_results)rr)r�r�r�r�r�r�r�r�r�r�r�r�r�r�s r$�metadata_eval_resultr�,se��R �2�(��.�%� 3� *�!.�!4�!+�"0�-�!;�#1�"/�%5����� � � � �r&)r]� overwriter^rurvrwrxryrt�metadatar]r�r^rurvrwrxryc �b�|�|nd}|�|dkrt} n.|dkrt} n |dkrt} ntd|����� | �|||���} nF#t $r9|dkrtd���| �t����} YnwxYw|���D�]Y\} } | d kr�d | d vrt| d |��| d d <t| ��\}}| j j �|| j _ || j _ �g| j j }|D]�}d }|D]b}|�|��rK||kr"|s td|j�d|j�d����d}|j|_|jdur |j|_�c|s| j j �|������| j �| ���3|s1| j �| ��| krtd| �d����| | j | <��[| �|||||||| ���S)a� Updates the metadata in the README.md of a repository on the Hugging Face Hub. If the README.md file doesn't exist yet, a new one is created with metadata and an the default ModelCard or DatasetCard template. For `space` repo, an error is thrown as a Space cannot exist without a `README.md` file. Args: repo_id (`str`): The name of the repository. metadata (`dict`): A dictionary containing the metadata to be updated. repo_type (`str`, *optional*): Set to `"dataset"` or `"space"` if updating to a dataset or space, `None` or `"model"` if updating to a model. Default is `None`. overwrite (`bool`, *optional*, defaults to `False`): If set to `True` an existing field can be overwritten, otherwise attempting to overwrite an existing field will cause an error. token (`str`, *optional*): The Hugging Face authentication token. commit_message (`str`, *optional*): The summary / title / first line of the generated commit. Defaults to `f"Update metadata with huggingface_hub"` commit_description (`str` *optional*) The description of the generated commit revision (`str`, *optional*): The git revision to commit from. Defaults to the head of the `"main"` branch. create_pr (`boolean`, *optional*): Whether or not to create a Pull Request from `revision` with that commit. Defaults to `False`. parent_commit (`str`, *optional*): The OID / SHA of the parent commit, as a hexadecimal string. Shorthands (7 first characters) are also supported. If specified and `create_pr` is `False`, the commit will fail if `revision` does not point to `parent_commit`. If specified and `create_pr` is `True`, the pull request will be created from `parent_commit`. Specifying `parent_commit` ensures the repo has not changed before committing the changes, and can be especially useful if the repo is updated / committed to concurrently. Returns: `str`: URL of the commit which updated the card metadata. Example: ```python >>> from huggingface_hub import metadata_update >>> metadata = {'model-index': [{'name': 'RoBERTa fine-tuned on ReactionGIF', ... 'results': [{'dataset': {'name': 'ReactionGIF', ... 'type': 'julien-c/reactiongif'}, ... 'metrics': [{'name': 'Recall', ... 'type': 'recall', ... 'value': 0.7762102282047272}], ... 'task': {'name': 'Text Classification', ... 'type': 'text-classification'}}]}]} >>> url = metadata_update("hf-internal-testing/reactiongif-roberta-card", metadata) ``` Nz$Update metadata with huggingface_hubrr�r�zUnknown repo_type: )r^r]zJCannot update metadata on a Space that doesn't contain a `README.md` file.r��namerr�Fz6You passed a new value for the existing metric 'name: z, type: z6'. Set `overwrite=True` to overwrite existing metrics.Tz9You passed a new value for the existing meta data field 'z7'. Set `overwrite=True` to overwrite existing metadata.)r^r]rurvrxrwry)r�r�rr>rfrr�r �items�getattrrr.r�r��is_equal_except_valuer�r�r�r�r��append�getr�)rtr�r]r�r^rurvrwrxry� card_class�card�key�valuer�� new_results�existing_results� new_result� result_found�existing_results r$�metadata_updater��s���H(6�'A�^�^�Gm�N���I��0�0�� � � �i� � � � � � �g� � �� � ��:�y�:�:�;�;�;�4����w�e�y��I�I���� �4�4�4� �� � ��i�j�j� j��'�'�� � �3�3���� 4�����n�n�&�&�+'�+'� ��U� �-� � ��U�1�X�%�%�#*�4��w�#G�#G��a��� �&A�%�&H�&H� #�J� ��y�%�-�)4�� �&�'1�� �$�$�#'�9�#9� �#.�B�B�J�#(�L�+;� W� W��%�;�;�O�L�L� W�)�_�<�<�Y�<�&0�%F�/9�/E�%F�%F�'1�'=�%F�%F�%F�'"�'"�!"� ,0�L�;E�;R�O�8�.�7�4�?�?�?I�?V�� <��'�B�� �.�5�5�j�A�A�A��!B�&�y�}�}�S�!�!�-�i�-�D�I�M�M�RU�DV�DV�Z_�D_�D_� �L�PS�L�L�L���� "'�� �#��� � � ����%�-���#� � � � s�A�AB"�!B")9r��re�pathlibr�typingrrrrrr rmr:�huggingface_hub.file_downloadr �huggingface_hub.hf_apir �huggingface_hub.repocard_datar r rrrrr�huggingface_hub.utilsrrrrOr�errorsr�utilsrrr� get_loggerr�r?�__file__rUr�r��compiler6rr�r�r�rYr,r�r�r�r�r�r5r&r$�<module>rs��� � � � � � � � �������<�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<����� � � � �9�9�9�9�9�9�.�.�.�.�.�.�������������������M�L�L�L�L�L�L�L�L�L�������&�&�&�&�&�&�H�H�H�H�H�H�H�H�H�H� �� �H� %� %���$�x�.�.�/�+�=�@W�W�� �D��N�N�1�K�?�B[�[���2�:�R�S�S��i�i�i�i�i�i�i�i�X N`�N`�N`�N`�N`��N`�N`�N`�b>`�>`�>`�>`�>`�(�>`�>`�>`�B��������� ����1I�)J�����* �e�C��I�.� �8�D�>� � � � ��e�C��I�.��d��t�����T%)�"�$(�#'�&*�04�}�}�}��}��}�� }� � }� � }��}��}��}��S�M�}��}��S�M�}��C�=�}��s�m�}�!)�� �}�  �!}�}�}�}�@� $���$(�(,�"��#'�Q�Q�Q� �Q��Q���}� Q� � Q� �C�=� Q��S�M�Q�!�� �Q��s�m�Q��Q��C�=�Q� �Q�Q�Q���Q�Q�Qr&
Memory