Ë
    µŒj:#  ã                  ó‚   — 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y)
é    )ÚannotationsN)Úrepeat)ÚAnyÚDictÚIterableÚListÚOptionalÚTupleÚType)ÚDocument)Ú
Embeddings)ÚVectorStorec                  óh  — 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	 	 	 	 	 dd„«       Ze	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	„«       Z	 d	 	 	 	 	 	 	 	 	 dd
„Z	 d	 	 	 	 	 	 	 	 	 dd„Zdd„Z	 	 d	 	 	 	 	 	 	 dd„Zdd„Zdd d„Zy)!Ú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

    c                ó„   — 	 ddl m}  |||¬«      | _        || _        |xs d| _        y# t        $ r t        d«      ‚w xY w)zInitialize with Xata client.r   )Ú
XataClientzPCould not import xata python package. Please install it with `pip install xata`.)Úapi_keyÚdb_urlÚvectorsN)Úxata.clientr   ÚImportErrorÚ_clientÚ
_embeddingÚ_table_name)Úselfr   r   Ú	embeddingÚ
table_namer   s         úo/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/xata.pyÚ__init__zXataVectorStore.__init__   sQ   € ð	Ý.ñ "¨'¸&ÔAˆŒØ&/ˆŒØ%Ò2¨ˆÕøô ò 	Üð=óð ð	ús   ‚* ª?c                ó   — | j                   S ©N)r   )r   s    r   Ú
embeddingszXataVectorStore.embeddings(   s   € à�‰Ðó    Nc                ó(   — | j                  |||«      S r!   )Ú_add_vectors)r   r   Ú	documentsÚidss       r   Úadd_vectorszXataVectorStore.add_vectors,   s   € ð × Ñ  ¨)°SÓ9Ð9r#   c                ó˜   — |}| j                  ||«      }| j                  j                  t        |«      «      }| j	                  |||«      S r!   )Ú_texts_to_documentsr   Úembed_documentsÚlistr(   )r   ÚtextsÚ	metadatasr'   ÚkwargsÚdocsr   s          r   Ú	add_textszXataVectorStore.add_texts4   sH   € ð ˆØ×'Ñ'¨¨yÓ9ˆà—/‘/×1Ñ1´$°u³+Ó>ˆØ×Ñ ¨¨sÓ3Ð3r#   c                ó  — g }t        |«      D ]a  \  }}||   j                  |dœ}|r||   |d<   ||   j                  j                  «       D ]  \  }}	|dvsŒ|	||<   Œ |j	                  |«       Œc d}
g }t        dt        |«      |
«      D ]~  }||||
z    }| j                  j                  «       j                  | j                  d|i«      }|j                  dk7  rt        d|j                  › d	|› �«      ‚|j                  |d
   «       Œ€ |S )z!Add vectors to the Xata database.)Úcontentr   Úid)r4   r3   r   iè  r   ÚrecordséÈ   zError adding vectors to Xata: Ú Ú	recordIDs)Ú	enumerateÚpage_contentÚmetadataÚitemsÚappendÚrangeÚlenr   r5   Ú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‰NˆC�à$ S™>×6Ñ6Ø&ñˆCñ Ø ™H��D‘	Ø% c™N×3Ñ3×9Ñ9Ö;‘��SØÐ<Ò<Ø"�C˜’Hð <ð �K‰K˜Õð 1ð ˆ
ØˆÜ�qœ#˜d›) ZÖ0ˆAØ˜˜Q ™^Ð,ˆEà—‘×$Ñ$Ó&×2Ñ2°4×3CÑ3CÀiÐQVÐEWÓXˆAØ�}‰} Ò#ÜÐ"@ÀÇÁÀÈqÐQRÐPSÐ TÓUÐUØ�N‰N˜1˜[™>Õ*ð 1ð ˆr#   c                ó~   — |€t        i «      }t        | |«      D ��cg c]  \  }}t        ||¬«      ‘Œ }}}|S c c}}w )z:Return list of Documents from list of texts and metadatas.©r:   r;   )r   Úzipr   )r-   r.   Útextr;   r0   s        r   r*   z#XataVectorStore._texts_to_documentsc   sS   € ð ÐÜ˜r›
ˆIô #& e¨YÔ"7ô
á"7‘��hô  $°Ö:Ø"7ð 	ñ 
ð
 ˆùó
s   �9c                ó¬   — |r|st        d«      ‚|j                  |«      }	d}| j                  ||«      }
 | ||||¬«      }|j                  |	|
|«       |S )z9Return VectorStore initialized from texts and embeddings.z$Xata api_key and db_url must be set.N)r   r   r   r   )Ú
ValueErrorr+   r*   r%   )Úclsr-   r   r.   r   r   r   r'   r/   r"   r0   Ú	vector_dbs               r   Ú
from_textszXataVectorStore.from_textss   sl   € ñ ™fÜÐCÓDÐDà×.Ñ.¨uÓ5ˆ
ØˆØ×&Ñ& u¨iÓ8ˆáØØØØ!ô	
ˆ	ð 	×Ñ˜z¨4°Ô5ØÐr#   c                ó\   — | j                  |||¬«      }|D �cg c]  }|d   ‘Œ	 }}|S c c}w )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.
        )Úfilterr   )Úsimilarity_search_with_score)r   ÚqueryÚkrX   r/   Údocs_and_scoresÚdr&   s           r   Úsimilarity_searchz!XataVectorStore.similarity_search’   s>   € ð ×;Ñ;¸EÀ1ÈVÐ;ÓTˆÙ#2Ó3¡?˜a�Q�q“T ?ˆ	Ð3ØÐùò 4s   ™)c           	     ó�  — | j                   j                  |«      }|d|dœ}|r||d<   | j                  j                  «       j	                  | j
                  |¬«      }|j                  dk7  rt        d|j                  › d|› �«      ‚|d   }|D �	cg c])  }	t        |	d	   | j                  |	«      ¬
«      |	d   d   f‘Œ+ }
}	|
S c c}	w )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ÚsizerX   ©Úpayloadr6   z!Error running similarity search: r7   r5   r3   rO   ÚxataÚscore)
r   Úembed_queryr   ÚdataÚvector_searchr   rA   rB   r   Ú_extractMetadata)r   rZ   r[   rX   r/   r   rd   rM   ÚhitsÚhitr\   s              r   rY   z,XataVectorStore.similarity_search_with_score¢   sò   € ð —O‘O×/Ñ/°Ó6ˆ	à$Ø!Øñ
ˆñ
 Ø &ˆG�HÑØ�L‰L×ÑÓ×-Ñ-¨d×.>Ñ.>ÈÐ-ÓPˆØ�=‰=˜CÒÜÐ?ÀÇÁ¸ÈaÐPQÈsÐSÓTÐTØ�‰|ˆñ ó	
ñ �ô Ø!$ Y¡Ø!×2Ñ2°3Ó7ôð �F‘˜GÑ$òð ð 	ð 	
ð Ðùò	
s   Â.Cc                óN   — i }|j                  «       D ]  \  }}|dvsŒ|||<   Œ |S )z:Extract metadata from a record. Filters out known columns.)r4   r3   r   re   )r<   )r   Úrecordr;   rG   rH   s        r   rj   z XataVectorStore._extractMetadataÈ   s4   € àˆØŸ™ž‰HˆC�ØÐ@Ò@Ø #�˜’ð 'ð ˆr#   c                óP  — |r#| j                  «        | j                  d¬«       y|�pd}t        dt        |«      |«      D ]T  }||||z    }|D �cg c]  }d| j                  |dœi‘Œ }}| j
                  j                  «       j                  d|i¬«       ŒV yt        d	«      ‚c c}w )
zŽDelete by vector IDs.

        Args:
            ids: List of ids to delete.
            delete_all: Delete all records in the table.
        r   )ÚndocsNiô  Údelete©Útabler4   Ú
operationsrc   z%Either ids or delete_all must be set.)	Ú_delete_allÚwait_for_indexingr>   r?   r   r   r5   ÚtransactionrS   )	r   r'   Ú
delete_allr/   rI   rK   rL   r4   rt   s	            r   rq   zXataVectorStore.deleteÐ   sº   € ñ Ø×ÑÔØ×"Ñ"¨Ð"Õ+Øˆ_ØˆJÜ˜1œc #›h¨
Ö3�Ø˜A  J¡Ð/�áPUóÙPUÈ"�X¨×)9Ñ)9ÀÑDÒEÐPUð ð ð —‘×$Ñ$Ó&×2Ñ2¸LÈ*Ð;UÐ2ÕVñ 4ô ÐDÓEÐEùòs   ÁB#c                óº  — 	 | j                   j                  «       j                  | j                  ddgi¬«      }|j                  dk7  rt        d|j                  › d|› �«      ‚|d   D �cg c]  }|d   ‘Œ	 }}t        |«      dk(  ry|D �cg c]  }d	| j                  |d
œi‘Œ }}| j                   j                  «       j                  d|i¬«       ŒÑc c}w c c}w )z Delete all records in the table.Úcolumnsr4   rc   r6   zError running query: r7   r5   r   rq   rr   rt   N)	r   rh   rZ   r   rA   rB   r?   r5   rw   )r   rM   Úrecr'   r4   rt   s         r   ru   zXataVectorStore._delete_allê   sé   € àØ—‘×!Ñ!Ó#×)Ñ)¨$×*:Ñ*:ÀYÐQUÐPVÐDWÐ)ÓXˆAØ�}‰} Ò#ÜÐ"7¸¿¹°ÀaÈÀsÐ KÓLÐLØ()¨)ªÓ5© �3�t“9¨ˆCÐ5Ü�3‹x˜1Š}ØáLOóÙLOÀb� T×%5Ñ%5¸RÑ@ÒAÈCð ð ð �L‰L× Ñ Ó"×.Ñ.¸ÀjÐ7QÐ.ÔRð ùò 6ùòs   Á+CÂCc                ó|  — t        j                   «       }	 | j                  j                  «       j                  | j                  dddidœ¬«      }|j
                  dk7  rt        d|j
                  › d|› �«      ‚|d	   |k(  ryt        j                   «       |z
  |kD  rt        d
«      ‚t        j                  d«       Œ¨)zeWait for the search index to contain a certain number of
        documents. Useful in tests.
        Ú rb   r   )rZ   Úpagerc   r6   zError running search: r7   Ú
totalCountz+Timed out waiting for indexing to complete.g      à?N)Útimer   rh   Úsearch_tabler   rA   rB   Úsleep)r   Útimeoutrp   ÚstartrM   s        r   rv   z!XataVectorStore.wait_for_indexingø   s±   € ô —	‘	“ˆØØ—‘×!Ñ!Ó#×0Ñ0Ø× Ñ °BÀÈÀÑ*Lð 1ó ˆAð �}‰} Ò#ÜÐ"8¸¿¹¸ÀqÈÈÐ LÓMÐMØ�‰ %Ò'ØÜ�y‰y‹{˜UÑ" WÒ,ÜÐ MÓNÐNÜ�J‰J�sŒOð r#   )
r   Ústrr   r…   r   r   r   r…   ÚreturnÚNone)r†   r   r!   )r   zList[List[float]]r&   úList[Document]r'   úOptional[List[str]]r†   ú	List[str])NN)
r-   úIterable[str]r.   zOptional[List[Dict[Any, Any]]]r'   r‰   r/   r   r†   rŠ   )r-   r‹   r.   z"Optional[Iterable[Dict[Any, Any]]]r†   rˆ   )NNNr   N)rT   zType['XataVectorStore']r-   rŠ   r   r   r.   zOptional[List[dict]]r   úOptional[str]r   rŒ   r   r…   r'   r‰   r/   r   r†   z'XataVectorStore')é   N)
rZ   r…   r[   ÚintrX   úOptional[dict]r/   r   r†   rˆ   )
rZ   r…   r[   rŽ   rX   r�   r/   r   r†   zList[Tuple[Document, float]])rn   Údictr†   r�   )r'   r‰   rx   zOptional[bool]r/   r   r†   r‡   )r†   r‡   )é   é   )rƒ   Úfloatrp   rŽ   r†   r‡   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr"   r(   r1   r%   Ústaticmethodr*   ÚclassmethodrV   r^   rY   rj   rq   ru   rv   © r#   r   r   r      sW  „ ñð3àð3ð ð3ð ð	3ð
 ð3ð 
ó3ð& òó ðð $(ð	:à"ð:ð "ð:ð !ð	:ð
 
ó:ð 59Ø#'ð	4àð4ð 2ð4ð !ð	4ð
 ð4ð 
ó4ð" $(ð	 à"ð ð "ð ð !ð	 ð
 
ó ðD ð 9=ðØðà5ðð 
òó ðð ð
 +/Ø!%Ø $Ø#Ø#'ðØ$ðàðð ðð (ð	ð
 ðð ðð ðð !ðð ðð 
òó ðð> @DðØðØ ðØ.<ðØORðà	óð" @Dð$Øð$Ø ð$Ø.<ð$ØORð$à	%ó$óLð $(Ø%)ðFà ðFð #ðFð ð	Fð
 
óFó4Sõr#   r   )Ú
__future__r   r€   Ú	itertoolsr   Útypingr   r   r   r   r	   r
   r   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.vectorstoresr   r   r›   r#   r   Ú<module>r¢      s.   ðÝ "ã Ý ß C× CÑ Cå -Ý 0Ý 3ô{�kõ {r#   