Ë
    kQêj   ã                   óî   — 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 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 e
rd dlZdZ d„ Z! ed«       G d„ de«      «       Z"y)é    N)Úcached_property)Úurlparse)ÚPath)ÚTYPE_CHECKINGÚListÚUnionÚOptionalÚAnyÚDicté   )Úattempt_import_or_raiseé   )ÚEmbeddingFunction)Úregister)Úapi_key_not_found_helpÚTEXTÚIMAGESÚurl_retrievez!https://api.jina.ai/v1/embeddingsc                 ó�   — 	 t        | «      }t        |j                  «      xr t        |j                  «      S # t        $ r Y yw xY w)NF)r   ÚboolÚschemeÚnetlocÚ	Exception)ÚtextÚparseds     ú^/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/lancedb/embeddings/jinaai.pyÚis_valid_urlr      s?   € ðÜ˜$“ˆÜ�F—M‘MÓ"Ò:¤t¨F¯M©MÓ':Ð:øÜò Ùðús   ‚69 ¹	AÁAÚjinac                   óà  — e Zd ZU dZdZeed<   dZee   ed<   d„ Z	e
dee   fd„«       Zd	eeef   deee   ej$                  f   fd
„Ze
deeedf   defd„«       Zdeeeddf   deej$                     fd„Zd	eeef   deej0                     fd„Zdeeeedf   dej$                  fd„Zdeee   ej$                  f   deej0                     fd„Zdedeej0                     fd„Zed„ «       Zy)ÚJinaEmbeddingsa’  
    An embedding function that uses the Jina API

    https://jina.ai/embeddings/

    Parameters
    ----------
    name : str, default "jina-clip-v1". Note that some models support both image
        and text embeddings and some just text embedding

    api_key : str, default None
        The api key to access Jina API. If you pass None, you can set JINA_API_KEY
        environment variable

    zjina-clip-v1ÚnameNÚapi_keyc                  ó   — y)Ni   © )Úselfs    r   ÚndimszJinaEmbeddings.ndims8   s   € àó    Úreturnc                  ó   — dgS )Nr"   r$   r$   r'   r   Úsensitive_keyszJinaEmbeddings.sensitive_keys<   s
   € àˆ{Ðr'   Úinputsc                 ó„  — t        |t        t        t        f«      r|g}|S t        |t        j
                  «      r|j                  «       }|S t        |t        j                  «      r |j                  «       j                  «       }|S t        |t        «      r|}|S t        dd«      }t        ||j                  «      r|g}|S )z?
        Sanitize the input to the embedding function.
        ú	PIL.ImageÚpillow)Ú
isinstanceÚstrÚbytesr   ÚpaÚArrayÚ	to_pylistÚChunkedArrayÚcombine_chunksÚlistr   ÚImage)r%   r+   Ú	PIL_Images      r   Úsanitize_inputzJinaEmbeddings.sanitize_input@   s¶   € ô �fœs¤E¬4Ð0Ô1Ø�XˆFð ˆô ˜¤§¡Ô)Ø×%Ñ%Ó'ˆFð ˆô ˜¤§¡Ô0Ø×*Ñ*Ó,×6Ñ6Ó8ˆFð ˆô ˜&¤$Ô'Ø�ð
 ˆô 4°KÀÓJ�	Ü˜f i§o¡oÔ6Ø$˜X�FØˆr'   ÚimagezPIL.Image.Imagec                 ó¤  — t        | t        «      r(dt        j                  | «      j	                  d«      i}|S t        | t
        t        f«      �rit        t        | «      «      }t        dd«      }|j                  dk(  r|j                  |j                  «      }n¿|j                  dk(  s+t        j                  dk(  rIt        |j                  «      dk(  r1|j                  t        j                  dk(  r| n|j                  «      }nT|j                  j                  d	«      r.|j                  t!        j"                  t%        | «      «      «      }nt'        d
«      ‚t!        j"                  «       }|j)                  |d¬«       |j+                  «       }dt        j                  |«      j	                  d«      i}|S t        dd«      }t        | |j,                  «      r_t!        j"                  «       }| j)                  |d¬«       |j+                  «       }dt        j                  |«      j	                  d«      i}|S t/        dt1        | «      › d�«      ‚)Nr;   zutf-8r-   r.   ÚfileÚ Úntr   Úhttpz)Only local and http(s) urls are supportedÚPNG)ÚformatúKJinaEmbeddingFunction supports str, Path, bytes or PIL Image as query, but ú	 is given)r/   r1   Úbase64Ú	b64encodeÚdecoder0   r   r   r   r   ÚopenÚpathÚosr!   ÚlenÚ
startswithÚioÚBytesIOr   ÚNotImplementedErrorÚsaveÚgetvaluer8   Ú	TypeErrorÚtype)r;   Ú
image_dictr   r9   Ú	pil_imageÚbufferedÚimage_bytess          r   Ú_generate_image_input_dictz)JinaEmbeddings._generate_image_input_dictU   sß  € ä�eœUÔ#Ø!¤6×#3Ñ#3°EÓ#:×#AÑ#AÀ'Ó#JÐKˆJð> Ðô= ˜¤¤T˜{Õ+Üœc %›jÓ)ˆFÜ/°¸XÓFˆIØ�}‰} Ò&Ø%ŸN™N¨6¯;©;Ó7‘	Ø—‘ "Ò$¬¯©°Dª¼SÀÇÁÓ=OÐSTÒ=Tð &ŸN™N´B·G±G¸t²O©5ÈÏÉÓU‘	Ø—‘×)Ñ)¨&Ô1Ø%ŸN™N¬2¯:©:´lÀ5Ó6IÓ+JÓK‘	ä)Ð*UÓVÐVÜ—z‘z“|ˆHØ�N‰N˜8¨EˆNÔ2Ø"×+Ñ+Ó-ˆKØ!¤6×#3Ñ#3°KÓ#@×#GÑ#GÈÓ#PÐQˆJð Ðô 0°¸XÓFˆIä˜% §¡Ô1ÜŸ:™:›<�Ø—
‘
˜8¨E�
Ô2Ø&×/Ñ/Ó1�Ø%¤v×'7Ñ'7¸Ó'D×'KÑ'KÈGÓ'TÐU�
ð Ðô	  ð&Ü&*¨5£k ]°)ð=óð r'   Úqueryr   c                 óh  — t        |t        «      r/t        |«      s| j                  |g«      S | j	                  |«      gS t        |t
        t        f«      r| j	                  |«      gS t        dd«      }t        ||j                  «      r| j	                  |«      gS t        dt        |«      › d�«      ‚)zÚ
        Compute the embeddings for a given user query

        Parameters
        ----------
        query : Union[str, PIL.Image.Image]
            The query to embed. A query can be either text or an image.
        r-   r.   rC   rD   )r/   r0   r   Úgenerate_text_embeddingsÚgenerate_image_embeddingr   r1   r   r8   rR   rS   )r%   rY   ÚargsÚkwargsr9   s        r   Úcompute_query_embeddingsz'JinaEmbeddings.compute_query_embeddingsy   s¯   € ô �eœSÔ!Ü Ô&Ø×4Ñ4°e°WÓ=Ð=à×5Ñ5°eÓ<Ð=Ð=Ü˜¤¤e˜}Ô-Ø×1Ñ1°%Ó8Ð9Ð9ä/°¸XÓFˆIä˜% §¡Ô1Ø×5Ñ5°eÓ<Ð=Ð=äð&Ü&*¨5£k ]°)ð=óð r'   c                 ó¬   ‡ ‡— ‰ j                  |«      }g }d}ˆˆ fd„Š|D ]  } ‰|||«      }Œ |dkD  r‰ j                  |«      S ‰ j                  |«      S )Nr   c                 óF  •— t        | t        «      rGt        | «      s|j                  d| i«       |S |dz  }|j                  ‰j	                  | «      «       |S t        | t
        «      r| D ]  } ‰|||«      }Œ |S |dz  }|j                  ‰j	                  | «      «       |S )Nr   r   )r/   r0   r   ÚappendrX   r7   )ÚinputÚmodel_inputsÚimage_inputsÚ_inputÚprocess_inputr%   s       €€r   rg   z?JinaEmbeddings.compute_source_embeddings.<locals>.process_input�   sº   ø€ Ü˜%¤Ô%Ü# EÔ*Ø ×'Ñ'¨°¨Ô8ð  Ðð ! AÑ%�LØ ×'Ñ'¨×(GÑ(GÈÓ(NÔOð  Ðô ˜E¤4Ô(Ø#ò U�FÙ#0°¸À|Ó#T‘LðUð
  Ðð  Ñ!�Ø×#Ñ# D×$CÑ$CÀEÓ$JÔKØÐr'   )r:   Ú_generate_embeddingsr[   )r%   r+   r]   r^   rd   re   rc   rg   s   `      @r   Úcompute_source_embeddingsz(JinaEmbeddings.compute_source_embeddings–   sq   ù€ ð ×$Ñ$ VÓ,ˆØˆØˆõ	 ð ò 	LˆEÙ(¨°¸lÓK‰Lð	Lð ˜!ÒØ×,Ñ,¨\Ó:Ð:à×0Ñ0°Ó8Ð8r'   c                 óP   — | j                  |«      }| j                  |g¬«      d   S )a-  
        Generate the embedding for a single image

        Parameters
        ----------
        image : Union[str, bytes, PIL.Image.Image]
            The image to embed. If the image is a str, it is treated as a uri.
            If the image is bytes, it is treated as the raw image bytes.
        ©rc   r   )rX   rh   )r%   r;   rT   s      r   r\   z'JinaEmbeddings.generate_image_embedding´   s/   € ð ×4Ñ4°UÓ;ˆ
Ø×(Ñ(°
¨|Ð(Ó<¸QÑ?Ð?r'   Útextsc                 ó&   — | j                  |¬«      S )Nrk   )rh   )r%   rl   r]   r^   s       r   r[   z'JinaEmbeddings.generate_text_embeddingsÃ   s   € ð ×(Ñ(¨uÐ(Ó5Ð5r'   rc   c                 óô   — | j                   j                  t        || j                  dœ¬«      j	                  «       }d|vrt        |d   «      ‚|d   }t        |d„ ¬«      }|D �cg c]  }|d   ‘Œ	 c}S c c}w )z®
        Get the embeddings for the given texts

        Parameters
        ----------
        texts: list[str] or np.ndarray (of str)
            The texts to embed
        )rc   Úmodel)ÚjsonÚdataÚdetailc                 ó   — | d   S )NÚindexr$   )Úes    r   ú<lambda>z5JinaEmbeddings._generate_embeddings.<locals>.<lambda>Ú   s
   € ¸Q¸w¹Z€ r'   )ÚkeyÚ	embedding)Ú_sessionÚpostÚAPI_URLr!   rp   ÚRuntimeErrorÚsorted)r%   rc   r]   r^   ÚrespÚ
embeddingsÚsorted_embeddingsÚresults           r   rh   z#JinaEmbeddings._generate_embeddingsÈ   s€   € ð �}‰}×!Ñ!Ü E°D·I±IÑ>ð "ó 
ç
‰$‹&ð 	ð ˜ÑÜ˜t H™~Ó.Ð.à˜&‘\ˆ
ô # :Ñ3GÔHÐà2CÖD¨��{Ó#ÒDÐDùÒDs   Á&A5c                 ó6  — dd l }| j                  €*t        j                  j	                  d«      €t        d«       | j                  xs t        j                  j	                  d«      }|j                  «       }|j                  j                  d|› �ddœ«       |S )Nr   ÚJINA_API_KEYr   zBearer Úidentity)ÚAuthorizationzAccept-Encoding)	Úrequestsr"   rJ   ÚenvironÚgetr   ÚSessionÚheadersÚupdate)r%   r†   r"   Úsessions       r   ry   zJinaEmbeddings._sessionÞ   sz   € ãà�<‰<Ð¤B§J¡J§N¡N°>Ó$BÐ$JÜ" 6Ô*Ø—,‘,Ò@¤"§*¡*§.¡.°Ó"@ˆØ×"Ñ"Ó$ˆØ�‰×ÑØ '¨ yÐ1ÀjÑQô	
ð ˆr'   ) Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r0   Ú__annotations__r"   r	   r&   Ústaticmethodr   r*   r   r   r   r
   ÚnpÚndarrayr:   r1   r   rX   r_   Úarrayri   r   r\   r[   rh   r   ry   r$   r'   r   r    r    #   s…  … ñð  €Dˆ#ÓØ!€GˆX�c‰]Ó!òð ð˜D ™Iò ó ððØ˜D &˜LÑ)ðà	ˆt�C‰y˜"Ÿ*™*Ð$Ñ	%óð* ð!¨%°°UÐ<MÐ0MÑ*Nð !ÐSWò !ó ð!ðFØ˜3  vÐ/@Ð@ÑAðà	ˆb�j‰jÑ	óð:9Ø˜D &˜LÑ)ð9à	ˆb�h‰h‰ó9ð<@Ø˜3  tÐ->Ð>Ñ?ð@à	�‰ó@ð6Ø˜4 ™9 b§j¡jÐ0Ñ1ð6à	ˆb�h‰h‰ó6ð
E¨$ð EÀDÈÏÉÁNó Eð, ñ
ó ñ
r'   r    )#rJ   rM   rE   Ú	functoolsr   Úurllib.parser   Úpathlibr   Útypingr   r   r   r	   r
   r   Únumpyr“   Úpyarrowr2   Úutilr   Úbaser   Úregistryr   Úutilsr   r   r   r   ÚPILr{   r   r    r$   r'   r   ú<module>r¡      sh   ðó
 
Û 	Û Ý %Ý !Ý ß B× Bã Û å *Ý #Ý ß EÓ EáÛà
-€òñ 
ˆ&ÓôEÐ&ó Eó ñEr'   