Ë
    kQêj}  ã                   ó˜   — d dl Z d dlmZ d dl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 dd
lmZ  ed«       G d„ de«      «       Zy)é    N)Úcached_property)ÚListÚUnion)Ú
ConfigDicté   )Úattempt_import_or_raiseé   )ÚTextEmbeddingFunction)Úregister)ÚTEXTzbedrock-textc                   ó@  — e Zd ZU dZdZeed<   dZeed<   dZe	edf   ed<   dZ
e	edf   ed<   d	Zeed
<   dZeed<   dZeed<    eef¬«      Zd„ Zdedeee      fd„Zdedeee      fd„Zde	ee   ej0                  f   deee      fd„Zdedee   fd„Zed„ «       Zy)ÚBedRockTextaù  
    Parameters
    ----------
    name : str, default "amazon.titan-embed-text-v1"
        The model ID of the bedrock model to use. Supported models for are:
        - amazon.titan-embed-text-v1
        - cohere.embed-english-v3
        - cohere.embed-multilingual-v3
    region : str, default "us-east-1"
        Optional name of the AWS Region in which the service should be called.
    profile_name : str, default None
        Optional name of the AWS profile to use for calling the Bedrock service.
        If not specified, the default profile will be used.
    assumed_role : str, default None
        Optional ARN of an AWS IAM role to assume for calling the Bedrock service.
        If not specified, the current active credentials will be used.
    role_session_name : str, default "lancedb-embeddings"
        Optional name of the AWS IAM role session to use for calling the Bedrock
        service. If not specified, "lancedb-embeddings" name will be used.

    Examples
    --------
    import lancedb
    import pandas as pd
    from lancedb.pydantic import LanceModel, Vector

    model = get_registry().get("bedrock-text").create()

    class TextModel(LanceModel):
        text: str = model.SourceField()
        vector: Vector(model.ndims()) = model.VectorField()

    df = pd.DataFrame({"text": ["hello world", "goodbye world"]})
    db = lancedb.connect("tmp_path")
    tbl = db.create_table("test", schema=TextModel, mode="overwrite")

    tbl.add(df)

    rs = tbl.search("hello").limit(1).to_pandas()
    úamazon.titan-embed-text-v1Únamez	us-east-1ÚregionNÚassumed_roleÚprofile_namezlancedb-embeddingsÚrole_session_nameÚsearch_documentÚsource_input_typeÚsearch_queryÚquery_input_type)Úignored_typesc                 ór   — | j                   dk(  ry| j                   dv ryt        d| j                   › d�«      ‚)Nr   i   )zamazon.titan-embed-text-v2:0zcohere.embed-english-v3zcohere.embed-multilingual-v3i   zModel z not supported)r   Ú
ValueError)Úselfs    ú_/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/lancedb/embeddings/bedrock.pyÚndimszBedRockText.ndimsG   sB   € ð �9‰9Ð4Ò4ØØ�Y‰Yð 
ñ 
ð ä˜v d§i¡i [°Ð?Ó@Ð@ó    ÚqueryÚreturnc                 ó<   — | j                  || j                  ¬«      S )N)Ú
input_type)Úcompute_source_embeddingsr   )r   r    ÚargsÚkwargss       r   Úcompute_query_embeddingsz$BedRockText.compute_query_embeddingsV   s    € ð ×-Ñ-¨eÀ×@UÑ@UÐ-ÓVÐVr   Útextsc                 óŽ   — | j                  |«      }|j                  d«      xs | j                  |d<    | j                  |fi |¤ŽS )Nr#   )Úsanitize_inputÚgetr   Úgenerate_embeddings)r   r(   r%   r&   s       r   r$   z%BedRockText.compute_source_embeddings[   sJ   € ð ×#Ñ# EÓ*ˆà%Ÿz™z¨,Ó7ÒQ¸4×;QÑ;Qˆˆ|Ñà'ˆt×'Ñ'¨Ñ8°Ñ8Ð8r   c                 óf   — g }|D ])  } | j                   |g|¢­i |¤Ž}|j                  |«       Œ+ |S )a  
        Get the embeddings for the given texts

        Parameters
        ----------
        texts: list[str] or np.ndarray (of str)
            The texts to embed

        Returns
        -------
        list[list[float]]
            The embeddings for the given texts
        )Ú_generate_embeddingÚappend)r   r(   r%   r&   ÚresultsÚtextÚresponses          r   r,   zBedRockText.generate_embeddingsd   sG   € ð  ˆØò 	%ˆDØ/�t×/Ñ/°ÐF°tÒF¸vÑFˆHØ�N‰N˜8Õ$ð	%ð ˆr   r1   c                 ó
  — | j                   j                  d«      d   }i |¥}|dk(  r|g|d<   n|j                  dd«       ||d<   t        j                  |«      }	 | j
                  j                  || j                   dd¬	«      }t        j                  |j                  d
«      j                  «       «      }|dk(  r|j                  d«      d   S |j                  d«      S # t        $ r}	d}
t        d|	› d|
› �«      ‚d}	~	ww xY w)zõ
        Get the embeddings for the given texts

        Parameters
        ----------
        texts: str
            The texts to embed

        Returns
        -------
        list[float]
            The embeddings for the given texts
        ú.r   Úcoherer(   r#   NÚ	inputTextzapplication/json)ÚbodyÚmodelIdÚacceptÚcontentTyper7   Ú
embeddingsÚ	embeddinga†  
                boto3 client failed to invoke the bedrock API. In case of
                AWS credentials error:
                    - Please check your AWS credentials and ensure that you have access.
                    You can set up aws credentials using `aws configure` command and
                    verify by running `aws sts get-caller-identity` in your terminal.
                zError raised by boto3 client: z. 
 )r   ÚsplitÚpopÚjsonÚdumpsÚclientÚinvoke_modelÚloadsr+   ÚreadÚ	Exceptionr   )r   r1   r%   r&   ÚproviderÚ
input_bodyr7   r2   Úresponse_bodyÚeÚhelp_txts              r   r.   zBedRockText._generate_embeddingz   s  € ð —9‘9—?‘? 3Ó'¨Ñ*ˆØ˜�Zˆ
Ø�xÒØ#' &ˆJ�wÒð �N‰N˜<¨Ô.Ø&*ˆJ�{Ñ#Ü�z‰z˜*Ó%ˆð	Rà—{‘{×/Ñ/ØØŸ	™	Ø)Ø.ð	 0ó ˆHô !ŸJ™J x§|¡|°FÓ';×'@Ñ'@Ó'BÓCˆMØ˜8Ò#Ø$×(Ñ(¨Ó6°qÑ9Ð9ð %×(Ñ(¨Ó5Ð5øÜò 	RðˆHô Ð=¸a¸SÀÀhÀZÐPÓQÐQûð	Rús   ÁA3C! ÃC! Ã!	DÃ*C=Ã=Dc                 óF  — t        d«      }t        d«      }d| j                  i}i |¥}| j                  r| j                  |d<   |j                  j	                  | j                  dddœ¬«      }| j                  r |j
                  di |¤Žn|j                  «       }| j                  rb|j                  d	«      }|j                  t        | j                  «      | j                  ¬
«      }|d   d   |d<   |d   d   |d<   |d   d   |d<   d}	 |j                  d|	|dœ|¤Ž}
|
S )z§Create a boto3 client for Amazon Bedrock service

        Returns
        -------
        boto3.client
            The boto3 client for Amazon Bedrock service
        ÚbotocoreÚboto3Úregion_namer   r   Ústandard)Úmax_attemptsÚmode)rN   ÚretriesÚsts)ÚRoleArnÚRoleSessionNameÚCredentialsÚAccessKeyIdÚaws_access_key_idÚSecretAccessKeyÚaws_secret_access_keyÚSessionTokenÚaws_session_tokenzbedrock-runtime)Úservice_nameÚconfig© )r   r   r   r^   ÚConfigÚSessionr   rA   Úassume_roleÚstrr   )r   rL   rM   Úsession_kwargsÚclient_kwargsÚretry_configÚsessionrS   r2   r]   Úbedrock_clients              r   rA   zBedRockText.client­   sT  € ô +¨:Ó6ˆÜ'¨Ó0ˆà'¨¯©Ð5ˆØ*˜>Ð*ˆà×ÒØ-1×->Ñ->ˆN˜>Ñ*à—‘×-Ñ-ØŸ™à !Ø"ñð .ó 
ˆð 04×/@Ò/@ˆMˆE�M‰MÑ+˜NÒ+ÀeÇmÁmÃoð 	ð ×ÒØ—.‘. Ó'ˆCØ—‘Ü˜D×-Ñ-Ó.Ø $× 6Ñ 6ð 'ó ˆHð 2:¸-Ñ1HÈÑ1WˆMÐ-Ñ.Ø5=¸mÑ5LØ!ñ6ˆMÐ1Ñ2ð 2:¸-Ñ1HÈÑ1XˆMÐ-Ñ.à(ˆà'˜Ÿ™ð 
Ø%¨lñ
Ø>Kñ
ˆð Ðr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rc   Ú__annotations__r   r   r   r   r   r   r   r   r   Úmodel_configr   r   Úfloatr'   r   r$   ÚnpÚndarrayr,   r.   rA   r_   r   r   r   r      s  … ñ'ðR -€Dˆ#Ó,Ø€FˆCÓØ%)€L�%˜˜T˜	Ñ"Ó)Ø%)€L�%˜˜T˜	Ñ"Ó)Ø1Ð�sÓ1Ø.Ð�sÓ.Ø*Ð�cÓ*á¨_Ð,>Ô?€LòAðWØðWà	ˆd�5‰kÑ	óWð
9Øð9à	ˆd�5‰kÑ	ó9ðØ˜4 ™9 b§j¡jÐ0Ñ1ðà	ˆd�5‰kÑ	óð,1R¨ð 1RÀÀeÁó 1Rðf ñ-ó ñ-r   r   )r?   Ú	functoolsr   Útypingr   r   Únumpyrp   Úpydanticr   Úutilr   Úbaser
   Úregistryr   Úutilsr   r   r_   r   r   ú<module>rz      sF   ðó
 Ý %ß ã Ý å *Ý 'Ý Ý ñ 
ˆ.ÓôHÐ'ó Hó ñHr   