§
    šŠtj÷  ã                  óÈ   — d dl mZ d dlZd dlZd dl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 dd„Z eddd¬¦  «         G d„ dee¦  «        ¦   «         ZdS )é    )ÚannotationsN)ÚAnyÚDictÚListÚOptional)Ú
deprecated)Ú
Embeddings)Úpre_init)Ú	BaseModelÚurlÚstrÚheadersúOptional[dict]Úpayloadr   ÚreturnÚboolc                óØ   — 	 t          j        d| ||¬¦  «        }|j        dk    rdS t          d|j        › �¦  «        ‚# t           j        j        $ r}t          d|› �¦  «        ‚d}~ww xY w)a‚  
    Check if an endpoint is live by sending a GET request to the specified URL.

    Args:
        url (str): The URL of the endpoint to check.

    Returns:
        bool: True if the endpoint is live (status code 200), False otherwise.

    Raises:
        Exception: If the endpoint returns a non-successful status code or if there is
            an error querying the endpoint.
    ÚPOST©r   ÚdataéÈ   Tz0Endpoint returned a non-successful status code: zError querying the endpoint: N)ÚrequestsÚrequestÚstatus_codeÚ	ExceptionÚ
exceptionsÚRequestException)r   r   r   ÚresponseÚes        úa/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/embeddings/nemo.pyÚis_endpoint_liver!      sœ   € ð=ÝÔ# F¨C¸ÀwÐOÑOÔOˆð Ô 3Ò&Ð&Ø�4õ ð*ØÔ'ð*ð *ñô ð øõ ÔÔ/ð =ð =ð =åÐ;¸Ð;Ð;Ñ<Ô<Ð<øøøøð=øøøs   ‚#> §> ¾A)ÁA$Á$A)z0.0.37z1.0.0z”Directly instantiating a NeMoEmbeddings from langchain-community is deprecated. Please use langchain-nvidia-ai-endpoints NVIDIAEmbeddings interface.)ÚsinceÚremovalÚmessagec                  ó†   — e Zd ZU dZdZded<   dZded<   dZded	<   edd„¦   «         Z	dd„Z
d d„Zd!d„Zd"d„Zd"d„Zd#d„ZdS )$ÚNeMoEmbeddingszNeMo embedding models.é   ÚintÚ
batch_sizezNV-Embed-QA-003r   Úmodelz#http://localhost:8088/v1/embeddingsÚapi_endpoint_urlÚvaluesr   r   c                ó€   — |d         }|d         }ddi}t          j        d|ddœ¦  «        }t          |||¦  «         |S )zHValidate that the end point is alive using the values that are provided.r+   r*   úContent-Typeúapplication/jsonzHello WorldÚquery©Úinputr*   Ú
input_type)ÚjsonÚdumpsr!   )Úclsr,   r   r*   r   r   s         r    Úvalidate_environmentz#NeMoEmbeddings.validate_environment>   sb   € ð Ð'Ô(ˆØ�w”ˆð "Ð#5Ð6ˆÝ”*à&ØØ%ðð ñ
ô 
ˆõ 	˜˜g wÑ/Ô/Ð/àˆó    Úsessionr   Útextr3   úList[float]c              ƒ  ó`  K  — ddi}|                      | j        || j        |dœ|¬¦  «        4 ƒd{V —†	 }|                     ¦   «          |                     ¦   «         ƒ d{V —†}t          j        |¦  «        }|d         d         d         cddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   dS )	z™Async call out to embedding endpoint.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r.   r/   r1   )r4   r   Nr   r   Ú	embedding)Úpostr+   r*   Úraise_for_statusr:   r4   Úloads)Úselfr9   r:   r3   r   r   Úanswers          r    Ú_aembedding_funczNeMoEmbeddings._aembedding_funcS   sX  è è € ð "Ð#5Ð6ˆà—<’<ØÔ!Ø¨$¬*ÀJÐOÐOØð  ñ 
ô 
ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð Ø×%Ò%Ñ'Ô'Ð'Ø#Ÿ=š=™?œ?Ð*Ð*Ð*Ð*Ð*Ð*ˆFÝ”Z Ñ'Ô'ˆFØ˜&”> !Ô$ [Ô1ð	2ð 	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð 	2ð 	2s   ´ABÂ
B'Â*B'c                óÜ   — t          j        || j        |dœ¦  «        }ddi}t          j        d| j        ||¬¦  «        }t          j        |j        ¦  «        }|d         d         d         }|S )	zœCall out to Cohere's embedding endpoint.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r1   r.   r/   r   r   r   r   r=   )r4   r5   r*   r   r   r+   r@   r:   )rA   r:   r3   r   r   r   Úresponse_jsonr=   s           r    Ú_embedding_funczNeMoEmbeddings._embedding_funck   s‡   € õ ”*àØœØ(ðð ñ
ô 
ˆð "Ð#5Ð6ˆåÔ#Ø�DÔ)°7Àð
ñ 
ô 
ˆõ œ
 8¤=Ñ1Ô1ˆØ! &Ô)¨!Ô,¨[Ô9ˆ	àÐr8   Ú	documentsú	List[str]úList[List[float]]c                ó    ‡ — ˆ fd„|D ¦   «         S )z«Embed a list of document texts.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        c                ó>   •— g | ]}‰                      |d ¬¦  «        ‘ŒS )Úpassage©r3   ©rF   )Ú.0r:   rA   s     €r    ú
<listcomp>z2NeMoEmbeddings.embed_documents.<locals>.<listcomp>�   s,   ø€ ÐWÐWÐWÀT�×$Ò$ T°iÐ$Ñ@Ô@ÐWÐWÐWr8   © )rA   rG   s   ` r    Úembed_documentszNeMoEmbeddings.embed_documents†   s    ø€ ð XÐWÐWÐWÈYÐWÑWÔWÐWr8   c                ó0   — |                       |d¬¦  «        S )Nr0   rM   rN   )rA   r:   s     r    Úembed_queryzNeMoEmbeddings.embed_query‘   s   € Ø×#Ò# D°WÐ#Ñ=Ô=Ð=r8   c              ƒ  óÂ   K  — t          j        ¦   «         4 ƒd{V —†}|                      ||d¦  «        ƒ d{V —†}|cddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   dS )z¸Call out to NeMo's embedding endpoint async for embedding query text.

        Args:
            text: The text to embed.

        Returns:
            Embedding for the text.
        NrL   )ÚaiohttpÚClientSessionrC   )rA   r:   r9   r=   s       r    Úaembed_queryzNeMoEmbeddings.aembed_query”   sþ   è è € õ Ô(Ñ*Ô*ð 	ð 	ð 	ð 	ð 	ð 	ð 	¨gØ"×3Ò3°G¸TÀ9ÑMÔMÐMÐMÐMÐMÐMÐMˆIØð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   œAÁ
AÁAÚtextsc              ƒ  óx  ‡ ‡K  — g }t          j        ¦   «         4 ƒd{V —†Št          dt          |¦  «        ‰ j        ¦  «        D ]Q}|||‰ j        z   …         }|D ]:}ˆ ˆfd„|D ¦   «         }t          j        |Ž ƒ d{V —†}|                     |¦  «         Œ;ŒR	 ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   |S )zÒCall out to NeMo's embedding endpoint async for embedding search docs.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        Nr   c                ó>   •— g | ]}‰                      ‰|d ¦  «        ‘ŒS )rL   )rC   )rO   r:   rA   r9   s     €€r    rP   z3NeMoEmbeddings.aembed_documents.<locals>.<listcomp>³   s;   ø€ ð ð ð à ð ×-Ò-¨g°t¸YÑGÔGðð ð r8   )rV   rW   ÚrangeÚlenr)   ÚasyncioÚgatherÚextend)	rA   rY   Ú
embeddingsÚbatchÚ
text_batchr:   ÚtasksÚbatch_resultsr9   s	   `       @r    Úaembed_documentszNeMoEmbeddings.aembed_documents¢   sŠ  øøè è € ð ˆ
åÔ(Ñ*Ô*ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5¨gÝ˜q¥# e¡*¤*¨d¬oÑ>Ô>ð 5ð 5�Ø" 5¨5°4´?Ñ+BÐ#BÔC�
à&ð 5ð 5�Dðð ð ð ð à$.ðñ ô �Eõ +2¬.¸%Ð*@Ð$@Ð$@Ð$@Ð$@Ð$@Ð$@�Mð ×%Ò% mÑ4Ô4Ð4Ð4ð5ð5ð	5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð" Ðs    A6B)Â)
B3Â6B3N)r,   r   r   r   )r9   r   r:   r   r3   r   r   r;   )r:   r   r3   r   r   r;   )rG   rH   r   rI   )r:   r   r   r;   )rY   rH   r   rI   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   Ú__annotations__r*   r+   r
   r7   rC   rF   rR   rT   rX   rf   rQ   r8   r    r&   r&   .   sì   € € € € € € ð !Ð à€JÐÐÐÑØ"€EÐ"Ð"Ð"Ñ"ØAÐÐAÐAÐAÑAàðð ð ñ „Xðð(2ð 2ð 2ð 2ð0ð ð ð ð6	Xð 	Xð 	Xð 	Xð>ð >ð >ð >ðð ð ð ðð ð ð ð ð r8   r&   )r   r   r   r   r   r   r   r   )Ú
__future__r   r^   r4   Útypingr   r   r   r   rV   r   Úlangchain_core._api.deprecationr   Úlangchain_core.embeddingsr	   Úlangchain_core.utilsr
   Úpydanticr   r!   r&   rQ   r8   r    ú<module>rr      s&  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à €€€Ø €€€Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð ð=ð =ð =ð =ð> €Ø
Øð	ð	ñ ô ðGð Gð Gð Gð G�Y 
ñ Gô Gñô ðGð Gð Gr8   