Ë
    µŒjm/  ã                  ó¢   — d dl mZ d dlZd dl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)ÚAnyÚIterableÚListÚOptionalÚType)ÚDocument)Ú
Embeddings)ÚVectorStorec                  óX  — e Zd ZU dZdZded<   	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zedd„«       Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Z	dd	„Z
	 d	 	 	 	 	 	 	 dd
„Ze	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Ze	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Zy)ÚAtlasDBaì  `Atlas` vector store.

     Atlas is the `Nomic's` neural database and `rhizomatic` instrument.

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

    Example:
        .. code-block:: python

                from langchain_community.vectorstores import AtlasDB
                from langchain_community.embeddings.openai import OpenAIEmbeddings

                embeddings = OpenAIEmbeddings()
                vectorstore = AtlasDB("my_project", embeddings.embed_query)
    Úatlas_idÚstrÚ_ATLAS_DEFAULT_ID_FIELDNc                ó*  — 	 ddl }ddl m} |€t        d«      ‚|j	                  |«       || _        d}	| j
                  �d}	 ||||	||t        j                  ¬«      | _        | j                  j                  «        y# t        $ r t        d«      ‚w xY w)	a  
        Initialize the Atlas Client

        Args:
            name (str): The name of your project. If the project already exists,
                it will be loaded.
            embedding_function (Optional[Embeddings]): An optional function used for
                embedding your data. If None, data will be embedded with
                Nomic's embed model.
            api_key (str): Your nomic API key
            description (str): A description for your project.
            is_public (bool): Whether your project is publicly accessible.
                True by default.
            reset_project_if_exists (bool): Whether to reset this project if it
                already exists. Default False.
                Generally useful during development and testing.
        r   N)ÚAtlasProjectzRCould not import nomic python package. Please install it with `pip install nomic`.z/No API key provided. Sign up at atlas.nomic.ai!ÚtextÚ	embedding)ÚnameÚdescriptionÚmodalityÚ	is_publicÚreset_project_if_existsÚunique_id_field)
Únomicr   ÚImportErrorÚ
ValueErrorÚloginÚ_embedding_functionr   r   ÚprojectÚ_latest_project_state)
Úselfr   Úembedding_functionÚapi_keyr   r   r   r   r   r   s
             úp/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/atlas.pyÚ__init__zAtlasDB.__init__"   s¥   € ð4	ÛÝ*ð ˆ?ÜÐNÓOÐOØ�‰�GÔà#5ˆÔ ØˆØ×#Ñ#Ð/Ø"ˆHñ $ØØ#ØØØ$;Ü#×;Ñ;ô
ˆŒð 	�‰×*Ñ*Õ,øô1 ò 	Üð>óð ð	ús   ‚
A= Á=Bc                ó   — | j                   S )N)r   )r"   s    r%   Ú
embeddingszAtlasDB.embeddingsY   s   € à×'Ñ'Ð'ó    c           	     óò  — |�.t        |«      dkD  r d|d   j                  «       v rt        d«      ‚t        |«      }|€*|D �cg c]  }t	        t        j                  «       «      ‘Œ! }}| j                  ��| j                  j                  |«      }t        j                  |«      }|€6t        |«      D �	�cg c]  \  }	}t        j                  ||	   d||	   i‘Œ! }
}	}n?t        t        |«      «      D ]&  }	||	   ||	   t        j                  <   ||	   ||	   d<   Œ( |}
| j                  j!                  g t        j                  |
¬«       | j                  j#                  «       5  | j                  j%                  ||
¬«       ddd«       nÕ|€3t        |«      D �	�cg c]  \  }	}d|t        j                  ||	   i‘Œ }
}	}n6t        |«      D ]&  \  }	}|||	   d<   ||	   ||	   t        j                  <   Œ( |}
| j                  j!                  g t        j                  |
¬«       | j                  j#                  «       5  | j                  j'                  |
«       ddd«       |rat        | j                  j(                  «      dkD  r?| j                  j#                  «       5  | j                  j+                  «        ddd«       |S |S c c}w c c}}	w # 1 sw Y   ŒyxY wc c}}	w # 1 sw Y   Œ‹xY w# 1 sw Y   |S xY w)aë  Run more texts through the embeddings and add to the vectorstore.

        Args:
            texts (Iterable[str]): Texts to add to the vectorstore.
            metadatas (Optional[List[dict]], optional): Optional list of metadatas.
            ids (Optional[List[str]]): An optional list of ids.
            refresh(bool): Whether or not to refresh indices with the updated data.
                Default True.
        Returns:
            List[str]: List of IDs of the added texts.
        Nr   r   z#Cannot accept key text in metadata!)Úid_fieldÚdata)r(   r,   )ÚlenÚkeysr   Úlistr   ÚuuidÚuuid4r   Úembed_documentsÚnpÚstackÚ	enumerater   r   Úranger    Ú_validate_map_data_inputsÚwait_for_project_lockÚadd_embeddingsÚadd_textÚindicesÚrebuild_maps)r"   ÚtextsÚ	metadatasÚidsÚrefreshÚkwargsÚ_Ú_embeddingsr(   Úir,   r   s               r%   Ú	add_textszAtlasDB.add_texts]   sÈ  € ð* Ð!Ü�I“ Ò"Ø˜) A™,×+Ñ+Ó-Ñ-äÐBÓCÐCä�U“ˆØˆ;Ù.3Ó4©e¨”3”t—z‘z“|Õ$¨eˆCÐ4ð ×#Ñ#Ñ/Ø×2Ñ2×BÑBÀ5ÓIˆKÜŸ™ +Ó.ˆJØÐ ô !*¨%Ô 0ôá 0™˜˜1ô ×4Ñ4°c¸!±f¸fÀeÈAÁhÒOØ 0ð ò ô
 œs 9›~Ö.�AØDGÈÁF�I˜a‘L¤×!@Ñ!@ÑAØ+0°©8�I˜a‘L Ò(ð /ð !�à�L‰L×2Ñ2ØœW×<Ñ<À4ð 3ô ð —‘×3Ñ3Õ5Ø—‘×+Ñ+°zÈÐ+ÔM÷ 6Ð5ð Ð ô $-¨UÔ#3ôá#3™˜˜4ð ˜T¤7×#BÑ#BÀCÈÁFÒKØ#3ð ò ô
  )¨Ö/‘G�A�tØ+0�I˜a‘L Ñ(ØDGÈÁF�I˜a‘L¤×!@Ñ!@ÒAð  0ð !�à�L‰L×2Ñ2ØœW×<Ñ<À4ð 3ô ð —‘×3Ñ3Õ5Ø—‘×%Ñ% dÔ+÷ 6ñ Ü�4—<‘<×'Ñ'Ó(¨1Ò,Ø—\‘\×7Ñ7Õ9Ø—L‘L×-Ñ-Ô/÷ :ð ˆ
ˆsˆ
ùò_ 5ùó÷ 6Ð5üó
÷ 6Ð5ú÷
 :ð ˆ
ús6   Á$KÂ5$KÅ"KÆ!KÈ:K ÊK,ËKË K)Ë,K6c                óš   — | j                   j                  «       5   | j                   j                  di |¤Žcddd«       S # 1 sw Y   yxY w)z¥Creates an index in your project.

        See
        https://docs.nomic.ai/atlas_api.html#nomic.project.AtlasProject.create_index
        for full detail.
        N© )r    r8   Úcreate_index)r"   rA   s     r%   rH   zAtlasDB.create_index«   s7   € ð �\‰\×/Ñ/Õ1Ø,�4—<‘<×,Ñ,Ñ6¨vÑ6÷ 2×1Ò1ús   ›AÁA
c           	     ó   — | j                   €t        d«      ‚| j                   j                  |g«      d   }t        j                  |«      j                  dd«      }| j                  j                  «       5  | j                  j                  d   j                  ||¬«      \  }}| j                  j                  |d   ¬«      }ddd«       t        «      D �	�
cg c]  \  }	}
t        |	   d   ||	   ¬	«      ‘Œ }}	}
|S # 1 sw Y   Œ<xY wc c}
}	w )
a  Run similarity search with AtlasDB

        Args:
            query (str): Query text to search for.
            k (int): Number of results to return. Defaults to 4.

        Returns:
            List[Document]: List of documents most similar to the query text.
        NzBAtlasDB requires an embedding_function for text similarity search!r   é   éÿÿÿÿ)ÚqueriesÚk)r?   r   )Úpage_contentÚmetadata)r   ÚNotImplementedErrorr2   r3   ÚarrayÚreshaper    r8   ÚprojectionsÚvector_searchÚget_datar5   r	   )r"   ÚqueryrM   rA   Ú
_embeddingr   Ú	neighborsrB   r,   rD   ÚneighborÚdocss               r%   Úsimilarity_searchzAtlasDB.similarity_searchµ   s  € ð ×#Ñ#Ð+Ü%ØTóð ð ×-Ñ-×=Ñ=¸u¸gÓFÀqÑIˆ
Ü—H‘H˜ZÓ(×0Ñ0°°BÓ7ˆ	Ø�\‰\×/Ñ/Õ1ØŸ<™<×3Ñ3°AÑ6×DÑDØ! Qð Eó ‰LˆI�qð —<‘<×(Ñ(¨Y°q©\Ð(Ó:ˆD÷	 2ô  )¨Ô3ô
á3‘��8ô  $ q¡'¨&¡/¸DÀ¹GÖDØ3ð 	ñ 
ð ˆ÷ 2Ð1üó
s   Á6AC>Ã D
Ã>Dc                ó:  — |�|€t        d«      ‚|dz   ddœ}|
�|
j                  «       D ]
  \  }}|||<   Œ  | |||d||	¬«      }|j                  j                  «       5  |j	                  |||¬«        |j
                  d	i |¤Ž ddd«       |S # 1 sw Y   |S xY w)
a^  Create an AtlasDB vectorstore from a raw documents.

        Args:
            texts (List[str]): The list of texts to ingest.
            name (str): Name of the project to create.
            api_key (str): Your nomic API key,
            embedding (Optional[Embeddings]): Embedding function. Defaults to None.
            metadatas (Optional[List[dict]]): List of metadatas. Defaults to None.
            ids (Optional[List[str]]): Optional list of document IDs. If None,
                ids will be auto created
            description (str): A description for your project.
            is_public (bool): Whether your project is publicly accessible.
                True by default.
            reset_project_if_exists (bool): Whether to reset this project if it
                already exists. Default False.
                Generally useful during development and testing.
            index_kwargs (Optional[dict]): Dict of kwargs for index creation.
                See https://docs.nomic.ai/atlas_api.html

        Returns:
            AtlasDB: Nomic's neural database and finest rhizomatic instrument
        Nú$`name` and `api_key` cannot be None.Ú_indexr   )r   Úindexed_fieldúA description for your project)r#   r$   r   r   r   )r=   r>   r?   rG   )r   Úitemsr    r8   rE   rH   )Úclsr=   r   r>   r?   r   r$   r   r   r   Úindex_kwargsrA   Úall_index_kwargsrM   ÚvÚatlasDBs                   r%   Ú
from_textszAtlasDB.from_texts×   sÅ   € ðJ ˆ<˜7˜?ÜÐCÓDÐDð %)¨8¡OÀfÑMÐØÐ#Ø$×*Ñ*Ö,‘��1Ø&'Ð  Ò#ð -ñ ØØ(ØØ8ØØ$;ô
ˆð �_‰_×2Ñ2Õ4Ø×Ñ E°YÀCÐÔHØ ˆG× Ñ Ñ4Ð#3Ò4÷ 5ð ˆ÷ 5ð ˆús   Á'BÂBc                óÎ   — |�|€t        d«      ‚|D �cg c]  }|j                  ‘Œ }}|D �cg c]  }|j                  ‘Œ }}| j                  |||||||||	|
¬«
      S c c}w c c}w )a+  Create an AtlasDB vectorstore from a list of documents.

        Args:
            name (str): Name of the collection to create.
            api_key (str): Your nomic API key,
            documents (List[Document]): List of documents to add to the vectorstore.
            embedding (Optional[Embeddings]): Embedding function. Defaults to None.
            ids (Optional[List[str]]): Optional list of document IDs. If None,
                ids will be auto created
            description (str): A description for your project.
            is_public (bool): Whether your project is publicly accessible.
                True by default.
            reset_project_if_exists (bool): Whether to reset this project if
                it already exists. Default False.
                Generally useful during development and testing.
            index_kwargs (Optional[dict]): Dict of kwargs for index creation.
                See https://docs.nomic.ai/atlas_api.html

        Returns:
            AtlasDB: Nomic's neural database and finest rhizomatic instrument
        r]   )
r   r$   r=   r   r>   r?   r   r   r   rc   )r   rN   rO   rg   )rb   Ú	documentsr   r?   r   r$   Úpersist_directoryr   r   r   rc   rA   Údocr=   r>   s                  r%   Úfrom_documentszAtlasDB.from_documents  sˆ   € ðH ˆ<˜7˜?ÜÐCÓDÐDÙ-6Ó7©Y c�×!Ó!¨YˆÐ7Ù-6Ó7©Y c�S—\“\¨Yˆ	Ð7Ø�~‰~ØØØØØØØ#ØØ$;Ø%ð ó 
ð 	
ùò 8ùÚ7s
   ”A­A")NNr`   TF)r   r   r#   úOptional[Embeddings]r$   úOptional[str]r   r   r   Úboolr   ro   ÚreturnÚNone)rp   rm   )NNT)r=   zIterable[str]r>   úOptional[List[dict]]r?   úOptional[List[str]]r@   ro   rA   r   rp   ú	List[str])rA   r   rp   r   )é   )rV   r   rM   ÚintrA   r   rp   úList[Document])	NNNNNr`   TFN)rb   úType[AtlasDB]r=   rt   r   rm   r>   rr   r?   rs   r   rn   r$   rn   r   r   r   ro   r   ro   rc   úOptional[dict]rA   r   rp   r   )rb   rx   ri   rw   r   rm   r?   rs   r   rn   r$   rn   rj   rn   r   r   r   ro   r   ro   rc   ry   rA   r   rp   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r&   Úpropertyr(   rE   rH   r[   Úclassmethodrg   rl   rG   r)   r%   r   r      sj  … ñð  $.Ð˜SÓ-ð
 48Ø!%Ø;ØØ(-ð5-àð5-ð 1ð5-ð ð	5-ð
 ð5-ð ð5-ð "&ð5-ð 
ó5-ðn ò(ó ð(ð +/Ø#'ØðLàðLð (ðLð !ð	Lð
 ðLð ðLð 
óLó\7ð ð àð ð ð ð ð	 ð
 
ó ðD ð +/Ø*.Ø#'Ø"Ø!%Ø;ØØ(-Ø'+ð9Øð9àð9ð (ð9ð (ð	9ð
 !ð9ð ð9ð ð9ð ð9ð ð9ð "&ð9ð %ð9ð ð9ð 
ò9ó ð9ðv ð +/Ø#'Ø"Ø!%Ø+/Ø;ØØ(-Ø'+ð2
Øð2
à!ð2
ð (ð2
ð !ð	2
ð
 ð2
ð ð2
ð )ð2
ð ð2
ð ð2
ð "&ð2
ð %ð2
ð ð2
ð 
ò2
ó ñ2
r)   r   )Ú
__future__r   Úloggingr0   Útypingr   r   r   r   r   Únumpyr3   Úlangchain_core.documentsr	   Úlangchain_core.embeddingsr
   Úlangchain_core.vectorstoresr   Ú	getLoggerrz   Úloggerr   rG   r)   r%   Ú<module>rŠ      s@   ðÝ "ã Û ß 6Õ 6ã Ý -Ý 0Ý 3à	ˆ×	Ñ	˜8Ó	$€ôw
ˆkõ w
r)   