
    h8                        d dl mZ d dlZd dlZd dlmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZ  ej                  e      Z G d de      Zy)	    )annotationsN)AnyListOptionalTuple)Document)
Embeddings)VectorStorec                  z   e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 ddZ	 	 	 	 	 	 ddZdddZedd       Z		 d	 	 	 	 	 	 	 ddZ
	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d d
Z	 	 	 	 	 	 d!dZe	 	 d"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d#d       Zd$dZd%dZd&dZd$dZd$dZd'dZd(dZy))Jaguara'  `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                    || _         || _        || _        || _        || _        || _        	 ddlm}  ||      | _	        d| _
        y # t        $ r t        d      w xY w)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	            e/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/vectorstores/jaguar.py__init__zJaguar.__init__$   sr     	)'!1#	N %S)	  	O 	s   A Ac                    |dk(  r| j                   j                         }|| _        | j                   j                  |      | _        | j                  dk(  rt
        j                  d       yy)aX  
        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'   zJaguar.login@   sY     R!YY002N-iioon5;;"LLEF    c                    | j                   dz   | j                  z   }	 d}||z  }|d| j                   d| j                   dz  }|d| j                   dz  }|d| d	z  }||d
z   z  }| j                  |       y)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"   createzJaguar.createW   s     99s?T[[0	 	X	r$$$%Xd.D.D-EQGG	r$##$C((	.yk<<	\Cr+   c                   | j                   dk(  rt        j                  d| d       i S | j                  j	                  || j                   |      }|j
                  }	 t        j                  |      }|S # t        $ r i cY S w xY w)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(r0   )	r   r(   r)   r   posttextjsonloads	Exception)r   querywithFileresptxtjss         r"   r1   z
Jaguar.runq   sy     ;;"LL+E7!45Iyy~~eT[[(;ii	CBI 	I	s   A6 6BBc                    | j                   S N)r   r   s    r"   
embeddingszJaguar.embeddings   s    r+   Nc                   | j                   }|j                  dd      }|j                  dd      }| j                  dz   | j                  z   dz   |z   }d|z   }| j	                  |      }	|	dk(  rg S |	d   }
|dk7  r"g }|D ]  }|j                  |dz   |z           |}| j                  j                  t        |            }g }|d}|D ]  }|D cg c]  }t        |       }}d	j                  |      }| j                  dz   | j                  z   }d
|z   dz   }||d	z   |
z   dz   |z   z  }||   j                  dd      }|d|z   dz   z  }| j	                  |d      }	|j                  |	d          |dz  } |S d}|D ]H  }|D cg c]  }t        |       }}| j                  ||   |      \  }}}|dk7  r-| j                  j                  | j                  |d      }|sg c S d	j                  |      }|d	|z   z  }ddj                  |      z   dz   }|dd	j                  |      z   dz   z  }| j                  dz   | j                  z   }d
|z   dz   }||d	z   |
z   dz   |z   z  }||   j                  dd      }|d|z   dz   z  }|dk7  r| j	                  |d      }	n| j	                  |d      }	|j                  |	d          |dz  }K |S c c}w c c}w )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_tagr-   ztextcol data r   r/   zinsert into r.   z) values (''z\'z','')Fzid   ,'z
) values (T)r   getr   r   r1   appendr   embed_documentsliststrjoinreplace
_parseMetar   postFiler   )r   texts	metadataskwargsvcolfilecolrH   podstorevcolr5   rA   textcol	tag_textstrE   idsivecxstr_vecvalues_commar4   r@   nvecvvecfilepathrcnames_commas                              r"   	add_textszJaguar.add_texts   s+   * !!**]B/::j"-yy34s:TA%XXa[8IV*r>I 5  C!!345E__44T%[A
A! 
+./a3q6//"xx099s?T[[8"X-4TCZ')M9LHHAh&&sE2US[4''XXa'

2e9%Q
N 
7 A! +./a3q6//'+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Ah&&sE2TCZ$&&b=!T*B!U+B

2e9%Q14 
M 0 0s   K
Kc                   | j                   }| j                  }	| j                  j                  |      }
|
D cg c]  }t	        |       }}dj                  |      }| j                  dz   | j                  z   }d|z   dz   |z   dz   t	        |      z   dz   t	        |      z   dz   |	z   }|dz  }||d|z   z  }|d	j                  |      }|d
|z   z  }|d|z   z  }||d|z   z  }| j                  |      }|g S g }|D ]M  }|d   }|d   }|d   }i }||d<   ||D ]  }||   }|||<    t        ||      }||f}|j                  |       O |S c c}w )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), ...]
        r/   r-   zselect similarity(rO   z','topk=z	,fetch_k=z,type=z,with_score=yes,with_text=yes&z
,metadata=z') from z where scorer9   rM   )page_contentmetadata)r   r   r   embed_queryrT   rU   r   r   r1   r   rQ   )r   r=   kfetch_kwhereargsrZ   r[   r\   vtyperE   fstr_embeddingsqv_commar4   r5   metajarrdocs_with_scorerA   rp   r9   rM   mdmmvdoctups                               r"   similarity_search_with_scorez#Jaguar.similarity_search_with_score   s   2 !!!!__007
*45Q#a&5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     | j                   |f|||d|}|D cg c]  \  }}|	 c}}S c c}}w )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 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
        )rt   rv   rZ   )r   )	r   r=   rt   rv   rZ   r[   docs_and_scoresr   _s	            r"   similarity_searchzJaguar.similarity_search-  sG    $ <$;;
ey
<B
 #22Q222s   -c                   | j                   }| j                  }| j                  j                  |      }|D cg c]  }t	        |       }}dj                  |      }| j                  dz   | j                  z   }	d|z   dz   |z   dz   |z   dz   }
|
d|	z   z  }
| j                  |
      }t        |t              rt        |      dk(  ry	t        j                  |d         }|d
   dk(  ryy	c c}w )z
        Detect if given text is anomalous from the dataset
        Args:
            query: Text to detect if it is anomaly
        Returns:
            True or False
        r/   r-   zselect anomalous(z, 'z	', 'type=rL   z from r   F	anomalousYEST)r   r   r   rs   rT   rU   r   r   r1   
isinstancerS   lenr:   r;   )r   r=   r[   r\   rx   rE   ry   rz   r{   r4   r5   rA   jds                r"   is_anomalouszJaguar.is_anomalousD  s     !!!!__007
*45Q#a&5588N+99s?T[[0$&.9KG%ORVV	X  XXa[b$CGqLZZ1k?e# 6s   C'c           	          | |||||||      }|j                  |
       |j                           |j                  ||	fi | |S rC   )r'   clearrm   )clsrY   r!   r    r   r   r   r   r   rZ   r*   r[   jagstores                r"   
from_textszJaguar.from_textsa  sR     k3CS)
 	~&5)6v6r+   c                h    | j                   dz   | j                  z   }d|z   }| j                  |       y)z\
        Delete all records in jaguardb
        Args: No args
        Returns: None
        r-   ztruncate store Nr   r   r1   r   r4   r5   s      r"   r   zJaguar.clearx  s/     99s?T[[0(r+   c                    | j                   dz   | j                  z   }|D ]!  }d|z   dz   |z   dz   }| j                  |       # y)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
        r-   zdelete from z where zid='rK   Nr   )r   zidsr[   r4   rM   r5   s         r"   deletezJaguar.delete  sM     99s?T[[0 	C)N:S@3FAHHQK	r+   c                    | j                   dz   | j                  z   }d|z   }| j                  |      }t        |t              rt        |      dk(  ryt        j                  |d         }t        |d         S )z
        Count records of a store in jaguardb
        Args: no args
        Returns: (int) number of records in pod store
        r-   zselect count() from r   rI   )	r   r   r1   r   rS   r   r:   r;   int)r   r4   r5   rA   r   s        r"   countzJaguar.count  sh     99s?T[[0"X-XXa[b$CGqLZZ12f:r+   c                h    | j                   dz   | j                  z   }d|z   }| j                  |       y)z`
        Drop or remove a store in jaguardb
        Args: no args
        Returns: None
        r-   zdrop store Nr   r   s      r"   dropzJaguar.drop  s/     99s?T[[0H$r+   c                N    | j                   j                  | j                         y)zY
        Logout to cleanup resources
        Args: no args
        Returns: None
        N)r   logoutr   rD   s    r"   r   zJaguar.logout  s     			%r+   c                h    t        dd      5 }t        d| |d       d d d        y # 1 sw Y   y xY w)Nz/tmp/debugjaguar.logazmsg=T)fileflush)openprint)r   msgr   s      r"   prtz
Jaguar.prt  s6    (#. 	7$D,T6	7 	7 	7s   (1c                   d}|dk(  r3t        |j                               }t        |j                               }nrg }g }||v r*|j                  |       |j                  ||          ||   }|j	                         D ]-  \  }}||k7  s|j                  |       |j                  |       / |D cg c]  }t        |       }	}||	|fS c c}w Nr   )rS   keysvaluesrQ   itemsrT   )
r   nvmapr]   rj   rh   ri   rt   vevvec_ss
             r"   rW   zJaguar._parseMeta  s    b=

%D'DDD%G$E'N+ > #1<KKNKKN#
 #''Q#a&''VX%% (s   1C
)r   rT   r   rT   r   rT   r   rT   r   r   r    rT   r!   r	   )r   )r*   Optional[str]returnbool)r2   rT   r3   r   r   None)F)r=   rT   r>   r   r   dict)r   zOptional[Embeddings]rC   )rY   	List[str]rZ   Optional[List[dict]]r[   r   r   r   )   NNN)r=   rT   rt   r   ru   r   rv   r   rw   r   rZ   Optional[List[str]]r[   r   r   zList[Tuple[Document, float]])r   NN)r=   rT   rt   r   rv   r   rZ   r   r[   r   r   zList[Document])r=   rT   r[   r   r   r   r   )rY   r   r!   r	   r    rT   r   rT   r   rT   r   rT   r   rT   r   r   rZ   r   r*   r   r[   r   r   r   )r   r   )r   r   r[   r   r   r   )r   r   )r   rT   r   r   )r   r   r]   rT   r   z Tuple[List[str], List[str], str])__name__
__module____qualname____doc__r#   r'   r6   r1   propertyrE   rm   r   r   r   classmethodr   r   r   r   r   r   r   rW    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+   