Ë
    µŒj’;  ã                  óÊ   — d dl mZ d dlZd dlmZmZmZmZmZm	Z	m
Z
mZmZ er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 d dlmZ d dlmZ d	Zdd
„Zdd„Z G d„ de«      Zy)é    )ÚannotationsN)	ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚIterableÚListÚOptionalÚTupleÚType)ÚIDÚ	OneOrManyÚWhereÚWhereDocument)ÚDocument)Ú
Embeddings)Úxor_args)ÚVectorStoreé   c                óJ   — t        | «      D ��cg c]  \  }}|‘Œ	 c}}S c c}}w ©N)Ú_results_to_docs_and_scores)ÚresultsÚdocÚ_s      úp/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/bagel.pyÚ_results_to_docsr      s%   € Ü9¸'ÔBÔCÑB‘F�C˜ŠCÐBÒCÐCùÓCs   �c                óš   — t        | d   d   | d   d   | d   d   «      D �cg c]  }t        |d   |d   xs i ¬«      |d   f‘Œ  c}S c c}w )NÚ	documentsr   Ú	metadatasÚ	distancesé   )Úpage_contentÚmetadataé   )Úzipr   )r   Úresults     r   r   r   !   su   € ô Ø�KÑ  Ñ#Ø�KÑ  Ñ#Ø�KÑ  Ñ#ô
óñ
ˆFô 
˜v a™y°6¸!±9²?ÀÔ	CÀVÈAÁYÒOð
ñð ùò s   ¢#Ac            	      ó0  — e Zd ZU dZdZded<   edddddf	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zedd„«       Z e	d«      	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd	„«       Z
	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd
„Zedf	 	 	 	 	 	 	 	 	 dd„Zedf	 	 	 	 	 	 	 	 	 dd„Zedddeddddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Zdd„Zedf	 	 	 	 	 	 	 	 	 d d„Zedf	 	 	 	 	 	 	 	 	 d!d„Zd"d„Zeddedddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d#d„«       Zd$d„Z	 	 	 	 	 	 d%	 	 	 	 	 	 	 	 	 	 	 	 	 d&d„Zd'd(d„Zy))ÚBagela"  ``Bagel.net`` Inference platform.

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

    Example:
        .. code-block:: python

                from langchain_community.vectorstores import Bagel
                vectorstore = Bagel(cluster_name="langchain_store")
    Ú	langchainÚstrÚ_LANGCHAIN_DEFAULT_CLUSTER_NAMENc                óH  — 	 ddl }ddl}|�|| _        || _        n@|r|}n|j
                  j                  dd¬«      }|| _         |j                  |«      | _        | j                  j                  ||¬«      | _	        || _
        || _        y# t        $ r t        d«      ‚w xY w)zInitialize with bagel clientr   Nú+Please install bagel `pip install bagelML`.Úrestzapi.bageldb.ai)Úbagel_api_implÚbagel_server_host)Únamer$   )ÚbagelÚbagel.configÚImportErrorÚ_client_settingsÚ_clientÚconfigÚSettingsÚClientÚget_or_create_clusterÚ_clusterÚoverride_relevance_score_fnÚ_embedding_function)	ÚselfÚcluster_nameÚclient_settingsÚembedding_functionÚcluster_metadataÚclientÚrelevance_score_fnr3   r6   s	            r   Ú__init__zBagel.__init__:   s½   € ð	MÛÛð ÐØ$3ˆDÔ!Ø!ˆD�LáØ#2Ñ à#(§<¡<×#8Ñ#8Ø#)Ø&6ð $9ó $Ð ð %5ˆDÔ!Ø'˜5Ÿ<™<Ð(8Ó9ˆDŒLàŸ™×:Ñ:ØØ%ð ;ó 
ˆŒð ,>ˆÔ(Ø#5ˆÕ øô+ ò 	MÜÐKÓLÐLð	Mús   ‚B ÂB!c                ó   — | j                   S r   )r>   ©r?   s    r   Ú
embeddingszBagel.embeddings^   s   € à×'Ñ'Ð'ó    )Úquery_textsÚquery_embeddingsc                óî   — 	 ddl }| j                  r,|€*|r(t        |«      }| j                  j	                  |«      }d} | j
                  j                  d||||dœ|¤ŽS # t        $ r t        d«      ‚w xY w)z9Query the Bagel cluster based on the provided parameters.r   Nr.   )rK   rL   Ú	n_resultsÚwhere© )r3   r5   r>   ÚlistÚembed_documentsr<   Úfind)r?   rK   rL   rN   rO   Úkwargsr3   Útextss           r   Ú__query_clusterzBagel.__query_clusterb   s—   € ð	MÛð ×#Ò#Ð(8Ð(@Á[Ü˜Ó%ˆEØ#×7Ñ7×GÑGÈÓNÐØˆKà!ˆt�}‰}×!Ñ!ð 
Ø#Ø-ØØñ	
ð
 ñ
ð 	
øô ò 	MÜÐKÓLÐLð	Mús   ‚A ÁA4c                óÎ  — |€*|D �cg c]  }t        t        j                  «       «      ‘Œ! }}t        |«      }| j                  r|€|r| j                  j                  |«      }|�r)t        |«      t        |«      z
  }|r	|i g|z  z   }g }g }	t        |«      D ]*  \  }
}|r|	j                  |
«       Œ|j                  |
«       Œ, |	rl|	D �
cg c]  }
||
   ‘Œ	 }}
|	D �
cg c]  }
||
   ‘Œ	 }}
|r|	D �
cg c]  }
||
   ‘Œ	 c}
nd}|	D �
cg c]  }
||
   ‘Œ	 }}
| j                  j                  ||||¬«       |rY|D �cg c]  }||   ‘Œ	 }}|r|D �cg c]  }||   ‘Œ	 c}nd}|D �cg c]  }||   ‘Œ	 }}| j                  j                  |||¬«       |S i gt        |«      z  }| j                  j                  ||||¬«       |S c c}w c c}
w c c}
w c c}
w c c}
w c c}w c c}w c c}w )aò  
        Add texts along with their corresponding embeddings and optional
        metadata to the Bagel cluster.

        Args:
            texts (Iterable[str]): Texts to be added.
            embeddings (Optional[List[float]]): List of embeddingvectors
            metadatas (Optional[List[dict]]): Optional list of metadatas.
            ids (Optional[List[str]]): List of unique ID for the texts.

        Returns:
            List[str]: List of unique ID representing the added texts.
        N)rI   r    r   Úids)rI   r   rX   )rI   r   r    rX   )r+   ÚuuidÚuuid4rQ   r>   rR   ÚlenÚ	enumerateÚappendr<   Úupsert)r?   rU   r    rX   rI   rT   r   Úlength_diffÚ	empty_idsÚnon_empty_idsÚidxr$   Útexts_with_metadatasÚembeddings_with_metadatasÚids_with_metadataÚjÚtexts_without_metadatasÚembeddings_without_metadatasÚids_without_metadatass                      r   Ú	add_textszBagel.add_texts~   s.  € ð, ˆ;Ù.3Ó4©e¨”3”t—z‘z“|Õ$¨eˆCÐ4ä�U“ˆØ×#Ò#¨
Ð(:¹uØ×1Ñ1×AÑAÀ%ÓHˆJÚÜ˜e›*¤s¨9£~Ñ5ˆKÙØ%¨¨¨{Ñ(:Ñ:�	ØˆIØˆMÜ!*¨9Ö!5‘��XÙØ!×(Ñ(¨Õ-à×$Ñ$ SÕ)ð	 "6ñ
 Ù7DÓE±}°˜Y s›^°}�	ÐEÙ>KÓ'L¹m°s¨¨c«
¸mÐ$Ð'LáBL±Ó>±¨�Z “_°Ò>ÐRVð *ñ :GÓ$G¹°# S¨£X¸Ð!Ð$GØ—‘×$Ñ$Ø8Ø'Ø2Ø)ð	 %ô ñ Ù=FÓ*G¹Y¸¨5°«8¸YÐ'Ð*Gá:D©IÓ6©I q�Z “]¨IÒ6È$ð -ñ :CÓ(C¹°A¨¨Q«¸Ð%Ð(CØ—‘×$Ñ$Ø;Ø5Ø-ð %ô ð ˆ
ð ˜œs 5›zÑ)ˆIØ�M‰M× Ñ Ø%ØØ#Øð	 !ô ð ˆ
ùòa 5ùò" FùÚ'Lùâ>ùâ$Gùò +Hùâ6ùâ(Cs/   ‡$F?Ã
GÃG	Ã0GÄGÄ8GÅGÅ!G"c                ó`   — | j                  |||¬«      }|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )a§  
        Run a similarity search with Bagel.

        Args:
            query (str): The query text to search for similar documents/texts.
            k (int): The number of results to return.
            where (Optional[Dict[str, str]]): Metadata filters to narrow down.

        Returns:
            List[Document]: List of documents objects representing
            the documents most similar to the query text.
        )rO   )Úsimilarity_search_with_score)r?   ÚqueryÚkrO   rT   Údocs_and_scoresr   r   s           r   Úsimilarity_searchzBagel.similarity_searchÇ   s7   € ð& ×;Ñ;¸EÀ1ÈEÐ;ÓRˆÙ"1Ô2¡/™˜˜Q’ /Ò2Ð2ùÓ2s   š*c                óB   — | j                  |g||¬«      }t        |«      S )a  
        Run a similarity search with Bagel and return documents with their
        corresponding similarity scores.

        Args:
            query (str): The query text to search for similar documents.
            k (int): The number of results to return.
            where (Optional[Dict[str, str]]): Filter using metadata.

        Returns:
            List[Tuple[Document, float]]: List of tuples, each containing a
            Document object representing a similar document and its
            corresponding similarity score.

        )rK   rN   rO   ©Ú_Bagel__query_clusterr   )r?   rm   rn   rO   rT   r   s         r   rl   z"Bagel.similarity_search_with_scoreÝ   s(   € ð, ×&Ñ&°E°7ÀaÈuÐ&ÓUˆÜ*¨7Ó3Ð3rJ   c
           	     óL   —  | d|||||dœ|
¤Ž}|j                  ||	||¬«      }|S )a½  
        Create and initialize a Bagel instance from list of texts.

        Args:
            texts (List[str]): List of text content to be added.
            cluster_name (str): The name of the Bagel cluster.
            client_settings (Optional[bagel.config.Settings]): Client settings.
            cluster_metadata (Optional[Dict]): Metadata of the cluster.
            embeddings (Optional[Embeddings]): List of embedding.
            metadatas (Optional[List[dict]]): List of metadata.
            ids (Optional[List[str]]): List of unique ID. Defaults to None.
            client (Optional[bagel.Client]): Bagel client instance.

        Returns:
            Bagel: Bagel vectorstore.
        )r@   rB   rA   rD   rC   )rU   rI   r    rX   rP   )rj   )ÚclsrU   Ú	embeddingr    rX   r@   rA   rC   rD   Útext_embeddingsrT   Úbagel_clusterr   s                r   Ú
from_textszBagel.from_textsö   sT   € ñ< ð 
Ø%Ø(Ø+ØØ-ñ
ð ñ
ˆð ×#Ñ#Ø O¸yÈcð $ó 
ˆð ÐrJ   c                ób   — | j                   j                  | j                  j                  «       y)zDelete the cluster.N)r7   Údelete_clusterr<   r2   rH   s    r   r{   zBagel.delete_cluster!  s   € à�‰×#Ñ# D§M¡M×$6Ñ$6Õ7rJ   c                ó@   — | j                  |||¬«      }t        |«      S )zT
        Return docs most similar to embedding vector and similarity score.
        ©rL   rN   rO   rr   )r?   rL   rn   rO   rT   r   s         r   Ú1similarity_search_by_vector_with_relevance_scoresz7Bagel.similarity_search_by_vector_with_relevance_scores%  s-   € ð ×&Ñ&Ø-¸À%ð 'ó 
ˆô +¨7Ó3Ð3rJ   c                ó@   — | j                  |||¬«      }t        |«      S )z-Return docs most similar to embedding vector.r}   )rs   r   )r?   rv   rn   rO   rT   r   s         r   Úsimilarity_search_by_vectorz!Bagel.similarity_search_by_vector4  s-   € ð ×&Ñ&Ø&°!¸5ð 'ó 
ˆô   Ó(Ð(rJ   c                ó   — | j                   r| j                   S d}d}| j                  j                  }|r	||v r||   }|dk(  r| j                  S |dk(  r| j                  S |dk(  r| j
                  S t        d|› d�«      ‚)zŒ
        Select and return the appropriate relevance score function based
        on the distance metric used in the Bagel cluster.
        Úl2z
hnsw:spaceÚcosineÚipzANo supported normalization function for distance metric of type: z=. Consider providing relevance_score_fn to Bagel constructor.)r=   r<   r$   Ú_cosine_relevance_score_fnÚ_euclidean_relevance_score_fnÚ%_max_inner_product_relevance_score_fnÚ
ValueError)r?   ÚdistanceÚdistance_keyr$   s       r   Ú_select_relevance_score_fnz Bagel._select_relevance_score_fnA  s£   € ð
 ×+Ò+Ø×3Ñ3Ð3àˆØ#ˆØ—=‘=×)Ñ)ˆá˜¨Ñ0Ø Ñ-ˆHà�xÒØ×2Ñ2Ð2Ø˜ÒØ×5Ñ5Ð5Ø˜ÒØ×=Ñ=Ð=äð$Ø$, :ð .<ð<óð rJ   c                ó°   — |D �	cg c]  }	|	j                   ‘Œ }
}	|D �	cg c]  }	|	j                  ‘Œ }}	 | j                  d|
|||||||dœ|¤ŽS c c}	w c c}	w )a  
        Create a Bagel vectorstore from a list of documents.

        Args:
            documents (List[Document]): List of Document objects to add to the
                                        Bagel vectorstore.
            embedding (Optional[List[float]]): List of embedding.
            ids (Optional[List[str]]): List of IDs. Defaults to None.
            cluster_name (str): The name of the Bagel cluster.
            client_settings (Optional[bagel.config.Settings]): Client settings.
            client (Optional[bagel.Client]): Bagel client instance.
            cluster_metadata (Optional[Dict]): Metadata associated with the
                                               Bagel cluster. Defaults to None.

        Returns:
            Bagel: Bagel vectorstore.
        )rU   rv   r    rX   r@   rA   rD   rC   rP   )r#   r$   ry   )ru   r   rv   rX   r@   rA   rD   rC   rT   r   rU   r    s               r   Úfrom_documentszBagel.from_documents]  sx   € ñ: .7Ó7©Y c�×!Ó!¨YˆÐ7Ù-6Ó7©Y c�S—\“\¨Yˆ	Ð7Øˆs�~‰~ð 

ØØØØØ%Ø+ØØ-ñ

ð ñ

ð 
	
ùò 8ùÚ7s
   …AžAc                óv   — |j                   }|j                  }| j                  j                  |g|g|g¬«       y)z«Update a document in the cluster.

        Args:
            document_id (str): ID of the document to update.
            document (Document): Document to update.
        )rX   r   r    N)r#   r$   r<   Úupdate)r?   Údocument_idÚdocumentÚtextr$   s        r   Úupdate_documentzBagel.update_documentˆ  s@   € ð ×$Ñ$ˆØ×$Ñ$ˆØ�‰×ÑØ�Ø�fØ�jð 	õ 	
rJ   c                óX   — |||||dœ}|�||d<    | j                   j                  di |¤ŽS )zGets the collection.)rX   rO   ÚlimitÚoffsetÚwhere_documentÚincluderP   )r<   Úget)r?   rX   rO   r•   r–   r—   r˜   rT   s           r   r™   z	Bagel.get—  sF   € ð ØØØØ,ñ
ˆð ÐØ 'ˆF�9Ñà ˆt�}‰}× Ñ Ñ* 6Ñ*Ð*rJ   c                ó<   — | j                   j                  |¬«       y)zW
        Delete by IDs.

        Args:
            ids: List of ids to delete.
        )rX   N)r<   Údelete)r?   rX   rT   s      r   r›   zBagel.delete®  s   € ð 	�‰×Ñ ÐÕ%rJ   )r@   r+   rA   úOptional[bagel.config.Settings]rB   úOptional[Embeddings]rC   úOptional[Dict]rD   úOptional[bagel.Client]rE   z"Optional[Callable[[float], float]]ÚreturnÚNone)r    r�   )NNé   N)rK   úOptional[List[str]]rL   úOptional[List[List[float]]]rN   ÚintrO   úOptional[Dict[str, str]]rT   r   r    úList[Document])NNN)rU   zIterable[str]r    úOptional[List[dict]]rX   r£   rI   r¤   rT   r   r    ú	List[str])
rm   r+   rn   r¥   rO   r¦   rT   r   r    r§   )
rm   r+   rn   r¥   rO   r¦   rT   r   r    úList[Tuple[Document, float]])ru   úType[Bagel]rU   r©   rv   r�   r    r¨   rX   r£   r@   r+   rA   rœ   rC   rž   rD   rŸ   rw   r¤   rT   r   r    r)   )r    r¡   )
rL   úList[float]rn   r¥   rO   r¦   rT   r   r    rª   )
rv   r¬   rn   r¥   rO   r¦   rT   r   r    r§   )r    zCallable[[float], float])ru   r«   r   r§   rv   r�   rX   r£   r@   r+   rA   rœ   rD   rŸ   rC   rž   rT   r   r    r)   )r�   r+   r‘   r   r    r¡   )NNNNNN)rX   zOptional[OneOrMany[ID]]rO   zOptional[Where]r•   úOptional[int]r–   r­   r—   zOptional[WhereDocument]r˜   r£   r    zDict[str, Any]r   )rX   r£   rT   r   r    r¡   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r,   Ú__annotations__rF   ÚpropertyrI   r   rs   rj   Ú	DEFAULT_Krp   rl   Úclassmethodry   r{   r~   r€   r‹   r�   r“   r™   r›   rP   rJ   r   r)   r)   ,   sË  … ñ	ð ,7Ð# SÓ6ð <Ø;?Ø37Ø+/Ø)-ØAEð"6àð"6ð 9ð"6ð 1ð	"6ð
 )ð"6ð 'ð"6ð ?ð"6ð 
ó"6ðH ò(ó ð(ñ Ð1Ó2ð ,0Ø8<ØØ*.ð
à(ð
ð 6ð
ð ð	
ð
 (ð
ð ð
ð 
ò
ó 3ð
ð< +/Ø#'Ø26ðGàðGð (ðGð !ð	Gð
 0ðGð ðGð 
óGðX Ø*.ð	3àð3ð ð3ð (ð	3ð
 ð3ð 
ó3ð2 Ø*.ð	4àð4ð ð4ð (ð	4ð
 ð4ð 
&ó4ð2 ð +/Ø*.Ø#'Ø;Ø;?Ø+/Ø)-Ø7;ð(Øð(àð(ð (ð(ð (ð	(ð
 !ð(ð ð(ð 9ð(ð )ð(ð 'ð(ð 5ð(ð ð(ð 
ò(ó ð(óT8ð Ø*.ð	4à%ð4ð ð4ð (ð	4ð
 ð4ð 
&ó4ð$ Ø*.ð	)àð)ð ð)ð (ð	)ð
 ð)ð 
ó)óð8 ð +/Ø#'Ø;Ø;?Ø)-Ø+/ð(
Øð(
à!ð(
ð (ð(
ð !ð	(
ð
 ð(
ð 9ð(
ð 'ð(
ð )ð(
ð ð(
ð 
ò(
ó ð(
óT
ð" (,Ø!%Ø#Ø $Ø26Ø'+ð+à$ð+ð ð+ð ð	+ð
 ð+ð 0ð+ð %ð+ð 
ó+õ.&rJ   r)   )r   r   r    r§   )r   r   r    rª   ) Ú
__future__r   rY   Útypingr   r   r   r   r   r	   r
   r   r   r3   r4   Úbagel.api.typesr   r   r   r   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.utilsr   Úlangchain_core.vectorstoresr   r´   r   r   r)   rP   rJ   r   Ú<module>r½      sU   ðÝ "ã ÷
÷ 
õ 
ñ ÛÛßCÓCå -Ý 0Ý )Ý 3à€	óDóôI&ˆKõ I&rJ   