§
    šŠtjÅ  ã                   óÈ   — d dl 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
mZ d dlmZ d dlmZ d dlmZmZmZ d dlmZ  edd	d
¬¦  «         G d„ dee¦  «        ¦   «         ZdS )é    N)ÚAnyÚDictÚListÚOptional)Ú
deprecated)Ú
Embeddings)Úrun_in_executor)Ú	BaseModelÚ
ConfigDictÚmodel_validator)ÚSelfz0.2.11z1.0zlangchain_aws.BedrockEmbeddings)ÚsinceÚremovalÚalternative_importc                   óä  — e Zd ZU dZ	 dZeed<   	 dZee	         ed<   	 dZ
ee	         ed<   	 dZe	ed<   	 dZee         ed<   	 dZee	         ed	<   	 d
Zeed<   	  edd¬¦  «        Z ed¬¦  «        defd„¦   «         Zde	dee         fd„Zdee         dee         fd„Zdee	         deee                  fd„Zde	dee         fd„Zde	dee         fd„Zdee	         deee                  fd„ZdS )ÚBedrockEmbeddingsa×  Bedrock embedding models.

    To authenticate, the AWS client uses the following methods to
    automatically load credentials:
    https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html

    If a specific credential profile should be used, you must pass
    the name of the profile from the ~/.aws/credentials file that is to be used.

    Make sure the credentials / roles used have the required policies to
    access the Bedrock service.
    NÚclientÚregion_nameÚcredentials_profile_namezamazon.titan-embed-text-v1Úmodel_idÚmodel_kwargsÚendpoint_urlFÚ	normalizeÚforbid© )ÚextraÚprotected_namespacesÚafter)ÚmodeÚreturnc                 óx  — | j         �| S 	 ddl}| j        �|                     | j        ¬¦  «        }n|                     ¦   «         }i }| j        r
| j        |d<   | j        r
| j        |d<    |j         d	i |¤Ž| _         n=# t          $ r t          d¦  «        ‚t          $ r}t          d|› �¦  «        |‚d}~ww xY w| S )
zJValidate that AWS credentials to and python package exists in environment.Nr   )Úprofile_namer   r   úbedrock-runtimezRCould not import boto3 python package. Please install it with `pip install boto3`.z’Could not load credentials to authenticate with AWS client. Please check that credentials in the specified profile name are valid. Bedrock error: )r#   )	r   Úboto3r   ÚSessionr   r   ÚImportErrorÚ	ExceptionÚ
ValueError)Úselfr$   ÚsessionÚclient_paramsÚes        úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/embeddings/bedrock.pyÚvalidate_environmentz&BedrockEmbeddings.validate_environmentP   s  € ð Œ;Ð"ØˆKð	ØˆLˆLˆLàÔ,Ð8ØŸ-š-°TÔ5R˜-ÑSÔS��ð  Ÿ-š-™/œ/�àˆMØÔð @Ø/3Ô/?�˜mÑ,àÔ ð BØ04Ô0A�˜nÑ-à(˜'œ.ÐLÐL¸mÐLÐLˆDŒKˆKøåð 	ð 	ð 	Ýð>ñô ð õ ð 	ð 	ð 	Ýð>à:;ð>ð >ñô ð ð	øøøøð	øøøð ˆs   ‹A1A= Á="B7ÂB2Â2B7Útextc                 óŒ  — |                      t          j        d¦  «        }| j                             d¦  «        d         }| j        pi }i |¥}|dk    r"d|                     ¦   «         vrd|d<   |g|d<   n||d<   t          j        |¦  «        }	 | j	         
                    || j        d	d	¬
¦  «        }t          j        |                     d¦  «                             ¦   «         ¦  «        }|dk    r|                     d¦  «        d         S |                     d¦  «        S # t          $ r}t          d|› �¦  «        ‚d}~ww xY w)z'Call out to Bedrock embedding endpoint.ú ú.r   ÚcohereÚ
input_typeÚsearch_documentÚtextsÚ	inputTextzapplication/json)ÚbodyÚmodelIdÚacceptÚcontentTyper8   Ú
embeddingsÚ	embeddingz$Error raised by inference endpoint: N)ÚreplaceÚosÚlinesepr   Úsplitr   ÚkeysÚjsonÚdumpsr   Úinvoke_modelÚloadsÚgetÚreadr'   r(   )	r)   r/   ÚproviderÚ_model_kwargsÚ
input_bodyr8   ÚresponseÚresponse_bodyr,   s	            r-   Ú_embedding_funcz!BedrockEmbeddings._embedding_funcw   sm  € ð �|Š|�BœJ¨Ñ,Ô,ˆð ”=×&Ò& sÑ+Ô+¨AÔ.ˆØÔ)Ð/¨RˆØ&˜Ð&ˆ
Ø�xÒÐØ :§?¢?Ñ#4Ô#4Ð4Ð4Ø+<�
˜<Ñ(Ø#' &ˆJ�wÑÐð '+ˆJ�{Ñ#ÝŒz˜*Ñ%Ô%ˆð	Ià”{×/Ò/ØØœØ)Ø.ð	 0ñ ô ˆHõ !œJ x§|¢|°FÑ';Ô';×'@Ò'@Ñ'BÔ'BÑCÔCˆMØ˜8Ò#Ð#Ø$×(Ò(¨Ñ6Ô6°qÔ9Ð9ð %×(Ò(¨Ñ5Ô5Ð5øÝð 	Ið 	Ið 	IÝÐGÀAÐGÐGÑHÔHÐHøøøøð	Iøøøs   ÂA<D" ÄD" Ä"
EÄ,D>Ä>Er<   c                 ó–   — t          j        |¦  «        }|t           j                             |¦  «        z  }|                     ¦   «         S )z)Normalize the embedding to a unit vector.)ÚnpÚarrayÚlinalgÚnormÚtolist)r)   r<   ÚembÚnorm_embs       r-   Ú_normalize_vectorz#BedrockEmbeddings._normalize_vectorœ   s9   € åŒh�zÑ"Ô"ˆØ�œŸš¨Ñ,Ô,Ñ,ˆØ�ŠÑ Ô Ð ó    r6   c                 ó    — g }|D ]H}|                       |¦  «        }| j        r|                      |¦  «        }|                     |¦  «         ŒI|S )z¸Compute doc embeddings using a Bedrock model.

        Args:
            texts: The list of texts to embed

        Returns:
            List of embeddings, one for each text.
        )rN   r   rW   Úappend)r)   r6   Úresultsr/   rL   s        r-   Úembed_documentsz!BedrockEmbeddings.embed_documents¢   sb   € ð ˆØð 	%ð 	%ˆDØ×+Ò+¨DÑ1Ô1ˆHàŒ~ð <Ø×1Ò1°(Ñ;Ô;�à�NŠN˜8Ñ$Ô$Ð$Ð$àˆrX   c                 óh   — |                       |¦  «        }| j        r|                      |¦  «        S |S )z£Compute query embeddings using a Bedrock model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        )rN   r   rW   )r)   r/   r=   s      r-   Úembed_queryzBedrockEmbeddings.embed_query¶   s;   € ð ×(Ò(¨Ñ.Ô.ˆ	àŒ>ð 	5Ø×)Ò)¨)Ñ4Ô4Ð4àÐrX   c              ƒ   ó>   K  — t          d| j        |¦  «        ƒ d{V —†S )z°Asynchronous compute query embeddings using a Bedrock model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        N)r	   r^   )r)   r/   s     r-   Úaembed_queryzBedrockEmbeddings.aembed_queryÆ   s/   è è € õ % T¨4Ô+;¸TÑBÔBÐBÐBÐBÐBÐBÐBÐBrX   c              ƒ   óf   ‡ K  — t          j        ˆ fd„|D ¦   «         Ž ƒ d{V —†}t          |¦  «        S )zÅAsynchronous compute doc embeddings using a Bedrock model.

        Args:
            texts: The list of texts to embed

        Returns:
            List of embeddings, one for each text.
        c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   )r`   )Ú.0r/   r)   s     €r-   ú
<listcomp>z6BedrockEmbeddings.aembed_documents.<locals>.<listcomp>Ü   s'   ø€ Ð'RÐ'RÐ'RÀD¨×(9Ò(9¸$Ñ(?Ô(?Ð'RÐ'RÐ'RrX   N)ÚasyncioÚgatherÚlist)r)   r6   Úresults   `  r-   Úaembed_documentsz"BedrockEmbeddings.aembed_documentsÒ   sH   øè è € õ ”~Ð'RÐ'RÐ'RÐ'RÈEÐ'RÑ'RÔ'RÐSÐSÐSÐSÐSÐSÐSˆå�F‰|Œ|ÐrX   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__annotations__r   r   Ústrr   r   r   r   r   r   Úboolr   Úmodel_configr   r   r.   r   ÚfloatrN   rW   r\   r^   r`   ri   r   rX   r-   r   r      s  € € € € € € ðð ðð" €FˆCÐÐÑØØ!%€K�˜#”Ð%Ð%Ñ%ðð /3Ð˜h sœmÐ2Ð2Ñ2ðð 1€HˆcÐ0Ð0Ñ0ðLð $(€L�(˜4”.Ð'Ð'Ñ'Ø1à"&€L�(˜3”-Ð&Ð&Ñ&ØCà€IˆtÐÐÑØEà�: HÀ2ÐFÑFÔF€Là€_˜'Ð"Ñ"Ô"ð$ dð $ð $ð $ñ #Ô"ð$ðL#I Cð #I¨D°¬Kð #Ið #Ið #Ið #IðJ!¨D°¬Kð !¸DÀ¼Kð !ð !ð !ð !ð T¨#¤Yð °4¸¸U¼Ô3Dð ð ð ð ð( ð ¨¨U¬ð ð ð ð ð 
C sð 
C¨t°E¬{ð 
Cð 
Cð 
Cð 
Cð¨D°¬Ið ¸$¸tÀE¼{Ô:Kð ð ð ð ð ð rX   r   )re   rC   r?   Útypingr   r   r   r   ÚnumpyrP   Úlangchain_core._api.deprecationr   Úlangchain_core.embeddingsr   Úlangchain_core.runnables.configr	   Úpydanticr
   r   r   Útyping_extensionsr   r   r   rX   r-   ú<module>rz      s  ðØ €€€Ø €€€Ø 	€	€	€	Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø "Ð "Ð "Ð "Ð "Ð "ð €Ø
ØØ8ðñ ô ð
Kð Kð Kð Kð K˜	 :ñ Kô Kñô ð
Kð Kð KrX   