§
    æ˜ºh¯  ã                   óŒ   — d dl Z d dl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  e j        e¦  «        Z G d„ dee¦  «        ZdS )é    N)ÚDictÚListÚOptional)Ú
Embeddings)Ú	BaseModelÚExtraÚroot_validator)Úget_from_dict_or_envc                   ód  — e Zd ZU dZdZee         ed<   	 dZee         ed<   	 dZ	ee         ed<   	 dZ
ee         ed<   	 dZee         ed<   	 dZee         ed<   	 d	Zeed
<    G d„ d¦  «        Z e¦   «         dedefd„¦   «         Zdee         deee                  fd„Zdedee         fd„ZdS )ÚClarifaiEmbeddingsaÜ  Clarifai embedding models.

    To use, you should have the ``clarifai`` python package installed, and the
    environment variable ``CLARIFAI_PAT`` set with your personal access token or pass it
    as a named parameter to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import ClarifaiEmbeddings
            clarifai = ClarifaiEmbeddings(user_id=USER_ID,
                                          app_id=APP_ID,
                                          model_id=MODEL_ID)
                             (or)
            Example_URL = "https://clarifai.com/clarifai/main/models/BAAI-bge-base-en-v15"
            clarifai = ClarifaiEmbeddings(model_url=EXAMPLE_URL)
    NÚ	model_urlÚmodel_idÚmodel_version_idÚapp_idÚuser_idÚpatzhttps://api.clarifai.comÚapi_basec                   ó    — e Zd ZdZej        ZdS )úClarifaiEmbeddings.Configz'Configuration for this pydantic object.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚforbidÚextra© ó    úo/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/embeddings/clarifai.pyÚConfigr   ,   s   € € € € € Ø5Ð5à”ˆˆˆr   r   ÚvaluesÚreturnc                 óP  — t          |dd¦  «        |d<   |                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|�|�t          d¦  «        ‚|€|€t          d	¦  «        ‚|€|�|�|€t          d
¦  «        ‚|S )zuValidate that we have all required info to access Clarifai
        platform and python package exists in environment.r   ÚCLARIFAI_PATr   r   r   r   Nz6Please provide either model_url or model_id, not both.z,Please provide one of model_url or model_id.z$Please provide a user_id and app_id.)r
   ÚgetÚ
ValueError)Úclsr    r   r   r   r   s         r   Úvalidate_environmentz'ClarifaiEmbeddings.validate_environment1   s¹   € õ
 -¨V°U¸NÑKÔKˆˆu‰Ø—*’*˜YÑ'Ô'ˆØ—’˜HÑ%Ô%ˆØ—:’:˜jÑ)Ô)ˆØ—J’J˜{Ñ+Ô+ˆ	àÐ  XÐ%9ÝÐUÑVÔVÐVàÐ Ð!1ÝÐKÑLÔLÐLàÐ Ð!5Øˆ & .Ý Ð!GÑHÔHÐHàˆr   Útextsc                 óz  ‡— 	 ddl m} ddlm} n# t          $ r t	          d¦  «        ‚w xY w| j        �| j        }| j        � || j        |¬¦  «        }n || j        | j        | j	        |¬¦  «        } ||¬¦  «        Šd	}g }	 t          dt          |¦  «        |¦  «        D ]c}||||z   …         }	ˆfd
„t          |	¦  «        D ¦   «         }
|                     |
¦  «        }|                     d„ |j        D ¦   «         ¦  «         Œdn4# t           $ r'}t"                               d|› �¦  «         Y d}~nd}~ww xY w|S )z´Call out to Clarifai's embedding models.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        r   )ÚInputs©ÚModelúXCould not import clarifai python package. Please install it with `pip install clarifai`.N©Úurlr   ©r   r   r   r   )r   é    c                 ó^   •— g | ])\  }}‰                      t          |¦  «        |¬ ¦  «        ‘Œ*S ))Úinput_idÚraw_text)Úget_text_inputÚstr)Ú.0ÚidÚinpÚ	input_objs      €r   ú
<listcomp>z6ClarifaiEmbeddings.embed_documents.<locals>.<listcomp>l   sF   ø€ ð ð ð á˜˜Cð ×,Ò,µc¸"±g´gÈÐ,ÑLÔLðð ð r   c                 óV   — g | ]&}t          |j        j        d          j        ¦  «        ‘Œ'S ©r   ©ÚlistÚdataÚ
embeddingsÚvector)r7   Úoutputs     r   r;   z6ClarifaiEmbeddings.embed_documents.<locals>.<listcomp>r   s=   € ð ð ð à"õ ˜Vœ[Ô3°AÔ6Ô=Ñ>Ô>ðð ð r   úPredict failed, exception: )Úclarifai.client.inputr*   Úclarifai.client.modelr,   ÚImportErrorr   r   r   r   r   ÚrangeÚlenÚ	enumerateÚpredictÚextendÚoutputsÚ	ExceptionÚloggerÚerror)Úselfr(   r*   r,   r   Ú_model_initÚ
batch_sizerA   ÚiÚbatchÚinput_batchÚpredict_responseÚer:   s                @r   Úembed_documentsz"ClarifaiEmbeddings.embed_documentsH   sé  ø€ ð	Ø4Ð4Ð4Ð4Ð4Ð4Ø3Ð3Ð3Ð3Ð3Ð3Ð3øÝð 	ð 	ð 	ÝðAñô ð ð	øøøð
 Œ8ÐØ”(ˆCØŒ>Ð%Ø˜% D¤N¸Ð<Ñ<Ô<ˆKˆKà˜%ØœØœØ”{Øð	ñ ô ˆKð �F˜s�O‘O”Oˆ	Øˆ
Øˆ
ð	<Ý˜1�c %™jœj¨*Ñ5Ô5ð ð �Ø˜a ! j¡.Ð0Ô1�ðð ð ð å#,¨UÑ#3Ô#3ðñ ô �ð $/×#6Ò#6°{Ñ#CÔ#CÐ Ø×!Ò!ðð à&6Ô&>ðñ ô ñô ð ð ðøõ ð 	<ð 	<ð 	<Ý�LŠLÐ:°qÐ:Ð:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;øøøøð	<øøøð Ðs!   ƒ �*ÂBD Ä
D8ÄD3Ä3D8Útextc                 óÀ  — 	 ddl m} n# t          $ r t          d¦  «        ‚w xY w| j        �| j        }| j        � || j        |¬¦  «        }n || j        | j        | j        |¬¦  «        }	 |                     t          |d¦  «        d¬	¦  «        }d
„ |j
        D ¦   «         }n4# t          $ r'}t                               d|› �¦  «         Y d}~nd}~ww xY w|d         S )zœCall out to Clarifai's embedding models.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   r+   r-   Nr.   r0   zutf-8rZ   )Ú
input_typec                 óV   — g | ]&}t          |j        j        d          j        ¦  «        ‘Œ'S r=   r>   )r7   Úops     r   r;   z2ClarifaiEmbeddings.embed_query.<locals>.<listcomp>�   s:   € ð ð ð Ø79•�R”WÔ'¨Ô*Ô1Ñ2Ô2ðð ð r   rD   )rF   r,   rG   r   r   r   r   r   Úpredict_by_bytesÚbytesrM   rN   rO   rP   )rQ   rZ   r,   r   rR   rW   rA   rX   s           r   Úembed_queryzClarifaiEmbeddings.embed_query}   sQ  € ð	Ø3Ð3Ð3Ð3Ð3Ð3Ð3øÝð 	ð 	ð 	ÝðAñô ð ð	øøøð
 Œ8ÐØ”(ˆCØŒ>Ð%Ø˜% D¤N¸Ð<Ñ<Ô<ˆKˆKà˜%ØœØœØ”{Øð	ñ ô ˆKð		<Ø*×;Ò;Ý�d˜GÑ$Ô$°ð  <ñ  ô  Ððð Ø=MÔ=Uðñ ô ˆJˆJøõ ð 	<ð 	<ð 	<Ý�LŠLÐ:°qÐ:Ð:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;øøøøð	<øøøð ˜!Œ}Ðs    ‚	 ‰#Á-6B$ Â$
CÂ.CÃC)r   r   r   r   r   r   r6   Ú__annotations__r   r   r   r   r   r   r   r	   r   r'   r   ÚfloatrY   ra   r   r   r   r   r      sr  € € € € € € ðð ð$  $€Iˆx˜Œ}Ð#Ð#Ñ#ØØ"€Hˆh�sŒmÐ"Ð"Ñ"ØØ&*Ð�h˜s”mÐ*Ð*Ñ*Ø"Ø €FˆH�SŒMÐ Ð Ñ Ø)Ø!€GˆX�cŒ]Ð!Ð!Ñ!Ø"Ø€Cˆ�#ŒÐÐÑØ0Ø.€HˆcÐ.Ð.Ñ.ðð ð ð ð ñ ô ð ð
 €^ÑÔð¨$ð °4ð ð ð ñ Ôðð,3 T¨#¤Yð 3°4¸¸U¼Ô3Dð 3ð 3ð 3ð 3ðj' ð '¨¨U¬ð 'ð 'ð 'ð 'ð 'ð 'r   r   )ÚloggingÚtypingr   r   r   Úlangchain_core.embeddingsr   Úlangchain_core.pydantic_v1r   r   r	   Úlangchain_core.utilsr
   Ú	getLoggerr   rO   r   r   r   r   ú<module>rj      sÀ   ðØ €€€Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 5Ð 5Ð 5Ð 5Ð 5Ð 5à	ˆÔ	˜8Ñ	$Ô	$€ðYð Yð Yð Yð Y˜ Jñ Yô Yð Yð Yð Yr   