Ë
    Q^(h»c  ã                   óì  — U d Z ddlZddl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
 ddlmZ ddlmZmZmZmZmZmZmZ ddlZddlmZm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"m#Z#m$Z$m%Z%m&Z&m'Z' ddlm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z.  e(j^                  e0«      Z1dZ2dZ3 ejh                  dejj                  ¬«      Z6 G d„ de«      Z7 G d„ de«      Z8dejr                  fd„Z:eg ejr                  f   Z;e:a<e;e=d<   e:fde;ddfd„Z>dejr                  fd „Z?d?d!„Z@ed"eAd#eAdejr                  fd$„«       ZBd%dd&ej†                  ejˆ                  fe
jŠ                  d'œd(e.d)eFd*eAd+eGd,eGd-eeeH   eeeH   d.f   f   d/eeAeeAd.f   f   defd0„ZId)eFd1eeF   deFfd2„ZJd@d3ed4eeF   ddfd5„ZKd6ee%   d7eFd3ede%fd8„ZLd9ej6                  deFfd:„ZM ejh                  d;ejœ                  «      ZOd<eeF   d=eAdeeF   fd>„ZPy)Az>Contains utilities to handle HTTP requests in Huggingface Hub.é    N)Ú	lru_cache)Ú
HTTPStatus)Úquote)ÚAnyÚCallableÚListÚOptionalÚTupleÚTypeÚUnion)Ú	HTTPErrorÚResponse)ÚHTTPAdapter)ÚPreparedRequest)ÚOfflineModeIsEnabledé   )Ú	constants)ÚBadRequestErrorÚDisabledRepoErrorÚEntryNotFoundErrorÚGatedRepoErrorÚHfHubHTTPErrorÚRepositoryNotFoundErrorÚRevisionNotFoundErroré   )Úlogging)ÚJSONDecodeError)ÚSliceFileObj)ÚHTTP_METHOD_TúX-Amzn-Trace-Idzx-request-ida  
        # staging or production endpoint
        ^https://[^/]+
        (
            # on /api/repo_type/repo_id
            /api/(models|datasets|spaces)/(.+)
            |
            # or /repo_id/resolve/revision/...
            /(.+)/resolve/(.+)
        )
    )Úflagsc                   ó6   ‡ — e Zd ZdZˆ fd„Zdedefˆ fd„Zˆ xZS )ÚUniqueRequestIdAdapterr    c                 óØ  •— t        ‰| �  |fi |¤Ž t        |j                  vrO|j                  j	                  t
        «      xs t        t        j                  «       «      |j                  t        <   t        t        |j                  j	                  dd«      «      «      dkD  }t        j                  d|j                  t           › d|j                  › d|j                  › d|› d�	«       y )	NÚauthorizationÚ r   zRequest z: ú z (authenticated: ú))ÚsuperÚadd_headersÚX_AMZN_TRACE_IDÚheadersÚgetÚX_REQUEST_IDÚstrÚuuidÚuuid4ÚlenÚloggerÚdebugÚmethodÚurl)ÚselfÚrequestÚkwargsÚ	has_tokenÚ	__class__s       €úY/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/huggingface_hub/utils/_http.pyr*   z"UniqueRequestIdAdapter.add_headersN   s½   ø€ Ü‰Ñ˜GÑ. vÒ.ô  '§/¡/Ñ1Ø/6¯©×/BÑ/BÄ<Ó/PÒ/eÔTWÔX\×XbÑXbÓXdÓTeˆG�O‰OœOÑ,ô œ˜GŸO™O×/Ñ/°ÀÓDÓEÓFÈÑJˆ	Ü�‰Ø�w—‘¤Ñ7Ð8¸¸7¿>¹>Ð:JÈ!ÈGÏKÉKÈ=ÐXiÐjsÐitÐtuÐvõ	
ó    r8   Úreturnc                 ó<  •— t         j                  r!t        j                  dt	        |«      › �«       	 t        ‰| �  |g|¢­i |¤ŽS # t        j                  $ rA}|j                  j                  t        «      }|�g |j                  ¢d|› d�‘­|_        ‚ d}~ww xY w)zSCatch any RequestException to append request id to the error message for debugging.zSend: Nz(Request ID: r(   )r   ÚHF_DEBUGr3   r4   Ú_curlifyr)   ÚsendÚrequestsÚRequestExceptionr,   r-   r+   Úargs)r7   r8   rE   r9   ÚeÚ
request_idr;   s         €r<   rB   zUniqueRequestIdAdapter.send[   s”   ø€ ä×ÒÜ�L‰L˜6¤(¨7Ó"3Ð!4Ð5Ô6ð	Ü‘7‘< Ð9¨$Ò9°&Ñ9Ð9øÜ×(Ñ(ò 	Ø Ÿ™×,Ñ,¬_Ó=ˆJØÐ%àA˜1Ÿ6™6ÐA ]°:°,¸aÐ#@ÑA�”Øûð	ús   ´A ÁBÁ<BÂB)	Ú__name__Ú
__module__Ú__qualname__r+   r*   r   r   rB   Ú__classcell__)r;   s   @r<   r#   r#   K   s%   ø„ Ø'€Oô
ð˜Oð À÷ ñ r=   r#   c                   ó   — e Zd Zdedefd„Zy)ÚOfflineAdapterr8   r>   c                 ó4   — t        d|j                  › d�«      ‚)NzCannot reach za: offline mode is enabled. To disable it, please unset the `HF_HUB_OFFLINE` environment variable.)r   r6   )r7   r8   rE   r9   s       r<   rB   zOfflineAdapter.sendj   s&   € Ü"Ø˜GŸK™K˜=ð  )Jð  Kó
ð 	
r=   N)rH   rI   rJ   r   r   rB   © r=   r<   rM   rM   i   s   „ ð
˜Oð 
Àô 
r=   rM   r>   c                  ó"  — t        j                  «       } t        j                  r6| j	                  dt        «       «       | j	                  dt        «       «       | S | j	                  dt        «       «       | j	                  dt        «       «       | S )Nzhttp://zhttps://)rC   ÚSessionr   ÚHF_HUB_OFFLINEÚmountrM   r#   )Úsessions    r<   Ú_default_backend_factoryrU   p   sm   € Ü×ÑÓ €GÜ×ÒØ�‰�i¤Ó!1Ô2Ø�‰�j¤.Ó"2Ô3ð €Nð 	�‰�iÔ!7Ó!9Ô:Ø�‰�jÔ"8Ó":Ô;Ø€Nr=   Ú_GLOBAL_BACKEND_FACTORYÚbackend_factoryc                 ó   — | a t        «        y)aË  
    Configure the HTTP backend by providing a `backend_factory`. Any HTTP calls made by `huggingface_hub` will use a
    Session object instantiated by this factory. This can be useful if you are running your scripts in a specific
    environment requiring custom configuration (e.g. custom proxy or certifications).

    Use [`get_session`] to get a configured Session. Since `requests.Session` is not guaranteed to be thread-safe,
    `huggingface_hub` creates 1 Session instance per thread. They are all instantiated using the same `backend_factory`
    set in [`configure_http_backend`]. A LRU cache is used to cache the created sessions (and connections) between
    calls. Max size is 128 to avoid memory leaks if thousands of threads are spawned.

    See [this issue](https://github.com/psf/requests/issues/2766) to know more about thread-safety in `requests`.

    Example:
    ```py
    import requests
    from huggingface_hub import configure_http_backend, get_session

    # Create a factory function that returns a Session with configured proxies
    def backend_factory() -> requests.Session:
        session = requests.Session()
        session.proxies = {"http": "http://10.10.1.10:3128", "https": "https://10.10.1.11:1080"}
        return session

    # Set it as the default session factory
    configure_http_backend(backend_factory=backend_factory)

    # In practice, this is mostly done internally in `huggingface_hub`
    session = get_session()
    ```
    N)rV   Úreset_sessions)rW   s    r<   Úconfigure_http_backendrZ      s   € ð@ .ÐÜÕr=   c                  ód   — t        t        j                  «       t        j                  «       ¬«      S )aÜ  
    Get a `requests.Session` object, using the session factory from the user.

    Use [`get_session`] to get a configured Session. Since `requests.Session` is not guaranteed to be thread-safe,
    `huggingface_hub` creates 1 Session instance per thread. They are all instantiated using the same `backend_factory`
    set in [`configure_http_backend`]. A LRU cache is used to cache the created sessions (and connections) between
    calls. Max size is 128 to avoid memory leaks if thousands of threads are spawned.

    See [this issue](https://github.com/psf/requests/issues/2766) to know more about thread-safety in `requests`.

    Example:
    ```py
    import requests
    from huggingface_hub import configure_http_backend, get_session

    # Create a factory function that returns a Session with configured proxies
    def backend_factory() -> requests.Session:
        session = requests.Session()
        session.proxies = {"http": "http://10.10.1.10:3128", "https": "https://10.10.1.11:1080"}
        return session

    # Set it as the default session factory
    configure_http_backend(backend_factory=backend_factory)

    # In practice, this is mostly done internally in `huggingface_hub`
    session = get_session()
    ```
    ©Ú
process_idÚ	thread_id)Ú_get_session_from_cacheÚosÚgetpidÚ	threadingÚ	get_identrO   r=   r<   Úget_sessionrd   £   s    € ô: #¬b¯i©i«kÄY×EXÑEXÓEZÔ[Ð[r=   c                  ó,   — t         j                  «        y)z«Reset the cache of sessions.

    Mostly used internally when sessions are reconfigured or an SSLError is raised.
    See [`configure_http_backend`] for more details.
    N)r_   Úcache_clearrO   r=   r<   rY   rY   Ã   s   € ô ×'Ñ'Õ)r=   r]   r^   c                 ó   — t        «       S )zÒ
    Create a new session per thread using global factory. Using LRU cache (maxsize 128) to avoid memory leaks when
    using thousands of threads. Cache is cleared when `configure_http_backend` is called.
    )rV   r\   s     r<   r_   r_   Ì   s   € ô #Ó$Ð$r=   é   é   )Úmax_retriesÚbase_wait_timeÚmax_wait_timeÚretry_on_exceptionsÚretry_on_status_codesr5   r6   rj   rk   rl   rm   .rn   c          	      ó$  — t        |t        «      r|f}t        |t        «      r|f}d}|}	d}
d|v r6t        |d   t        j                  t
        f«      r|d   j                  «       }
t        «       }	 |dz  }	 |
�|d   j                  |
«        |j                  d| |dœ|¤Ž}|j                  |vr|S t        j                  d|j                  › d| › d|› �«       ||kD  r|j                  «        |S 	 t        j                  d|	› d|› d|› d�«       t#        j$                  |	«       t'        ||	dz  «      }	ŒÅ# |$ rS}t        j                  d	|› d
| › d|› �«       t        |t        j                  «      r
t!        «        ||kD  r|‚Y d}~Œ—d}~ww xY w)a#  Wrapper around requests to retry calls on an endpoint, with exponential backoff.

    Endpoint call is retried on exceptions (ex: connection timeout, proxy error,...)
    and/or on specific status codes (ex: service unavailable). If the call failed more
    than `max_retries`, the exception is thrown or `raise_for_status` is called on the
    response object.

    Re-implement mechanisms from the `backoff` library to avoid adding an external
    dependencies to `hugging_face_hub`. See https://github.com/litl/backoff.

    Args:
        method (`Literal["GET", "OPTIONS", "HEAD", "POST", "PUT", "PATCH", "DELETE"]`):
            HTTP method to perform.
        url (`str`):
            The URL of the resource to fetch.
        max_retries (`int`, *optional*, defaults to `5`):
            Maximum number of retries, defaults to 5 (no retries).
        base_wait_time (`float`, *optional*, defaults to `1`):
            Duration (in seconds) to wait before retrying the first time.
            Wait time between retries then grows exponentially, capped by
            `max_wait_time`.
        max_wait_time (`float`, *optional*, defaults to `8`):
            Maximum duration (in seconds) to wait before retrying.
        retry_on_exceptions (`Type[Exception]` or `Tuple[Type[Exception]]`, *optional*):
            Define which exceptions must be caught to retry the request. Can be a single type or a tuple of types.
            By default, retry on `requests.Timeout` and `requests.ConnectionError`.
        retry_on_status_codes (`int` or `Tuple[int]`, *optional*, defaults to `503`):
            Define on which status codes the request must be retried. By default, only
            HTTP 503 Service Unavailable is retried.
        **kwargs (`dict`, *optional*):
            kwargs to pass to `requests.request`.

    Example:
    ```
    >>> from huggingface_hub.utils import http_backoff

    # Same usage as "requests.request".
    >>> response = http_backoff("GET", "https://www.google.com")
    >>> response.raise_for_status()

    # If you expect a Gateway Timeout from time to time
    >>> http_backoff("PUT", upload_url, data=data, retry_on_status_codes=504)
    >>> response.raise_for_status()
    ```

    <Tip warning={true}>

    When using `requests` it is possible to stream data by passing an iterator to the
    `data` argument. On http backoff this is a problem as the iterator is not reset
    after a failed call. This issue is mitigated for file objects or any IO streams
    by saving the initial position of the cursor (with `data.tell()`) and resetting the
    cursor between each call (with `data.seek()`). For arbitrary iterators, http backoff
    will fail. If this is a hard constraint for you, please let us know by opening an
    issue on [Github](https://github.com/huggingface/huggingface_hub).

    </Tip>
    r   NÚdatar   )r5   r6   zHTTP Error z thrown while requesting r'   ú'z' thrown while requesting zRetrying in z	s [Retry ú/z].r   rO   )Ú
isinstanceÚtypeÚintÚioÚIOBaser   Útellrd   Úseekr8   Ústatus_coder3   ÚwarningÚraise_for_statusrC   ÚConnectionErrorrY   ÚtimeÚsleepÚmin)r5   r6   rj   rk   rl   rm   rn   r9   Únb_triesÚ
sleep_timeÚio_obj_initial_posrT   ÚresponseÚerrs                 r<   Úhttp_backoffr†   Õ   sÃ  € ôN Ð%¤tÔ,Ø2Ð4ÐäÐ'¬Ô-Ø!6Ð 8Ðà€HØ€Jð
 ÐØ�ÑœJ v¨f¡~¼¿	¹	Ä<Ð7PÔQØ# F™^×0Ñ0Ó2Ðä‹m€GØ
Ø�A‰ˆð	ð "Ð-Ø�v‘×#Ñ#Ð$6Ô7ð '�w—‘ÐH¨f¸#ÑHÀÑHˆHØ×#Ñ#Ð+@Ñ@Ø�ô �N‰N˜[¨×)=Ñ)=Ð(>Ð>WÐX^ÐW_Ð_`ÐadÐ`eÐfÔgØ˜+Ò%Ø×)Ñ)Ô+ð  �ð	 &ô  	�‰˜ j \°¸8¸*ÀAÀkÀ]ÐRTÐUÔVÜ�
‰
�:Ôô ˜¨
°Q©Ó7ˆ
ðG øð* #ò 	Ü�N‰N˜Q˜s˜eÐ#=¸f¸XÀQÀsÀeÐLÔMä˜#œx×7Ñ7Ô8ÜÔ à˜+Ò%Ø�	ô &ûð	ús   Á8:D7 Â3>D7 Ä7FÄ<A	F
Æ
FÚendpointc                 ó  — |r|j                  d«      nt        j                  }|t        j                  t        j                  fvr@| j                  t        j                  |«      } | j                  t        j                  |«      } | S )z¤Replace the default endpoint in a URL by a custom one.

    This is useful when using a proxy and the Hugging Face Hub returns a URL with the default endpoint.
    rr   )Úrstripr   ÚENDPOINTÚ_HF_DEFAULT_ENDPOINTÚ_HF_DEFAULT_STAGING_ENDPOINTÚreplace)r6   r‡   s     r<   Úfix_hf_endpoint_in_urlrŽ   S  sf   € ñ
 (0ˆx�‰˜sÔ#´Y×5GÑ5G€Hàœ	×6Ñ6¼	×8^Ñ8^Ð_Ñ_Ø�k‰kœ)×8Ñ8¸(ÓCˆØ�k‰kœ)×@Ñ@À(ÓKˆØ€Jr=   r„   Úendpoint_namec                 óº  — 	 | j                  «        y# t        $ �r½}| j                  j                  d«      }| j                  j                  d«      }|dk(  r5| j                  › d�dz   d| j
                  › d�z   }t        t        || «      |‚|dk(  r5| j                  › d�dz   d	| j
                  › d�z   }t        t        || «      |‚|d
k(  r5| j                  › d�dz   d| j
                  › d�z   }t        t        || «      |‚|dk(  r;| j                  › d�dz   d| j
                  › d�z   dz   dz   }t        t        || «      |‚|dk(  s_| j                  dk(  rˆ|dk7  rƒ| j                  �w| j                  j
                  �at        j                  | j                  j
                  «      �8| j                  › d�dz   d| j
                  › d�z   dz   }t        t        || «      |‚| j                  dk(  r|�d|› d�nd}t        t        || «      |‚| j                  dk(  r9d| j                  › d|› d�d| j
                  › d�z   dz   }t        t         || «      |‚| j                  dk(  r[| j                  j                  j                  d«      }|› d|› d | j                  j                  d!«      › d�}t        t         || «      |‚t        t         t#        |«      | «      |‚d}~ww xY w)"a  
    Internal version of `response.raise_for_status()` that will refine a
    potential HTTPError. Raised exception will be an instance of `HfHubHTTPError`.

    This helper is meant to be the unique method to raise_for_status when making a call
    to the Hugging Face Hub.


    Example:
    ```py
        import requests
        from huggingface_hub.utils import get_session, hf_raise_for_status, HfHubHTTPError

        response = get_session().post(...)
        try:
            hf_raise_for_status(response)
        except HfHubHTTPError as e:
            print(str(e)) # formatted message
            e.request_id, e.server_message # details returned by server

            # Complete the error message with additional information once it's raised
            e.append_to_message("
`create_commit` expects the repository to exist.")
            raise
    ```

    Args:
        response (`Response`):
            Response from the server.
        endpoint_name (`str`, *optional*):
            Name of the endpoint that has been called. If provided, the error message
            will be more complete.

    <Tip warning={true}>

    Raises when the request has failed:

        - [`~utils.RepositoryNotFoundError`]
            If the repository to download from cannot be found. This may be because it
            doesn't exist, because `repo_type` is not set correctly, or because the repo
            is `private` and you do not have access.
        - [`~utils.GatedRepoError`]
            If the repository exists but is gated and the user is not on the authorized
            list.
        - [`~utils.RevisionNotFoundError`]
            If the repository exists but the revision couldn't be find.
        - [`~utils.EntryNotFoundError`]
            If the repository exists but the entry (e.g. the requested file) couldn't be
            find.
        - [`~utils.BadRequestError`]
            If request failed with a HTTP 400 BadRequest error.
        - [`~utils.HfHubHTTPError`]
            If request failed for a reason not listed above.

    </Tip>
    zX-Error-CodeúX-Error-MessageÚRevisionNotFoundz Client Error.ú

zRevision Not Found for url: ú.ÚEntryNotFoundzEntry Not Found for url: Ú	GatedRepoz!Cannot access gated repo for url z$Access to this resource is disabled.z!Cannot access repository for url ú
ÚRepoNotFoundi‘  z+Invalid credentials in Authorization headerNzRepository Not Found for url: zí
Please make sure you specified the correct `repo_id` and `repo_type`.
If you are trying to access a private or gated repo, make sure you are authenticated. For more details, see https://huggingface.co/docs/huggingface_hub/authenticationi�  z

Bad request for z
 endpoint:z

Bad request:i“  z Forbidden: z
Cannot access content at: z2
Make sure your token has the correct permissions.i   ÚRangez. Requested range: z. Content-Range: zContent-Range)r|   r   r,   r-   rz   r6   Ú_formatr   r   r   r   r8   ÚREPO_API_REGEXÚsearchr   r   r   r/   )r„   r�   rF   Ú
error_codeÚerror_messageÚmessageÚrange_headers          r<   Úhf_raise_for_statusr¡   `  sf  € ðpJ?Ø×!Ñ!Õ#øÜó H?Ø×%Ñ%×)Ñ)¨.Ó9ˆ
Ø ×(Ñ(×,Ñ,Ð->Ó?ˆàÐ+Ò+Ø!×-Ñ-Ð.¨nÐ=ÀÑFÐKgÐhp×htÑhtÐguÐuvÐIwÑwˆGÜÔ/°¸(ÓCÈÐJà˜?Ò*Ø!×-Ñ-Ð.¨nÐ=ÀÑFÐKdÐem×eqÑeqÐdrÐrsÐItÑtˆGÜÔ,¨g°xÓ@ÀaÐGà˜;Ò&à×'Ñ'Ð(¨Ð7¸&Ñ@ÐEfÐgo×gsÑgsÐftÐtuÐCvÑvð ô œ.¨'°8Ó<À!ÐCàÐDÒDà×'Ñ'Ð(¨Ð7Øñà5°h·l±l°^À1ÐEñFð ñð 9ñ	9ð ô Ô+¨W°hÓ?ÀQÐFà˜>Ò)Ø× Ñ  CÒ'ØÐ!NÒNØ× Ñ Ð,Ø× Ñ ×$Ñ$Ð0Ü×%Ñ% h×&6Ñ&6×&:Ñ&:Ó;ÐGð ×'Ñ'Ð(¨Ð7Øñà2°8·<±<°.ÀÐBñCðNñNð ô Ô1°7¸HÓEÈ1ÐLà×!Ñ! SÒ(àDQÐD]Ð& } o°ZÑ@Ðcuð ô œ/¨7°HÓ=À1ÐDà×!Ñ! SÒ(à�x×+Ñ+Ð,¨L¸¸ÀqÐIØ0°·±°¸aÐ@ñAàGñHð ô
 œ.¨'°8Ó<À!ÐCà×!Ñ! SÒ(Ø#×+Ñ+×3Ñ3×7Ñ7¸Ó@ˆLØ˜Ð.¨|¨nÐ<MÈh×N^ÑN^×NbÑNbÐcrÓNsÐMtÐtuÐvˆGÜœ.¨'°8Ó<À!ÐCô ”n¤c¨!£f¨hÓ7¸QÐ>ûðQH?ús   ‚ “
K�J8KËKÚ
error_typeÚcustom_messagec                 ó0  — g }|j                   j                  d«      }|�|j                  |«       	 |j                  «       }|j                  d«      }|�3t	        |t
        «      r|j                  |«       n|j                  |«       |j                  d«      }|� |D ]  }d|v sŒ|j                  |d   «       Œ |D �	cg c]5  }	t        |	«      j                  «       sŒt        |	«      j                  «       ‘Œ7 }}	t        t        j                  |«      «      }dj                  |«      }
|}|
r5|
j                  «       |j                  «       vrd	|v r	|d|
z   z  }n|d	|
z   z  }t        |j                   j                  t        d«      «      }|rd
|› d�}n1t        |j                   j                  t         d«      «      }|rd|› d�}|rI|j                  «       |j                  «       vr)d|v r |j#                  d«      }|d | z   ||d  z   }n|z  } | |j                  «       ||
xs d ¬«      S # t        $ rY |j                   j                  dd«      }|j                  r-d|j                  «       vr|j                  |j                  «       Y �ŒÔw xY wc c}	w )Nr‘   ÚerrorÚerrorsrŸ   zContent-Typer&   Úhtmlr—   r“   z (Request ID: r(   z (Amzn Trace ID: )r„   Úserver_message)r,   r-   ÚappendÚjsonrs   ÚlistÚextendr   ÚtextÚlowerr/   ÚstripÚdictÚfromkeysÚjoinr.   r+   Úindex)r¢   r£   r„   Úserver_errorsÚfrom_headersrp   r¥   r¦   Úcontent_typeÚliner¨   Úfinal_error_messagerG   Úrequest_id_messageÚnewline_indexs                  r<   rš   rš   å  s   € Ø€Mð ×#Ñ#×'Ñ'Ð(9Ó:€LØÐØ×Ñ˜\Ô*ð0à�}‰}‹ˆà—‘˜Ó!ˆØÐÜ˜%¤Ô&à×$Ñ$ UÕ+ð ×$Ñ$ UÔ+à—‘˜(Ó#ˆØÐàò ;�Ø Ò%Ø!×(Ñ(¨¨yÑ)9Õ:ð;ð 4AÖV¨4ÄCÈÃIÇOÁOÕDU”S˜“Y—_‘_Õ&ÐV€MÐVô œŸ™ }Ó5Ó6€Mð —Y‘Y˜}Ó-€Nð )ÐÙ˜.×.Ñ.Ó0¸×8LÑ8LÓ8NÑNØ�^Ñ#Ø 4¨.Ñ#8Ñ8Ñà 6¨NÑ#:Ñ:Ðä�X×%Ñ%×)Ñ)¬,¸Ó;Ó<€JÙØ-¨j¨\¸Ð;Ñô ˜×)Ñ)×-Ñ-¬o¸rÓBÓCˆ
ÙØ#4°Z°LÀÐ!BÐÙ�j×&Ñ&Ó(Ð0C×0IÑ0IÓ0KÑKØÐ&Ñ&Ø/×5Ñ5°dÓ;ˆMà# N ]Ð3Ð6HÑHÐK^Ð_lÐ_mÐKnÑnñ  ð  Ð#5Ñ5Ðñ Ð)×/Ñ/Ó1¸HÐUcÒUkÐgkÔlÐløôU ò 0à×'Ñ'×+Ñ+¨N¸BÓ?ˆØ�=Š=˜V¨<×+=Ñ+=Ó+?Ñ?Ø× Ñ  §¡Ô/úð	0üò Ws%   ²A2H. Â%H. Â?JÃJÈ.AJÊJr8   c                 ó’  — dd| j                   fg}t        | j                  j                  «       «      D ]2  \  }}|j	                  «       dk(  rd}|ddj                  ||«      fgz  }Œ4 | j                  rl| j                  }t        |t        «      r|j                  dd¬	«      }nt        |d
«      rd}t        |«      dkD  r|dd dz   }|d|j                  dd«      fgz  }|d| j                  fgz  }g }|D ]>  \  }}|r|j                  t        |«      «       |sŒ%|j                  t        |«      «       Œ@ dj!                  |«      S )zéConvert a `requests.PreparedRequest` into a curl command (str).

    Used for debug purposes only.

    Implementation vendored from https://github.com/ofw/curlify/blob/master/curlify.py.
    MIT License Copyright (c) 2016 Egor.
    )ÚcurlNz-Xr%   z<TOKEN>z-Hz{0}: {1}zutf-8Úignore)r¦   Úreadz<file-like object>iè  Nz ... [truncated]z-dr—   r&   r'   )r5   Úsortedr,   Úitemsr®   ÚformatÚbodyrs   ÚbytesÚdecodeÚhasattrr2   r�   r6   r©   r   r²   )r8   ÚpartsÚkÚvrÂ   Ú
flat_partss         r<   rA   rA   /  sS  € ð 	Ø	ˆw�~‰~Ðð$€Eô
 �w—‘×,Ñ,Ó.Ó/ò 3‰ˆˆ1Ø�7‰7‹9˜Ò'ØˆAØ�4˜×*Ñ*¨1¨aÓ0Ð1Ð2Ñ2‰ð3ð
 ‡|‚|Ø�|‰|ˆÜ�dœEÔ"Ø—;‘;˜w¨x�;Ó8‰DÜ�T˜6Ô"Ø'ˆDÜˆt‹9�tÒØ˜˜�;Ð!3Ñ3ˆDØ�4˜Ÿ™ d¨BÓ/Ð0Ð1Ñ1ˆà	ˆt�W—[‘[Ð!Ð"Ñ"€Eà€JØò (‰ˆˆ1ÙØ×Ñœe A›hÔ'ÚØ×Ñœe A›hÕ'ð	(ð �8‰8�JÓÐr=   z%^\s*bytes\s*=\s*(\d*)\s*-\s*(\d*)\s*$Úoriginal_rangeÚresume_sizec                 ó¤  — | sd|› d�S d| v rt        d| ›d�«      ‚t        j                  | «      }|st        d| ›d�«      ‚|j	                  «       \  }}|s:|st        d| ›d�«      ‚t        |«      |z
  }d|› �}|d	k  rt        d
|›d�«      ‚|S t        |«      }||z   }|r)t        |«      }d|› d|› �}||kD  rt        d
|›d�«      ‚|S d|› d�S )zB
    Adjust HTTP Range header to account for resume position.
    zbytes=ú-ú,zMultiple ranges detected - z, not supported yet.zInvalid range format - r”   zbytes=-r   zEmpty new range - )Ú
ValueErrorÚRANGE_REGEXÚmatchÚRuntimeErrorÚgroupsru   )rÊ   rË   rÑ   ÚstartÚendÚ
new_suffixÚ	new_rangeÚ	new_starts           r<   Ú_adjust_range_headerrÙ   [  s'  € ñ Ø˜�} AÐ&Ð&à
ˆnÑÜÐ6°~Ð6HÐH\Ð]Ó^Ð^ä×Ñ˜nÓ-€EÙÜÐ4°^Ð4FÀaÐHÓIÐIØ—‘“�J€Eˆ3áÙÜÐ!8¸Ð8JÈ!ÐLÓMÐMä˜“X Ñ+ˆ
Ø˜j˜\Ð*ˆ	Ø˜Š?ÜÐ!3°I°=ÀÐBÓCÐCØÐä�‹J€EØ˜Ñ#€IÙ
Ü�#‹hˆØ˜Y˜K q¨¨Ð.ˆ	Ø�sŠ?ÜÐ!3°I°=ÀÐBÓCÐCØÐà�I�;˜aÐ Ð r=   )r>   N)N)QÚ__doc__rv   r`   Úrerb   r~   r0   Ú	functoolsr   Úhttpr   Úshlexr   Útypingr   r   r   r	   r
   r   r   rC   r   r   Úrequests.adaptersr   Úrequests.modelsr   Úhuggingface_hub.errorsr   r&   r   r¦   r   r   r   r   r   r   r   r   Ú_fixesr   Ú_lfsr   Ú_typingr   Ú
get_loggerrH   r3   r+   r.   ÚcompileÚVERBOSEr›   r#   rM   rQ   rU   ÚBACKEND_FACTORY_TrV   Ú__annotations__rZ   rd   rY   ru   r_   ÚTimeoutr}   ÚSERVICE_UNAVAILABLEr/   ÚfloatÚ	Exceptionr†   rŽ   r¡   rš   rA   Ú
IGNORECASErÐ   rÙ   rO   r=   r<   ú<module>rð      sÒ  ðò Eã 	Û 	Û 	Û Û Û Ý Ý Ý ß D× DÑ Dã ß (Ý )Ý +å 7å ÷÷ ñ õ Ý #Ý Ý "ð 
ˆ×	Ñ	˜HÓ	%€ð
 $€Ø€à�—‘ð
ð �*‰*ô€ô ˜[ô ô<
�[ô 
ð (×"2Ñ"2ó ð ˜R ×!1Ñ!1Ð1Ñ2Ð Ø-EÐ Ð*Ó Eð AYñ !Ð,=ð !Ð]aó !ðH\�X×%Ñ%ó \ó@*ð ð%¨ð %¸ð %À×@PÑ@Pò %ó ð%ð ØØà×ÑØ× Ñ ðPð :D×9WÑ9Wò{8Øð{8à	ð{8ð ð	{8ð
 ð{8ð ð{8ð ˜t I™°°d¸9±oÀsÐ6JÑ0KÐKÑLð{8ð !  e¨C°¨H¡oÐ!5Ñ6ð{8ð ó{8ð|
 ð 
¨x¸©}ð 
Àó 
ñB? (ð B?¸8ÀC¹=ð B?ÐTXó B?ðJGm˜˜^Ñ,ð Gm¸cð GmÈXð GmÐZhó GmðT% �h×.Ñ.ð % °3ó % ðR ˆb�j‰jÐAÀ2Ç=Á=ÓQ€ð"!¨°#©ð "!ÀSð "!ÈXÐVYÉ]ô "!r=   