
    dh8                        S SK Jr  S SKrS SKrS SKJrJrJrJr  S SK	J
r
  S SKJr  S SKJr  \R                  " \5      r " S S\5      rg)	    )annotationsN)AnyListOptionalTuple)Document)
Embeddings)VectorStorec                     \ rS rSrSr              SS jr S   SS jjr      SS jrSSS jjr\	SS j5       r
 S       SS	 jjr     S               S S
 jjr   S!           S"S jjr      S#S jr\  S$                       S%S jj5       rS&S jrS'S jrS(S jrS&S jrS&S jrS)S jrS*S jrSrg)+Jaguar   a  `Jaguar API` vector store.

See http://www.jaguardb.com
See http://github.com/fserv/jaguar-sdk

Example:
   .. code-block:: python

       from langchain_community.vectorstores.jaguar import Jaguar

       vectorstore = Jaguar(
           pod = 'vdb',
           store = 'mystore',
           vector_index = 'v',
           vector_type = 'cosine_fraction_float',
           vector_dimension = 1536,
           url='http://192.168.8.88:8080/fwww/',
           embedding=openai_model
       )
c                    Xl         X l        X0l        X@l        XPl        Xpl         SSKJn  U" U5      U l	        SU l
        g ! [         a    [        S5      ef = f)Nr   )JaguarHttpClientzrCould not import jaguardb-http-client python package. Please install it with `pip install -U jaguardb-http-client` )_pod_store_vector_index_vector_type_vector_dimension
_embedding%jaguardb_http_client.JaguarHttpClientr   ImportError_jag_token)	selfpodstorevector_indexvector_typevector_dimensionurl	embeddingr   s	            _/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/vectorstores/jaguar.py__init__Jaguar.__init__$   sf     	)'!1#	N %S)	  	O 	s   A Ac                    US:X  a  U R                   R                  5       nXl        U R                   R                  U5      U l        U R                  S:X  a  [
        R                  S5        gg)a  
login to jaguardb server with a jaguar_api_key or let self._jag find a key
Args:
    pod (str):  name of a Pod
    store (str):  name of a vector store
    optional jaguar_api_key (str): API key of user to jaguardb server
Returns:
    True if successful; False if not successful
r   z*E0001 error init(): invalid jaguar_api_keyFT)r   	getApiKey_jaguar_api_keyloginr   loggererror)r   jaguar_api_keys     r#   r)   Jaguar.login@   sW     R!YY002N-iioon5;;"LLEF    c                    U R                   S-   U R                  -   n SnXC-  nUSU R                   SU R                   S3-  nUSU R                   S3-  nUSU S	3-  nXAS
-   -  nU R                  U5        g)z
create the vector store on the backend database
Args:
    metadata_str (str):  columns and their types
Returns:
    True if successful; False if not successful
.zcreate store  (z vector(,z 'z'),z source char(256), v:text char(z),)N)r   r   r   r   r   run)r   metadata_str	text_sizepodstoreqs        r#   createJaguar.createW   s     99s?T[[0	 		r$$$%Xd.D.D-EQGG	r$##$C((	.yk<<	Cr.   c                   U R                   S:X  a  [        R                  SU S35        0 $ U R                  R	                  XR                   U5      nUR
                  n [        R                  " U5      nU$ ! [         a    0 s $ f = f)z
Run any query statement in jaguardb
Args:
    query (str): query statement to jaguardb
Returns:
    None for invalid token, or
    json result string
r   zE0005 error run(r3   )	r   r*   r+   r   posttextjsonloads	Exception)r   querywithFileresptxtjss         r#   r4   
Jaguar.runq   sw     ;;"LL+E7!45Iyy~~e[[(;ii	CBI 	I	s   A7 7BBc                    U R                   $ N)r   r   s    r#   
embeddingsJaguar.embeddings   s    r.   Nc                   U R                   nUR                  SS5      nUR                  SS5      nU R                  S-   U R                  -   S-   U-   nSU-   nU R	                  U5      n	U	S:X  a  / $ U	S   n
US:w  a$  / nU H  nUR                  US-   U-   5        M     UnU R                  R                  [        U5      5      n/ nUc  SnU H  nU Vs/ sH  n[        U5      PM     nnS	R                  U5      nU R                  S-   U R                  -   nS
U-   S-   nXS	-   U
-   S-   U-   -  nX   R                  SS5      nUSU-   S-   -  nU R	                  US5      n	UR                  U	S   5        US-  nM     U$ SnU GHP  nU Vs/ sH  n[        U5      PM     nnU R                  X/   U5      u  nnnUS:w  a2  U R                  R                  U R                  US5      nU(       d  / s  $ S	R                  U5      nUS	U-   -  nSSR                  U5      -   S-   nUSS	R                  U5      -   S-   -  nU R                  S-   U R                  -   nS
U-   S-   nUUS	-   U
-   S-   U-   -  nX   R                  SS5      nUSU-   S-   -  nUS:w  a  U R	                  US5      n	OU R	                  US5      n	UR                  U	S   5        US-  nGMS     U$ s  snf s  snf )a  
Add  texts through the embeddings and add to the vectorstore.
Args:
  texts: list of text strings to add to the jaguar vector store.
  metadatas: Optional list of metadatas associated with the texts.
    [{"m1": "v11", "m2": "v12", "m3": "v13", "filecol": "path_file1.jpg" },
     {"m1": "v21", "m2": "v22", "m3": "v23", "filecol": "path_file2.jpg" },
     {"m1": "v31", "m2": "v32", "m3": "v33", "filecol": "path_file3.jpg" },
     {"m1": "v41", "m2": "v42", "m3": "v43", "filecol": "path_file4.jpg" }]
  kwargs: vector_index=name_of_vector_index
          file_column=name_of_file_column

Returns:
    List of ids from adding the texts into the vectorstore
file_columnr   text_tagr0   ztextcol data r   r2   zinsert into r1   z) values (''z\'z','')Fzid   ,'z
) values (T)r   getr   r   r4   appendr   embed_documentsliststrjoinreplace
_parseMetar   postFiler   )r   texts	metadataskwargsvcolfilecolrN   podstorevcolr8   rE   textcol	tag_textstrJ   idsivecxstr_vecvalues_commar7   rD   nvecvvecfilepathrcnames_commas                              r#   	add_textsJaguar.add_texts   s   * !!**]B/::j"-yy34s:TA%XXa[8IV*r>I  C!!34 E__44T%[A
A!+./3a3q63/"xx099s?T[[8"X-4CZ')M9LHHh&&sE2US[4''XXa'

2e9%Q "N 
7 A!+./3a3q63/'+y|W'M$dHb=++DKK1EB!	!hhtnsTz)"UZZ%55;sxx'8 83 >>99s?T[[8"X-4[3&0<?,NNh&&sE2TCZ$&&b=!T*B!U+B

2e9%Q1 "4 
M 0 0s   KKc                   U R                   nU R                  n	U R                  R                  U5      n
U
 Vs/ sH  n[	        U5      PM     nnSR                  U5      nU R                  S-   U R                  -   nSU-   S-   U-   S-   [	        U5      -   S-   [	        U5      -   S-   U	-   nUS-  nUb  USU-   -  nUb  S	R                  U5      nUS
U-   -  nUSU-   -  nUb  USU-   -  nU R                  U5      nUc  / $ / nU HN  nUS   nUS   nUS   n0 nUUS'   Ub  U H  nUU   nUUU'   M     [        UUS9nUU4nUR                  U5        MP     U$ s  snf )a  
Return Jaguar documents most similar to query, along with scores.
Args:
    query: Text to look up documents similar to.
    k: Number of Documents to return. Defaults to 3.
    lambda_val: lexical match parameter for hybrid search.
    where: the where clause in select similarity. For example a
        where can be "rating > 3.0 and (state = 'NV' or state = 'CA')"
    args: extra options passed to select similarity
    kwargs:  vector_index=vcol, vector_type=cosine_fraction_float
Returns:
    List of Documents most similar to the query and score for each.
    List of Tuples of (doc, similarity_score):
        [ (doc, score), (doc, score), ...]
r2   r0   zselect similarity(rU   z','topk=z	,fetch_k=z,type=z,with_score=yes,with_text=yes&z
,metadata=z') from z where scorer=   rS   )page_contentmetadata)r   r   r   embed_queryrZ   r[   r   r   r4   r   rW   )r   rA   kfetch_kwhereargsr`   ra   rb   vtyperJ   fstr_embeddingsqv_commar7   r8   metajarrdocs_with_scorerE   rw   r=   rS   mdmmvdoctups                               r#   similarity_search_with_score#Jaguar.similarity_search_with_score   s   2 !!!!__007
*45*Q#a&*588N+99s?T[[0   	
 !f  'l  	 	
 	
,,tOA 88I&D$$A	Z(""U""Axx{<IBwKEf:DU)C BBuI$"AABBqE # r:C,C""3' " e 6s   Ec                f    U R                   " U4X#US.UD6nU VVs/ sH  u  pxUPM	     snn$ s  snnf )ao  
Return Jaguar documents most similar to query, along with scores.
Args:
    query: Text to look up documents similar to.
    k: Number of Documents to return. Defaults to 5.
    where: the where clause in select similarity. For example a
        where can be "rating > 3.0 and (state = 'NV' or state = 'CA')"
Returns:
    List of Documents most similar to the query
)r{   r}   r`   )r   )	r   rA   r{   r}   r`   ra   docs_and_scoresr   _s	            r#   similarity_searchJaguar.similarity_search-  sE    $ ;;
y
<B
 #22//222s   -c                   U R                   nU R                  nU R                  R                  U5      nU Vs/ sH  n[	        U5      PM     nnSR                  U5      nU R                  S-   U R                  -   n	SU-   S-   U-   S-   U-   S-   n
U
SU	-   -  n
U R                  U
5      n[        U[        5      (       a  [        U5      S:X  a  g	[        R                  " US   5      nUS
   S:X  a  gg	s  snf )z
Detect if given text is anomalous from the dataset
Args:
    query: Text to detect if it is anomaly
Returns:
    True or False
r2   r0   zselect anomalous(z, 'z	', 'type=rR   z from r   F	anomalousYEST)r   r   r   rz   rZ   r[   r   r   r4   
isinstancerY   lenr>   r?   )r   rA   ra   rb   r   rJ   r   r   r   r7   r8   rE   jds                r#   is_anomalousJaguar.is_anomalousD  s     !!!!__007
*45*Q#a&*588N+99s?T[[0$&.9KG%ORVV	X  XXa[b$CGqLZZ1k?e# 6s   C1c           	         U " XEXgXU5      nUR                  U
5        UR                  5         UR                  " X40 UD6  U$ rH   )r)   clearrs   )clsr_   r"   r!   r   r   r   r   r    r`   r,   ra   jagstores                r#   
from_textsJaguar.from_textsa  sH     3C)
 	~&56v6r.   c                h    U R                   S-   U R                  -   nSU-   nU R                  U5        g)z<
Delete all records in jaguardb
Args: No args
Returns: None
r0   ztruncate store Nr   r   r4   r   r7   r8   s      r#   r   Jaguar.clearx  s/     99s?T[[0(r.   c                    U R                   S-   U R                  -   nU H"  nSU-   S-   U-   S-   nU R                  U5        M$     g)z
Delete records in jaguardb by a list of zero-ids
Args:
    pod (str):  name of a Pod
    ids (List[str]):  a list of zid as string
Returns:
    Do not return anything
r0   zdelete from z where zid='rQ   Nr   )r   zidsra   r7   rS   r8   s         r#   deleteJaguar.delete  sH     99s?T[[0C)N:S@3FAHHQK r.   c                    U R                   S-   U R                  -   nSU-   nU R                  U5      n[        U[        5      (       a  [        U5      S:X  a  g[        R                  " US   5      n[        US   5      $ )zb
Count records of a store in jaguardb
Args: no args
Returns: (int) number of records in pod store
r0   zselect count() from r   rO   )	r   r   r4   r   rY   r   r>   r?   int)r   r7   r8   rE   r   s        r#   countJaguar.count  sk     99s?T[[0"X-XXa[b$CGqLZZ12f:r.   c                h    U R                   S-   U R                  -   nSU-   nU R                  U5        g)z@
Drop or remove a store in jaguardb
Args: no args
Returns: None
r0   zdrop store Nr   r   s      r#   dropJaguar.drop  s/     99s?T[[0H$r.   c                N    U R                   R                  U R                  5        g)z9
Logout to cleanup resources
Args: no args
Returns: None
N)r   logoutr   rI   s    r#   r   Jaguar.logout  s     			%r.   c                l    [        SS5       n[        SU 3USS9  S S S 5        g ! , (       d  f       g = f)Nz/tmp/debugjaguar.logazmsg=T)fileflush)openprint)r   msgr   s      r#   prt
Jaguar.prt  s-    (#.$D,T6 /..s   %
3c                   SnUS:X  a3  [        UR                  5       5      n[        UR                  5       5      nOs/ n/ nX!;   a(  UR                  U5        UR                  X   5        X   nUR	                  5        H.  u  pgXb:w  d  M  UR                  U5        UR                  U5        M0     U Vs/ sH  n[        U5      PM     n	nXIU4$ s  snf Nr   )rY   keysvaluesrW   itemsrZ   )
r   nvmaprc   rp   rn   ro   r{   vevvec_ss
             r#   r]   Jaguar._parseMeta  s    b=

%D'DDDG$EN+ ><KKNKKN &
 #''$Q#a&$'X%% (s   3C)	r   r   r(   r   r   r   r   r   r   )r   rZ   r   rZ   r   rZ   r   rZ   r    r   r!   rZ   r"   r	   )r   )r,   Optional[str]returnbool)r5   rZ   r6   r   r   None)F)rA   rZ   rB   r   r   dict)r   zOptional[Embeddings]rH   )r_   	List[str]r`   Optional[List[dict]]ra   r   r   r   )   NNN)rA   rZ   r{   r   r|   r   r}   r   r~   r   r`   Optional[List[str]]ra   r   r   zList[Tuple[Document, float]])r   NN)rA   rZ   r{   r   r}   r   r`   r   ra   r   r   zList[Document])rA   rZ   ra   r   r   r   r   )r_   r   r"   r	   r!   rZ   r   rZ   r   rZ   r   rZ   r   rZ   r    r   r`   r   r,   r   ra   r   r   r   )r   r   )r   r   ra   r   r   r   )r   r   )r   rZ   r   r   )r   r   rc   rZ   r   z Tuple[List[str], List[str], str])__name__
__module____qualname____firstlineno____doc__r$   r)   r9   r4   propertyrJ   rs   r   r   r   classmethodr   r   r   r   r   r   r   r]   __static_attributes__ r.   r#   r   r      sj   *  	
    < )+% 
.  
	4*   +/QQ (Q 	Q
 
Ql #")-NN N 	N
 N N 'N N 
&Nf #)-33 3 	3
 '3 3 
3.  
	:  +/(*  	
      ( &  
 ,&7&r.   r   )
__future__r   r>   loggingtypingr   r   r   r   langchain_core.documentsr   langchain_core.embeddingsr	   langchain_core.vectorstoresr
   	getLoggerr   r*   r   r   r.   r#   <module>r      s;    "   - - - 0 3			8	$y&[ y&r.   