
    dh0&                         S SK JrJrJrJrJrJr  S SKJr  S SK	r
S SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJr   " S	 S
\5      rg)    )AnyIterableListOptionalTuplecast)uuid4N)Document)
Embeddings)get_from_env)VectorStore)DistanceStrategyc                   D   \ rS rSr% SrSr\\S'   S\-   r\	R                  S4S\S\S	\S
\	S\4
S jjr\S\4S j5       rS\4S jrS\4S jrS\4S jr  S$S\\   S\\\      S\S\S\\   4
S jjr\S\4S j5       rS%S\\\      S\S\\   4S jjrS&S	\\   S\S\\   4S jjr S&S\S\S\S\\   4S jjr S&S\S\S\S\\ \\4      4S jjr! S&S	\\   S\S\S\\   4S  jjr"\#SSS!S\	R                  4S\\   S	\S\\\      S\S\S\S
\	S\SS 4S" jj5       r$S#r%g)'SemaDB   a  `SemaDB` vector store.

This vector store is a wrapper around the SemaDB database.

Example:
    .. code-block:: python

        from langchain_community.vectorstores import SemaDB

        db = SemaDB('mycollection', 768, embeddings, DistanceStrategy.COSINE)

zsemadb.p.rapidapi.comHOSTzhttps:// collection_namevector_size	embeddingdistance_strategyapi_keyc                 h    Xl         X l        U=(       d    [        SS5      U l        X0l        X@l        g)z#initialize the SemaDB vector store.r   SEMADB_API_KEYN)r   r   r   r   
_embeddingr   )selfr   r   r   r   r   s         _/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/vectorstores/semadb.py__init__SemaDB.__init__   s/      /&K,y:J"K#!2    returnc                 >    SU R                   [        R                  S.$ )zReturn the common headers.zapplication/json)zcontent-typezX-RapidAPI-KeyzX-RapidAPI-Host)r   r   r   r   s    r   headersSemaDB.headers.   s     /"ll%{{
 	
r    c                    U R                   [        R                  :X  a  gU R                   [        R                  :X  a  [	        S5      eU R                   [        R
                  :X  a  gU R                   [        R                  :X  a  [	        S5      eU R                   [        R                  :X  a  g[	        SU R                    35      e)z&Return the internal distance strategy.	euclideanz,Max inner product is not supported by SemaDBdotcosinezUnknown distance strategy )r   r   EUCLIDEAN_DISTANCEMAX_INNER_PRODUCT
ValueErrorDOT_PRODUCTJACCARDCOSINEr#   s    r   _get_internal_distance_strategy&SemaDB._get_internal_distance_strategy7   s    !!%5%H%HH##'7'I'IIKLL##'7'C'CC##'7'?'??KLL##'7'>'>>9$:P:P9QRSSr    c                     U R                   U R                  U R                  5       S.n[        R                  " [
        R                  S-   UU R                  S9nUR                  S:H  $ )z/Creates the corresponding collection in SemaDB.)id
vectorSizedistanceMetricz/collectionsjsonr$      )	r   r   r0   requestspostr   BASE_URLr$   status_code)r   payloadresponses      r   create_collectionSemaDB.create_collectionF   sb     &&**"BBD

 ==OOn,LL

 ##s**r    c                     [         R                  " [        R                  SU R                   3-   U R
                  S9nUR                  S:H  $ )z/Deletes the corresponding collection in SemaDB./collections/)r$   r8   )r9   deleter   r;   r   r$   r<   )r   r>   s     r   delete_collectionSemaDB.delete_collectionT   sD    ??OOd.B.B-CDDLL
 ##s**r    Ntexts	metadatas
batch_sizekwargsc                    [        U[        5      (       d  [        U5      nU R                  R                  U5      n[	        US   5      U R
                  :w  a'  [        S[	        US   5       SU R
                   35      eU R                  [        R                  :X  ad  [        R                  " U5      nU[        R                  R                  USSS9-  n[        [        [        [               UR#                  5       5      n/ n/ nUbV  [%        XU5       HE  u  pn['        [)        5       5      nUR+                  U5        UR+                  UU
0 UESU	0ES.5        MG     OO[%        X5       H@  u  p['        [)        5       5      nUR+                  U5        UR+                  UU
SU	0S.5        MB     [-        S[	        U5      U5       H  nXX-    n[.        R0                  " [2        R4                  S	U R6                   S
3-   SU0U R8                  S9nUR:                  S:w  a$  [=        SU5        [        SUR>                   35      eURA                  5       S   n[	        U5      S:  d  M  [        SU 35      e   U$ )zAdd texts to the vector store.r   zEmbedding size mismatch z !=    T)axiskeepdimstext)r3   vectormetadatarB   /pointspointsr6   r8   zHERE--zError adding points: failedRanges)!
isinstancelistr   embed_documentslenr   r,   r   r   r/   nparraylinalgnormr   r   floattolistzipstrr	   appendranger9   r:   r   r;   r   r$   r<   printrN   r7   )r   rF   rG   rH   rI   
embeddingsembed_matrixidsrR   rN   r   rP   new_idibatchr>   failed_rangess                    r   	add_textsSemaDB.add_texts\   sQ    %&&KE__44U;
z!}!1!11*3z!}+=*>d4CSCSBTU  !!%5%<%<<88J/L'"))..1t +9 + L d4;/1D1D1FGJ -0I-N)UW

6"$"+$Bx$BFD>$B .O $'u#9UW

6"$"+%+TN $: q#f+z2Aq~.E}}M$2F2F1Gw"OO&H
 ##s*h& #8!HII$MMON;M=!A% #8!HII 3 
r    c                     U R                   $ )zReturn the embeddings.)r   r#   s    r   rc   SemaDB.embeddings   s     r    re   c                     SU0n[         R                  " [        R                  SU R                   S3-   UU R
                  S9nUR                  S:H  =(       a    [        UR                  5       S   5      S:H  $ )zDelete by vector ID or other criteria.

Args:
    ids: List of ids to delete.
    **kwargs: Other keyword arguments that subclasses might use.

Returns:
    Optional[bool]: True if deletion is successful,
    False otherwise, None if not implemented.
re   rB   rQ   r6   r8   failedPointsr   )	r9   rC   r   r;   r   r$   r<   rW   r7   )r   re   rI   r=   r>   s        r   rC   SemaDB.delete   st     3
 ??OOd.B.B-C7KKLL

 ##s*Xs8==?>3R/SWX/XXr    kc                    U R                   [        R                  :X  a]  [        R                  " U5      nU[        R
                  R                  U5      -  n[        [        [           UR                  5       5      nUUS.n[        R                  " [        R                  SU R                   S3-   UU R                   S9nUR"                  S:w  a  [%        SUR&                   35      eUR)                  5       S   $ )zSearch points.)rO   limitrB   z/points/searchr6   r8   zError searching: rR   )r   r   r/   rX   rY   rZ   r[   r   r   r\   r]   r9   r:   r   r;   r   r$   r<   r,   rN   r7   )r   r   rq   vecr=   r>   s         r   _search_pointsSemaDB._search_points   s     !!%5%<%<<((9%C		s++CT%[#**,7I  
 ==OOd.B.B-C>RRLL

 3&0@AA}}x((r    queryc                 V    U R                   R                  U5      nU R                  XBS9$ )z"Return docs most similar to query.rq   )r   embed_querysimilarity_search_by_vector)r   rw   rq   rI   query_embeddings        r   similarity_searchSemaDB.similarity_search   s,     //55e<///EEr    c                     U R                   R                  U5      nU R                  XBS9nU Vs/ sH  n[        US   S   US   S9US   4PM     sn$ s  snf )z$Run similarity search with distance.ry   rP   rN   page_contentrP   distance)r   rz   ru   r
   )r   rw   rq   rI   r|   rR   ps          r   similarity_search_with_score#SemaDB.similarity_search_with_score   sv     //55e<$$_$: 

  a
mF&;a
mT* 
 	
 
s   !Ac                 p    U R                  XS9nU Vs/ sH  n[        US   S   US   S9PM     sn$ s  snf )zReturn docs most similar to embedding vector.

Args:
    embedding: Embedding to look up documents similar to.
    k: Number of Documents to return. Defaults to 4.

Returns:
    List of Documents most similar to the query vector.
ry   rP   rN   r   )ru   r
   )r   r   rq   rI   rR   r   s         r   r{   "SemaDB.similarity_search_by_vector   sR     $$Y$4 
 !J-"7!J-P
 	
 
s   3r   c                     U(       d  [        S5      eU(       d  [        S5      eU(       d  [        S5      eU " UUUUUS9n	U	R                  5       (       d  [        S5      eU	R                  XS9  U	$ )z9Return VectorStore initialized from texts and embeddings.z Collection name must be providedzVector size must be providedzAPI key must be provided)r   r   zError creating collection)rG   )r,   r?   rj   )
clsrF   r   rG   r   r   r   r   rI   semadbs
             r   
from_textsSemaDB.from_texts   s}     ?@@;<<788/
 ''))8994r    )r   r   r   r   r   )Ni  )N)   )&__name__
__module____qualname____firstlineno____doc__r   r_   __annotations__r;   r   r*   intr   r   propertydictr$   r0   boolr?   rD   r   r   r   r   rj   rc   rC   r\   ru   r
   r}   r   r   r{   classmethodr   __static_attributes__ r    r   r   r      s    (D#'D H /?.Q.Q33 3 	3
 ,3 3 
 
 
T T+4 ++4 + +/	?}? DJ'? 	?
 ? 
c?B J  Y(49- Y YQU Y*)U ) )DJ ), $%FF F03F	hF $%

 
03
	eHeO$	%
 01
e
),
<?
	h
$ 
 +/!.>.Q.QCy  DJ'	
    ,  
 r    r   )typingr   r   r   r   r   r   uuidr	   numpyrX   r9   langchain_core.documentsr
   langchain_core.embeddingsr   langchain_core.utilsr   langchain_core.vectorstoresr   &langchain_community.vectorstores.utilsr   r   r   r    r   <module>r      s1    = =    - 0 - 3 CB[ Br    