Ë
    kQêj3  ã                   ó   — 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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Zd dlZddlmZ ddlmZ d#dedefd	„Zd$d
„Zeej:                  df   Zeeee   ej>                  ej@                  ejB                  f   Z"eee#ee   ee#   ej>                  ej@                  ejB                  f   Z$eee#ee   ee#   ej>                  ej@                  ejB                  f   Z% G d„ d«      Z& G d„ d«      Z'd%d„Z(	 	 	 	 	 d&de)de)de*de+de)f
d„Z,dZ-dZ.de/fd„Z0de/de*fd„Z1defd„Z2 G d„ d e3«      Z4d!„ Z5d"„ Z6y)'é    N©Úwraps)ÚCallableÚListÚUnioné   )Úpandas)Úattempt_import_or_raiseÚmodule_nameÚpackage_namec                 ó2   ‡ ‡‡—  G ˆˆ ˆfd„d«      Š ‰«       S )aê  
    Create a stub module that allows class definition but fails when used.
    This allows modules to be imported for doctest collection even when
    optional dependencies are not available.

    Parameters
    ----------
    module_name : str
        The name of the module to create a stub for
    package_name : str, optional
        The package name to suggest in the error message

    Returns
    -------
    object
        A stub object that can be used in place of the module
    c                   ó$   •— e Zd Zˆ fd„Zˆˆfd„Zy)ú'create_import_stub.<locals>._ImportStubc                 ó   •— ‰S ©N© )ÚselfÚnameÚ_ImportStubs     €ú]/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/lancedb/embeddings/utils.pyÚ__getattr__z3create_import_stub.<locals>._ImportStub.__getattr__-   s	   ø€ ØÐó    c                 ó.   •— ‰xs ‰}t        d|› d�«      ‚)NzYou need to install z to use this functionality)ÚImportError)r   ÚargsÚkwargsÚpkgr   r   s       €€r   Ú__call__z0create_import_stub.<locals>._ImportStub.__call__0   s#   ø€ ØÒ- +ˆCÜÐ 4°S°EÐ9SÐTÓUÐUr   N)Ú__name__Ú
__module__Ú__qualname__r   r   )r   r   r   s   €€€r   r   r   ,   s   ø„ ô	ö	Vr   r   r   )r   r   r   s   ``@r   Úcreate_import_stubr"      s   ú€ ÷&Võ Vñ ‹=Ðr   c                 ó"   ‡ ‡‡‡‡— ˆˆˆˆˆ fd„}|S )Nc                 ó:   •‡ — t        ‰ «      ˆˆˆ ˆˆˆfd„«       }|S )Nc                  ó¾   •— t        ‰	«      D ]  }	  ‰| i |¤Žc S  y # t        $ r6 |dz   ‰	k(  r‚ t        ‰‰|z  z  ‰z   ‰«      }t        j                  |«       Y ŒNw xY w)Né   )ÚrangeÚ	ExceptionÚminÚtimeÚsleep)
r   r   Úir+   ÚbackoffÚdelayÚfnÚjitterÚ	max_delayÚtriess
       €€€€€€r   Úwrappedz'retry.<locals>.wrapper.<locals>.wrapped:   sp   ø€ ä˜5“\ò *�ð*Ù˜tÐ. vÑ.Ò.ñ*øô !ò *Ø˜1‘u ’~Øä # E¨W°a©ZÑ$8¸6Ñ$AÀ9Ó M˜ÜŸ
™
 5Ö)ð*ús   ‘�<AÁAr   )r/   r3   r-   r.   r0   r1   r2   s   ` €€€€€r   Úwrapperzretry.<locals>.wrapper9   s%   ù€ Ü	ˆr‹÷		*ð 		*ó 
ð		*ð ˆr   r   )r2   r.   r1   r-   r0   r4   s   ````` r   Úretryr5   8   s   ü€ ÷ð ð €Nr   zpd.DataFramec                   ó0   — e Zd Zddedefd„Zdefd„Zd„ Zy)	ÚRateLimiterÚ	max_callsÚperiodc           	      óü   — || _         t        dt        t        j                  t        j                  |«      «      «      | _        t        j                  «       | _	        d| _
        t        j                  «       | _        y )Nr&   r   )r9   Úmaxr)   ÚsysÚmaxsizeÚmathÚfloorr8   r*   Ú_last_resetÚ
_num_callsÚ	threadingÚRLockÚ_lock©r   r8   r9   s      r   Ú__init__zRateLimiter.__init__T   sN   € ØˆŒÜ˜Q¤¤C§K¡K´·±¸IÓ1FÓ GÓHˆŒäŸ9™9›;ˆÔØˆŒÜ—_‘_Ó&ˆ�
r   Úreturnc                 óî   — t        j                   «       }|| j                  z
  }| j                  |z
  }|dk  rd| _        || _        | xj                  dz  c_        | j                  | j                  kD  r|S y)Nr   r&   g        )r*   r@   r9   rA   r8   )r   Úcurrent_timeÚelapsedÚperiod_remainings       r   Ú_check_sleepzRateLimiter._check_sleep\   sl   € Ü—y‘y“{ˆØ ×!1Ñ!1Ñ1ˆØŸ;™;¨Ñ0Ðð ˜qÒ ØˆDŒOØ+ˆDÔà�Š˜1Ñ�à�?‰?˜TŸ^™^Ò+Ø#Ð#àr   c                 óF   ‡ ‡— t        j                  ‰«      ˆˆ fd„«       }|S )Nc                  óœ   •— ‰j                   5  t        j                  ‰j                  «       «       d d d «        ‰| i |¤ŽS # 1 sw Y   ŒxY wr   )rD   r*   r+   rL   )r   r   Úfuncr   s     €€r   r4   z%RateLimiter.__call__.<locals>.wrappern   sD   ø€ à—‘ñ 0Ü—
‘
˜4×,Ñ,Ó.Ô/÷0á˜Ð( Ñ(Ð(÷0ð 0ús   Ž$AÁA)Ú	functoolsr   )r   rO   r4   s   `` r   r   zRateLimiter.__call__m   s%   ù€ Ü	�‰˜Ó	ô	)ó 
ð	)ð
 ˆr   N)r&   ç      ð?)r   r    r!   ÚintÚfloatrF   rL   r   r   r   r   r7   r7   S   s&   „ ñ' #ð '°5ó 'ð˜eó ó"r   r7   c                   óJ   — e Zd ZdZdefd„Zd„ Zd„ Zdd„Zdd„Z	d„ Z
d	„ Zd
„ Zy)ÚFunctionWrapperz[
    A wrapper for embedding functions that adds rate limiting, retries, and batching.
    rO   c                 óJ   — || _         i | _        i | _        d | _        d| _        y )NF)rO   Úrate_limiter_kwargsÚretry_kwargsÚ_batch_sizeÚ	_progress)r   rO   s     r   rF   zFunctionWrapper.__init__|   s(   € ØˆŒ	Ø#%ˆÔ ØˆÔØˆÔØˆ�r   c                 ó^  ‡ — t        ‰ j                  «      dkD  rt        di ‰ j                  ¤Žˆ fd„«       }nˆ fd„}‰ j                  r/t	        ‰ j                  d   ‰ j                  d   ¬«      } ||«      }‰ j                  |«      }|D ��cg c]  } ||«      D ]  }|‘Œ Œ }}}|S c c}}w )Nr   c                 óB   •— ‰j                  | j                  «       «      S r   ©rO   Útolist©Úcr   s    €r   Ú
embed_funcz,FunctionWrapper.__call__.<locals>.embed_func‡   s   ø€ à—y‘y §¡£Ó,Ð,r   c                 óB   •— ‰j                  | j                  «       «      S r   r]   r_   s    €r   ra   z,FunctionWrapper.__call__.<locals>.embed_func�   s   ø€ Ø—y‘y §¡£Ó,Ð,r   r8   r9   ©r8   r9   r   )ÚlenrX   r5   rW   r7   Ú
to_batches)r   Útextra   ÚlimiterÚbatchesr`   ÚembÚembedss   `       r   r   zFunctionWrapper.__call__ƒ   s´   ø€ äˆt× Ñ Ó! AÒ%äÑ'�T×&Ñ&Ñ'ó-ó (ñ-ô
-ð ×#Ò#Ü!Ø×2Ñ2°;Ñ?Ø×/Ñ/°Ñ9ôˆGñ ! Ó,ˆJØ—/‘/ $Ó'ˆØ&×@˜!±*¸Q³-Ò@¨3’#Ð@�#Ð@ˆÑ@Øˆùó As   ÂB)c                 ó"   — d| j                   › d�S )NzEmbeddingFunction(func=ú))rO   ©r   s    r   Ú__repr__zFunctionWrapper.__repr__š   s   € Ø(¨¯©¨°1Ð5Ð5r   c                 ó*   — t        ||¬«      | _        | S )Nrc   )ÚdictrW   rE   s      r   Ú
rate_limitzFunctionWrapper.rate_limit�   s   € Ü#'°)ÀFÔ#KˆÔ Øˆr   c                 ó0   — t        |||||¬«      | _        | S )N)r2   r.   r1   r-   r0   )rp   rX   )r   r2   r.   r1   r-   r0   s         r   r5   zFunctionWrapper.retry¡   s%   € Ü ØØØØØô
ˆÔð ˆr   c                 ó   — || _         | S r   )rY   )r   Ú
batch_sizes     r   rt   zFunctionWrapper.batch_size«   s   € Ø%ˆÔØˆr   c                 ó   — d| _         | S )NT)rZ   rm   s    r   Úshow_progresszFunctionWrapper.show_progress¯   s   € ØˆŒØˆr   c              #   óì   ‡ K  — t        |«      }ˆ fd„}‰ j                  r?ddlm}  | ||«      t	        j
                  |‰ j                  z  «      ¬«      E d {  –—†  y  ||«      E d {  –—†  y 7 Œ7 Œ­w)Nc              3   ó€   •K  — t        dt        | «      ‰j                  «      D ]  }| ||‰j                  z    –— Œ y ­w)Nr   )r'   rd   rY   )ÚarrÚstart_ir   s     €r   Ú_chunkerz,FunctionWrapper.to_batches.<locals>._chunker¶   sC   øè ø€ Ü  ¤C¨£H¨d×.>Ñ.>Ó?ò @�Ø˜' G¨d×.>Ñ.>Ñ$>Ð?Ó?ñ@ùs   ƒ;>r   )Útqdm)Útotal)rd   rZ   Ú	tqdm.autor|   r>   ÚceilrY   )r   ry   Úlengthr{   r|   s   `    r   re   zFunctionWrapper.to_batches³   sa   øè ø€ Ü�S“ˆô	@ð �>Š>Ý&á™H S›M´·±¸6ÀD×DTÑDTÑ;TÓ1UÔV×VÑVá “}×$Ñ$ð Wøà$ús$   ƒAA4ÁA0ÁA4Á*A2Á+A4Á2A4N)gÍÌÌÌÌÌì?rQ   ©é
   r&   é   é   r&   )r   r    r!   Ú__doc__r   rF   r   rn   rq   r5   rt   rv   re   r   r   r   rU   rU   w   s6   „ ñð˜Xó òò.6óóòòó%r   rU   c                 ó   ‡ — ˆ fd„}|S )aF  
    LRU cache that keeps weak references to the objects it caches. Only caches the
    latest instance of the objects to make sure memory usage is bounded.

    Parameters
    ----------
    maxsize : int, default 128
        The maximum number of objects to cache.

    Returns
    -------
    Callable
        A decorator that can be applied to a method.

    Examples
    --------
    >>> class Foo:
    ...     @weak_lru()
    ...     def bar(self, x):
    ...         return x
    >>> foo = Foo()
    >>> foo.bar(1)
    1
    >>> foo.bar(2)
    2
    >>> foo.bar(1)
    1
    c                 ó€   •‡ ‡— t        j                  ‰«      ˆ fd„«       Št        j                  ‰ «      ˆfd„«       }|S )Nc                 ó&   •—  ‰ | «       g|¢­i |¤ŽS r   r   )Ú_selfr   r   rO   s      €r   Ú_funcz(weak_lru.<locals>.wrapper.<locals>._funcá   s   ø€ á™›Ð1 $Ò1¨&Ñ1Ð1r   c                 óB   •—  ‰t        j                  | «      g|¢­i |¤ŽS r   )ÚweakrefÚref)r   r   r   rŠ   s      €r   Úinnerz(weak_lru.<locals>.wrapper.<locals>.innerå   s!   ø€ áœŸ™ TÓ*Ð<¨TÒ<°VÑ<Ð<r   )rP   Ú	lru_cacher   )rO   rŽ   rŠ   r=   s   ` @€r   r4   zweak_lru.<locals>.wrapperà   sD   ú€ Ü	×	Ñ	˜WÓ	%ó	2ó 
&ð	2ô 
�‰˜Ó	ó	=ó 
ð	=ð ˆr   r   )r=   r4   s   ` r   Úweak_lrur�   Â   s   ø€ ô<	ð €Nr   Úinitial_delayÚexponential_baser0   Úmax_retriesr1   c                 ó&   ‡ ‡‡‡‡‡— ˆˆ ˆˆˆˆfd„}|S )a  Retry a function with exponential backoff.

    Only errors that may succeed when repeated are retried. Errors that carry an
    HTTP status code are retried when the status is 408, 409, 429 or >= 500; any
    other 4xx status (for example 400, 401, 403, 404 or 422) is a permanent failure
    that is raised immediately. Errors without a recognisable status code (for
    example connection errors, timeouts, or exceptions raised by a custom embedding
    function) are retried.

    The delay before the n-th retry is ``initial_delay * exponential_base ** n``,
    never more than ``max_delay``. With ``jitter`` enabled, a random amount of up to
    half of that delay is removed ("equal jitter"), so the actual wait is always in
    the range ``[delay / 2, delay]``.

    Args:
        func (function): The function to be retried.
        initial_delay (float): Initial delay in seconds (default is 1).
        exponential_base (float): The base for exponential backoff (default is 2).
        jitter (bool): Whether to add jitter to the delay (default is True).
        max_retries (int): Maximum number of retries (default is 7).
        max_delay (float): Maximum delay between two attempts, in seconds
            (default is 60).

    Returns:
        function: The decorated function.
    c                  ó^  •— d}‰}	 	  ‰| i |¤ŽS # t         $ r’}t        |«      r‚ |dz  }|‰kD  rt        d‰› d�|«      |‚t        |‰z  ‰
«      }|}‰	r |dz  t        j                  «       |z  dz  z   }t	        j
                  d|||‰«       t        j                  |«       Y d }~nd }~ww xY wŒ¨)Nr   r&   zMaximum number of retries (z) exceeded.r   z>Error occurred: %s 
 Retrying in %s seconds (retry %s of %s) 
)r(   Ú_is_non_retryable_errorr)   ÚrandomÚloggingÚwarningr*   r+   )r   r   Únum_retriesr.   ÚeÚ	sleep_forr’   rO   r‘   r0   r1   r“   s         €€€€€€r   r4   z/retry_with_exponential_backoff.<locals>.wrapper  sâ   ø€ ØˆØˆð ð&Ù˜TÐ, VÑ,Ð,øô
 ò &ô +¨1Ô-Øà˜qÑ �à Ò,Ü#Ø5°k°]À+ÐNÐPQóàðô ˜EÐ$4Ñ4°iÓ@�Ø!�	ÙØ %¨¡	¬F¯M©M«O¸eÑ,CÀaÑ,GÑ G�IÜ—‘ØVØØØØôô —
‘
˜9×%Ñ%ûð1&úð s   ˆ �	B+™BB&Â&B+r   )rO   r‘   r’   r0   r“   r1   r4   s   `````` r   Úretry_with_exponential_backoffr�   î   s   ý€ ÷F%&ñ %&ðN €Nr   )i˜  i™  i­  )ÚThrottlÚTooManyRequestsÚRequestLimitExceededÚProvisionedThroughputExceededÚModelNotReadyÚModelTimeoutÚerrorc                 ó¸  — t        | dd«      t        | dd«      g}t        | dd«      }t        |t        «      r1|j                  |j	                  di «      j	                  d«      «       n|j                  t        |dd«      «       |j                  t        | dd«      «       |D ]5  }t        |t
        «      sŒt        |t        «      rŒ%d|cxk  r	d	k  sŒ1|c S  Œ7 y)
af  Best-effort extraction of an HTTP status code from an exception.

    Provider SDKs expose it in different ways: ``status_code`` (openai, cohere),
    ``http_status`` (voyageai), ``response.status_code`` (requests, httpx),
    ``code`` (google-api-core, urllib) or ``response["ResponseMetadata"]``
    (botocore). Returns None if no status can be found.
    Ústatus_codeNÚhttp_statusÚresponseÚResponseMetadataÚHTTPStatusCodeÚcodeéd   iW  )ÚgetattrÚ
isinstancerp   ÚappendÚgetrR   Úbool)r¤   Ú
candidatesr¨   Ústatuss       r   Ú_get_http_statusr´   J  sÏ   € ô 	��} dÓ+Ü��} dÓ+ð€Jô �u˜j¨$Ó/€HÜ�(œDÔ!Ø×Ñ˜(Ÿ,™,Ð'9¸2Ó>×BÑBÐCSÓTÕUà×Ñœ' (¨M¸4Ó@ÔAØ×Ñ”g˜e V¨TÓ2Ô3àò ˆÜ�fœcÕ"¬:°f¼dÕ+CØ�fÔ# Ó#Ø’ñ $ðð r   rG   c                 ó’  — ddl m} t        | |«      ryt        | «      j                  }|dk(  ryt        | t
        t        f«      ryt        | «      }|�d|cxk  rdk  sy y|t        v ryt        | d	d«      }t        |t        «      rAt        |j                  d
i «      j                  dd«      «      }|j                  t        «      ryy)a„  Check if an error should not be retried.

    An error is non-retryable if it is an authentication error or if it carries an
    HTTP client-error status (4xx) other than 408, 409 and 429. Errors without a
    recognisable status are treated as retryable.

    Args:
        error: The exception to check

    Returns:
        True if the error should not be retried, False otherwise
    r&   )ÚUntrustedEmbeddingConfigErrorTÚAuthenticationErrorNi�  iô  Fr¨   ÚErrorÚCodeÚ )Úbaser¶   r®   Útyper   ÚMissingApiKeyErrorr   r´   Ú_RETRYABLE_CLIENT_STATUSESr­   rp   Ústrr°   Ú
startswithÚ_RETRYABLE_AWS_ERROR_CODES)r¤   r¶   Ú
error_typer³   r¨   Úaws_codes         r   r–   r–   d  sÊ   € õ 4ä�%Ð6Ô7Øô �e“×%Ñ%€JØÐ*Ò*Øô �%Ô,¬kÐ:Ô;Øä˜eÓ$€FØ€~˜S FÔ0¨SÒ0Øð 1ØØÔ+Ñ+Øô �u˜j¨$Ó/€HÜ�(œDÔ!Ü�x—|‘| G¨RÓ0×4Ñ4°V¸RÓ@ÓAˆØ×ÑÔ9Ô:Øàr   Úurlc                 ó.  — 	 t         j                  j                  | «      5 }|j                  «       cddd«       S # 1 sw Y   yxY w# t        j
                  t         j                  j                  f$ r }t        dj                  | |«      «      ‚d}~ww xY w)zM
    Parameters
    ----------
    url: str
        URL to download from
    Nzcould not download {} due to {})
ÚurllibÚrequestÚurlopenÚreadÚsocketÚgaierrorr¤   ÚURLErrorÚConnectionErrorÚformat)rÄ   ÚconnÚerrs      r   Úurl_retrieverÑ   �  sw   € ðRÜ�^‰^×#Ñ# CÓ(ð 	¨DØ—9‘9“;÷	÷ 	ò 	ûä�O‰OœVŸ\™\×2Ñ2Ð3ò RÜÐ?×FÑFÀsÈCÓPÓQÐQûðRús1   ‚A ¡;±	A »AÁ A ÁA Á-BÁ4BÂBc                   ó   — e Zd ZdZy)r½   z7Raised when an embedding provider's API key is not set.N)r   r    r!   r…   r   r   r   r½   r½   ž  s   „ ÚAr   r½   c                 óh   — t        j                  d| «       t        d| j                  «       › d�«      ‚)NzCould not find API key for %szPlease set the z_API_KEY environment variable.)r˜   r¤   r½   Úupper)Úproviders    r   Úapi_key_not_found_helprÖ   ¢  s3   € Ü‡M�MÐ1°8Ô<Ü
Ø
˜(Ÿ.™.Ó*Ð+Ð+IÐJóð r   c                  ó<   — 	 t        dd«       y# t        $ r Y yw xY w)NÚ
flash_attnTF)r
   r   r   r   r   Úis_flash_attn_2_availablerÙ   ©  s&   € ðÜ ¨lÔ;àøÜò Ùðús   ‚ �	šr   r�   )é€   )r&   r   Té   é<   )7rP   r>   r—   rÊ   r<   rB   r*   Úurllib.errorrÆ   Úurllib.requestrŒ   r˜   r   Útypingr   r   r   ÚnumpyÚnpÚpyarrowÚpaÚdependenciesr	   ÚpdÚutilr
   r¿   r"   r5   ÚTableÚDATAÚArrayÚChunkedArrayÚndarrayÚTEXTÚbytesÚIMAGESÚAUDIOr7   rU   r�   rS   r±   rR   r�   r¾   rÁ   r(   r´   r–   rÑ   Ú
ValueErrorr½   rÖ   rÙ   r   r   r   ú<module>rñ      s¯  ðó
 Û Û Û Û 
Û Û Û Û Û Û Ý ß (Ñ (Û Û å 'Ý *ñ Cð °só ó>ð& ˆR�X‰X�~Ð%Ñ&€ØˆS�$�s‘)˜RŸX™X r§¡¸¿
¹
ÐBÑC€Ø	Øˆ��S‘	˜4 ™;¨¯©°"·/±/À2Ç:Á:ÐMñ
€ð 	ˆc�5˜$˜s™) T¨%¡[°"·(±(¸B¿O¹OÈRÏZÉZÐWÑX€÷!ñ !÷HH%ñ H%óV)ð\ ØØØØñJàðJð ðJð ð	Jð
 ðJð óJð^ -Ð ðÐ ð˜Ió ð4) 9ð )°ó )ðXR�có RôB˜ô Bòór   