§
    šŠtjÖG  ã                  ó  — 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mZmZ d dlmZmZmZmZmZmZ d dlmZmZ 	 d dlmZ n# e$ r	 d dlmZ Y nw xY wd dlmZ d dlmZ d d	l m!Z! d d
l"m#Z# dZ$dZ% e¦   «         Z& G d„ de#¦  «        Z'dS )é    )ÚannotationsN)	ÚAnyÚCallableÚDictÚIterableÚListÚOptionalÚSequenceÚTupleÚType)ÚColumnÚStringÚTableÚcreate_engineÚinsertÚtext)ÚJSONÚTEXT)Údeclarative_base)ÚDocument)Ú
Embeddings)Úget_from_dict_or_env)ÚVectorStorei   Úlangchain_documentc                  ó6  — e Zd ZdZeedddfdCd„Z	 dDdEd„ZedFd„¦   «         Z	dGd„Z
dHd„ZdHd„ZdHd„Z	 	 	 dIdJd&„Z	 	 dKdLd,„Z	 	 dKdMd.„Z	 	 dKdNd1„Z	 	 dKdOd2„ZdDdPd4„ZedeedddfdQd7„¦   «         ZedRd9„¦   «         ZeeedddfdSd;„¦   «         ZedTdB„¦   «         ZdS )UÚRelyta  `Relyt` (distributed PostgreSQL) vector store.

    Relyt is a distributed full postgresql syntax cloud-native database.
    - `connection_string` is a postgres connection string.
    - `embedding_function` any embedding function implementing
        `langchain.embeddings.base.Embeddings` interface.
    - `collection_name` is the name of the collection to use. (default: langchain)
        - NOTE: This is not the name of the table, but the name of the collection.
            The tables will be created when initializing the store (if not exists)
            So, make sure the user has the right permissions to create tables.
    - `pre_delete_collection` if True, will delete the collection if it exists.
        (default: False)
        - Useful for testing.

    FNÚconnection_stringÚstrÚembedding_functionr   Úembedding_dimensionÚintÚcollection_nameÚpre_delete_collectionÚboolÚloggerúOptional[logging.Logger]Úengine_argsúOptional[dict]ÚreturnÚNonec                ó(  — 	 ddl m}  |||||¬¦  «         n"# t          $ r}	t          d¦  «        |	‚d}	~	ww xY w|| _        || _        || _        || _        || _        |pt          j	        t          ¦  «        | _        |                      |¦  «         dS )a®  Initialize a PGVecto_rs vectorstore.

        Args:
            embedding: Embeddings to use.
            dimension: Dimension of the embeddings.
            db_url: Database URL.
            collection_name: Name of the collection.
            new_table: Whether to create a new table or connect to an existing one.
            If true, the table will be dropped if exists, then recreated.
            Defaults to False.
        r   )Ú	PGVectoRs)Údb_urlr"   Ú	dimensionÚrecreatezWUnable to import pgvector_rs.sdk , please install with `pip install "pgvecto_rs[sdk]"`.N)Úpgvecto_rs.sdkr,   ÚImportErrorr   r   r    r"   r#   ÚloggingÚ	getLoggerÚ__name__r%   Ú__post_init__)
Úselfr   r   r    r"   r#   r%   r'   r,   Úes
             úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/relyt.pyÚ__init__zRelyt.__init__+   sÛ   € ð*	Ø0Ð0Ð0Ð0Ð0Ð0àˆIØ(Ø /Ø-Ø.ð	ñ ô ð ð øõ ð 	ð 	ð 	Ýð3ñô ð ðøøøøð	øøøð "3ˆÔØ"4ˆÔØ#6ˆÔ Ø.ˆÔØ%:ˆÔ"ØÐ;¥Ô 1µ(Ñ ;Ô ;ˆŒØ×Ò˜;Ñ'Ô'Ð'Ð'Ð's   ‚ ˜
7¢2²7c                óv   — |pi }d|vrd|d<   t          | j        fi |¤Ž| _        |                      ¦   «          dS )z'
        Initialize the store.
        Úpool_recyclei  N)r   r   ÚengineÚcreate_collection)r6   r'   Ú_engine_argss      r8   r5   zRelyt.__post_init__W   s^   € ð #Ð( bˆð  ,Ð.Ð.ð ð ˜Ñ(õ $ DÔ$:ÐKÐK¸lÐKÐKˆŒØ×ÒÑ Ô Ð Ð Ð ó    c                ó   — | j         S ©N)r   ©r6   s    r8   Ú
embeddingszRelyt.embeddingsk   s   € àÔ&Ð&r?   úCallable[[float], float]c                ó   — | j         S rA   )Ú_euclidean_relevance_score_fnrB   s    r8   Ú_select_relevance_score_fnz Relyt._select_relevance_score_fno   s   € ØÔ1Ð1r?   c           	     ó  — | j                              ¦   «         5 }|                     ¦   «         5  |                     t	          d¦  «        ¦  «         |                     t	          d¦  «        ¦  «         | j        › }t	          d|› d�¦  «        }|                     |¦  «                             ¦   «         }|s0t	          d|› d| j        › d�¦  «        }|                     |¦  «         | j        › d�}t	          d	|› d�¦  «        }|                     |¦  «                             ¦   «         }|s0t	          d
|› d| j        › d�¦  «        }|                     |¦  «         ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )av  
        Table(
            self.collection_name,
            Base.metadata,
            Column("id", TEXT, primary_key=True, default=uuid.uuid4),
            Column("embedding", Vector(self.embedding_dimension)),
            Column("document", String, nullable=True),
            Column("metadata", JSON, nullable=True),
            extend_existing=True,
        )
        z&CREATE EXTENSION IF NOT EXISTS vectorsz*CREATE EXTENSION IF NOT EXISTS "uuid-ossp"ze
                    SELECT 1
                    FROM pg_class
                    WHERE relname = 'z';
                z*
                            CREATE TABLE z„ (
                                id TEXT PRIMARY KEY DEFAULT uuid_generate_v4(),
                                embedding vector(z¢),
                                document TEXT,
                                metadata JSON
                            ) USING heap;
                        Ú_embedding_idxzi
                    SELECT 1
                    FROM pg_indexes
                    WHERE indexname = 'z&
                        CREATE INDEX z
                        ON aË  
                        USING vectors (embedding vector_l2_ops)
                        WITH (options = $$
                        optimizing.optimizing_threads = 30
                        segment.max_growing_segment_size = 600
                        segment.max_sealed_segment_size = 30000000
                        [indexing.hnsw]
                        m=30
                        ef_construction=500
                        $$);
                    N)r<   ÚconnectÚbeginÚexecuter   r"   Úscalarr    )	r6   ÚconnÚ
table_nameÚtable_queryÚresultÚtable_statementÚ
index_nameÚindex_queryÚindex_statements	            r8   Úcreate_table_if_not_existsz Relyt.create_table_if_not_existsr   si  € ð Œ[× Ò Ñ"Ô"ð :	2 dØ—’‘”ð 92ð 92à—’�TÐ"JÑKÔKÑLÔLÐLØ—’�TÐ"NÑOÔOÑPÔPÐPð !%Ô 4Ð6�
Ý"ðð '1ðð ð ñô �ð Ÿš kÑ2Ô2×9Ò9Ñ;Ô;�Øð 2Ý&*ðØ*4ðð ð 37Ô2Jðð ð ñ	'ô 	'�Oð —L’L Ñ1Ô1Ð1ð !%Ô 4ÐDÐDÐD�
Ý"ðð )3ðð ð ñô �ð Ÿš kÑ2Ô2×9Ò9Ñ;Ô;�ð ð 2Ý&*ðØ&0ðð à Ô0ðð ð ñ'ô '�Oð —L’L Ñ1Ô1Ð1ðs92ð 92ð 92ñ 92ô 92ð 92ð 92ð 92ð 92ð 92ð 92øøøð 92ð 92ð 92ð 92ð:	2ð :	2ð :	2ñ :	2ô :	2ð :	2ð :	2ð :	2ð :	2ð :	2ð :	2ð :	2øøøð :	2ð :	2ð :	2ð :	2ð :	2ð :	2s5   šF¯D/E*ÅFÅ*E.	Å.FÅ1E.	Å2FÆFÆ	Fc                ód   — | j         r|                      ¦   «          |                      ¦   «          d S rA   )r#   Údelete_collectionrV   rB   s    r8   r=   zRelyt.create_collection»   s7   € ØÔ%ð 	%Ø×"Ò"Ñ$Ô$Ð$Ø×'Ò'Ñ)Ô)Ð)Ð)Ð)r?   c                óP  — | j                              d¦  «         t          d| j        › d�¦  «        }| j                             ¦   «         5 }|                     ¦   «         5  |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )NzTrying to delete collectionzDROP TABLE IF EXISTS ú;)r%   Údebugr   r"   r<   rJ   rK   rL   )r6   Údrop_statementrN   s      r8   rX   zRelyt.delete_collectionÀ   s  € ØŒ×ÒÐ7Ñ8Ô8Ð8ÝÐM°dÔ6JÐMÐMÐMÑNÔNˆØŒ[× Ò Ñ"Ô"ð 	- dØ—’‘”ð -ð -Ø—’˜^Ñ,Ô,Ð,ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð 	-ð 	-s6   ÁBÁ!BÁ7BÂB	ÂBÂ
B	ÂBÂBÂ"Béô  ÚtextsúIterable[str]Ú	metadatasúOptional[List[dict]]ÚidsúOptional[List[str]]Ú
batch_sizeÚkwargsr   ú	List[str]c                óä  — ddl m} |€d„ |D ¦   «         }| j                             t	          |¦  «        ¦  «        }|sd„ |D ¦   «         }t          | j        t          j        t          dt          d¬¦  «        t          d	 || j        ¦  «        ¦  «        t          d
t          d¬¦  «        t          dt          d¬¦  «        d¬¦  «        }g }	| j                             ¦   «         5 }
|
                     ¦   «         5  t#          ||||¦  «        D ]}\  }}}}|	                     ||||dœ¦  «         t'          |	¦  «        |k    rI|
                     t+          |¦  «                             |	¦  «        ¦  «         |	                     ¦   «          Œ~|	r5|
                     t+          |¦  «                             |	¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |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.
        r   ©ÚVectorNc                óN   — g | ]"}t          t          j        ¦   «         ¦  «        ‘Œ#S © )r   ÚuuidÚuuid1©Ú.0Ú_s     r8   ú
<listcomp>z#Relyt.add_texts.<locals>.<listcomp>Ü   s&   € Ð4Ð4Ð4¨•3•t”z‘|”|Ñ$Ô$Ð4Ð4Ð4r?   c                ó   — g | ]}i ‘ŒS rk   rk   rn   s     r8   rq   z#Relyt.add_texts.<locals>.<listcomp>á   s   € Ð+Ð+Ð+ ˜Ð+Ð+Ð+r?   ÚidT©Úprimary_keyÚ	embeddingÚdocument©ÚnullableÚmetadata©Úextend_existing)rs   rv   rw   rz   )Úpgvecto_rs.sqlalchemyri   r   Úembed_documentsÚlistr   r"   ÚBaserz   r   r   r    r   r   r<   rJ   rK   ÚzipÚappendÚlenrL   r   ÚvaluesÚclear)r6   r^   r`   rb   rd   re   ri   rC   Úchunks_tableÚchunks_table_datarN   rw   rz   Úchunk_idrv   s                  r8   Ú	add_textszRelyt.add_textsÇ   sµ  € ð$ 	1Ð0Ð0Ð0Ð0Ð0àˆ;Ø4Ð4¨eÐ4Ñ4Ô4ˆCàÔ,×<Ò<½TÀ%¹[¼[ÑIÔIˆ
àð 	,Ø+Ð+ UÐ+Ñ+Ô+ˆIõ ØÔ ÝŒMÝ�4�¨4Ð0Ñ0Ô0Ý�;   tÔ'?Ñ @Ô @ÑAÔAÝ�:�v°Ð5Ñ5Ô5Ý�:�t¨dÐ3Ñ3Ô3Ø ð
ñ 
ô 
ˆð ÐØŒ[× Ò Ñ"Ô"ð 	Q dØ—’‘”ð Qð QÝ?BØ˜9 c¨:ñ@ô @ð 2ð 2Ñ;�H˜h¨°)ð &×,Ò,à"*Ø)2Ø(0Ø(0ð	ð ñô ð õ Ð,Ñ-Ô-°Ò;Ð;ØŸš¥V¨LÑ%9Ô%9×%@Ò%@ÐARÑ%SÔ%SÑTÔTÐTà)×/Ò/Ñ1Ô1Ð1øð %ð QØ—L’L¥¨Ñ!5Ô!5×!<Ò!<Ð=NÑ!OÔ!OÑPÔPÐPð+Qð Qð Qñ Qô Qð Qð Qð Qð Qð Qð Qøøøð Qð Qð Qð Qð	Qð 	Qð 	Qñ 	Qô 	Qð 	Qð 	Qð 	Qð 	Qð 	Qð 	Qøøøð 	Qð 	Qð 	Qð 	Qð0 ˆ
s7   Ã%G%Ã:CGÇG%ÇG	ÇG%ÇG	ÇG%Ç%G)Ç,G)é   ÚqueryÚkÚfilterúList[Document]c                óh   — | j                              |¬¦  «        }|                      |||¬¦  «        S )a`  Run similarity search with AnalyticDB 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   ©rv   rŒ   r�   )r   Úembed_queryÚsimilarity_search_by_vector)r6   r‹   rŒ   r�   re   rv   s         r8   Úsimilarity_searchzRelyt.similarity_search	  sC   € ð" Ô+×7Ò7¸UÐ7ÑCÔCˆ	Ø×/Ò/ØØØð 0ñ 
ô 
ð 	
r?   ú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
        r�   )r   r‘   Ú&similarity_search_with_score_by_vector)r6   r‹   rŒ   r�   rv   Údocss         r8   Úsimilarity_search_with_scorez"Relyt.similarity_search_with_score!  sB   € ð  Ô+×7Ò7¸Ñ>Ô>ˆ	Ø×:Ò:Ø 1¨Vð ;ñ 
ô 
ˆð ˆr?   rv   úList[float]c                ó"  ‡ — 	 ddl m} n# t          $ r t          d¦  «        ‚w xY wd}|�6d„ |                     ¦   «         D ¦   «         }dd                     |¦  «        › �}d‰ j        › d	|› d
�}d                     d„ |D ¦   «         ¦  «        }d|z   dz   }||dœ}	‰ j                             ¦   «         5 }
|
                     t          |¦  «        |	¦  «         
                    ¦   «         }d d d ¦  «         n# 1 swxY w Y   ˆ fd„|D ¦   «         }|S )Nr   )ÚRowzRCould not import Row from sqlalchemy.engine. Please 'pip install sqlalchemy>=1.4'.Ú c                ó$   — g | ]\  }}d |›d|›�‘ŒS )zmetadata->>z = rk   )ro   ÚkeyÚvalues      r8   rq   z@Relyt.similarity_search_with_score_by_vector.<locals>.<listcomp>H  s:   € ð ð ð Ù6@°c¸5Ð1˜cÐ1Ð1¨Ð1Ð1ðð ð r?   zWHERE z AND zÄ
            set vectors.enable_search_growing = on;
            set vectors.enable_search_write = on;
            SELECT document, metadata, embedding <-> :embedding as distance
            FROM z
            zL
            ORDER BY embedding <-> :embedding
            LIMIT :k
        z, c              3  ó4   K  — | ]}t          |¦  «        V — Œd S rA   )Úformat)ro   Úxs     r8   ú	<genexpr>z?Relyt.similarity_search_with_score_by_vector.<locals>.<genexpr>Y  s(   è è € Ð!?Ð!?°¥&¨¡)¤)Ð!?Ð!?Ð!?Ð!?Ð!?Ð!?r?   ú[ú])rv   rŒ   c                óf   •— g | ]-}t          |j        |j        ¬ ¦  «        ‰j        �|j        ndf‘Œ.S ))Úpage_contentrz   N)r   rw   rz   r   Údistance)ro   rQ   r6   s     €r8   rq   z@Relyt.similarity_search_with_score_by_vector.<locals>.<listcomp>a  s\   ø€ ð 	!
ð 	!
ð 	!
ð õ Ø!'¤Ø#œ_ðñ ô ð $(Ô#:Ð#F�”�ÈDðð	!
ð 	!
ð 	!
r?   )Úsqlalchemy.enginer›   r1   ÚitemsÚjoinr"   r<   rJ   rL   r   Úfetchall)r6   rv   rŒ   r�   r›   Úfilter_conditionÚ
conditionsÚ	sql_queryÚembedding_strÚparamsrN   ÚresultsÚdocuments_with_scoress   `            r8   r–   z,Relyt.similarity_search_with_score_by_vector7  sÛ  ø€ ð	Ø-Ð-Ð-Ð-Ð-Ð-Ð-øÝð 	ð 	ð 	Ýð8ñô ð ð	øøøð ÐØÐðð ØDJÇLÂLÁNÄNðñ ô ˆJð  C¨¯ª°ZÑ(@Ô(@ÐBÐBÐðð Ô&ð	ð ð
 ðð ð ˆ	ð Ÿ	š	Ð!?Ð!?°YÐ!?Ñ!?Ô!?Ñ?Ô?ˆØ˜mÑ+¨cÑ1ˆØ,°1Ð5Ð5ˆð Œ[× Ò Ñ"Ô"ð 	V dØ%)§\¢\µ$°y±/´/À6Ñ%JÔ%J×%SÒ%SÑ%UÔ%UˆGð	Vð 	Vð 	Vñ 	Vô 	Vð 	Vð 	Vð 	Vð 	Vð 	Vð 	Vøøøð 	Vð 	Vð 	Vð 	Vð	!
ð 	!
ð 	!
ð 	!
ð "ð	!
ñ 	!
ô 	!
Ðð %Ð$s   ƒ
 Š$Â46C6Ã6C:Ã=C: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.
        r�   c                ó   — g | ]\  }}|‘ŒS rk   rk   )ro   Údocrp   s      r8   rq   z5Relyt.similarity_search_by_vector.<locals>.<listcomp>�  s   € Ð2Ð2Ð2™˜˜Q�Ð2Ð2Ð2r?   )r–   )r6   rv   rŒ   r�   re   Údocs_and_scoress         r8   r’   z!Relyt.similarity_search_by_vectorm  s<   € ð" ×EÒEØ 1¨Vð Fñ 
ô 
ˆð 3Ð2 /Ð2Ñ2Ô2Ð2r?   úOptional[bool]c                ó*  — ddl m} |€t          d¦  «        ‚t          | j        t
          j        t          dt          d¬¦  «        t          d || j	        ¦  «        ¦  «        t          d	t          d¬
¦  «        t          dt          d¬
¦  «        d¬¦  «        }	 | j                             ¦   «         5 }|                     ¦   «         5  |j        j                             |¦  «        }|                     |                     ¦   «                              |¦  «        ¦  «         	 ddd¦  «         ddd¦  «         dS # 1 swxY w Y   	 ddd¦  «         dS # 1 swxY w Y   dS # t*          $ r(}t-          dt/          |¦  «        ¦  «         Y d}~dS d}~ww xY w)zUDelete by vector IDs.

        Args:
            ids: List of ids to delete.
        r   rh   NzNo ids provided to delete.rs   Trt   rv   rw   rx   rz   r{   zDelete operation failed:F)r}   ri   Ú
ValueErrorr   r"   r€   rz   r   r   r    r   r   r<   rJ   rK   Úcrs   Úin_rL   ÚdeleteÚwhereÚ	ExceptionÚprintr   )r6   rb   re   ri   r†   rN   Údelete_conditionr7   s           r8   r½   zRelyt.deleteƒ  s1  € ð 	1Ð0Ð0Ð0Ð0Ð0àˆ;ÝÐ9Ñ:Ô:Ð:õ ØÔ ÝŒMÝ�4�¨4Ð0Ñ0Ô0Ý�;   tÔ'?Ñ @Ô @ÑAÔAÝ�:�v°Ð5Ñ5Ô5Ý�:�t¨dÐ3Ñ3Ô3Ø ð
ñ 
ô 
ˆð	Ø”×$Ò$Ñ&Ô&ð  ¨$Ø—Z’Z‘\”\ð  ð  Ø'3¤~Ô'8×'<Ò'<¸SÑ'AÔ'AÐ$Ø—L’L ×!4Ò!4Ñ!6Ô!6×!<Ò!<Ð=MÑ!NÔ!NÑOÔOÐOØð ð  ð  ñ  ô  ð  ð ð  ð  ñ  ô  ð  ð  ð  ð ð  ð  ð  øøøð  ð  ð  ð  ð  ð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð  ð  øõ
 ð 	ð 	ð 	ÝÐ,­c°!©f¬fÑ5Ô5Ð5Ø�5�5�5�5�5øøøøð	øøøsg   ÂE  Â2EÃAD:Ä"EÄ-E  Ä:D>	Ä>EÅD>	ÅEÅE  ÅEÅE  ÅEÅE  Å 
FÅ*FÆFÚclsúType[Relyt]c	                ót   — |                       |	¦  «        }
 | |
|||||¬¦  «        } |j        d|||dœ|	¤Ž |S )zÞ
        Return VectorStore initialized from texts and embeddings.
        Postgres Connection string is required
        Either pass it as a parameter
        or set the PG_CONNECTION_STRING environment variable.
        )r   r"   r   r    r#   r'   )r^   r`   rb   rk   )Úget_connection_stringr‰   )rÂ   r^   rv   r`   r    r"   rb   r#   r'   re   r   Ústores               r8   Ú
from_textszRelyt.from_texts£  sh   € ð(  ×5Ò5°fÑ=Ô=Ðà�Ø/Ø+Ø(Ø 3Ø"7Ø#ð
ñ 
ô 
ˆð 	ˆŒÐL˜e¨y¸cÐLÐLÀVÐLÐLÐLØˆr?   úDict[str, Any]c                óL   — t          |dd¬¦  «        }|st          d¦  «        ‚|S )Nr   ÚPG_CONNECTION_STRING)Údatarž   Úenv_keyzxPostgres connection string is requiredEither pass it as a parameteror set the PG_CONNECTION_STRING environment variable.)r   rº   )rÂ   re   r   s      r8   rÅ   zRelyt.get_connection_stringÅ  sJ   € å!5ØØ#Ø*ð"
ñ "
ô "
Ðð !ð 	ÝðHñô ð ð !Ð r?   Ú	documentsc                ó’   — d„ |D ¦   «         }	d„ |D ¦   «         }
|                       |¦  «        }||d<    | j        d|	||||
|||dœ|¤ŽS )zâ
        Return VectorStore initialized from documents and embeddings.
        Postgres Connection string is required
        Either pass it as a parameter
        or set the PG_CONNECTION_STRING environment variable.
        c                ó   — g | ]	}|j         ‘Œ
S rk   )r§   ©ro   Úds     r8   rq   z(Relyt.from_documents.<locals>.<listcomp>é  s   € Ð3Ð3Ð3 A�”Ð3Ð3Ð3r?   c                ó   — g | ]	}|j         ‘Œ
S rk   )rz   rÐ   s     r8   rq   z(Relyt.from_documents.<locals>.<listcomp>ê  s   € Ð3Ð3Ð3 A�Q”ZÐ3Ð3Ð3r?   r   )r^   r#   rv   r    r`   rb   r"   r'   rk   )rÅ   rÇ   )rÂ   rÍ   rv   r    r"   rb   r#   r'   re   r^   r`   r   s               r8   Úfrom_documentszRelyt.from_documentsÖ  s‹   € ð& 4Ð3¨Ð3Ñ3Ô3ˆØ3Ð3¨Ð3Ñ3Ô3ˆ	Ø×5Ò5°fÑ=Ô=Ðà&7ˆÐ"Ñ#àˆsŒ~ð 

ØØ"7ØØ 3ØØØ+Ø#ð

ð 

ð ð

ð 

ð 
	
r?   ÚdriverÚhostÚportÚdatabaseÚuserÚpasswordc                ó*   — d|› d|› d|› d|› d|› d|› �S )z2Return connection string from database parameters.zpostgresql+z://ú:ú@ú/rk   )rÂ   rÔ   rÕ   rÖ   r×   rØ   rÙ   s          r8   Ú connection_string_from_db_paramsz&Relyt.connection_string_from_db_paramsû  s;   € ð S˜VÐRÐR¨ÐRÐR¨xÐRÐR¸$ÐRÐRÀÐRÐRÈÐRÐRÐRr?   )r   r   r   r   r    r!   r"   r   r#   r$   r%   r&   r'   r(   r)   r*   rA   )r'   r(   r)   r*   )r)   r   )r)   rD   )r)   r*   )NNr]   )r^   r_   r`   ra   rb   rc   rd   r!   re   r   r)   rf   )rŠ   N)
r‹   r   rŒ   r!   r�   r(   re   r   r)   rŽ   )r‹   r   rŒ   r!   r�   r(   r)   r”   )rv   r™   rŒ   r!   r�   r(   r)   r”   )
rv   r™   rŒ   r!   r�   r(   re   r   r)   rŽ   )rb   rc   re   r   r)   r¸   )rÂ   rÃ   r^   rf   rv   r   r`   ra   r    r!   r"   r   rb   rc   r#   r$   r'   r(   re   r   r)   r   )re   rÈ   r)   r   )rÂ   rÃ   rÍ   rŽ   rv   r   r    r!   r"   r   rb   rc   r#   r$   r'   r(   re   r   r)   r   )rÔ   r   rÕ   r   rÖ   r!   r×   r   rØ   r   rÙ   r   r)   r   )r4   Ú
__module__Ú__qualname__Ú__doc__Ú _LANGCHAIN_DEFAULT_EMBEDDING_DIMÚ"_LANGCHAIN_DEFAULT_COLLECTION_NAMEr9   r5   ÚpropertyrC   rG   rV   r=   rX   r‰   r“   r˜   r–   r’   r½   ÚclassmethodrÇ   rÅ   rÓ   rÞ   rk   r?   r8   r   r      s^  € € € € € ðð ð( $DØAØ&+Ø+/Ø&*ð*(ð *(ð *(ð *(ð *(ð\ '+ð!ð !ð !ð !ð !ð( ð'ð 'ð 'ñ „Xð'ð2ð 2ð 2ð 2ðG2ð G2ð G2ð G2ðR*ð *ð *ð *ð
-ð -ð -ð -ð +/Ø#'Øð@ð @ð @ð @ð @ðJ Ø!%ð	
ð 
ð 
ð 
ð 
ð6 Ø!%ð	ð ð ð ð ð2 Ø!%ð	4%ð 4%ð 4%ð 4%ð 4%ðr Ø!%ð	3ð 3ð 3ð 3ð 3ð,ð ð ð ð ð@ ð
 +/Ø#CØAØ#'Ø&+Ø&*ðð ð ð ñ „[ððB ð!ð !ð !ñ „[ð!ð  ð
 $DØAØ#'Ø&+Ø&*ð"
ð "
ð "
ð "
ñ „[ð"
ðH ð
Sð 
Sð 
Sñ „[ð
Sð 
Sð 
Sr?   r   )(Ú
__future__r   r2   rl   Útypingr   r   r   r   r   r	   r
   r   r   Ú
sqlalchemyr   r   r   r   r   r   Úsqlalchemy.dialects.postgresqlr   r   Úsqlalchemy.ormr   r1   Úsqlalchemy.ext.declarativeÚlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.utilsr   Úlangchain_core.vectorstoresr   râ   rã   r€   r   rk   r?   r8   ú<module>rð      s¬  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ Wà IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5ð<Ø/Ð/Ð/Ð/Ð/Ð/Ð/øØð <ð <ð <Ø;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð<øøøð .Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à#'Ð  Ø%9Ð "àÐÑÔ€ðlSð lSð lSð lSð lSˆKñ lSô lSð lSð lSð lSs   ¾A ÁAÁA