Ë
    lQêjš'  ã                   ó²   — d dl mZmZmZmZmZ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Zd dlZd dlZd dlZ G d„ de«      Z G d„ dee   «      Zy)	é    )Ú
EmbeddingsÚEmbeddingFunctionÚSpaceÚ
EmbeddableÚis_imageÚis_document©Úvalidate_config_schema)ÚListÚDictÚAnyÚUnionÚOptionalÚ	TypedDictNc                   ó   — e Zd ZU eed<   y)ÚJinaQueryConfigÚtaskN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__© ó    ú/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/chromadb/utils/embedding_functions/jina_embedding_function.pyr   r      s   … Ø
„Ir   r   c                   ó”  — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d!dee   dededee   dee   dee   d	ee   d
ee   dee   dee   fd„Z	de
dedeeef   fd„Zd"dededefd„Zde
defd„Zde
defd„Zedefd„«       Zdefd„Zdee   fd„Zedeeef   ddfd„«       Zdeeef   fd„Zdeeef   deeef   ddfd„Zedeeef   ddfd „«       Zy)#ÚJinaEmbeddingFunctionz¾
    This class is used to get embeddings for a list of texts using the Jina AI API.
    It requires an API key and a model name. The default model name is "jina-embeddings-v2-base-en".
    NÚapi_keyÚ
model_nameÚapi_key_env_varr   Úlate_chunkingÚtruncateÚ
dimensionsÚembedding_typeÚ
normalizedÚquery_configc                 óÐ  — 	 ddl }	 t        j                  d«      | _        |�t        j                  dt        «       t        j                  d«      �d| _        n|| _        |xs t        j                  | j                  «      | _        | j                  st        d| j                  › d	�«      ‚|| _        || _        || _        || _        || _        || _        |	| _        |
| _        d
| _        |j-                  «       | _        | j.                  j0                  j3                  d| j                  › �ddœ«       y# t        $ r t        d«      ‚w xY w# t        $ r t        d«      ‚w xY w)aL  
        Initialize the JinaEmbeddingFunction.

        Args:
            api_key_env_var (str, optional): Environment variable name that contains your API key for the Jina AI API.
                Defaults to "CHROMA_JINA_API_KEY".
            model_name (str, optional): The name of the model to use for text embeddings.
                Defaults to "jina-embeddings-v2-base-en".
            task (str, optional): The task to use for the Jina AI API.
                Defaults to None.
            late_chunking (bool, optional): Whether to use late chunking for the Jina AI API.
                Defaults to None.
            truncate (bool, optional): Whether to truncate the Jina AI API.
                Defaults to None.
            dimensions (int, optional): The number of dimensions to use for the Jina AI API.
                Defaults to None.
            embedding_type (str, optional): The type of embedding to use for the Jina AI API.
                Defaults to None.
            normalized (bool, optional): Whether to normalize the Jina AI API.
                Defaults to None.

        r   NzUThe httpx python package is not installed. Please install it with `pip install httpx`z	PIL.ImagezTThe PIL python package is not installed. Please install it with `pip install pillow`z€Direct api_key configuration will not be persisted. Please use environment variables via api_key_env_var for persistent storage.ÚJINA_API_KEYzThe z! environment variable is not set.z!https://api.jina.ai/v1/embeddingszBearer Úidentity)ÚAuthorizationzAccept-Encoding)ÚhttpxÚImportErrorÚ
ValueErrorÚ	importlibÚimport_moduleÚ	_PILImageÚwarningsÚwarnÚDeprecationWarningÚosÚgetenvr    r   r   r   r!   r"   r#   r$   r%   r&   Ú_api_urlÚClientÚ_sessionÚheadersÚupdate)Úselfr   r   r    r   r!   r"   r#   r$   r%   r&   r+   s               r   Ú__init__zJinaEmbeddingFunction.__init__   sc  € ðF	Ûð
	Ü&×4Ñ4°[ÓAˆDŒNð ÐÜ�M‰Mð_ä"ôô �9‰9�^Ó$Ð0Ø#1ˆDÕ à#2ˆDÔ àÒA¤"§)¡)¨D×,@Ñ,@Ó"AˆŒØ�|Š|ÜØ�t×+Ñ+Ð,Ð,MÐNóð ð %ˆŒð ˆŒ	Ø*ˆÔØ ˆŒØ$ˆŒØ,ˆÔØ$ˆŒØ(ˆÔà;ˆŒØŸ™›ˆŒØ�‰×Ñ×$Ñ$Ø '¨¯© ~Ð6È:ÑVõ	
øôU ò 	ÜØgóð ð	ûô ò 	ÜØfóð ð	ús   ‚D8 ‡E Ä8EÅE%ÚinputÚis_queryÚreturnc                 óÆ  — g | j                   dœ}t        d„ |D «       «      r||d<   nÂ|D ]½  }t        |«      r|d   j                  d|i«       Œ%t	        |«      sŒ1	 | j
                  j                  |«      }t        j                  «       }|j                  |d¬«       |j                  «       }t        j                  |«      j                  d«      }|d   j                  d	|i«       Œ¿ | j                   �| j                   |d
<   | j"                  �| j"                  |d<   | j$                  �| j$                  |d<   | j&                  �| j&                  |d<   | j(                  �| j(                  |d<   | j*                  �| j*                  |d<   |r3| j,                  �'| j,                  j/                  «       D ]
  \  }
}|||
<   Œ |S # t        $ r}	t        d|	› �«      |	‚d }	~	ww xY w)N)r=   Úmodelc              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)r   )Ú.0Úitems     r   ú	<genexpr>z7JinaEmbeddingFunction._build_payload.<locals>.<genexpr>u   s   è ø€ Ò3 TŒ{˜4× Ñ3ùs   ‚r=   ÚtextÚPNG)Úformatzutf-8z8Failed to convert image numpy array to base64 data URI: Úimager   r!   r"   r#   r$   r%   )r   Úallr   Úappendr   r0   Ú	fromarrayÚioÚBytesIOÚsaveÚgetvalueÚbase64Ú	b64encodeÚdecodeÚ	Exceptionr-   r   r!   r"   r#   r$   r%   r&   Úitems)r;   r=   r>   ÚpayloadrD   Ú	pil_imageÚbufferÚ	img_bytesÚbase64_stringÚeÚkeyÚvalues               r   Ú_build_payloadz$JinaEmbeddingFunction._build_payloadp   så  € àØ—_‘_ñ#
ˆô Ñ3¨UÔ3Ô3Ø$ˆG�GÒàò F�Ü˜tÔ$Ø˜GÑ$×+Ñ+¨V°T¨NÕ;Ü˜d•^ð!Ø$(§N¡N×$<Ñ$<¸TÓ$B˜	ä!#§¡£˜Ø!Ÿ™ v°e˜Ô<Ø$*§O¡OÓ$5˜	ô )/×(8Ñ(8¸Ó(C×(JÑ(JÈ7Ó(S˜ð ˜GÑ$×+Ñ+¨W°mÐ,DÕEð%Fð( �9‰9Ð Ø"Ÿi™iˆG�F‰OØ×ÑÐ)Ø'+×'9Ñ'9ˆG�OÑ$Ø�=‰=Ð$Ø"&§-¡-ˆG�JÑØ�?‰?Ð&Ø$(§O¡OˆG�LÑ!Ø×ÑÐ*Ø(,×(;Ñ(;ˆGÐ$Ñ%Ø�?‰?Ð&Ø$(§O¡OˆG�LÑ!ñ ˜×)Ñ)Ð5Ø"×/Ñ/×5Ñ5Ó7ò %‘
��UØ$�˜’ð%ð ˆøô1 %ò !Ü(ØVÐWXÐVYÐZóà ð!ûð!ús   ÁA6GÇ	G ÇGÇG Úrespc                 óÜ   — d|vrt        |j                  dd«      «      ‚|d   }t        |d„ ¬«      }|D �cg c]*  }t        j                  |d   t        j
                  ¬«      ‘Œ, c}S c c}w )zþ
        Convert the response from the Jina AI API to a list of numpy arrays.

        Args:
            resp (Any): The response from the Jina AI API.

        Returns:
            Embeddings: A list of numpy arrays representing the embeddings.
        ÚdataÚdetailzUnknown errorc                 ó   — | d   S )NÚindexr   )r[   s    r   ú<lambda>z5JinaEmbeddingFunction._convert_resp.<locals>.<lambda>°   s
   € À!ÀGÁ*€ r   )r\   Ú	embedding)Údtype)ÚRuntimeErrorÚgetÚsortedÚnpÚarrayÚfloat32)r;   r_   r>   Úembeddings_dataÚsorted_embeddingsÚresults         r   Ú_convert_respz#JinaEmbeddingFunction._convert_resp    sq   € ð ˜ÑÜ˜tŸx™x¨°/ÓBÓCÐCàDHÈÁLˆô # ?Ñ8LÔMÐð
 ,ö
àô �H‰H�V˜KÑ(´·
±
Ö;ò
ð 	
ùò 
s   ·/A)c                 ó¶   — | j                  |d¬«      }| j                  j                  | j                  |d¬«      j	                  «       }| j                  |«      S )a‹  
        Get the embeddings for a list of texts.

        Args:
            input (Embeddable): A list of texts and/or images to get embeddings for.

        Returns:
            Embeddings: The embeddings for the texts.

        Example:
            >>> jina_ai_fn = JinaEmbeddingFunction(api_key_env_var="CHROMA_JINA_API_KEY")
            >>> input = ["Hello, world!", "How are you?"]
        F©r>   é<   ©ÚjsonÚtimeout©r^   r8   Úpostr6   rv   rq   ©r;   r=   rV   r_   s       r   Ú__call__zJinaEmbeddingFunction.__call__¸   sT   € ð ×%Ñ% e°eÐ%Ó<ˆð �}‰}×!Ñ! $§-¡-°gÀrÐ!ÓJ×OÑOÓQˆà×!Ñ! $Ó'Ð'r   c                 óº   — | j                  |d¬«      }| j                  j                  | j                  |d¬«      j	                  «       }| j                  |d¬«      S )NTrs   rt   ru   rx   rz   s       r   Úembed_queryz!JinaEmbeddingFunction.embed_queryÎ   sW   € Ø×%Ñ% e°dÐ%Ó;ˆð �}‰}×!Ñ! $§-¡-°gÀrÐ!ÓJ×OÑOÓQˆà×!Ñ! $°Ð!Ó6Ð6r   c                   ó   — y)NÚjinar   r   r   r   ÚnamezJinaEmbeddingFunction.nameÖ   s   € àr   c                  ó   — y)NÚcosiner   ©r;   s    r   Údefault_spacez#JinaEmbeddingFunction.default_spaceÚ   s   € Ør   c                 ó
   — g d¢S )N)r‚   Úl2Úipr   rƒ   s    r   Úsupported_spacesz&JinaEmbeddingFunction.supported_spacesÝ   s   € Ú%Ð%r   ÚconfigzEmbeddingFunction[Embeddable]c                 ór  — | j                  d«      }| j                  d«      }| j                  d«      }| j                  d«      }| j                  d«      }| j                  d«      }| j                  d«      }| j                  d«      }| j                  d	«      }	|�|€J d
«       ‚t        |||||||||	¬«	      S )Nr    r   r   r!   r"   r#   r$   r%   r&   zThis code should not be reached©	r    r   r   r!   r"   r#   r$   r%   r&   )ri   r   )
r‰   r    r   r   r!   r"   r#   r$   r%   r&   s
             r   Úbuild_from_configz'JinaEmbeddingFunction.build_from_configà   sÀ   € à Ÿ*™*Ð%6Ó7ˆØ—Z‘Z Ó-ˆ
Ø�z‰z˜&Ó!ˆØŸ
™
 ?Ó3ˆØ—:‘:˜jÓ)ˆØ—Z‘Z Ó-ˆ
ØŸ™Ð$4Ó5ˆØ—Z‘Z Ó-ˆ
Ø—z‘z .Ó1ˆàÐ" jÐ&8Ø;Ð;Ó;�5ä$Ø+Ø!ØØ'ØØ!Ø)Ø!Ø%ô

ð 
	
r   c           
      óÎ   — | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  dœ	S )Nr‹   r‹   rƒ   s    r   Ú
get_configz JinaEmbeddingFunction.get_configû   sS   € à#×3Ñ3ØŸ/™/Ø—I‘IØ!×/Ñ/ØŸ™ØŸ/™/Ø"×1Ñ1ØŸ/™/Ø ×-Ñ-ñ

ð 
	
r   Ú
old_configÚ
new_configc                 ó"   — d|v rt        d«      ‚y )Nr   zSThe model name cannot be changed after the embedding function has been initialized.)r-   )r;   r�   r�   s      r   Úvalidate_config_updatez,JinaEmbeddingFunction.validate_config_update  s!   € ð ˜:Ñ%ÜØeóð ð &r   c                 ó   — t        | d«       y)zÝ
        Validate the configuration using the JSON schema.

        Args:
            config: Configuration to validate

        Raises:
            ValidationError: If the configuration does not match the schema
        r   Nr	   )r‰   s    r   Úvalidate_configz%JinaEmbeddingFunction.validate_config  s   € ô 	˜v vÕ.r   )
Nzjina-embeddings-v2-base-enÚCHROMA_JINA_API_KEYNNNNNNN)F)r   r   r   Ú__doc__r   r   ÚboolÚintr   r<   r   r   r   r^   r   rq   r{   r}   Ústaticmethodr€   r   r„   r   rˆ   rŒ   rŽ   r’   r”   r   r   r   r   r      së  „ ñð "&Ø6Ø4Ø"Ø(,Ø#'Ø$(Ø(,Ø%)Ø26ñQ
à˜#‘ðQ
ð ðQ
ð ð	Q
ð
 �s‰mðQ
ð   ‘~ðQ
ð ˜4‘.ðQ
ð ˜S‘MðQ
ð ! ™ðQ
ð ˜T‘NðQ
ð ˜Ñ/óQ
ðf. Jð .¸$ð .À4ÈÈSÈÁ>ó .ñ`
 #ð 
°ð 
À*ó 
ð0(˜jð (¨Zó (ð,7 ð 7°
ó 7ð ð�#ò ó ðð˜uó ð& $ u¡+ó &ð ð
 $ s¨C x¡.ð 
Ð5Tò 
ó ð
ð4
˜D  c ™Nó 
ðØ˜s C˜x™.ðØ6:¸3À¸8±nðà	óð ð
/  S¨# X¡ð 
/°4ò 
/ó ñ
/r   r   )Úchromadb.api.typesr   r   r   r   r   r   Ú*chromadb.utils.embedding_functions.schemasr
   Útypingr   r   r   r   r   r   r4   Únumpyrk   r1   r.   rQ   rM   r   r   r   r   r   ú<module>rž      sM   ð÷÷ õ Nß >× >Û 	Û Û Û Û Û 	ô�iô ôD/Ð-¨jÑ9õ D/r   