§
    æ˜ºh'  ã                   ó€   — 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m	Z	 d dl
mZmZmZ d dlmZ  G d„ dee	¦  «        ZdS )é    N)ÚAnyÚDictÚListÚOptional)Ú
Embeddings)Ú	BaseModelÚExtraÚroot_validator)Úrun_in_executorc                   ó¨  — e Zd ZU 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	<   	  G d
„ d¦  «        Z e¦   «         dedefd„¦   «         Zd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.
    ÚclientNÚregion_nameÚcredentials_profile_namezamazon.titan-embed-text-v1Úmodel_idÚmodel_kwargsÚendpoint_urlc                   ó    — e Zd ZdZej        ZdS )úBedrockEmbeddings.Configz'Configuration for this pydantic object.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   ÚforbidÚextra© ó    ún/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/embeddings/bedrock.pyÚConfigr   C   s   € € € € € Ø5Ð5à”ˆˆˆr   r   ÚvaluesÚreturnc                 ó|  — |d         �|S 	 ddl }|d         �|                     |d         ¬¦  «        }n|                     ¦   «         }i }|d         r|d         |d<   |d         r|d         |d<    |j        di |¤Ž|d<   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.r   Nr   r   )Ú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.)r$   )Úboto3ÚSessionr   ÚImportErrorÚModuleNotFoundErrorÚ	ExceptionÚ
ValueError)Úclsr    r%   ÚsessionÚclient_paramsÚes         r   Úvalidate_environmentz&BedrockEmbeddings.validate_environmentH   s#  € ð �(ÔÐ'ØˆMð	ØˆLˆLˆLàÐ0Ô1Ð=ØŸ-š-°VÐ<VÔ5W˜-ÑXÔX��ð  Ÿ-š-™/œ/�àˆMØ�mÔ$ð EØ/5°mÔ/D�˜mÑ,à�nÔ%ð GØ06°~Ô0F�˜nÑ-à-˜wœ~ÐQÐQÀ=ÐQÐQˆF�8ÑÐøåð 	ð 	ð 	Ý%ð>ñô ð õ ð 	ð 	ð 	Ýð*ñô ð ð	øøøøð	øøøð ˆs   ŒA5B Â"B9Â$B4Â4B9Ú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ÚcontentTyper9   Ú
embeddingsÚ	embeddingz$Error raised by inference endpoint: N)ÚreplaceÚosÚlinesepr   Úsplitr   ÚkeysÚjsonÚdumpsr   Úinvoke_modelÚloadsÚgetÚreadr)   r*   )	Úselfr0   ÚproviderÚ_model_kwargsÚ
input_bodyr9   ÚresponseÚresponse_bodyr.   s	            r   Ú_embedding_funcz!BedrockEmbeddings._embedding_funco   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r7   c                 óh   — g }|D ],}|                       |¦  «        }|                     |¦  «         Œ-|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.
        )rP   Úappend)rJ   r7   Úresultsr0   rN   s        r   Úembed_documentsz!BedrockEmbeddings.embed_documents”   sE   € ð ˆØð 	%ð 	%ˆDØ×+Ò+¨DÑ1Ô1ˆHØ�NŠN˜8Ñ$Ô$Ð$Ð$Øˆr   c                 ó,   — |                       |¦  «        S )z£Compute query embeddings using a Bedrock model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        )rP   ©rJ   r0   s     r   Úembed_queryzBedrockEmbeddings.embed_query£   s   € ð ×#Ò# DÑ)Ô)Ð)r   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   rW   rV   s     r   Úaembed_queryzBedrockEmbeddings.aembed_query®   s/   è è € õ % T¨4Ô+;¸TÑBÔBÐBÐBÐBÐBÐBÐBÐBr   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   )rY   )Ú.0r0   rJ   s     €r   ú
<listcomp>z6BedrockEmbeddings.aembed_documents.<locals>.<listcomp>Ä   s'   ø€ Ð'RÐ'RÐ'RÀD¨×(9Ò(9¸$Ñ(?Ô(?Ð'RÐ'RÐ'Rr   N)ÚasyncioÚgatherÚlist)rJ   r7   Úresults   `  r   Úaembed_documentsz"BedrockEmbeddings.aembed_documentsº   sH   øè è € õ ”~Ð'RÐ'RÐ'RÐ'RÈEÐ'RÑ'RÔ'RÐSÐSÐSÐSÐSÐSÐSˆå�F‰|Œ|Ðr   )r   r   r   r   r   Ú__annotations__r   r   Ústrr   r   r   r   r   r   r
   r/   r   ÚfloatrP   rT   rW   rY   rb   r   r   r   r   r      sí  € € € € € € ðð ðð" €K€K�KØØ!%€K�˜#”Ð%Ð%Ñ%ðð /3Ð˜h sœmÐ2Ð2Ñ2ðð 1€HˆcÐ0Ð0Ñ0ðLð $(€L�(˜4”.Ð'Ð'Ñ'Ø1à"&€L�(˜3”-Ð&Ð&Ñ&ØCðð ð ð ð ñ ô ð ð
 €^ÑÔð$¨$ð $°4ð $ð $ð $ñ Ôð$ðL#I Cð #I¨D°¬Kð #Ið #Ið #Ið #IðJ T¨#¤Yð °4¸¸U¼Ô3Dð ð ð ð ð	* ð 	*¨¨U¬ð 	*ð 	*ð 	*ð 	*ð
C sð 
C¨t°E¬{ð 
Cð 
Cð 
Cð 
Cð¨D°¬Ið ¸$¸tÀE¼{Ô:Kð ð ð ð ð ð r   r   )r^   rD   r@   Útypingr   r   r   r   Úlangchain_core.embeddingsr   Úlangchain_core.pydantic_v1r   r	   r
   Úlangchain_core.runnables.configr   r   r   r   r   ú<module>rj      sÆ   ðØ €€€Ø €€€Ø 	€	€	€	Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ ;Ð ;Ð ;Ð ;Ð ;Ð ;ð{ð {ð {ð {ð {˜	 :ñ {ô {ð {ð {ð {r   