Ë
    µŒjç8  ã                  ó–   — 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	            úq/var/www/html/Fitness-lenito-AI-main/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ÒØ!ŸY™Y×0Ñ0Ó2ˆNØ-ˆÔØ—i‘i—o‘o nÓ5ˆŒØ�;‰;˜"ÒÜ�L‰LÐ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ž   € ð —9‘9˜s‘? T§[¡[Ñ0ˆð	ð ˆØ	ˆX‰ˆØ	ˆr�$×$Ñ$Ð% X¨d×.DÑ.DÐ-EÀQÐGÑGˆØ	ˆr�$×#Ñ#Ð$ CÐ(Ñ(ˆØ	Ð.¨y¨k¸Ð<Ñ<ˆØ	ˆ\˜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   € ð �;‰;˜"ÒÜ�L‰LÐ+¨E¨7°!Ð4Ô5ØˆIà�y‰y�~‰~˜e T§[¡[°(Ó;ˆØ�i‰iˆð	Ü—‘˜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¨"Ó-ˆØ—y‘y 3‘¨¯©Ñ4°sÑ:¸TÑAˆØ˜Ñ%ˆØ�X‰X�a‹[ˆØ�Š8ØˆIØ�V‘*ˆà�rŠ>ØˆIÛ�Ø× Ñ  ¨C¡°!Ñ!3Õ4ð àˆEà—_‘_×4Ñ4´T¸%³[ÓAˆ
ØˆØÐàˆAÛ!�Ù+.Ó/©3 aœ3˜q�6¨3�Ð/Ø"Ÿx™x¨Ó0�ØŸ9™9 s™?¨T¯[©[Ñ8�Ø" XÑ-°Ñ4�Ø�T˜C‘Z 'Ñ)¨MÑ9¸LÑHÑH�Ø˜A‘h×&Ñ& s¨EÓ2�Ø�U˜S‘[ 4Ñ'Ñ'�Ø—X‘X˜a Ó'�Ø—
‘
˜2˜e™9Ô%Ø�Q‘‘ð "ðN ˆ
ð7 ˆAÜ!�Ù+.Ó/©3 aœ3˜q�6¨3�Ð/Ø'+§¡°yÀ±|ÀWÓ'MÑ$��d˜HØ˜b’=ØŸ™×+Ñ+¨D¯K©K¸À1ÓE�BÙØ!š	Ø!Ÿh™h t›n�Ø˜s T™zÑ)�à" U§Z¡Z°Ó%5Ñ5¸Ñ;�à  s§x¡x°Ó'8Ñ 8¸3Ñ >Ñ>�àŸ9™9 s™?¨T¯[©[Ñ8�Ø" XÑ-°Ñ4�Ø�[ 3Ñ&¨Ñ0°<Ñ?À,ÑNÑN�Ø˜A‘h×&Ñ& s¨EÓ2�Ø�T˜C‘Z $Ñ&Ñ&�Ø˜b’=ØŸ™ ! TÓ*‘BàŸ™ ! UÓ+�BØ—
‘
˜2˜e™9Ô%Ø�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Ó5©* Qœ#˜a�&¨*ˆÐ5Ø—8‘8˜NÓ+ˆØ—9‘9˜s‘? T§[¡[Ñ0ˆà Øñàñð ñð ñ	ô
 �!‹fñð ñô �'‹lñð ñð ñ	ð 	
ð 	
Ð,Ñ,ˆØÐØ��t‘‰OˆAàÐ Ø—8‘8˜IÓ&ˆDØ� Ñ$Ñ$ˆAà	ˆZ˜(Ñ"Ñ"ˆàÐØ�˜UÑ"Ñ"ˆAà�x‰x˜‹{ˆØˆ<ØˆIàˆÛˆBØ�w‘KˆEØ�f‘:ˆDØ�U‘)ˆCð ˆBØˆBˆu‰IØÐ$Û"�AØ˜A™�BØ�B�q’Eð #ô ¨°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-  sK   € ð$ <˜$×;Ñ;Øð
Ø˜e¨yñ
Ø<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Ó5©* Qœ#˜a�&¨*ˆÐ5Ø—8‘8˜NÓ+ˆØ—9‘9˜s‘? T§[¡[Ñ0ˆØ $Ñ&¨Ñ.°Ñ9¸KÑGÈ%ÑOÐRVÑVˆØ	ˆX˜Ñ Ñ ˆà�X‰X�a‹[ˆÜ�bœ$Ô¤C¨£G¨q¢LØÜ�Z‰Z˜˜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   € ñ Ø�˜ kÐ3CÀSÈ)ó
ˆð 	�‰�~Ô&Ø�‰ÔØˆ×Ñ˜5 )Ñ6¨vÒ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/   € ð —9‘9˜s‘? 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‚  sH   € ð —9‘9˜s‘? T§[¡[Ñ0ˆÛˆCØ Ñ)¨NÑ:¸SÑ@À3ÑFˆAØ�H‰H�Q�Kñ 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   € ð —9‘9˜s‘? T§[¡[Ñ0ˆØ" XÑ-ˆØ�X‰X�a‹[ˆÜ�bœ$Ô¤C¨£G¨q¢LØÜ�Z‰Z˜˜1™ÓˆÜ�2�f‘:‹Ð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/   € ð —9‘9˜s‘? 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°  s-   € ÜÐ(¨#Ô.°$Ü�D˜˜�, T°Õ6÷ /×.Ñ.ús   �(¨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Ø˜“<Ø—K‘K ”NØ—K‘K •Nð &ñ
 #'Ó'¡$˜Q”#�a•& $ˆÐ'Ø�V˜XÐ%Ð%ùò (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+   