Ë
    µŒj//  ã                  ó¾   — 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y)
é    )Ú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	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Z	e	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Z
y)Ú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,
                        )
    Nc                ó>  — |xs t         j                  j                  d«      }|xs t         j                  j                  d«      }|�|€t        d«      ‚|| _        	 ddlm}	  |	||||||¬«      j                  | _	        y# t        $ r}
t        d«      |
‚d}
~
ww xY w)	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`.)Úuser_idÚapp_idÚtop_kÚpatÚtokenÚbase_url)
ÚosÚenvironÚgetÚ
ValueErrorÚ_number_of_docsÚclarifai.client.searchr   ÚImportErrorÚauth_helperÚ_auth)Úselfr   r   Únumber_of_docsr   r   Úapi_baseÚ_user_idÚ_app_idr   Úes              ús/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/clarifai.pyÚ__init__zClarifai.__init__#   s·   € ð. Ò@œbŸj™jŸn™nÐ-?Ó@ˆØÒ=œBŸJ™JŸN™NÐ+<Ó=ˆØÐ˜w˜ÜðNóð ð
  .ˆÔð	Ý5ñ ØØØ ØØØô
÷ ‰+ð 	�
øô ò 	ÜðAóð ðûð	ús   ÁB Â	BÂBÂBc                ó  — 	 ddl m} ddlm} t        |«      }t        |«      }	|	dkD  sJ d«       ‚|�|	t        |«      k(  sJ d«       ‚|�t        |«      t        |«      k(  sJ d«       ‚|j                  | j                  ¬	«      }
d
}g }t        d|	|«      D �]  }	 ||||z    }|r||||z    nd}|€>t        t        |«      «      D �cg c]   }t        j                  «       j                  ‘Œ" }}n||||z    }|�2g }|D ]+  } |«       }|j                  |«       |j                  |«       Œ- t        |«      D ��cg c]#  \  }}|
j!                  ||   ||r|   nd¬«      ‘Œ% }}}|
j#                  |¬«      }|j%                  |«       t&        j)                  d«       �Œ |S # t        $ r}t	        d«      |‚d}~ww xY wc c}w c c}}w # t*        $ r7}t&        j-                  d|› �«       t/        j0                  «        Y d}~�Œnd}~ww xY w)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é    )Úinput_idÚraw_textÚmetadata)ÚinputszInput posted successfully.zPost inputs failed: )Úclarifai.client.inputr-   Úgoogle.protobuf.struct_pb2r.   r!   ÚlistÚlenÚfrom_auth_helperr#   ÚrangeÚuuidÚuuid4ÚhexÚupdateÚappendÚ	enumerateÚget_text_inputÚupload_inputsÚextendÚloggerÚdebugÚ	ExceptionÚwarningÚ	tracebackÚ	print_exc)r$   ÚtextsÚ	metadatasÚidsÚkwargsr-   r.   r)   ÚltextsÚlengthÚ	input_objÚ
batch_sizeÚinput_job_idsÚidxÚbatch_textsÚbatch_metadatasÚ_Ú	batch_idsÚ	meta_listÚmetaÚmeta_structÚiÚtextÚinput_batchÚ	result_idÚerrors                             r*   Ú	add_textszClarifai.add_textsU   sS  € ð&	Ý4Ý9ô �e“ˆÜ�V“ˆØ˜ŠzÐIÐIÓIˆzàÐ ØœS ›^Ò+ð ØCóÐ+ð ˆ?Ü�v“;¤# c£(Ò*ð ØIóÐ*ð ×+Ñ+°·±Ð+Ó<ˆ	Øˆ
ØˆÜ˜˜F J×/ˆCð&Ø$ S¨3°Ñ+;Ð<�á9B�I˜c C¨*Ñ$4Ñ5Èð  ð �;Ü;@ÄÀ[ÓAQÔ;RÓ SÑ;R°a¤§¡£×!1Ó!1Ð;R�IÑ Sà # C¨#°
Ñ*:Ð ;�IØ"Ð.Ø "�IÛ /˜Ù&,£h˜Ø#×*Ñ*¨4Ô0Ø!×(Ñ(¨Õ5ð !0ô $-¨[Ô#9ôñ $:™˜˜4ð ×,Ñ,Ø!*¨1¡Ø!%Ù1@ ¨1¢Àdð -õ ð
 $:ð ñ ð &×3Ñ3¸;Ð3ÓG�	Ø×$Ñ$ YÔ/Ü—‘Ð9Ö:ð5 0ð@ Ðøôo ò 	ÜðAóð ðûð	üò< !Tùóøô ò &Ü—‘Ð!5°e°WÐ=Ô>Ü×#Ñ#×%Ò%ûð&úsN   ‚F Â,GÃ%F<Ã*AGÄ7(GÅ;GÆ	F9Æ(F4Æ4F9Æ<GÇ	HÇ,HÈHc                ó*  ‡ ‡— 	 ddl m} ddlm} ddlmŠ |xs ‰ j                  }|j                  ‰ j                  |¬«      }	d|ig}
|�d	|i}|	j                  |
|g¬
«      }n|	j                  |
¬«      }|D ��cg c]  }|j                  D ]  }|‘Œ Œ }}}t        d¬«      }dˆˆ fd„}|D �cg c]  }|j                  ||«      ‘Œ }}|D �cg c]  }|j                  «       ‘Œ }}|S # t        $ r}t        d«      |‚d}~ww xY wc c}}w c c}w c c}w )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_rawr3   )ÚranksÚfilters)re   é
   )Úmax_workersc                ó8  •— ‰j                  | j                  j                  j                  «      }t	        ‰j
                  j                  «      }t        j                  | j                  j                  j                  j                  |¬«      }|j                  |_        |j                  }t        j                  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_contentr3   )ÚMessageToDictÚinputÚdatar3   Údictr#   Úrequestsr   r\   ÚurlÚapparent_encodingÚencodingrD   rE   ÚscoreÚ
annotationÚidr
   )Úhitr3   ÚhÚrequestÚrequested_textrc   r$   s        €€r*   Úhit_to_documentz>Clarifai.similarity_search_with_score.<locals>.hit_to_documentÑ   sÜ   ø€ Ø"×0Ñ0°·±·±×1HÑ1HÓIˆHÜ�T—Z‘Z×(Ñ(Ó)ˆAÜ—l‘l 3§9¡9§>¡>×#6Ñ#6×#:Ñ#:ÀAÔFˆGð  '×8Ñ8ˆGÔØ$Ÿ\™\ˆNä�L‰LØ˜3Ÿ9™9 S˜/Ð):¸3¿>¹>×;LÑ;LÐ:Mð NØŸI™IŸL™L˜>¨°.ÀÀ#Ð2FÐ1GðIôô ¨.À8ÔLÈcÏiÉiÐXÐXó    )rx   zresources_pb2.HitÚreturnzTuple[Document, float])r    r   Úclarifai_grpc.grpc.apirb   Úgoogle.protobufrc   r!   r   r9   r#   ÚqueryÚhitsr   ÚsubmitÚresult)r$   r�   Úkrf   rM   r   rb   r)   r   Ú
search_objÚrankÚsearch_metadataÚsearch_responsero   rx   r‚   Úexecutorr|   ÚfuturesÚfutureÚdocs_and_scoresrc   s   `                    @r*   Úsimilarity_search_with_scorez%Clarifai.similarity_search_with_score¤   s2  ù€ ð&	Ý5Ý<Ý3ð Ò)�T×)Ñ)ˆà×,Ñ,°$·*±*ÀEÐ,ÓJˆ
Ø˜UÐ#Ð$ˆàÐØ)¨7Ð3ˆOØ(×.Ñ.°TÀOÐCTÐ.ÓU‰Oà(×.Ñ.°TÐ.Ó:ˆOñ !0ÔE¡˜¸4¿9¼9°C’¸9� ˆÑEÜ%°"Ô5ˆö	Yñ  EIÓIÁD¸S�8—?‘? ?°CÕ8ÀDˆÐIÙ9@ÓA¹¨v˜6Ÿ=™=�?¸ˆÐAàÐøôS ò 	ÜðAóð ðûð	üó& Fùò& JùÚAs)   „C( Á:DÂ.DÃDÃ(	DÃ1C=Ã=Dc                ób   —  | j                   |fd|i|¤Ž}|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )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
        r…   )rŽ   )r$   r�   r…   rM   r�   ÚdocrV   s          r*   Úsimilarity_searchzClarifai.similarity_searchæ   s<   € ð  <˜$×;Ñ;¸EÑQÀQÐQÈ&ÑQˆÙ"1Ô2¡/™˜˜Q’ /Ò2Ð2ùÓ2s   ›+c	           	     óH   —  | d|||||dœ|	¤Ž}
|
j                  ||¬«       |
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   )rJ   rK   © )r`   )ÚclsrJ   Ú	embeddingrK   r   r   r%   r   r   rM   Úclarifai_vector_dbs              r*   Ú
from_textszClarifai.from_textsù   sH   € ñ> !ð 
ØØØ)ØØñ
ð ñ
Ðð 	×$Ñ$¨5¸IÐ$ÔFØ!Ð!r}   c                ó®   — |D �	cg c]  }	|	j                   ‘Œ }
}	|D �	cg c]  }	|	j                  ‘Œ }}	 | j                  d|||
||||dœ|¤ŽS c c}	w c c}	w )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.
        )r   r   rJ   r%   r   rK   r   r“   )rl   r3   r—   )r”   Ú	documentsr•   r   r   r%   r   r   rM   r�   rJ   rK   s               r*   Úfrom_documentszClarifai.from_documents#  su   € ñ6 .7Ó7©Y c�×!Ó!¨YˆÐ7Ù-6Ó7©Y c�S—\“\¨Yˆ	Ð7Øˆs�~‰~ð 	
ØØØØ)ØØØñ	
ð ñ	
ð 		
ùò 8ùÚ7s
   …AžA)NNé   NNzhttps://api.clarifai.com)r   úOptional[str]r   rœ   r%   úOptional[int]r   rœ   r   rœ   r&   rœ   r~   ÚNone)NN)
rJ   zIterable[str]rK   úOptional[List[dict]]rL   zOptional[List[str]]rM   r   r~   ú	List[str])
r�   Ústrr…   r�   rf   zOptional[dict]rM   r   r~   zList[Tuple[Document, float]])N)r�   r¡   r…   r�   rM   r   r~   úList[Document])NNNNNNN)rJ   r    r•   úOptional[Embeddings]rK   rŸ   r   rœ   r   rœ   r%   r�   r   rœ   r   rœ   rM   r   r~   r   )NNNNNN)r™   r¢   r•   r£   r   rœ   r   rœ   r%   r�   r   rœ   r   rœ   rM   r   r~   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r+   r`   rŽ   r‘   Úclassmethodr—   rš   r“   r}   r*   r   r      s+  „ ñð$ "&Ø $Ø()Ø!Ø#Ø"<ð0àð0ð ð0ð &ð	0ð
 ð0ð ð0ð  ð0ð 
ó0ðj +/Ø#'ð	MàðMð (ðMð !ð	Mð
 ðMð 
óMðd  Ø"&ð	@àð@ð ð@ð  ð	@ð
 ð@ð 
&ó@ðJ  ð3àð3ð ð3ð ð	3ð
 
ó3ð& ð +/Ø*.Ø!%Ø $Ø(,Ø!Ø#ð'"àð'"ð (ð'"ð (ð	'"ð
 ð'"ð ð'"ð &ð'"ð ð'"ð ð'"ð ð'"ð 
ò'"ó ð'"ðR ð +/Ø!%Ø $Ø(,Ø!Ø#ð%
à!ð%
ð (ð%
ð ð	%
ð
 ð%
ð &ð%
ð ð%
ð ð%
ð ð%
ð 
ò%
ó ñ%
r}   r   )Ú
__future__r   Úloggingr   rH   r;   Úconcurrent.futuresr   Útypingr   r   r   r   r	   rq   Úlangchain_core.documentsr
   Úlangchain_core.embeddingsr   Úlangchain_core.vectorstoresr   Ú	getLoggerr¤   rD   r   r“   r}   r*   Ú<module>r±      sI   ðÝ "ã Û 	Û Û Ý 1ß 7Õ 7ã Ý -Ý 0Ý 3à	ˆ×	Ñ	˜8Ó	$€ôw
ˆ{õ w
r}   