§
    šŠtjJ5  ã                  óš   — 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dS )é    )ÚannotationsN)ÚAnyÚDictÚIterableÚListÚOptionalÚTupleÚType©ÚDocument)Ú
Embeddings)Úget_from_dict_or_env)ÚVectorStorei   Úlangchain_pg_embeddingc                  óp  — e Zd ZdZeeddfdBd„ZdCd„ZedDd„¦   «         Z	e
ddeedfdEd„¦   «         ZdFd!„Z	 	 dGdHd"„Z	 	 dIdJd)„Z	 	 dIdKd,„Z	 	 dIdLd.„Z	 	 dIdMd/„Ze
deeddfdNd2„¦   «         Ze
deeddfdOd5„¦   «         Ze
eedfdPd6„¦   «         Ze
dQd8„¦   «         Ze
eeddfdRd;„¦   «         Ze
dSdA„¦   «         ZdS )TÚ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.
    FNÚconnection_stringÚstrÚembedding_functionr   ÚndimsÚintÚ
table_nameÚpre_delete_tableÚboolÚloggerúOptional[logging.Logger]ÚreturnÚNonec                ó´   — || _         || _        || _        || _        || _        |pt          j        t          ¦  «        | _        |  	                    ¦   «          d S ©N)
r   r   r   r   r   ÚloggingÚ	getLoggerÚ__name__r   Ú__post_init__)Úselfr   r   r   r   r   r   s          úg/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/hologres.pyÚ__init__zHologres.__init__    sY   € ð "3ˆÔØˆŒ
Ø$ˆŒØ"4ˆÔØ 0ˆÔØÐ;¥Ô 1µ(Ñ ;Ô ;ˆŒØ×ÒÑÔÐÐÐó    c                óh   — ddl m}  || j        | j        | j        ddi| j        ¬¦  «        | _        dS )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   sP   € ð 	3Ð2Ð2Ð2Ð2Ð2à%�~ØÔ"Ø”*Ø”Ø$ fÐ-Ø!Ô2ð
ñ 
ô 
ˆŒˆˆr(   c                ó   — | j         S r    )r   )r%   s    r&   Ú
embeddingszHologres.embeddingsA   s   € àÔ&Ð&r(   Útextsú	List[str]r1   úList[List[float]]Ú	metadatasúOptional[List[dict]]ÚidsúOptional[List[str]]Úkwargsr   c	                ó¬   — |€d„ |D ¦   «         }|sd„ |D ¦   «         }|                       |	¦  «        }
 | |
||||¬¦  «        } |j        d||||dœ|	¤Ž |S )Nc                óN   — g | ]"}t          t          j        ¦   «         ¦  «        ‘Œ#S © ©r   ÚuuidÚuuid4©Ú.0Ú_s     r&   ú
<listcomp>z#Hologres.__from.<locals>.<listcomp>S   ó&   € Ð4Ð4Ð4¨•3•t”z‘|”|Ñ$Ô$Ð4Ð4Ð4r(   c                ó   — g | ]}i ‘ŒS r<   r<   r@   s     r&   rC   z#Hologres.__from.<locals>.<listcomp>V   ó   € Ð+Ð+Ð+ ˜Ð+Ð+Ð+r(   )r   r   r   r   r   )r2   r1   r5   r7   r<   )Úget_connection_stringÚadd_embeddings)Úclsr2   r1   r   r5   r7   r   r   r   r9   r   Ústores               r&   Ú__fromzHologres.__fromE   s«   € ð ˆ;Ø4Ð4¨eÐ4Ñ4Ô4ˆCàð 	,Ø+Ð+ UÐ+Ñ+Ô+ˆIà×5Ò5°fÑ=Ô=Ðà�Ø/Ø1ØØ!Ø-ð
ñ 
ô 
ˆð 	ˆÔð 	
Ø J¸)Èð	
ð 	
ØPVð	
ð 	
ð 	
ð ˆr(   úIterable[str]ú
List[dict]c                ó¾   — 	 d„ |D ¦   «         }| j                              ||||¦  «         dS # t          $ r%}| j                             |¦  «         Y d}~dS 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
        c                ó   — g | ]}d |i‘ŒS )r+   r<   ©rA   Úts     r&   rC   z+Hologres.add_embeddings.<locals>.<listcomp>y   s   € Ð;Ð;Ð;°˜Z¨˜OÐ;Ð;Ð;r(   N)r/   Úupsert_vectorsÚ	Exceptionr   Ú	exception)r%   r2   r1   r5   r7   r9   Úschema_datasÚes           r&   rH   zHologres.add_embeddingsh   sƒ   € ð 	%Ø;Ð;°UÐ;Ñ;Ô;ˆLØŒL×'Ò'¨
°C¸ÀLÑQÔQÐQÐQÐQøÝð 	%ð 	%ð 	%ØŒK×!Ò! !Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$øøøøð	%øøøs   ‚)- ­
A·AÁAc                ó®   — |€d„ |D ¦   «         }| j                              t          |¦  «        ¦  «        }|sd„ |D ¦   «         } | j        ||||fi |¤Ž |S )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.
        Nc                óN   — g | ]"}t          t          j        ¦   «         ¦  «        ‘Œ#S r<   r=   r@   s     r&   rC   z&Hologres.add_texts.<locals>.<listcomp>�   rD   r(   c                ó   — g | ]}i ‘ŒS r<   r<   r@   s     r&   rC   z&Hologres.add_texts.<locals>.<listcomp>•   rF   r(   )r   Úembed_documentsÚlistrH   )r%   r2   r5   r7   r9   r1   s         r&   Ú	add_textszHologres.add_texts~   sy   € ð" ˆ;Ø4Ð4¨eÐ4Ñ4Ô4ˆCàÔ,×<Ò<½TÀ%¹[¼[ÑIÔIˆ
àð 	,Ø+Ð+ UÐ+Ñ+Ô+ˆIàˆÔ˜E :¨y¸#ÐHÐHÀÐHÐHÐHàˆ
r(   é   ÚqueryÚkÚfilterúOptional[dict]úList[Document]c                óh   — | 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,   ©Ú	embeddingr_   r`   )r   Úembed_queryÚsimilarity_search_by_vector)r%   r^   r_   r`   r9   re   s         r&   Úsimilarity_searchzHologres.similarity_search›   sC   € ð" Ô+×7Ò7¸UÐ7ÑCÔCˆ	Ø×/Ò/ØØØð 0ñ 
ô 
ð 	
r(   re   úList[float]c                óJ   — |                       |||¬¦  «        }d„ |D ¦   «         S )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.
        rd   c                ó   — g | ]\  }}|‘ŒS r<   r<   )rA   ÚdocrB   s      r&   rC   z8Hologres.similarity_search_by_vector.<locals>.<listcomp>Ç   s   € Ð2Ð2Ð2™˜˜Q�Ð2Ð2Ð2r(   )Ú&similarity_search_with_score_by_vector)r%   re   r_   r`   r9   Údocs_and_scoress         r&   rg   z$Hologres.similarity_search_by_vector³   s<   € ð" ×EÒEØ 1¨Vð Fñ 
ô 
ˆð 3Ð2 /Ð2Ñ2Ô2Ð2r(   úList[Tuple[Document, float]]c                ó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
        rd   )r   rf   rm   )r%   r^   r_   r`   re   Údocss         r&   Úsimilarity_search_with_scorez%Hologres.similarity_search_with_scoreÉ   sB   € ð  Ô+×7Ò7¸Ñ>Ô>ˆ	Ø×:Ò:Ø 1¨Vð ;ñ 
ô 
ˆð ˆr(   c                ó\   — | j                              ||dg|¬¦  «        }d„ |D ¦   «         }|S )Nr+   )r_   Úselect_columnsÚmetadata_filtersc                óX   — g | ]'}t          |d          |d         ¬¦  «        |d         f‘Œ(S )r+   Úmetadata)Úpage_contentrw   Údistancer   )rA   Úresults     r&   rC   zCHologres.similarity_search_with_score_by_vector.<locals>.<listcomp>é   sX   € ð 	
ð 	
ð 	
ð õ Ø!'¨
Ô!3Ø# JÔ/ðñ ô ð �zÔ"ðð	
ð 	
ð 	
r(   )r/   Úsearch)r%   re   r_   r`   Úresultsrq   s         r&   rm   z/Hologres.similarity_search_with_score_by_vectorß   sR   € ð )-¬×(;Ò(;Ø˜¨J¨<È&ð )<ñ )
ô )
ˆð	
ð 	
ð "ð	
ñ 	
ô 	
ˆð ˆr(   rI   úType[Hologres]c           	     ór   — |                      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
        ©r5   r7   r   r   r   )rZ   r[   Ú_Hologres__from)
rI   r2   re   r5   r   r   r7   r   r9   r1   s
             r&   Ú
from_textszHologres.from_textsõ   sa   € ð( ×.Ò.­t°E©{¬{Ñ;Ô;ˆ
àˆsŒzØØØð

ð  ØØØ!Ø-ð

ð 

ð ð

ð 

ð 
	
r(   Útext_embeddingsúList[Tuple[str, List[float]]]c           	     ó^   — d„ |D ¦   «         }	d„ |D ¦   «         }
 | j         |	|
|f|||||dœ|¤ŽS )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)
        c                ó   — g | ]
}|d          ‘ŒS )r   r<   rP   s     r&   rC   z,Hologres.from_embeddings.<locals>.<listcomp>7  s   € Ð/Ð/Ð/˜!��1”Ð/Ð/Ð/r(   c                ó   — g | ]
}|d          ‘ŒS )é   r<   rP   s     r&   rC   z,Hologres.from_embeddings.<locals>.<listcomp>8  s   € Ð4Ð4Ð4˜q�a˜”dÐ4Ð4Ð4r(   r   )r€   )rI   r‚   re   r5   r   r   r7   r   r9   r2   r1   s              r&   Úfrom_embeddingszHologres.from_embeddings  so   € ð@ 0Ð/˜Ð/Ñ/Ô/ˆØ4Ð4 OÐ4Ñ4Ô4ˆ
àˆsŒzØØØð

ð  ØØØ!Ø-ð

ð 

ð ð

ð 

ð 
	
r(   c                óP   — |                       |¦  «        } | |||||¬¦  «        }|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   )rG   )rI   re   r   r   r   r9   r   rJ   s           r&   Úfrom_existing_indexzHologres.from_existing_indexF  sD   € ð  ×5Ò5°fÑ=Ô=Ðà�Ø/ØØ!Ø(Ø-ð
ñ 
ô 
ˆð ˆr(   úDict[str, Any]c                óL   — 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)rI   r9   r   s      r&   rG   zHologres.get_connection_stringa  sJ   € å!5ØØ#Ø0ð"
ñ "
ô "
Ðð !ð 	ÝðBñô ð ð !Ð r(   Ú	documentsÚpre_delete_collectionc                ó�   — d„ |D ¦   «         }d„ |D ¦   «         }	|                       |¦  «        }
|
|d<    | j        d||||	|||dœ|¤ŽS )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
        c                ó   — g | ]	}|j         ‘Œ
S r<   )rx   ©rA   Úds     r&   rC   z+Hologres.from_documents.<locals>.<listcomp>ˆ  s   € Ð3Ð3Ð3 A�”Ð3Ð3Ð3r(   c                ó   — g | ]	}|j         ‘Œ
S r<   )rw   r–   s     r&   rC   z+Hologres.from_documents.<locals>.<listcomp>‰  s   € Ð3Ð3Ð3 A�Q”ZÐ3Ð3Ð3r(   r   )r2   r“   re   r5   r7   r   r   r<   )rG   r�   )rI   r’   re   r   r   r7   r“   r9   r2   r5   r   s              r&   Úfrom_documentszHologres.from_documentst  sˆ   € ð( 4Ð3¨Ð3Ñ3Ô3ˆØ3Ð3¨Ð3Ñ3Ô3ˆ	Ø×5Ò5°fÑ=Ô=Ðà&7ˆÐ"Ñ#àˆsŒ~ð 	
ØØ"7ØØØØØ!ð	
ð 	
ð ð	
ð 	
ð 		
r(   ÚhostÚportÚdatabaseÚuserÚpasswordc           
     ó$   — d|› d|› d|› d|› d|› �
S )z2Return connection string from database parameters.zdbname=z user=z
 password=z host=z port=r<   )rI   rš   r›   rœ   r�   rž   s         r&   Ú connection_string_from_db_paramsz)Hologres.connection_string_from_db_params™  s6   € ð Y�hÐXÐX dÐXÐX°hÐXÐXÀdÐXÐXÐRVÐXÐXð	
r(   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )r   r   )r2   r3   r1   r4   r   r   r5   r6   r7   r8   r   r   r   r   r   r   r9   r   r   r   )r2   rL   r1   r4   r5   rM   r7   r3   r9   r   r   r   )NN)
r2   rL   r5   r6   r7   r8   r9   r   r   r3   )r]   N)
r^   r   r_   r   r`   ra   r9   r   r   rb   )
re   ri   r_   r   r`   ra   r9   r   r   rb   )r^   r   r_   r   r`   ra   r   ro   )re   ri   r_   r   r`   ra   r   ro   )rI   r}   r2   r3   re   r   r5   r6   r   r   r   r   r7   r8   r   r   r9   r   r   r   )r‚   rƒ   re   r   r5   r6   r   r   r   r   r7   r8   r   r   r9   r   r   r   )rI   r}   re   r   r   r   r   r   r   r   r9   r   r   r   )r9   r‹   r   r   )rI   r}   r’   rb   re   r   r   r   r   r   r7   r8   r“   r   r9   r   r   r   )rš   r   r›   r   rœ   r   r�   r   rž   r   r   r   )r#   Ú
__module__Ú__qualname__Ú__doc__ÚADA_TOKEN_COUNTÚ_LANGCHAIN_DEFAULT_TABLE_NAMEr'   r$   Úpropertyr1   Úclassmethodr€   rH   r\   rh   rg   rr   rm   r�   rˆ   rŠ   rG   r™   r    r<   r(   r&   r   r      s|  € € € € € ðð ð& %Ø7Ø!&Ø+/ðð ð ð ð ð"
ð 
ð 
ð 
ð  ð'ð 'ð 'ñ „Xð'ð ð +/Ø#'Ø$Ø7Ø!&ð ð  ð  ð  ñ „[ð ðD%ð %ð %ð %ð2 +/Ø#'ð	ð ð ð ð ð@ Ø!%ð	
ð 
ð 
ð 
ð 
ð6 Ø!%ð	3ð 3ð 3ð 3ð 3ð2 Ø!%ð	ð ð ð ð ð2 Ø!%ð	ð ð ð ð ð, ð
 +/Ø$Ø7Ø#'Ø!&ð
ð 
ð 
ð 
ñ „[ð
ðB ð
 +/Ø$Ø7Ø#'Ø!&ð,
ð ,
ð ,
ð ,
ñ „[ð,
ð\ ð %Ø7Ø!&ðð ð ð ñ „[ðð4 ð!ð !ð !ñ „[ð!ð$ ð
 %Ø7Ø#'Ø&+ð"
ð "
ð "
ð "
ñ „[ð"
ðH ð
ð 
ð 
ñ „[ð
ð 
ð 
r(   r   )Ú
__future__r   r!   r>   Ú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Ð CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cà -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à€Ø 8Ð ðU
ð U
ð U
ð U
ð U
ˆ{ñ U
ô U
ð U
ð U
ð U
r(   