Ë
    µŒjJ5  ã                  ó’   — 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	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	Z G d
„ de«      Zy)é    )ÚannotationsN)ÚAnyÚDictÚIterableÚListÚOptionalÚTupleÚType)ÚDocument)Ú
Embeddings)Úget_from_dict_or_env)ÚVectorStorei   Úlangchain_pg_embeddingc                  óˆ  — e Zd ZdZeeddf	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 dd„Zedd„«       Z	e
ddeedf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Z	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 	 	 dd	„Z	 	 d	 	 	 	 	 	 	 	 	 dd
„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 dd„Ze
deeddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d d„«       Ze
deeddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d!d„«       Ze
eedf	 	 	 	 	 	 	 	 	 	 	 	 	 d"d„«       Ze
d#d„«       Ze
eeddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d$d„«       Ze
	 	 	 	 	 	 	 	 	 	 	 	 d%d„«       Zy)&ÚHologresa¯  `Hologres API` vector store.

    - `connection_string` is a hologres connection string.
    - `embedding_function` any embedding function implementing
        `langchain.embeddings.base.Embeddings` interface.
    - `ndims` is the number of dimensions of the embedding output.
    - `table_name` is the name of the table to store embeddings and data.
        (default: langchain_pg_embedding)
        - NOTE: The table will be created when initializing the store (if not exists)
            So, make sure the user has the right permissions to create tables.
    - `pre_delete_table` if True, will delete the table if it exists.
        (default: False)
        - Useful for testing.
    FNc                ó®   — || _         || _        || _        || _        || _        |xs t        j                  t        «      | _        | j                  «        y ©N)
Úconnection_stringÚndimsÚ
table_nameÚembedding_functionÚpre_delete_tableÚloggingÚ	getLoggerÚ__name__ÚloggerÚ__post_init__)Úselfr   r   r   r   r   r   s          ús/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/hologres.pyÚ__init__zHologres.__init__    sM   € ð "3ˆÔØˆŒ
Ø$ˆŒØ"4ˆÔØ 0ˆÔØÒ;¤× 1Ñ 1´(Ó ;ˆŒØ×ÑÕó    c                óˆ   — ddl m}  || j                  | j                  | j                  ddi| j
                  ¬«      | _        y)z'
        Initialize the store.
        r   )ÚHologresVectorÚdocumentÚtext)r   r   Útable_schemar   N)Úhologres_vectorr#   r   r   r   r   Ústorage)r   r#   s     r   r   zHologres.__post_init__1   s;   € õ 	3á%Ø×"Ñ"Ø—*‘*Ø—‘Ø$ fÐ-Ø!×2Ñ2ô
ˆ�r!   c                ó   — | j                   S r   )r   )r   s    r   Ú
embeddingszHologres.embeddingsA   s   € à×&Ñ&Ð&r!   c	                óþ   — |€*|D �
cg c]  }
t        t        j                  «       «      ‘Œ! }}
|s|D �
cg c]  }
i ‘Œ }}
| j                  |	«      } | |||||¬«      } |j                  d||||dœ|	¤Ž |S c c}
w c c}
w )N)r   r   r   r   r   )Útextsr*   Ú	metadatasÚids© )ÚstrÚuuidÚuuid4Úget_connection_stringÚadd_embeddings)Úclsr,   r*   r   r-   r.   r   r   r   ÚkwargsÚ_r   Ústores                r   Ú__fromzHologres.__fromE   s¢   € ð ˆ;Ù.3Ó4©e¨”3”t—z‘z“|Õ$¨eˆCÐ4áÙ%*Ó+¡U š UˆIÐ+à×5Ñ5°fÓ=ÐáØ/Ø1ØØ!Ø-ô
ˆð 	ˆ×Ñð 	
Ø J¸)Èñ	
ØPVò	
ð ˆùò' 5ùò ,s
   ‡$A5³	A:c                óÐ   — 	 |D �cg c]  }d|i‘Œ }}| j                   j                  ||||«       yc c}w # t        $ r%}| j                  j	                  |«       Y d}~yd}~ww xY w)a/  Add embeddings to the vectorstore.

        Args:
            texts: Iterable of strings to add to the vectorstore.
            embeddings: List of list of embedding vectors.
            metadatas: List of metadatas associated with the texts.
            kwargs: vectorstore specific parameters
        r$   N)r(   Úupsert_vectorsÚ	Exceptionr   Ú	exception)	r   r,   r*   r-   r.   r6   ÚtÚschema_datasÚes	            r   r4   zHologres.add_embeddingsh   sa   € ð 	%Ù5:Ó;±U°˜Z¨šO°UˆLÐ;Ø�L‰L×'Ñ'¨
°C¸ÀLÕQùò <øäò 	%Ø�K‰K×!Ñ! !×$Ñ$ûð	%ús!   ‚7 †2‘ 7 ²7 ·	A%Á A Á A%c                ó  — |€*|D �cg c]  }t        t        j                  «       «      ‘Œ! }}| j                  j	                  t        |«      «      }|s|D �cg c]  }i ‘Œ }} | j                  ||||fi |¤Ž |S c c}w c c}w )ar  Run more texts through the embeddings and add to the vectorstore.

        Args:
            texts: Iterable of strings to add to the vectorstore.
            metadatas: Optional list of metadatas associated with the texts.
            kwargs: vectorstore specific parameters

        Returns:
            List of ids from adding the texts into the vectorstore.
        )r0   r1   r2   r   Úembed_documentsÚlistr4   )r   r,   r-   r.   r6   r7   r*   s          r   Ú	add_textszHologres.add_texts~   sƒ   € ð" ˆ;Ù.3Ó4©e¨”3”t—z‘z“|Õ$¨eˆCÐ4à×,Ñ,×<Ñ<¼TÀ%»[ÓIˆ
áÙ%*Ó+¡U š UˆIÐ+àˆ×Ñ˜E :¨y¸#ÑHÀÒHàˆ
ùò 5ùò
 ,s   ‡$A:Á	A?c                ób   — | j                   j                  |¬«      }| j                  |||¬«      S )a^  Run similarity search with Hologres with distance.

        Args:
            query (str): Query text to search for.
            k (int): Number of results to return. Defaults to 4.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List of Documents most similar to the query.
        )r%   ©Ú	embeddingÚkÚfilter)r   Úembed_queryÚsimilarity_search_by_vector)r   ÚqueryrH   rI   r6   rG   s         r   Úsimilarity_searchzHologres.similarity_search›   s>   € ð" ×+Ñ+×7Ñ7¸UÐ7ÓCˆ	Ø×/Ñ/ØØØð 0ó 
ð 	
r!   c                ó`   — | j                  |||¬«      }|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )ak  Return docs most similar to embedding vector.

        Args:
            embedding: Embedding to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List of Documents most similar to the query vector.
        rF   )Ú&similarity_search_with_score_by_vector)r   rG   rH   rI   r6   Údocs_and_scoresÚdocr7   s           r   rK   z$Hologres.similarity_search_by_vector³   s?   € ð" ×EÑEØ 1¨Vð Fó 
ˆñ #2Ô2¡/™˜˜Q’ /Ò2Ð2ùÓ2s   š*c                ód   — | j                   j                  |«      }| j                  |||¬«      }|S )ab  Return docs most similar to query.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List of Documents most similar to the query and score for each
        rF   )r   rJ   rO   )r   rL   rH   rI   rG   Údocss         r   Úsimilarity_search_with_scorez%Hologres.similarity_search_with_scoreÉ   s=   € ð  ×+Ñ+×7Ñ7¸Ó>ˆ	Ø×:Ñ:Ø 1¨Vð ;ó 
ˆð ˆr!   c                óš   — | j                   j                  ||dg|¬«      }|D �cg c]  }t        |d   |d   ¬«      |d   f‘Œ }}|S c c}w )Nr$   )rH   Úselect_columnsÚmetadata_filtersÚmetadata)Úpage_contentrX   Údistance)r(   Úsearchr   )r   rG   rH   rI   ÚresultsÚresultrS   s          r   rO   z/Hologres.similarity_search_with_score_by_vectorß   s~   € ð )-¯©×(;Ñ(;Ø˜¨J¨<È&ð )<ó )
ˆñ "ó	
ñ "�ô Ø!'¨
Ñ!3Ø# JÑ/ôð �zÑ"òð "ð 	ð 	
ð ˆùò	
s   ¥Ac           	     ól   — |j                  t        |«      «      }	 | j                  ||	|f|||||dœ|¤ŽS )aM  
        Return VectorStore initialized from texts and embeddings.
        Hologres connection string is required
        "Either pass it as a parameter
        or set the HOLOGRES_CONNECTION_STRING environment variable.
        Create the connection string by calling
        HologresVector.connection_string_from_db_params
        ©r-   r.   r   r   r   )rB   rC   Ú_Hologres__from)
r5   r,   rG   r-   r   r   r.   r   r6   r*   s
             r   Ú
from_textszHologres.from_textsõ   sT   € ð( ×.Ñ.¬t°E«{Ó;ˆ
àˆs�z‰zØØØð

ð  ØØØ!Ø-ñ

ð ñ

ð 
	
r!   c           	     ó”   — |D �	cg c]  }	|	d   ‘Œ	 }
}	|D �	cg c]  }	|	d   ‘Œ	 }}	 | j                   |
||f|||||dœ|¤ŽS c c}	w c c}	w )a~  Construct Hologres wrapper from raw documents and pre-
        generated embeddings.

        Return VectorStore initialized from documents and embeddings.
        Hologres connection string is required
        "Either pass it as a parameter
        or set the HOLOGRES_CONNECTION_STRING environment variable.
        Create the connection string by calling
        HologresVector.connection_string_from_db_params

        Example:
            .. code-block:: python

                from langchain_community.vectorstores import Hologres
                from langchain_community.embeddings import OpenAIEmbeddings
                embeddings = OpenAIEmbeddings()
                text_embeddings = embeddings.embed_documents(texts)
                text_embedding_pairs = list(zip(texts, text_embeddings))
                faiss = Hologres.from_embeddings(text_embedding_pairs, embeddings)
        r   é   r_   )r`   )r5   Útext_embeddingsrG   r-   r   r   r.   r   r6   r>   r,   r*   s               r   Úfrom_embeddingszHologres.from_embeddings  sy   € ñ@  /Ó/™˜!��1“˜ˆÐ/Ù$3Ó4¡O˜q�a˜“d Oˆ
Ð4àˆs�z‰zØØØð

ð  ØØØ!Ø-ñ

ð ñ

ð 
	
ùò 0ùÚ4s
   …A —Ac                óB   — | j                  |«      } | |||||¬«      }|S )z£
        Get instance of an existing Hologres store.This method will
        return the instance of the store without inserting any new
        embeddings
        )r   r   r   r   r   )r3   )r5   rG   r   r   r   r6   r   r8   s           r   Úfrom_existing_indexzHologres.from_existing_indexF  s5   € ð  ×5Ñ5°fÓ=ÐáØ/ØØ!Ø(Ø-ô
ˆð ˆr!   c                ó<   — t        |dd¬«      }|st        d«      ‚|S )Nr   ÚHOLOGRES_CONNECTION_STRING)ÚdataÚkeyÚenv_keyzÔHologres connection string is requiredEither pass it as a parameteror set the HOLOGRES_CONNECTION_STRING environment variable.Create the connection string by callingHologresVector.connection_string_from_db_params)r   Ú
ValueError)r5   r6   r   s      r   r3   zHologres.get_connection_stringa  s6   € ä!5ØØ#Ø0ô"
Ðñ !ÜðBóð ð !Ð r!   c                óÚ   — |D �cg c]  }|j                   ‘Œ }	}|D �cg c]  }|j                  ‘Œ }
}| j                  |«      }||d<    | j                  d|	|||
|||dœ|¤ŽS c c}w c c}w )aQ  
        Return VectorStore initialized from documents and embeddings.
        Hologres connection string is required
        "Either pass it as a parameter
        or set the HOLOGRES_CONNECTION_STRING environment variable.
        Create the connection string by calling
        HologresVector.connection_string_from_db_params
        r   )r,   Úpre_delete_collectionrG   r-   r.   r   r   r/   )rY   rX   r3   ra   )r5   Ú	documentsrG   r   r   r.   ro   r6   Údr,   r-   r   s               r   Úfrom_documentszHologres.from_documentst  s�   € ñ( *3Ó3© A�—“¨ˆÐ3Ù)2Ó3© A�Q—Z“Z¨ˆ	Ð3Ø×5Ñ5°fÓ=Ðà&7ˆÐ"Ñ#àˆs�~‰~ð 	
ØØ"7ØØØØØ!ñ	
ð ñ	
ð 		
ùò 4ùÚ3s
   …A#žA(c           
     ó$   — d|› d|› d|› d|› d|› �
S )z2Return connection string from database parameters.zdbname=z user=z
 password=z host=z port=r/   )r5   ÚhostÚportÚdatabaseÚuserÚpasswords         r   Ú connection_string_from_db_paramsz)Hologres.connection_string_from_db_params™  s-   € ð �h�Z˜v d V¨:°h°Z¸vÀdÀVÈ6ÐRVÐQWÐXð	
r!   )r   r0   r   r   r   Úintr   r0   r   Úboolr   zOptional[logging.Logger]ÚreturnÚNone)r|   r}   )r|   r   )r,   ú	List[str]r*   úList[List[float]]r   r   r-   úOptional[List[dict]]r.   úOptional[List[str]]r   rz   r   r0   r   r{   r6   r   r|   r   )r,   úIterable[str]r*   r   r-   z
List[dict]r.   r~   r6   r   r|   r}   )NN)
r,   r‚   r-   r€   r.   r�   r6   r   r|   r~   )é   N)
rL   r0   rH   rz   rI   úOptional[dict]r6   r   r|   úList[Document])
rG   úList[float]rH   rz   rI   r„   r6   r   r|   r…   )rL   r0   rH   rz   rI   r„   r|   úList[Tuple[Document, float]])rG   r†   rH   rz   rI   r„   r|   r‡   )r5   úType[Hologres]r,   r~   rG   r   r-   r€   r   rz   r   r0   r.   r�   r   r{   r6   r   r|   r   )rd   zList[Tuple[str, List[float]]]rG   r   r-   r€   r   rz   r   r0   r.   r�   r   r{   r6   r   r|   r   )r5   rˆ   rG   r   r   rz   r   r0   r   r{   r6   r   r|   r   )r6   zDict[str, Any]r|   r0   )r5   rˆ   rp   r…   rG   r   r   rz   r   r0   r.   r�   ro   r{   r6   r   r|   r   )rt   r0   ru   rz   rv   r0   rw   r0   rx   r0   r|   r0   )r   Ú
__module__Ú__qualname__Ú__doc__ÚADA_TOKEN_COUNTÚ_LANGCHAIN_DEFAULT_TABLE_NAMEr    r   Úpropertyr*   Úclassmethodr`   r4   rD   rM   rK   rT   rO   ra   re   rg   r3   rr   ry   r/   r!   r   r   r      s¤  „ ñð& %Ø7Ø!&Ø+/ðàðð 'ðð ð	ð
 ðð ðð )ðð 
óð"
à	ó
ð  ò'ó ð'ð ð +/Ø#'Ø$Ø7Ø!&ð àð ð &ð ð 'ð	 ð
 (ð ð !ð ð ð ð ð ð ð ð ð ð 
ò ó ð ðD%àð%ð &ð%ð ð	%ð
 ð%ð ð%ð 
ó%ð2 +/Ø#'ð	àðð (ðð !ð	ð
 ðð 
óð@ Ø!%ð	
àð
ð ð
ð ð	
ð
 ð
ð 
ó
ð6 Ø!%ð	3àð3ð ð3ð ð	3ð
 ð3ð 
ó3ð2 Ø!%ð	àðð ðð ð	ð
 
&óð2 Ø!%ð	àðð ðð ð	ð
 
&óð, ð
 +/Ø$Ø7Ø#'Ø!&ð
Øð
àð
ð ð
ð (ð	
ð
 ð
ð ð
ð !ð
ð ð
ð ð
ð 
ò
ó ð
ðB ð
 +/Ø$Ø7Ø#'Ø!&ð,
à6ð,
ð ð,
ð (ð	,
ð
 ð,
ð ð,
ð !ð,
ð ð,
ð ð,
ð 
ò,
ó ð,
ð\ ð %Ø7Ø!&ðØðàðð ðð ð	ð
 ðð ðð 
òó ðð4 ò!ó ð!ð$ ð
 %Ø7Ø#'Ø&+ð"
Øð"
à!ð"
ð ð"
ð ð	"
ð
 ð"
ð !ð"
ð  $ð"
ð ð"
ð 
ò"
ó ð"
ðH ð
àð
ð ð
ð ð	
ð
 ð
ð ð
ð 
ò
ó ñ
r!   r   )Ú
__future__r   r   r1   Útypingr   r   r   r   r   r	   r
   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.utilsr   Úlangchain_core.vectorstoresr   rŒ   r�   r   r/   r!   r   Ú<module>r–      s<   ðÝ "ã Û ß C× CÑ Cå -Ý 0Ý 5Ý 3à€Ø 8Ð ôU
ˆ{õ U
r!   