§
    šŠtj:#  ã                  óŠ   — d dl mZ d dlZd dlm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  G d„ d	e¦  «        ZdS )
é    )ÚannotationsN)Úrepeat)ÚAnyÚDictÚIterableÚListÚOptionalÚTupleÚType©ÚDocument)Ú
Embeddings)ÚVectorStorec                  óØ   — e Zd ZdZd;d
„Zed<d„¦   «         Z	 d=d>d„Z	 	 d?d@d„Z	 d=d>d„Z	e
	 d=dAd„¦   «         Ze	 	 	 	 	 dBdCd$„¦   «         Z	 dDdEd+„Z	 dDdFd-„ZdGd0„Z	 	 d?dHd3„ZdId4„ZdJdKd:„ZdS )LÚXataVectorStorezÍ`Xata` vector store.

    It assumes you have a Xata database
    created with the right schema. See the guide at:
    https://integrations.langchain.com/vectorstores?integration_name=XataVectorStore

    Úapi_keyÚstrÚdb_urlÚ	embeddingr   Ú
table_nameÚreturnÚNonec                ó”   — 	 ddl m} n# t          $ r t          d¦  «        ‚w xY w |||¬¦  «        | _        || _        |pd| _        dS )zInitialize with Xata client.r   )Ú
XataClientzPCould not import xata python package. Please install it with `pip install xata`.)r   r   ÚvectorsN)Úxata.clientr   ÚImportErrorÚ_clientÚ
_embeddingÚ_table_name)Úselfr   r   r   r   r   s         úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/xata.pyÚ__init__zXataVectorStore.__init__   s€   € ð	Ø.Ð.Ð.Ð.Ð.Ð.Ð.øÝð 	ð 	ð 	Ýð=ñô ð ð	øøøð
 "�z¨'¸&ÐAÑAÔAˆŒØ&/ˆŒØ%Ð2¨ˆÔÐÐs   ‚	 ‰#c                ó   — | j         S ©N)r   )r!   s    r"   Ú
embeddingszXataVectorStore.embeddings(   s
   € àŒÐó    Nr   úList[List[float]]Ú	documentsúList[Document]ÚidsúOptional[List[str]]ú	List[str]c                ó0   — |                       |||¦  «        S r%   )Ú_add_vectors)r!   r   r)   r+   s       r"   Úadd_vectorszXataVectorStore.add_vectors,   s   € ð × Ò  ¨)°SÑ9Ô9Ð9r'   ÚtextsúIterable[str]Ú	metadatasúOptional[List[Dict[Any, Any]]]Úkwargsr   c                ó®   — |}|                       ||¦  «        }| j                             t          |¦  «        ¦  «        }|                      |||¦  «        S r%   )Ú_texts_to_documentsr   Úembed_documentsÚlistr0   )r!   r1   r3   r+   r5   Údocsr   s          r"   Ú	add_textszXataVectorStore.add_texts4   sQ   € ð ˆØ×'Ò'¨¨yÑ9Ô9ˆà”/×1Ò1µ$°u±+´+Ñ>Ô>ˆØ×Ò ¨¨sÑ3Ô3Ð3r'   c                ó@  — g }t          |¦  «        D ]e\  }}||         j        |dœ}|r||         |d<   ||         j                             ¦   «         D ]\  }}	|dvr|	||<   Œ|                     |¦  «         Œfd}
g }t          dt          |¦  «        |
¦  «        D ]ƒ}||||
z   …         }| j                             ¦   «          	                    | j
        d|i¦  «        }|j        dk    rt          d|j        › d	|› �¦  «        ‚|                     |d
         ¦  «         Œ„|S )z!Add vectors to the Xata database.)Úcontentr   Úid)r>   r=   r   iè  r   ÚrecordséÈ   zError adding vectors to Xata: ú Ú	recordIDs)Ú	enumerateÚpage_contentÚmetadataÚitemsÚappendÚrangeÚlenr   r?   Úbulk_insertr    Ústatus_codeÚ	ExceptionÚextend)r!   r   r)   r+   ÚrowsÚidxr   ÚrowÚkeyÚvalÚ
chunk_sizeÚid_listÚiÚchunkÚrs                  r"   r/   zXataVectorStore._add_vectorsA   s^  € ð &(ˆÝ'¨Ñ0Ô0ð 
	ð 
	‰NˆC�à$ Sœ>Ô6Ø&ðð ˆCð ð %Ø œH��D‘	Ø% cœNÔ3×9Ò9Ñ;Ô;ð #ð #‘��SØÐ<Ð<Ð<Ø"�C˜‘HøØ�KŠK˜ÑÔÐÐð ˆ
ØˆÝ�q�#˜d™)œ) ZÑ0Ô0ð 	+ð 	+ˆAØ˜˜Q ™^Ð+Ô,ˆEà”×$Ò$Ñ&Ô&×2Ò2°4Ô3CÀiÐQVÐEWÑXÔXˆAØŒ} Ò#Ð#ÝÐ TÀÄÐ TÐ TÐQRÐ TÐ TÑUÔUÐUØ�NŠN˜1˜[œ>Ñ*Ô*Ð*Ð*Øˆr'   ú"Optional[Iterable[Dict[Any, Any]]]c                ó\   — |€t          i ¦  «        }d„ t          | |¦  «        D ¦   «         }|S )z:Return list of Documents from list of texts and metadatas.Nc                ó6   — g | ]\  }}t          ||¬ ¦  «        ‘ŒS )©rD   rE   r   )Ú.0ÚtextrE   s      r"   ú
<listcomp>z7XataVectorStore._texts_to_documents.<locals>.<listcomp>l   s9   € ð 
ð 
ð 
á��hõ  $°Ð:Ñ:Ô:ð
ð 
ð 
r'   )r   Úzip)r1   r3   r:   s      r"   r7   z#XataVectorStore._texts_to_documentsc   sD   € ð ÐÝ˜r™
œ
ˆIð
ð 
å"% e¨YÑ"7Ô"7ð
ñ 
ô 
ˆð
 ˆr'   ÚclsúType['XataVectorStore']úOptional[List[dict]]úOptional[str]ú'XataVectorStore'c                óÒ   — |r|st          d¦  «        ‚|                     |¦  «        }	d}|                      ||¦  «        }
 | ||||¬¦  «        }|                     |	|
|¦  «         |S )z9Return VectorStore initialized from texts and embeddings.z$Xata api_key and db_url must be set.N)r   r   r   r   )Ú
ValueErrorr8   r7   r/   )r`   r1   r   r3   r   r   r   r+   r5   r&   r:   Ú	vector_dbs               r"   Ú
from_textszXataVectorStore.from_textss   s“   € ð ð 	E˜fð 	EÝÐCÑDÔDÐDà×.Ò.¨uÑ5Ô5ˆ
ØˆØ×&Ò& u¨iÑ8Ô8ˆà�CØØØØ!ð	
ñ 
ô 
ˆ	ð 	×Ò˜z¨4°Ñ5Ô5Ð5ØÐr'   é   ÚqueryÚkÚintÚfilterúOptional[dict]c                óN   — |                       |||¬¦  «        }d„ |D ¦   «         }|S )zûReturn docs most similar to query.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.

        Returns:
            List of Documents most similar to the query.
        )rm   c                ó   — g | ]
}|d          ‘ŒS )r   © )r\   Úds     r"   r^   z5XataVectorStore.similarity_search.<locals>.<listcomp>Ÿ   s   € Ð3Ð3Ð3˜a�Q�q”TÐ3Ð3Ð3r'   )Úsimilarity_search_with_score)r!   rj   rk   rm   r5   Údocs_and_scoresr)   s          r"   Úsimilarity_searchz!XataVectorStore.similarity_search’   s7   € ð ×;Ò;¸EÀ1ÈVÐ;ÑTÔTˆØ3Ð3 ?Ð3Ñ3Ô3ˆ	ØÐr'   úList[Tuple[Document, float]]c                ó2  ‡ — ‰ j                              |¦  «        }|d|dœ}|r||d<   ‰ j                             ¦   «                              ‰ j        |¬¦  «        }|j        dk    rt          d|j        › d|› �¦  «        ‚|d         }ˆ fd	„|D ¦   «         }	|	S )
aœ  Run similarity search with Chroma with distance.

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

        Returns:
            List[Tuple[Document, float]]: List of documents most similar to the query
                text with distance in float.
        r   )ÚqueryVectorÚcolumnÚsizerm   ©Úpayloadr@   z!Error running similarity search: rA   r?   c                ó€   •— g | ]:}t          |d          ‰                     |¦  «        ¬¦  «        |d         d         f‘Œ;S )r=   r[   ÚxataÚscore)r   Ú_extractMetadata)r\   Úhitr!   s     €r"   r^   z@XataVectorStore.similarity_search_with_score.<locals>.<listcomp>¼   se   ø€ ð 	
ð 	
ð 	
ð õ Ø!$ Y¤Ø!×2Ò2°3Ñ7Ô7ðñ ô ð �F”˜GÔ$ðð	
ð 	
ð 	
r'   )r   Úembed_queryr   ÚdataÚvector_searchr    rK   rL   )
r!   rj   rk   rm   r5   r   r|   rW   Úhitsrt   s
   `         r"   rs   z,XataVectorStore.similarity_search_with_score¢   sÖ   ø€ ð ”O×/Ò/°Ñ6Ô6ˆ	à$Ø!Øð
ð 
ˆð
 ð 	'Ø &ˆG�HÑØŒL×ÒÑÔ×-Ò-¨dÔ.>ÈÐ-ÑPÔPˆØŒ=˜CÒÐÝÐSÀÄÐSÐSÐPQÐSÐSÑTÔTÐTØ�Œ|ˆð	
ð 	
ð 	
ð 	
ð ð	
ñ 	
ô 	
ˆð Ðr'   ÚrecordÚdictc                óP   — i }|                      ¦   «         D ]\  }}|dvr|||<   Œ|S )z:Extract metadata from a record. Filters out known columns.)r>   r=   r   r~   )rF   )r!   r†   rE   rQ   rR   s        r"   r€   z XataVectorStore._extractMetadataÈ   s=   € àˆØŸš™œð 	$ð 	$‰HˆC�ØÐ@Ð@Ð@Ø #�˜‘øØˆr'   Ú
delete_allúOptional[bool]c                ó`  ‡ — |r,‰                       ¦   «          ‰                      d¬¦  «         dS |�od}t          dt          |¦  «        |¦  «        D ]L}||||z   …         }ˆ fd„|D ¦   «         }‰ j                             ¦   «                              d|i¬¦  «         ŒMdS t          d¦  «        ‚)	zŽDelete by vector IDs.

        Args:
            ids: List of ids to delete.
            delete_all: Delete all records in the table.
        r   )ÚndocsNiô  c                ó(   •— g | ]}d ‰j         |dœi‘ŒS ©Údelete)Útabler>   ©r    ©r\   r>   r!   s     €r"   r^   z*XataVectorStore.delete.<locals>.<listcomp>ã   s6   ø€ ð ð ð ØJL�X¨Ô)9ÀÐDÐDÐEðð ð r'   Ú
operationsr{   z%Either ids or delete_all must be set.)Ú_delete_allÚwait_for_indexingrH   rI   r   r?   Útransactionrf   )r!   r+   r‰   r5   rS   rU   rV   r“   s   `       r"   r�   zXataVectorStore.deleteÐ   sñ   ø€ ð ð 	FØ×ÒÑÔÐØ×"Ò"¨Ð"Ñ+Ô+Ð+Ð+Ð+Øˆ_ØˆJÝ˜1�c #™hœh¨
Ñ3Ô3ð Wð W�Ø˜A  J¡Ð.Ô/�ðð ð ð ØPUðñ ô �
ð ”×$Ò$Ñ&Ô&×2Ò2¸LÈ*Ð;UÐ2ÑVÔVÐVÐVðWð Wõ ÐDÑEÔEÐEr'   c                ó†  ‡ — 	 ‰ j                              ¦   «                              ‰ j        ddgi¬¦  «        }|j        dk    rt          d|j        › d|› �¦  «        ‚d„ |d	         D ¦   «         }t          |¦  «        d
k    rdS ˆ fd„|D ¦   «         }‰ j                              ¦   «                              d|i¬¦  «         ŒÀ)z Delete all records in the table.TÚcolumnsr>   r{   r@   zError running query: rA   c                ó   — g | ]
}|d          ‘ŒS )r>   rq   )r\   Úrecs     r"   r^   z/XataVectorStore._delete_all.<locals>.<listcomp>ð   s   € Ð5Ð5Ð5 �3�t”9Ð5Ð5Ð5r'   r?   r   c                ó(   •— g | ]}d ‰j         |dœi‘ŒS rŽ   r‘   r’   s     €r"   r^   z/XataVectorStore._delete_all.<locals>.<listcomp>ó   s6   ø€ ð ð ð ØFH� TÔ%5¸RÐ@Ð@ÐAðð ð r'   r“   N)	r   rƒ   rj   r    rK   rL   rI   r?   r–   )r!   rW   r+   r“   s   `   r"   r”   zXataVectorStore._delete_allê   sî   ø€ ð
	SØ”×!Ò!Ñ#Ô#×)Ò)¨$Ô*:ÀYÐQUÐPVÐDWÐ)ÑXÔXˆAØŒ} Ò#Ð#ÝÐ K¸¼Ð KÐ KÈÐ KÐ KÑLÔLÐLØ5Ð5¨¨)¬Ð5Ñ5Ô5ˆCÝ�3‰xŒx˜1Š}ˆ}Ø�ðð ð ð ØLOðñ ô ˆJð ŒL× Ò Ñ"Ô"×.Ò.¸ÀjÐ7QÐ.ÑRÔRÐRð
	Sr'   é   é   ÚtimeoutÚfloatrŒ   c                ó|  — t          j         ¦   «         }	 | j                             ¦   «                              | j        dddidœ¬¦  «        }|j        dk    rt          d|j        › d	|› �¦  «        ‚|d
         |k    rdS t          j         ¦   «         |z
  |k    rt          d¦  «        ‚t          j        d¦  «         Œ©)zeWait for the search index to contain a certain number of
        documents. Useful in tests.
        TÚ rz   r   )rj   Úpager{   r@   zError running search: rA   Ú
totalCountz+Timed out waiting for indexing to complete.g      à?N)Útimer   rƒ   Úsearch_tabler    rK   rL   Úsleep)r!   rž   rŒ   ÚstartrW   s        r"   r•   z!XataVectorStore.wait_for_indexingø   sË   € õ ”	‘”ˆð
	Ø”×!Ò!Ñ#Ô#×0Ò0ØÔ °BÀÈÀÐ*LÐ*Lð 1ñ ô ˆAð Œ} Ò#Ð#ÝÐ L¸¼Ð LÐ LÈÐ LÐ LÑMÔMÐMØ�Œ %Ò'Ð'Ø�ÝŒy‰{Œ{˜UÑ" WÒ,Ð,ÝÐ MÑNÔNÐNÝŒJ�s‰OŒOˆOð
	r'   )
r   r   r   r   r   r   r   r   r   r   )r   r   r%   )r   r(   r)   r*   r+   r,   r   r-   )NN)
r1   r2   r3   r4   r+   r,   r5   r   r   r-   )r1   r2   r3   rX   r   r*   )NNNr   N)r`   ra   r1   r-   r   r   r3   rb   r   rc   r   rc   r   r   r+   r,   r5   r   r   rd   )ri   N)
rj   r   rk   rl   rm   rn   r5   r   r   r*   )
rj   r   rk   rl   rm   rn   r5   r   r   rv   )r†   r‡   r   r‡   )r+   r,   r‰   rŠ   r5   r   r   r   )r   r   )rœ   r�   )rž   rŸ   rŒ   rl   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   Úpropertyr&   r0   r;   r/   Ústaticmethodr7   Úclassmethodrh   ru   rs   r€   r�   r”   r•   rq   r'   r"   r   r      s¼  € € € € € ðð ð3ð 3ð 3ð 3ð& ðð ð ñ „Xðð $(ð	:ð :ð :ð :ð :ð 59Ø#'ð	4ð 4ð 4ð 4ð 4ð" $(ð	 ð  ð  ð  ð  ðD ð 9=ðð ð ð ñ „\ðð ð
 +/Ø!%Ø $Ø#Ø#'ðð ð ð ñ „[ðð> @Dðð ð ð ð ð" @Dð$ð $ð $ð $ð $ðLð ð ð ð $(Ø%)ðFð Fð Fð Fð Fð4Sð Sð Sð Sðð ð ð ð ð ð r'   r   )Ú
__future__r   r¤   Ú	itertoolsr   Útypingr   r   r   r   r	   r
   r   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.vectorstoresr   r   rq   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Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ð{ð {ð {ð {ð {�kñ {ô {ð {ð {ð {r'   