§
    šŠtjÜc  ã                  óè   — d Z ddlmZ ddlZddlZddlZddlZddlmZ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 ddlmZ  ej        e¦  «        Z G d	„ d
e¦  «        ZdZ G d„ d¦  «        ZdS )z,Module providing Infinispan as a VectorStoreé    )ÚannotationsN)ÚAnyÚIterableÚListÚOptionalÚTupleÚTypeÚUnionÚcast)ÚResponse)ÚDocument)Ú
Embeddings)ÚVectorStorec                  óò   — e Zd ZdZ	 	 dBdCd	„ZdDd„ZdEd„ZdFd„ZdGd„ZdHd„Z	dIdJd„Z
dHd„ZdHd„ZdKd„ZdHd „ZdHd!„Z	 	 dBdLd)„Z	 dMdNd.„Z	 dMdOd0„Z	 dMdPd2„Z	 dMdQd3„ZdRd5„ZdSd8„ZdTd9„Ze	 	 	 	 dUdVdA„¦   «         ZdS )WÚInfinispanVSaè  `Infinispan` VectorStore interface.

        This class exposes the method to present Infinispan as a
        VectorStore. It relies on the Infinispan class (below) which takes care
        of the REST interface with the server.

    Example:
        ... code-block:: python
            from langchain_community.vectorstores import InfinispanVS
            from mymodels import RGBEmbeddings
            ...
            vectorDb = InfinispanVS.from_documents(docs,
                            embedding=RGBEmbeddings(),
                            output_fields=["texture", "color"],
                            lambda_key=lambda text,meta: str(meta["_key"]),
                            lambda_content=lambda item: item["color"])

        or an empty InfinispanVS instance can be created if preliminary setup
        is required before populating the store

        ... code-block:: python
            from langchain_community.vectorstores import InfinispanVS
            from mymodels import RGBEmbeddings
            ...
            ispnVS = InfinispanVS()
            # configure Infinispan here
            # i.e. create cache and schema

            # then populate the store
            vectorDb = InfinispanVS.from_documents(docs,
                            embedding=RGBEmbeddings(),
                            output_fields: ["texture", "color"],
                            lambda_key: lambda text,meta: str(meta["_key"]),
                            lambda_content: lambda item: item["color"])
    NÚ	embeddingúOptional[Embeddings]ÚidsúOptional[List[str]]Úkwargsr   c                ój  ‡ — t          di |¤Ž‰ _        |‰ _        t          ‰ j                             dd¦  «        ¦  «        ‰ _        t          ‰ j                             dd¦  «        ¦  «        ‰ _        |‰ _        ‰ j                             dd¦  «        ‰ _        ‰ j        dk    r!‰ j                             dd¦  «        ‰ _        nt          j
        dt          ¦  «         ‰ j                             d	d¦  «        ‰ _        ‰ j        dk    r!‰ j                             d
d¦  «        ‰ _        nt          j
        dt          ¦  «         ‰ j                             dˆ fd„¦  «        ‰ _        ‰ j                             dˆ fd„¦  «        ‰ _        ‰ j                             d¦  «        ‰ _        |‰ _        dS )at  
        Parameters
        ----------
        cache_name: str
            Embeddings cache name. Default "vector"
        entity_name: str
            Protobuf entity name for the embeddings. Default "vector"
        text_field: str
            Protobuf field name for text. Default "text"
        vector_field: str
            Protobuf field name for vector. Default "vector"
        lambda_content: lambda
            Lambda returning the content part of an item. Default returns text_field
        lambda_metadata: lambda
            Lambda returning the metadata part of an item. Default returns items
            fields excepts text_field, vector_field, _type
        output_fields: List[str]
            List of fields to be returned from item, if None return all fields.
            Default None
        kwargs: Any
            Rest of arguments passed to Infinispan. See docsÚ
cache_nameÚvectorÚentity_nameÚ	textfieldÚ Ú
text_fieldÚtextz9`textfield` is deprecated. Please use `text_field` param.ÚvectorfieldÚvector_fieldz=`vectorfield` is deprecated. Please use `vector_field` param.Úlambda_contentc                ó.   •— ‰                      | ¦  «        S ©N)Ú_default_content©ÚitemÚselfs    €úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/infinispanvs.pyú<lambda>z'InfinispanVS.__init__.<locals>.<lambda>i   s   ø€ ¨4×+@Ò+@ÀÑ+FÔ+F€ ó    Úlambda_metadatac                ó.   •— ‰                      | ¦  «        S r#   )Ú_default_metadatar%   s    €r(   r)   z'InfinispanVS.__init__.<locals>.<lambda>l   s   ø€ ¨D×,BÒ,BÀ4Ñ,HÔ,H€ r*   Úoutput_fieldsN© )Ú
InfinispanÚispnÚ_configurationÚstrÚgetÚ_cache_nameÚ_entity_nameÚ
_embeddingÚ
_textfieldÚwarningsÚwarnÚDeprecationWarningÚ_vectorfieldÚ_to_contentÚ_to_metadataÚ_output_fieldsÚ_ids)r'   r   r   r   s   `   r(   Ú__init__zInfinispanVS.__init__8   s­  ø€ õ6 Ð(Ð( Ð(Ð(ˆŒ	Ø$ˆÔÝ˜tÔ2×6Ò6°|ÀXÑNÔNÑOÔOˆÔÝ Ô 3× 7Ò 7¸ÀxÑ PÔ PÑQÔQˆÔØ#ˆŒØÔ-×1Ò1°+¸rÑBÔBˆŒØŒ?˜bÒ Ð Ø"Ô1×5Ò5°lÀFÑKÔKˆDŒOˆOåŒMØKÝ"ñô ð ð !Ô/×3Ò3°MÀ2ÑFÔFˆÔØÔ Ò"Ð"Ø $Ô 3× 7Ò 7¸ÈÑ QÔ QˆDÔÐåŒMØOÝ"ñô ð ð  Ô.×2Ò2ØÐFÐFÐFÐFñ
ô 
ˆÔð !Ô/×3Ò3ØÐHÐHÐHÐHñ
ô 
ˆÔð #Ô1×5Ò5°oÑFÔFˆÔØˆŒ	ˆ	ˆ	r*   r&   ÚdictÚreturnc                ó¼   — t          |¦  «        }|                     | j        d ¦  «         |                     | j        d ¦  «         |                     dd ¦  «         |S )NÚ_type)rB   Úpopr<   r8   )r'   r&   Úmetas      r(   r-   zInfinispanVS._default_metadataq   sS   € Ý�D‰zŒzˆØ�Š�Ô" DÑ)Ô)Ð)Ø�Š�” $Ñ'Ô'Ð'Ø�Š�˜$ÑÔÐØˆr*   údict[str, Any]c                ó6   — |                      | j        ¦  «        S r#   )r4   r8   )r'   r&   s     r(   r$   zInfinispanVS._default_contentx   s   € Ø�xŠx˜œÑ(Ô(Ð(r*   ÚtemplÚ	dimensionÚintr3   c                óª  — d}|| j         || j        fz  }d}|                     ¦   «         D �]!\  }}t          |t          ¦  «        r|d|z   dz   t	          |¦  «        z   dz   z  }nât          |t
          ¦  «        r|d|z   dz   t	          |¦  «        z   dz   z  }n®t          |t          ¦  «        r|d|z   dz   t	          |¦  «        z   dz   z  }nzt          |t          ¦  «        r|d|z   dz   t	          |¦  «        z   dz   z  }nFt          |t          ¦  «        r|d	|z   dz   t	          |¦  «        z   dz   z  }nt          d
|z   ¦  «        ‚|dz  }�Œ#|dz  }|S )NzV
/**
* @Indexed
*/
message %s {
/**
* @Vector(dimension=%d)
*/
repeated float %s = 1;
é   zoptional string z = z;
zoptional int64 zoptional double zoptional bytes zoptional bool zEUnable to build proto schema for metadata. Unhandled type for field: é   z}
)
r6   r<   ÚitemsÚ
isinstancer3   rL   ÚfloatÚbytesÚboolÚ	Exception)r'   rJ   rK   Úmetadata_proto_tplÚmetadata_protoÚidxÚfÚvs           r(   Úschema_builderzInfinispanVS.schema_builder{   s¥  € ð	Ðð ,ØÔØØÔð/
ñ 
ˆð
 ˆØ—K’K‘M”Mð 	ñ 	‰DˆAˆqÝ˜!�SÑ!Ô!ð ØÐ"4°qÑ"8¸5Ñ"@Å3ÀsÁ8Ä8Ñ"KÈeÑ"SÑS��Ý˜A�sÑ#Ô#ð ØÐ"3°aÑ"7¸%Ñ"?Å#ÀcÁ(Ä(Ñ"JÈUÑ"RÑR��Ý˜A�uÑ%Ô%ð 
ØÐ"4°qÑ"8¸5Ñ"@Å3ÀsÁ8Ä8Ñ"KÈeÑ"SÑS��Ý˜A�uÑ%Ô%ð ØÐ"3°aÑ"7¸%Ñ"?Å#ÀcÁ(Ä(Ñ"JÈUÑ"RÑR��Ý˜A�tÑ$Ô$ð ØÐ"2°QÑ"6¸Ñ">ÅÀSÁÄÑ"IÈEÑ"QÑQ��åð1Ø34ñ5ñô ð ð �1‰HˆC‰CØ˜%ÑˆØÐr*   Úprotor   c                óH   — | j                              | j        dz   |¦  «        S )z·Deploy the schema for the vector db
        Args:
            proto(str): protobuf schema
        Returns:
            An http Response containing the result of the operation
        ú.proto)r1   Úschema_postr6   )r'   r\   s     r(   Úschema_createzInfinispanVS.schema_create    s$   € ð Œy×$Ò$ TÔ%6¸Ñ%AÀ5ÑIÔIÐIr*   c                óF   — | j                              | j        dz   ¦  «        S )z�Delete the schema for the vector db
        Returns:
            An http Response containing the result of the operation
        r^   )r1   Úschema_deleter6   ©r'   s    r(   rb   zInfinispanVS.schema_delete©   s"   € ð
 Œy×&Ò& tÔ'8¸8Ñ'CÑDÔDÐDr*   r   Úconfigc                óh   — |dk    rd| j         z   dz   }| j                             | j        |¦  «        S )zÃCreate the cache for the vector db
        Args:
            config(str): configuration of the cache.
        Returns:
            An http Response containing the result of the operation
        r   aZ  
            {
  "distributed-cache": {
    "owners": "2",
    "mode": "SYNC",
    "statistics": true,
    "encoding": {
      "media-type": "application/x-protostream"
    },
    "indexing": {
      "enabled": true,
      "storage": "filesystem",
      "startup-mode": "AUTO",
      "indexing-mode": "AUTO",
      "indexed-entities": [
        "z"
      ]
    }
  }
}
)r6   r1   Ú
cache_postr5   )r'   rd   s     r(   Úcache_createzInfinispanVS.cache_create°   sK   € ð �RŠ<ˆ<ðð  Ô#ñ!$ð"ñ#ð ð2 Œy×#Ò# DÔ$4°fÑ=Ô=Ð=r*   c                ó@   — | j                              | j        ¦  «        S )z€Delete the cache for the vector db
        Returns:
            An http Response containing the result of the operation
        )r1   Úcache_deleter5   rc   s    r(   ri   zInfinispanVS.cache_deleteÓ   ó   € ð
 Œy×%Ò% dÔ&6Ñ7Ô7Ð7r*   c                ó@   — | j                              | j        ¦  «        S )zClear the cache for the vector db
        Returns:
            An http Response containing the result of the operation
        )r1   Úcache_clearr5   rc   s    r(   rl   zInfinispanVS.cache_clearÚ   ó   € ð
 Œy×$Ò$ TÔ%5Ñ6Ô6Ð6r*   rT   c                ó@   — | j                              | j        ¦  «        S )zOChecks if the cache exists
        Returns:
            true if exists
        )r1   Úcache_existsr5   rc   s    r(   ro   zInfinispanVS.cache_existsá   rj   r*   c                ó@   — | j                              | j        ¦  «        S )zClear the index for the vector db
        Returns:
            An http Response containing the result of the operation
        )r1   Úindex_clearr5   rc   s    r(   Úcache_index_clearzInfinispanVS.cache_index_clearè   rm   r*   c                ó@   — | j                              | j        ¦  «        S )z{Rebuild the for the vector db
        Returns:
            An http Response containing the result of the operation
        )r1   Úindex_reindexr5   rc   s    r(   Úcache_index_reindexz InfinispanVS.cache_index_reindexï   s   € ð
 Œy×&Ò& tÔ'7Ñ8Ô8Ð8r*   ÚtextsúIterable[str]Ú	metadatasúOptional[List[dict]]Úlast_vectorúOptional[List[float]]ú	List[str]c                ó$  — g }t          |¦  «        }|r|                     ¦   «          | j                             |¦  «        }|r|                     |¦  «         |sd„ |D ¦   «         }| j        pd„ |D ¦   «         }t          t          |||¦  «        ¦  «        }	|	D ]u\  }
}}d| j        | j        |i}| 	                    |
¦  «         t          j        |¦  «        }| j                             ||| j        ¦  «         |                     |¦  «         Œv|S )Nc                ó   — g | ]}i ‘ŒS r/   r/   ©Ú.0Ú_s     r(   ú
<listcomp>z*InfinispanVS.add_texts.<locals>.<listcomp>  s   € Ð+Ð+Ð+ ˜Ð+Ð+Ð+r*   c                óN   — g | ]"}t          t          j        ¦   «         ¦  «        ‘Œ#S r/   )r3   ÚuuidÚuuid4r   s     r(   r‚   z*InfinispanVS.add_texts.<locals>.<listcomp>  s&   € Ð=Ð=Ð=°!�C¥¤
¡¤Ñ-Ô-Ð=Ð=Ð=r*   rE   )ÚlistrF   r7   Úembed_documentsÚappendr@   Úzipr6   r<   ÚupdateÚjsonÚdumpsr1   Úputr5   )r'   rv   rx   rz   r   ÚresultÚtexts_lÚembedsr   Ú
data_inputÚmetadataÚembedÚkeyÚdataÚdata_strs                  r(   Ú	add_textszInfinispanVS.add_textsö   s'  € ð ˆÝ�u‘+”+ˆØð 	Ø�KŠK‰MŒMˆMØ”×0Ò0°Ñ9Ô9ˆØð 	'Ø�MŠM˜+Ñ&Ô&Ð&Øð 	,Ø+Ð+ UÐ+Ñ+Ô+ˆIØŒiÐ=Ð=Ð=°uÐ=Ñ=Ô=ˆÝ�#˜i¨°Ñ5Ô5Ñ6Ô6ˆ
Ø$.ð 	ð 	Ñ ˆH�e˜SØ˜TÔ.°Ô0AÀ5ÐIˆDØ�KŠK˜Ñ!Ô!Ð!Ý”z $Ñ'Ô'ˆHØŒI�MŠM˜#˜x¨Ô)9Ñ:Ô:Ð:Ø�MŠM˜#ÑÔÐÐØˆr*   é   ÚqueryÚkúList[Document]c                óH   — |                       ||¬¦  «        }d„ |D ¦   «         S )z"Return docs most similar to query.)r™   rš   c                ó   — g | ]\  }}|‘ŒS r/   r/   ©r€   Údocr�   s      r(   r‚   z2InfinispanVS.similarity_search.<locals>.<listcomp>  s   € Ð,Ð,Ð,™˜˜Q�Ð,Ð,Ð,r*   )Úsimilarity_search_with_score)r'   r™   rš   r   Ú	documentss        r(   Úsimilarity_searchzInfinispanVS.similarity_search  s0   € ð ×5Ò5¸EÀQÐ5ÑGÔGˆ	Ø,Ð, )Ð,Ñ,Ô,Ð,r*   úList[Tuple[Document, float]]c                óh   — | j                              |¦  «        }|                      ||¬¦  «        }|S )a  Perform a search on a query string and return results with score.

        Args:
            query (str): The text being searched.
            k (int, optional): The amount of results to return. Defaults to 4.

        Returns:
            List[Tuple[Document, float]]
        )r   rš   )r7   Úembed_queryÚ&similarity_search_with_score_by_vector)r'   r™   rš   r   r“   r¡   s         r(   r    z)InfinispanVS.similarity_search_with_score  s8   € ð ”×+Ò+¨EÑ2Ô2ˆØ×?Ò?È%ÐSTÐ?ÑUÔUˆ	ØÐr*   úList[float]c                óF   — |                       ||¦  «        }d„ |D ¦   «         S )Nc                ó   — g | ]\  }}|‘ŒS r/   r/   rž   s      r(   r‚   z<InfinispanVS.similarity_search_by_vector.<locals>.<listcomp>+  s   € Ð&Ð&Ð&™˜˜Q�Ð&Ð&Ð&r*   )r¦   )r'   r   rš   r   Úress        r(   Úsimilarity_search_by_vectorz(InfinispanVS.similarity_search_by_vector'  s-   € ð ×9Ò9¸)ÀQÑGÔGˆØ&Ð& #Ð&Ñ&Ô&Ð&r*   c                ó  — | j         €Ad| j        z   dz   | j        z   dz   t          j        |¦  «        z   dz   t          |¦  «        z   }nud}| j         dd…         D ]}|dz   |z   d	z   }Œ|dz   | j         d         z   }|d
z   | j        z   dz   | j        z   dz   t          j        |¦  «        z   dz   t          |¦  «        z   }| j                             || j        ¦  «        }t          j	        |j
        ¦  «        }|                      |¦  «        S )a$  Return 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 pair (Documents, score) most similar to the query vector.
        Nzselect v, score(v) from z v where v.z <-> ú~zselect éÿÿÿÿzv.ú,z, score(v) from )r?   r6   r<   r‹   rŒ   r3   r1   Ú	req_queryr5   Úloadsr   Ú_query_result_to_docs)r'   r   rš   Ú	query_strÚ
query_projÚfieldÚ	query_resrŽ   s           r(   r¦   z3InfinispanVS.similarity_search_with_score_by_vector-  si  € ð ÔÐ&à*ØÔ#ñ$àñ ð Ô#ñ$ð ñ	õ
 ”*˜YÑ'Ô'ñ(ð ñõ �a‘&”&ñð ˆIð #ˆJØÔ,¨S¨b¨SÔ1ð =ð =�Ø'¨$Ñ.°Ñ6¸Ñ<�
�
Ø# dÑ*¨TÔ-@ÀÔ-DÑDˆJàØ$ñ%àÔ#ñ$ð  ñ ð Ô#ñ	$ð
 ñõ ”*˜YÑ'Ô'ñ(ð ñõ �a‘&”&ñð ð ”I×'Ò'¨	°4Ô3CÑDÔDˆ	Ý”˜IœNÑ+Ô+ˆØ×)Ò)¨&Ñ1Ô1Ð1r*   rŽ   c                ó$  ‡— g }|d         D ]ƒ}|d         pi Š| j         €	‰d         }nˆfd„| j         D ¦   «         }t          |                      |¦  «        |                      |¦  «        ¬¦  «        }|                     |‰d         f¦  «         Œ„|S )NÚhitsÚhitÚ*c                ó<   •— i | ]}|‰                      |¦  «        “ŒS r/   )r4   )r€   r”   r¹   s     €r(   ú
<dictcomp>z6InfinispanVS._query_result_to_docs.<locals>.<dictcomp>a  s%   ø€ ÐKÐKÐK°˜#˜sŸwšw s™|œ|ÐKÐKÐKr*   )Úpage_contentr’   zscore())r?   r   r=   r>   rˆ   )r'   rŽ   r¡   ÚrowÚentityrŸ   r¹   s         @r(   r²   z"InfinispanVS._query_result_to_docsX  s¹   ø€ ð ˆ	Ø˜&”>ð 
	4ð 
	4ˆCØ�e”*Ð" ˆCØÔ"Ð*Ø˜Sœ��àKÐKÐKÐK°tÔ7JÐKÑKÔK�ÝØ!×-Ò-¨fÑ5Ô5Ø×*Ò*¨6Ñ2Ô2ðñ ô ˆCð ×Ò˜c 3 y¤>Ð2Ñ3Ô3Ð3Ð3ØÐr*   r’   ÚNonec                ó®  — |                       ||¦  «        }|                      |¦  «        }|j        | j        j        j        k    s
J d¦   «         ‚	 t          j        |j        ¦  «        d         �J ‚|  	                    ¦   «         sO|  
                    ¦   «         }|j        | j        j        j        k    s
J d¦   «         ‚	 |                      ¦   «          d S d S )Nz)Unable to create schema. Already exists? Úerrorz(Unable to create cache. Already exists? )r[   r`   Ústatus_coder1   ÚCodesÚOKr‹   r±   r   ro   rg   rr   )r'   r’   rK   ÚschemaÚoutputs        r(   Ú	configurezInfinispanVS.configurei  sä   € Ø×$Ò$ X¨yÑ9Ô9ˆØ×#Ò# FÑ+Ô+ˆØÔ! T¤Y¤_Ô%7Ò7Ð7Ð7Ø7ñ 8Ô7Ð7ð 	(ÝŒz˜&œ+Ñ&Ô& wÔ/Ð7Ð7Ð7Ø× Ò Ñ"Ô"ð 	%Ø×&Ò&Ñ(Ô(ˆFØÔ%¨¬¬Ô);Ò;Ð;Ð;Ø:ñ <Ô;Ð;ð ,à×"Ò"Ñ$Ô$Ð$Ð$Ð$ð	%ð 	%r*   c                óV   — |                       ¦   «          |                      ¦   «          d S r#   )rb   ri   rc   s    r(   Úconfig_clearzInfinispanVS.config_clearz  s,   € Ø×ÒÑÔÐØ×ÒÑÔÐÐÐr*   TÚclsúType[InfinispanVS]r   Ú	clear_oldúOptional[bool]Úauto_configc                ó  —  | d||dœ|¤Ž}|r t          |pg ¦  «        dk    r‹|r|                     ¦   «          |                     |t          |¦  «        dz
           ¦  «        }	t          t          t
                   |¦  «        }|                     |d         t          |	¦  «        ¦  «         nA|r|                     ¦   «          |                     |t          |¦  «        dz
           ¦  «        }	|r|                     |||	¬¦  «         |S )aØ  Return VectorStore initialized from texts and embeddings.

        In addition to parameters described by the super method, this
        implementation provides other configuration params if different
        configuration from default is needed.

        Parameters
        ----------
        ids : List[str]
            Additional list of keys associated to the embedding. If not
            provided UUIDs will be generated
        clear_old : bool
            Whether old data must be deleted. Default True
        auto_config: bool
            Whether to do a complete server setup (caches,
            protobuf definition...). Default True
        kwargs: Any
            Rest of arguments passed to InfinispanVS. See docs)r   r   r   rO   )r   r/   )	ÚlenrÊ   r¥   r   r   rB   rÈ   rl   r—   )
rË   rv   r   rx   r   rÍ   rÏ   r   ÚinfinispanvsÚvecs
             r(   Ú
from_textszInfinispanVS.from_texts~  s  € ð: �sÐB Y°CÐBÐB¸6ÐBÐBˆØð 		?�3˜y˜¨BÑ/Ô/°!Ò3Ð3Øð ,Ø×)Ò)Ñ+Ô+Ð+Ø×'Ò'¨­c°%©j¬j¸1©nÔ(=Ñ>Ô>ˆCÝ�T¥$œZ¨Ñ3Ô3ˆIØ×"Ò" 9¨Q¤<µ°S±´Ñ:Ô:Ð:Ð:àð +Ø×(Ò(Ñ*Ô*Ð*Ø×'Ò'¨­c°%©j¬j¸1©nÔ(=Ñ>Ô>ˆCØð 	AØ×"Ò" 5¨)¸CÐ"Ñ@Ô@Ð@ØÐr*   )NN)r   r   r   r   r   r   )r&   rB   rC   rB   )r&   rH   rC   r   )rJ   rB   rK   rL   rC   r3   )r\   r3   rC   r   )rC   r   )r   )rd   r3   rC   r   )rC   rT   )
rv   rw   rx   ry   rz   r{   r   r   rC   r|   )r˜   )r™   r3   rš   rL   r   r   rC   r›   )r™   r3   rš   rL   r   r   rC   r£   )r   r§   rš   rL   r   r   rC   r›   )r   r§   rš   rL   rC   r£   )rŽ   rH   rC   r£   )r’   rB   rK   rL   rC   rÀ   )rC   rÀ   )NNTT)rË   rÌ   rv   r|   r   r   rx   ry   r   r   rÍ   rÎ   rÏ   rÎ   r   r   rC   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rA   r-   r$   r[   r`   rb   rg   ri   rl   ro   rr   ru   r—   r¢   r    r«   r¦   r²   rÈ   rÊ   ÚclassmethodrÔ   r/   r*   r(   r   r      s5  € € € € € ð"ð "ðL +/Ø#'ð7ð 7ð 7ð 7ð 7ðrð ð ð ð)ð )ð )ð )ð#ð #ð #ð #ðJJð Jð Jð JðEð Eð Eð Eð!>ð !>ð !>ð !>ð !>ðF8ð 8ð 8ð 8ð7ð 7ð 7ð 7ð8ð 8ð 8ð 8ð7ð 7ð 7ð 7ð9ð 9ð 9ð 9ð +/Ø-1ð	ð ð ð ð ð6 $%ð-ð -ð -ð -ð -ð $%ðð ð ð ð ð" 01ð'ð 'ð 'ð 'ð 'ð 01ð)2ð )2ð )2ð )2ð )2ðVð ð ð ð"%ð %ð %ð %ð"ð ð ð ð ð
 +/Ø#'Ø$(Ø&*ð)ð )ð )ð )ñ „[ð)ð )ð )r*   r   é
   c            	      ó²   — e Zd ZdZddddgdddddf	d4d„Zd5d6d„Z	 d5d7d„Z	 d5d7d „Zd8d#„Zd8d$„Z	d9d%„Z
d:d(„Zd;d*„Zd<d+„Zd<d,„Zd=d-„Zd>d.„Zd?d0„Zd=d1„Zd=d2„Zd3S )@r0   a>  Helper class for `Infinispan` REST interface.

    This class exposes the Infinispan operations needed to
    create and set up a vector db.

    You need a running Infinispan (15+) server without authentication.
    You can easily start one, see:
    https://github.com/rigazilla/infinispan-vector#run-infinispan
    Úhttpr   z127.0.0.1:11222z/rest/v2/cachesz/rest/v2/schemasTrÆ   r3   ÚuserÚpasswordÚhostsr|   Ú	cache_urlÚ
schema_urlÚuse_post_for_queryrT   Úhttp2Úverifyr   r   c
                óT  — 	 ddl }n# t          $ r t          d¦  «        ‚w xY w|j        | _        |
| _        || _        || _        || _        |d         | _        | j        dz   | j        z   | _	        || _
        || _        || _        || _        | j        rm| j        rf| j        dk    r"|                     | j        | j        ¬¦  «        }n| j        | j        f}|                     | j        | j         ||	¬¦  «        | _        dS |                     | j        | j         |	¬¦  «        | _        dS )	aK  
        Parameters
        ----------
        schema: str
            Schema for HTTP request: "http" or "https". Default "http"
        user, password: str
            User and password if auth is required. Default None
        hosts: List[str]
            List of server addresses. Default ["127.0.0.1:11222"]
        cache_url: str
            URL endpoint for cache API. Default "/rest/v2/caches"
        schema_url: str
            URL endpoint for schema API. Default "/rest/v2/schemas"
        use_post_for_query: bool
            Whether POST method should be used for query. Default True
        http2: bool
            Whether HTTP/2 protocol should be used. `pip install "httpx[http2]"` is
            needed for HTTP/2. Default True
        verify:  bool
            Whether TLS certificate must be verified. Default True
        r   Nz„Could not import httpx python package. Please install it with `pip install httpx`or `pip install "httpx[http2]"` if you need HTTP/2.z://rÜ   )ÚusernamerÞ   )rã   Úhttp1Úauthrä   )rã   rç   rä   )ÚhttpxÚImportErrorÚcodesrÄ   r2   Ú_schemaÚ_userÚ	_passwordÚ_hostÚ_default_nodeÚ
_cache_urlÚ_schema_urlÚ_use_post_for_queryÚ_http2Ú
DigestAuthÚClientÚ_h2c)r'   rÆ   rÝ   rÞ   rß   rà   rá   râ   rã   rä   r   ré   rè   s                r(   rA   zInfinispan.__init__¹  se  € ðF	ØˆLˆLˆLˆLøÝð 	ð 	ð 	ÝðFñô ð ð	øøøð ”[ˆŒ
à$ˆÔØˆŒØˆŒ
Ø!ˆŒØ˜1”XˆŒ
Ø!œ\¨EÑ1°D´JÑ>ˆÔØ#ˆŒØ%ˆÔØ#5ˆÔ ØˆŒØŒ:ð 	˜$œ.ð 	ØŒ|˜vÒ%Ð%ØAF×AQÒAQØ!œZ°$´.ð BRñ Bô B��ð œ
 D¤NÐ3�ØŸšØ”kØœ+�oØØð	 %ñ ô ˆDŒIˆIˆIð ŸšØ”kØœ+�oØð %ñ ô ˆDŒIˆIˆIs   ‚ ‡!Fr™   r   ÚlocalrC   r   c                ól   — | j         r|                      |||¦  «        S |                      |||¦  «        S )a  Request a query
        Args:
            query(str): query requested
            cache_name(str): name of the target cache
            local(boolean): whether the query is local to clustered
        Returns:
            An http Response containing the result set or errors
        )ró   Ú_query_postÚ
_query_get)r'   r™   r   rø   s       r(   r°   zInfinispan.req_query  s=   € ð Ô#ð 	>Ø×#Ò# E¨:°uÑ=Ô=Ð=Ø�Š˜u j°%Ñ8Ô8Ð8r*   r³   c                óÐ   — | j         | j        z   dz   |z   dz   t          |¦  «        z   }d|i}t          j        |¦  «        }| j                             ||ddit          ¬¦  «        }|S )Nú/z?action=search&local=r™   úContent-Typeúapplication/json©ÚcontentÚheadersÚtimeout)rð   rñ   r3   r‹   rŒ   r÷   ÚpostÚREST_TIMEOUT)r'   r³   r   rø   Úapi_urlr•   Ú	data_jsonÚresponses           r(   rú   zInfinispan._query_post  s“   € ð ÔØŒoñàñð ñð &ñ	&õ
 �%‰jŒjñð 	ð ˜Ð#ˆÝ”J˜tÑ$Ô$ˆ	Ø”9—>’>ØØØ#Ð%7Ð8Ý ð	 "ñ 
ô 
ˆð ˆr*   c                ó¤   — | j         | j        z   dz   |z   dz   |z   dz   t          |¦  «        z   }| j                             |t
          ¬¦  «        }|S )Nrý   z?action=search&query=z&local=©r  )rð   rñ   r3   r÷   r4   r  )r'   r³   r   rø   r  r  s         r(   rû   zInfinispan._query_get'  sw   € ð ÔØŒoñàñð ñð &ñ	&ð
 ñð ñõ �%‰jŒjñð 	ð ”9—=’= µ,�=Ñ?Ô?ˆØˆr*   r”   r•   c                ó†   — | j         | j        z   dz   |z   dz   |z   }| j                             ||ddit          ¬¦  «        }|S )a  Post an entry
        Args:
            key(str): key of the entry
            data(str): content of the entry in json format
            cache_name(str): target cache
        Returns:
            An http Response containing the result of the operation
        rý   rþ   rÿ   r   ©rð   rñ   r÷   r  r  ©r'   r”   r•   r   r  r  s         r(   r  zInfinispan.post7  s[   € ð Ô$ t¤Ñ6¸Ñ<¸zÑIÈCÑOÐRUÑUˆØ”9—>’>ØØØ#Ð%7Ð8Ý ð	 "ñ 
ô 
ˆð ˆr*   c                ó†   — | j         | j        z   dz   |z   dz   |z   }| j                             ||ddit          ¬¦  «        }|S )a  Put an entry
        Args:
            key(str): key of the entry
            data(str): content of the entry in json format
            cache_name(str): target cache
        Returns:
            An http Response containing the result of the operation
        rý   rþ   rÿ   r   )rð   rñ   r÷   r�   r  r  s         r(   r�   zInfinispan.putI  s[   € ð Ô$ t¤Ñ6¸Ñ<¸zÑIÈCÑOÐRUÑUˆØ”9—=’=ØØØ#Ð%7Ð8Ý ð	 !ñ 
ô 
ˆð ˆr*   c                ó„   — | j         | j        z   dz   |z   dz   |z   }| j                             |ddit          ¬¦  «        }|S )zÁGet an entry
        Args:
            key(str): key of the entry
            cache_name(str): target cache
        Returns:
            An http Response containing the entry or errors
        rý   rþ   rÿ   )r  r  )rð   rñ   r÷   r4   r  )r'   r”   r   r  r  s        r(   r4   zInfinispan.get[  sV   € ð Ô$ t¤Ñ6¸Ñ<¸zÑIÈCÑOÐRUÑUˆØ”9—=’=Ø˜nÐ.@ÐAÍ<ð !ñ 
ô 
ˆð ˆr*   Únamer\   c                ót   — | j         | j        z   dz   |z   }| j                             ||t          ¬¦  «        }|S )zäDeploy a schema
        Args:
            name(str): name of the schema. Will be used as a key
            proto(str): protobuf schema
        Returns:
            An http Response containing the result of the operation
        rý   )r  r  )rð   rò   r÷   r  r  )r'   r  r\   r  r  s        r(   r_   zInfinispan.schema_posti  s<   € ð Ô$ tÔ'7Ñ7¸#Ñ=ÀÑDˆØ”9—>’> '°5Å,�>ÑOÔOˆØˆr*   rd   c                óz   — | j         | j        z   dz   |z   }| j                             ||ddit          ¬¦  «        }|S )zÙCreate a cache
        Args:
            name(str): name of the cache.
            config(str): configuration of the cache.
        Returns:
            An http Response containing the result of the operation
        rý   rþ   rÿ   r   r  )r'   r  rd   r  r  s        r(   rf   zInfinispan.cache_postu  sP   € ð Ô$ t¤Ñ6¸Ñ<¸tÑCˆØ”9—>’>ØØØ#Ð%7Ð8Ý ð	 "ñ 
ô 
ˆð ˆr*   c                ór   — | j         | j        z   dz   |z   }| j                             |t          ¬¦  «        }|S )z¦Delete a schema
        Args:
            name(str): name of the schema.
        Returns:
            An http Response containing the result of the operation
        rý   r
  )rð   rò   r÷   Údeleter  ©r'   r  r  r  s       r(   rb   zInfinispan.schema_delete†  s=   € ð Ô$ tÔ'7Ñ7¸#Ñ=ÀÑDˆØ”9×#Ò# Gµ\Ð#ÑBÔBˆØˆr*   c                ór   — | j         | j        z   dz   |z   }| j                             |t          ¬¦  «        }|S )z¤Delete a cache
        Args:
            name(str): name of the cache.
        Returns:
            An http Response containing the result of the operation
        rý   r
  )rð   rñ   r÷   r  r  r  s       r(   ri   zInfinispan.cache_delete‘  s<   € ð Ô$ t¤Ñ6¸Ñ<¸tÑCˆØ”9×#Ò# Gµ\Ð#ÑBÔBˆØˆr*   c                óx   — | j         | j        z   dz   |z   dz   }| j                             |t          ¬¦  «        }|S )z©Clear a cache
        Args:
            cache_name(str): name of the cache.
        Returns:
            An http Response containing the result of the operation
        rý   ú?action=clearr
  r  )r'   r   r  r  s       r(   rl   zInfinispan.cache_clearœ  sC   € ð Ô ¤Ñ0°3Ñ6¸ÑCÀoÑUð 	ð ”9—>’> 'µ<�>Ñ@Ô@ˆØˆr*   c                ó\   — | j         | j        z   dz   |z   dz   }|                      |¦  «        S )z�Check if a cache exists
        Args:
            cache_name(str): name of the cache.
        Returns:
            True if cache exists
        rý   r  )rð   rñ   Úresource_exists©r'   r   r  s      r(   ro   zInfinispan.cache_exists©  s;   € ð Ô ¤Ñ0°3Ñ6¸ÑCÀoÑUð 	ð ×#Ò# GÑ,Ô,Ð,r*   r  c                ón   — | j                              |t          ¬¦  «        }|j        | j        j        k    S )z•Check if a resource exists
        Args:
            api_url(str): url of the resource.
        Returns:
            true if resource exists
        r
  )r÷   Úheadr  rÃ   rÄ   rÅ   )r'   r  r  s      r(   r  zInfinispan.resource_existsµ  s-   € ð ”9—>’> 'µ<�>Ñ@Ô@ˆØÔ# t¤z¤}Ò4Ð4r*   c                ót   — | j         | j        z   dz   |z   dz   }| j                             |t          ¬¦  «        S )zµClear an index on a cache
        Args:
            cache_name(str): name of the cache.
        Returns:
            An http Response containing the result of the operation
        rý   z/search/indexes?action=clearr
  r  r  s      r(   rq   zInfinispan.index_clear¿  sO   € ð ÔØŒoñàñð ñð -ñ	-ð 	ð Œy�~Š~˜g­|ˆ~Ñ<Ô<Ð<r*   c                ót   — | j         | j        z   dz   |z   dz   }| j                             |t          ¬¦  «        S )z´Rebuild index on a cache
        Args:
            cache_name(str): name of the cache.
        Returns:
            An http Response containing the result of the operation
        rý   z/search/indexes?action=reindexr
  r  r  s      r(   rt   zInfinispan.index_reindexÏ  sO   € ð ÔØŒoñàñð ñð /ñ	/ð 	ð Œy�~Š~˜g­|ˆ~Ñ<Ô<Ð<r*   N)rÆ   r3   rÝ   r3   rÞ   r3   rß   r|   rà   r3   rá   r3   râ   rT   rã   rT   rä   rT   r   r   )F)r™   r3   r   r3   rø   rT   rC   r   )r³   r3   r   r3   rø   rT   rC   r   )r”   r3   r•   r3   r   r3   rC   r   )r”   r3   r   r3   rC   r   )r  r3   r\   r3   rC   r   )r  r3   rd   r3   rC   r   )r  r3   rC   r   )r   r3   rC   r   )r   r3   rC   rT   )r  r3   rC   rT   )rÕ   rÖ   r×   rØ   rA   r°   rú   rû   r  r�   r4   r_   rf   rb   ri   rl   ro   r  rq   rt   r/   r*   r(   r0   r0   ®  s¤  € € € € € ðð ð ØØØ-Ð.Ø*Ø,Ø#'ØØðJð Jð Jð Jð JðX9ð 9ð 9ð 9ð 9ð >Cðð ð ð ð ð, >Cðð ð ð ð ð ð ð ð ð$ð ð ð ð$ð ð ð ð
ð 
ð 
ð 
ðð ð ð ð"	ð 	ð 	ð 	ð	ð 	ð 	ð 	ðð ð ð ð
-ð 
-ð 
-ð 
-ð5ð 5ð 5ð 5ð=ð =ð =ð =ð =ð =ð =ð =ð =ð =r*   r0   )rØ   Ú
__future__r   r‹   Úloggingr„   r9   Útypingr   r   r   r   r   r	   r
   r   ré   r   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.vectorstoresr   Ú	getLoggerrÕ   Úloggerr   r  r0   r/   r*   r(   ú<module>r(     sM  ðØ 2Ð 2à "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø €€€Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jà Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à	ˆÔ	˜8Ñ	$Ô	$€ðUð Uð Uð Uð U�;ñ Uô Uð Uðp €ðo=ð o=ð o=ð o=ð o=ñ o=ô o=ð o=ð o=ð o=r*   