§
    šŠtj//  ã                  óÂ   — d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	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  ej        e¦  «        Z G d„ d	e¦  «        ZdS )
é    )ÚannotationsN)ÚThreadPoolExecutor)ÚAnyÚIterableÚListÚOptionalÚTuple)ÚDocument)Ú
Embeddings)ÚVectorStorec                  óž   — e Zd ZdZ	 	 	 	 	 	 d(d)d„Z	 	 d*d+d„Z	 	 d*d,d „Z	 d-d.d"„Ze	 	 	 	 	 	 	 d/d0d%„¦   «         Z	e	 	 	 	 	 	 d1d2d'„¦   «         Z
dS )3ÚClarifaia±  `Clarifai AI` vector store.

    To use, you should have the ``clarifai`` python SDK package installed.

    Example:
        .. code-block:: python

                from langchain_community.vectorstores import Clarifai

                clarifai_vector_db = Clarifai(
                        user_id=USER_ID,
                        app_id=APP_ID,
                        number_of_docs=NUMBER_OF_DOCS,
                        )
    Né   úhttps://api.clarifai.comÚuser_idúOptional[str]Úapp_idÚnumber_of_docsúOptional[int]ÚpatÚtokenÚapi_baseÚreturnÚNonec                óH  — |pt           j                             d¦  «        }|pt           j                             d¦  «        }|�|€t          d¦  «        ‚|| _        	 ddlm}	 n"# t          $ r}
t          d¦  «        |
‚d}
~
ww xY w |	||||||¬¦  «        j        | _	        dS )	a¦  Initialize with Clarifai client.

        Args:
            user_id (Optional[str], optional): User ID. Defaults to None.
            app_id (Optional[str], optional): App ID. Defaults to None.
            pat (Optional[str], optional): Personal access token. Defaults to None.
            token (Optional[str], optional): Session token. Defaults to None.
            number_of_docs (Optional[int], optional): Number of documents to return
            during vector search. Defaults to None.
            api_base (Optional[str], optional): API base. Defaults to None.

        Raises:
            ValueError: If user ID, app ID or personal access token is not provided.
        ÚCLARIFAI_USER_IDÚCLARIFAI_APP_IDNzƒCould not find CLARIFAI_USER_ID or CLARIFAI_APP_ID in your environment. Please set those env variables with a valid user ID, app IDr   ©ÚSearchúXCould not import clarifai python package. Please install it with `pip install clarifai`.)r   r   Útop_kr   r   Úbase_url)
ÚosÚenvironÚgetÚ
ValueErrorÚ_number_of_docsÚclarifai.client.searchr   ÚImportErrorÚauth_helperÚ_auth)Úselfr   r   r   r   r   r   Ú_user_idÚ_app_idr   Úes              úg/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/clarifai.pyÚ__init__zClarifai.__init__#   sð   € ð. Ð@�bœjŸnšnÐ-?Ñ@Ô@ˆØÐ=�BœJŸNšNÐ+<Ñ=Ô=ˆØÐ˜w˜ÝðNñô ð ð
  .ˆÔð	Ø5Ð5Ð5Ð5Ð5Ð5Ð5øÝð 	ð 	ð 	ÝðAñô ð ðøøøøð	øøøð �VØØØ ØØØð
ñ 
ô 
ô ð 	Œ
ˆ
ˆ
s   ÁA% Á%
BÁ/A?Á?BÚtextsúIterable[str]Ú	metadatasúOptional[List[dict]]ÚidsúOptional[List[str]]Úkwargsr   ú	List[str]c                óB  ‡‡‡‡— 	 ddl m} ddlm} n"# t          $ r}t	          d¦  «        |‚d}~ww xY wt          |¦  «        }t          |¦  «        }	|	dk    s
J d¦   «         ‚|�|	t          |¦  «        k    s
J d¦   «         ‚|�*t          |¦  «        t          |¦  «        k    s
J d¦   «         ‚|                     | j        ¬	¦  «        Šd
}
g }t          d|	|
¦  «        D �]?}	 ||||
z   …         }|r||||
z   …         ndŠ|€'d„ t          t          |¦  «        ¦  «        D ¦   «         Šn||||
z   …         Š‰�;g Š‰D ]6} |¦   «         }| 
                    |¦  «         ‰                     |¦  «         Œ7ˆˆˆˆfd„t          |¦  «        D ¦   «         }‰                     |¬¦  «        }|                     |¦  «         t                               d¦  «         Œù# t"          $ r;}t                               d|› �¦  «         t'          j        ¦   «          Y d}~�Œ9d}~ww xY w|S )a'  Add texts to the Clarifai vectorstore. This will push the text
        to a Clarifai application.
        Application use a base workflow that create and store embedding for each text.
        Make sure you are using a base workflow that is compatible with text
        (such as Language Understanding).

        Args:
            texts (Iterable[str]): Texts to add to the vectorstore.
            metadatas (Optional[List[dict]], optional): Optional list of metadatas.
            ids (Optional[List[str]], optional): Optional list of IDs.

        r   )ÚInputs)ÚStructr    Nz,No texts provided to add to the vectorstore.z1Number of texts and metadatas should be the same.z7Number of text inputs and input ids should be the same.)Úauthé    c                ó>   — g | ]}t          j        ¦   «         j        ‘ŒS © )ÚuuidÚuuid4Úhex)Ú.0Ú_s     r0   ú
<listcomp>z&Clarifai.add_texts.<locals>.<listcomp>‰   s!   € Ð SÐ SÐ S°a¥¤¡¤Ô!1Ð SÐ SÐ Só    c                óf   •— g | ]-\  }}‰                      ‰|         |‰r‰|         nd ¬¦  «        ‘Œ.S )N)Úinput_idÚraw_textÚmetadata)Úget_text_input)rD   ÚiÚtextÚ	batch_idsÚbatch_metadatasÚ	input_objÚ	meta_lists      €€€€r0   rF   z&Clarifai.add_texts.<locals>.<listcomp>’   s^   ø€ ð ð ð ñ  ˜˜4ð ×,Ò,Ø!*¨1¤Ø!%Ø1@Ð!J ¨1¤ Àdð -ñ ô ðð ð rG   )ÚinputszInput posted successfully.zPost inputs failed: )Úclarifai.client.inputr;   Úgoogle.protobuf.struct_pb2r<   r)   ÚlistÚlenÚfrom_auth_helperr+   ÚrangeÚupdateÚappendÚ	enumerateÚupload_inputsÚextendÚloggerÚdebugÚ	ExceptionÚwarningÚ	tracebackÚ	print_exc)r,   r2   r4   r6   r8   r;   r<   r/   ÚltextsÚlengthÚ
batch_sizeÚinput_job_idsÚidxÚbatch_textsÚmetaÚmeta_structÚinput_batchÚ	result_idÚerrorrO   rP   rQ   rR   s                      @@@@r0   Ú	add_textszClarifai.add_textsU   sÝ  øøøø€ ð&	Ø4Ð4Ð4Ð4Ð4Ð4Ø9Ð9Ð9Ð9Ð9Ð9Ð9øÝð 	ð 	ð 	ÝðAñô ð ðøøøøð	øøøõ �e‘”ˆÝ�V‘”ˆØ˜ŠzˆzˆzÐI‰zŒzˆzàÐ Ø�S ™^œ^Ò+Ð+Ð+ØCñ ,Ô+Ð+ð ˆ?Ý�v‘;”;¥# c¡(¤(Ò*Ð*Ð*ØIñ +Ô*Ð*ð ×+Ò+°´Ð+Ñ<Ô<ˆ	Øˆ
ØˆÝ˜˜F JÑ/Ô/ð 	&ñ 	&ˆCð&Ø$ S¨3°Ñ+;Ð%;Ô<�à9BÐL�I˜c C¨*Ñ$4Ð4Ô5Ð5Èð  ð �;Ø SÐ S½5ÅÀ[ÑAQÔAQÑ;RÔ;RÐ SÑ SÔ S�I�Ià # C¨#°
Ñ*:Ð$:Ô ;�IØ"Ð.Ø "�IØ /ð 6ð 6˜Ø&, f¡h¤h˜Ø#×*Ò*¨4Ñ0Ô0Ð0Ø!×(Ò(¨Ñ5Ô5Ð5Ð5ðð ð ð ð ð ð õ $-¨[Ñ#9Ô#9ðñ ô �ð &×3Ò3¸;Ð3ÑGÔG�	Ø×$Ò$ YÑ/Ô/Ð/Ý—’Ð9Ñ:Ô:Ð:Ð:øåð &ð &ð &Ý—’Ð=°eÐ=Ð=Ñ>Ô>Ð>ÝÔ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ñ%øøøøð&øøøð Ðs)   † “
2�-­2Ã"C4GÇ
HÇ!0HÈHÚqueryÚstrÚkÚfiltersúOptional[dict]úList[Tuple[Document, float]]c                ó´  ‡ ‡‡‡— 	 ddl m} ddlm} ddlmŠ n"# t          $ r}t          d¦  «        |‚d}~ww xY w|p‰ j        }|                     ‰ j	        |¬¦  «        }	d|ig}
|�d	|i}|	 
                    |
|g¬
¦  «        }n|	 
                    |
¬¦  «        }d„ |D ¦   «         }t          d¬¦  «        Šdˆˆ fd„Šˆˆfd„|D ¦   «         }d„ |D ¦   «         }|S )a¾  Run similarity search with score using Clarifai.

        Args:
            query (str): Query text to search for.
            k (Optional[int]): Number of results to return. If not set,
            it'll take _number_of_docs. Defaults to None.
            filter (Optional[Dict[str, str]]): Filter by metadata.
            Defaults to None.

        Returns:
            List[Document]: List of documents most similar to the query text.
        r   r   )Úresources_pb2)Újson_formatr    N)r=   r!   Útext_rawrK   )Úranksrt   )r{   c                ó&   — g | ]}|j         D ]}|‘ŒŒS r@   )Úhits)rD   ÚdataÚhits      r0   rF   z9Clarifai.similarity_search_with_score.<locals>.<listcomp>Î   s'   € ÐEÐEÐE˜¸4¼9ÐEÐE°C�ÐEÐEÐEÐErG   é
   )Úmax_workersr   úresources_pb2.Hitr   úTuple[Document, float]c                ó¸  •— ‰                      | j        j        j        ¦  «        }t	          ‰j        j        ¦  «        }t          j        | j        j        j        j	        |¬¦  «        }|j
        |_        |j        }t                               d| j        d›d| j        j        › d| j        j        › d|d d…         › �¦  «         t#          ||¬¦  «        | j        fS )	N)Úheadersz	Score z.2fz for annotation: z                off input: z, text: é}   )Úpage_contentrK   )ÚMessageToDictÚinputr~   rK   Údictr+   Úrequestsr%   rN   ÚurlÚapparent_encodingÚencodingr_   r`   ÚscoreÚ
annotationÚidr
   )r   rK   ÚhÚrequestÚrequested_textry   r,   s        €€r0   Úhit_to_documentz>Clarifai.similarity_search_with_score.<locals>.hit_to_documentÑ   sí   ø€ Ø"×0Ò0°´´Ô1HÑIÔIˆHÝ�T”ZÔ(Ñ)Ô)ˆAÝ”l 3¤9¤>Ô#6Ô#:ÀAÐFÑFÔFˆGð  'Ô8ˆGÔØ$œ\ˆNå�LŠLðI˜3œ9ð Ið Ið I¸3¼>Ô;Lð Ið IØœIœLðIð IØ2@ÀÀ#ÀÔ2FðIð Iñô ð õ ¨.À8ÐLÑLÔLÈcÌiÐXÐXrG   c                ó<   •— g | ]}‰                      ‰|¦  «        ‘ŒS r@   )Úsubmit)rD   r   Úexecutorr•   s     €€r0   rF   z9Clarifai.similarity_search_with_score.<locals>.<listcomp>á   s'   ø€ ÐIÐIÐI¸S�8—?’? ?°CÑ8Ô8ÐIÐIÐIrG   c                ó6   — g | ]}|                      ¦   «         ‘ŒS r@   )Úresult)rD   Úfutures     r0   rF   z9Clarifai.similarity_search_with_score.<locals>.<listcomp>â   s    € ÐAÐAÐA¨v˜6Ÿ=š=™?œ?ÐAÐAÐArG   )r   r‚   r   rƒ   )r(   r   Úclarifai_grpc.grpc.apirx   Úgoogle.protobufry   r)   r'   rX   r+   rq   r   )r,   rq   rs   rt   r8   r   rx   r/   r!   Ú
search_objÚrankÚsearch_metadataÚsearch_responser}   ÚfuturesÚdocs_and_scoresr˜   r•   ry   s   `               @@@r0   Úsimilarity_search_with_scorez%Clarifai.similarity_search_with_score¤   s�  øøøø€ ð&	Ø5Ð5Ð5Ð5Ð5Ð5Ø<Ð<Ð<Ð<Ð<Ð<Ø3Ð3Ð3Ð3Ð3Ð3Ð3øÝð 	ð 	ð 	ÝðAñô ð ðøøøøð	øøøð Ð)�TÔ)ˆà×,Ò,°$´*ÀEÐ,ÑJÔJˆ
Ø˜UÐ#Ð$ˆàÐØ)¨7Ð3ˆOØ(×.Ò.°TÀOÐCTÐ.ÑUÔUˆOˆOà(×.Ò.°TÐ.Ñ:Ô:ˆOð FÐE ÐEÑEÔEˆÝ%°"Ð5Ñ5Ô5ˆð	Yð 	Yð 	Yð 	Yð 	Yð 	Yð 	Yð  JÐIÐIÐIÐIÀDÐIÑIÔIˆØAÐA¸ÐAÑAÔAˆàÐs   † ™
8£3³8úList[Document]c                ó:   —  | j         |fd|i|¤Ž}d„ |D ¦   «         S )aG  Run similarity search using Clarifai.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return.
            If not set, it'll take _number_of_docs. Defaults to None.

        Returns:
            List of Documents most similar to the query and score for each
        rs   c                ó   — g | ]\  }}|‘ŒS r@   r@   )rD   ÚdocrE   s      r0   rF   z.Clarifai.similarity_search.<locals>.<listcomp>÷   s   € Ð2Ð2Ð2™˜˜Q�Ð2Ð2Ð2rG   )r¤   )r,   rq   rs   r8   r£   s        r0   Úsimilarity_searchzClarifai.similarity_searchæ   s7   € ð  <˜$Ô;¸EÐQÐQÀQÐQÈ&ÐQÐQˆØ2Ð2 /Ð2Ñ2Ô2Ð2rG   Ú	embeddingúOptional[Embeddings]c	           	     óP   —  | d|||||dœ|	¤Ž}
|
                      ||¬¦  «         |
S )aå  Create a Clarifai vectorstore from a list of texts.

        Args:
            user_id (str): User ID.
            app_id (str): App ID.
            texts (List[str]): List of texts to add.
            number_of_docs (Optional[int]): Number of documents
            to return during vector search. Defaults to None.
            pat (Optional[str], optional): Personal access token.
            Defaults to None.
            token (Optional[str], optional): Session token. Defaults to None.
            metadatas (Optional[List[dict]]): Optional list
            of metadatas. Defaults to None.
            kwargs: Additional keyword arguments to be passed to the Search.

        Returns:
            Clarifai: Clarifai vectorstore.
        )r   r   r   r   r   )r2   r4   r@   )rp   )Úclsr2   rª   r4   r   r   r   r   r   r8   Úclarifai_vector_dbs              r0   Ú
from_textszClarifai.from_textsù   sZ   € ð> !˜Sð 
ØØØ)ØØð
ð 
ð ð
ð 
Ðð 	×$Ò$¨5¸IÐ$ÑFÔFÐFØ!Ð!rG   Ú	documentsc                ó\   — d„ |D ¦   «         }	d„ |D ¦   «         }
 | j         d|||	|||
|dœ|¤ŽS )a‚  Create a Clarifai vectorstore from a list of documents.

        Args:
            user_id (str): User ID.
            app_id (str): App ID.
            documents (List[Document]): List of documents to add.
            number_of_docs (Optional[int]): Number of documents
            to return during vector search. Defaults to None.
            pat (Optional[str], optional): Personal access token. Defaults to None.
            token (Optional[str], optional): Session token. Defaults to None.
            kwargs: Additional keyword arguments to be passed to the Search.

        Returns:
            Clarifai: Clarifai vectorstore.
        c                ó   — g | ]	}|j         ‘Œ
S r@   )r‡   ©rD   r¨   s     r0   rF   z+Clarifai.from_documents.<locals>.<listcomp>>  s   € Ð7Ð7Ð7 c�Ô!Ð7Ð7Ð7rG   c                ó   — g | ]	}|j         ‘Œ
S r@   )rK   r³   s     r0   rF   z+Clarifai.from_documents.<locals>.<listcomp>?  s   € Ð7Ð7Ð7 c�S”\Ð7Ð7Ð7rG   )r   r   r2   r   r   r4   r   r@   )r¯   )r­   r°   rª   r   r   r   r   r   r8   r2   r4   s              r0   Úfrom_documentszClarifai.from_documents#  si   € ð6 8Ð7¨YÐ7Ñ7Ô7ˆØ7Ð7¨YÐ7Ñ7Ô7ˆ	ØˆsŒ~ð 	
ØØØØ)ØØØð	
ð 	
ð ð	
ð 	
ð 		
rG   )NNr   NNr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )NN)
r2   r3   r4   r5   r6   r7   r8   r   r   r9   )
rq   rr   rs   r   rt   ru   r8   r   r   rv   )N)rq   rr   rs   r   r8   r   r   r¥   )NNNNNNN)r2   r9   rª   r«   r4   r5   r   r   r   r   r   r   r   r   r   r   r8   r   r   r   )NNNNNN)r°   r¥   rª   r«   r   r   r   r   r   r   r   r   r   r   r8   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r1   rp   r¤   r©   Úclassmethodr¯   rµ   r@   rG   r0   r   r      s.  € € € € € ðð ð$ "&Ø $Ø()Ø!Ø#Ø"<ð0ð 0ð 0ð 0ð 0ðj +/Ø#'ð	Mð Mð Mð Mð Mðd  Ø"&ð	@ð @ð @ð @ð @ðJ  ð3ð 3ð 3ð 3ð 3ð& ð +/Ø*.Ø!%Ø $Ø(,Ø!Ø#ð'"ð '"ð '"ð '"ñ „[ð'"ðR ð +/Ø!%Ø $Ø(,Ø!Ø#ð%
ð %
ð %
ð %
ñ „[ð%
ð %
ð %
rG   r   )Ú
__future__r   Úloggingr#   rc   rA   Úconcurrent.futuresr   Útypingr   r   r   r   r	   r‹   Úlangchain_core.documentsr
   Úlangchain_core.embeddingsr   Úlangchain_core.vectorstoresr   Ú	getLoggerr¶   r_   r   r@   rG   r0   ú<module>rÃ      s	  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à €€€Ø -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à	ˆÔ	˜8Ñ	$Ô	$€ðw
ð w
ð w
ð w
ð w
ˆ{ñ w
ô w
ð w
ð w
ð w
rG   