Ë
    µŒjÏë  ã                  óü  — U 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 d dlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d d	l m!Z! e	rd dl"Z"ed
   Z# e$ ee#«      «      Z%de&d<   ed   Z' e$ ee'«      «      Z(de&d<   dZ)dZ*dZ+e+dz  Z,g d¢Z-g d¢Z.ddi gZ/ ej`                  e1«      Z2d/d„Z3d0d„Z4d1d„Z5d2d3d„Z6 eddd¬«       G d„ d e«      «       Z7	 	 	 	 	 	 	 d4	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d5d!„Z8	 	 	 	 	 	 	 	 	 d6	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d7d"„Z9	 	 	 	 	 	 d8d#„Z:d$g df	 	 	 	 	 	 	 	 	 d9d%„Z;d:d&„Z<d;d'„Z=d<d(„Z>d=d)„Z?	 	 	 	 	 	 	 	 d>d*„Z@d?d+„ZA	 	 d@	 	 	 	 	 	 	 dAd,„ZBdBd-„ZCdCd.„ZDy)Dé    )ÚannotationsN)Údeepcopy)ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚIterableÚListÚLiteralÚOptionalÚSizedÚTupleÚTypeÚUnionÚget_args)Ú
deprecated)ÚDocument)Ú
Embeddings)ÚVectorStore)Úmaximal_marginal_relevance)ÚL2ÚIPzList[DISTANCE_METRICS]ÚAVAILABLE_DISTANCE_METRICS)ÚTileDBDenseÚTileDBSparseÚ	FaissFlatÚFaissIVFFlatÚFlinngzList[ENGINES]ÚAVAILABLE_ENGINESÚ	langchainé    é   é   )Ú	_distanceÚidÚcontent)r$   r&   ÚblobzMissing propertyc                óÎ   — t        | t        «      rUt        |t        «      rEt        | «      t        |«      k7  r.t        |› d|› d|› dt        | «      › d|› dt        |«      › �«      ‚y)zÉ
    Check that sizes of two variables are the same

    Args:
        x: Variable to compare
        y: Variable to compare
        x_name: Name for variable x
        y_name: Name for variable y
    z and z% expected to be equal length but len(z)=z	 and len(N)Ú
isinstancer   ÚlenÚ
ValueError)ÚxÚyÚx_nameÚy_names       úo/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/vdms.pyÚ_len_check_if_sizedr1   ?   sm   € ô �!”UÔ¤
¨1¬eÔ 4¼¸Q»Ä3ÀqÃ6Ò9IÜØˆh�e˜F˜8ð $Ø�(˜"œS ›V˜H I¨f¨X°R¼¸A»°xðAó
ð 	
ð ó    c                óJ   — t        | «      D ��cg c]  \  }}|‘Œ	 c}}S c c}}w ©N)Ú_results_to_docs_and_scores)ÚresultsÚdocÚ_s      r0   Ú_results_to_docsr9   Q   s%   € Ü9¸'ÔBÔCÑB‘F�C˜ŠCÐBÒCÐCùÓCs   �c                óÈ  — g }	 | d   \  }}t        |«      dkD  r“d|d   v rŒd|d   d   v r‚|d   d   d   }|D ]r  }t        |d   d«      }|d   }t        D ]
  }||v sŒ||= Œ |j                  «       D �	�
ci c]  \  }	}
|
t        vr|	|
“Œ }}	}
|j                  t        ||¬«      |f«       Œt |S c c}
}	w # t        $ r#}t        j                  d|› �«       Y d }~|S d }~ww xY w)	Nr   ÚFindDescriptorÚentitiesr$   é
   r&   )Úpage_contentÚmetadataz2No results returned. Error while parsing results: )
r*   ÚroundÚINVALID_DOC_METADATA_KEYSÚitemsÚINVALID_METADATA_VALUEÚappendr   Ú	ExceptionÚloggerÚwarning)r6   Ú	final_resÚ	responsesÚblobsÚresult_entitiesÚentÚdistanceÚtxt_contentsÚpÚmkeyÚmvalÚpropsÚes                r0   r5   r5   U   s.  € Ø€IðQØ" 1™:Ñˆ	�5ä�	‹N˜QÒØ  I¨a¡LÑ0Ø˜i¨™lÐ+;Ñ<Ñ<à'¨™lÐ+;Ñ<¸ZÑHˆOã&�Ü   [Ñ!1°2Ó6�Ø" 9™~�ß2�AØ˜C’xØ ™Fð 3ð
 '*§i¡i¤kôá&1™
˜˜dØÔ#9Ñ9ð ˜$‘JØ&1ð ñ ð × Ñ ä ¨lÀUÔKØ ðõð 'ð( Ðùóøô ò QÜ�‰ÐKÈAÈ3ÐO×PÐPØÐûðQús0   „AB5 ÁB5 Á5B/Â
#B5 Â/B5 Â5	C!Â>CÃC!c                ó†   — 	 ddl } |j                   «       }|j                  | |«       |S # t        $ r t        d«      ‚w xY w)z‰VDMS client for the VDMS server.

    Args:
        host: IP or hostname of VDMS server
        port: Port to connect to VDMS server
    r   NzOCould not import vdms python package. Please install it with `pip install vdms.)ÚvdmsÚImportErrorÚconnect)ÚhostÚportrU   Úclients       r0   ÚVDMS_Clientr[   w   sO   € ð
Ûð ˆT�Y‰Y‹[€FØ
‡N�N�4˜ÔØ€Møô ò 
Üð8ó
ð 	
ð
ús	   ‚+ «A z0.3.18z1.0.0zlangchain_vdms.VDMS)ÚsinceÚremovalÚalternative_importc                  óD  — e Zd ZdZdedddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d3d„Zed4d„«       Zd5d„Zd6d	„Z	d7d
„Z
d8d„Zd9d„Zeedf	 	 	 	 	 	 	 	 	 	 	 d:d„Z	 	 d;	 	 	 	 	 	 	 	 	 	 	 d<d„Z	 	 d=	 	 	 	 	 	 	 d>d„Z	 	 d;	 	 	 	 	 	 	 d?d„Z	 	 	 	 d@	 	 	 	 	 	 	 	 	 	 	 dAd„Z	 	 dB	 	 	 	 	 	 	 dCd„Zg df	 	 	 	 	 	 	 dDd„Z	 dE	 	 	 	 	 	 	 	 	 	 	 dFd„Z	 	 	 	 	 	 	 	 dGd„Zddedf	 	 	 	 	 	 	 	 	 	 	 	 	 dHd„Z	 	 	 	 	 dI	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dJd„Zddef	 	 	 	 	 	 	 	 	 	 	 dKd„Zdef	 	 	 	 	 	 	 	 	 	 	 	 	 dLd„Z	 	 	 	 	 	 dMd„ZdNd„ZdOd„Z	 	 	 dP	 	 	 	 	 	 	 	 	 dQd „Z 	 	 	 dR	 	 	 	 	 	 	 	 	 	 	 dSd!„Z!eeddddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dTd"„Z"dUd#„Z#e$ddeef	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dVd$„«       Z%e$dddeef	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dWd%„«       Z&dddgf	 	 	 	 	 	 	 	 	 dXd&„Z'eed'df	 	 	 	 	 	 	 	 	 	 	 	 	 dYd(„Z(eed'df	 	 	 	 	 	 	 	 	 	 	 	 	 dZd)„Z)eed'df	 	 	 	 	 	 	 	 	 	 	 	 	 d[d*„Z*eed'df	 	 	 	 	 	 	 	 	 	 	 	 	 d\d+„Z+ddeedddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d]d,„Z,eedf	 	 	 	 	 	 	 	 	 	 	 d^d-„Z-eedf	 	 	 	 	 	 	 	 	 	 	 d_d.„Z.eedf	 	 	 	 	 	 	 	 	 	 	 d`d/„Z/eedf	 	 	 	 	 	 	 	 	 	 	 dad0„Z0	 	 	 	 	 	 	 	 dbd1„Z1	 	 	 	 	 	 	 	 dcd2„Z2y)dÚVDMSa  Intel Lab's VDMS for vector-store workloads.

    To use, you should have both:
    - the ``vdms`` python package installed
    - a host (str) and port (int) associated with a deployed VDMS Server

    Visit https://github.com/IntelLabs/vdms/wiki more information.

    IT IS HIGHLY SUGGESTED TO NORMALIZE YOUR DATA.

    Args:
        client: VDMS Client used to connect to VDMS server
        collection_name: Name of data collection [Default: langchain]
        distance_strategy: Method used to calculate distances. VDMS supports
            "L2" (euclidean distance) or "IP" (inner product) [Default: L2]
        engine: Underlying implementation for indexing and computing distances.
            VDMS supports TileDBDense, TileDBSparse, FaissFlat, FaissIVFFlat,
            and Flinng [Default: FaissFlat]
        embedding: Any embedding function implementing
            `langchain_core.embeddings.Embeddings` interface.
        relevance_score_fn: Function for obtaining relevance score

    Example:
        .. code-block:: python

            from langchain_huggingface import HuggingFaceEmbeddings
            from langchain_community.vectorstores.vdms import VDMS, VDMS_Client

            model_name = "sentence-transformers/all-mpnet-base-v2"
            vectorstore = VDMS(
                client=VDMS_Client("localhost", 55555),
                embedding=HuggingFaceEmbeddings(model_name=model_name),
                collection_name="langchain-demo",
                distance_strategy="L2",
                engine="FaissFlat",
            )
    Nr   r   )Ú	embeddingÚcollection_nameÚdistance_strategyÚengineÚrelevance_score_fnÚembedding_dimensionsc               óÈ   — || _         || _        || _        || _        | j	                  ||«       || _        | j                  || j                  | j                  ¬«      | _        y )N©rd   Úmetric)Ú_clientÚsimilarity_search_enginerc   ra   Ú_check_required_inputsÚoverride_relevance_score_fnÚadd_setÚ_collection_name)ÚselfrZ   ra   rb   rc   rd   re   rf   s           r0   Ú__init__zVDMS.__init__³   sj   € ð ˆŒØ(.ˆÔ%Ø!2ˆÔØ"ˆŒØ×#Ñ# OÐ5IÔJð ,>ˆÔ(ð !%§¡ØØ×0Ñ0Ø×)Ñ)ð !-ó !
ˆÕr2   c                ó   — | j                   S r4   )ra   ©rp   s    r0   Ú
embeddingszVDMS.embeddingsÏ   s   € à�~‰~Ðr2   c                ó�   — t        | j                  t        «      r| j                  j                  |«      S d}|dz  }t	        |«      ‚)Nz*Must provide `embedding` which is expectedz to be an Embeddings object)r)   ra   r   Úembed_documentsr+   )rp   ÚtextsÚp_strs      r0   Ú_embed_documentszVDMS._embed_documentsÓ   s@   € Ü�d—n‘n¤jÔ1Ø—>‘>×1Ñ1°%Ó8Ð8à@ˆEØÐ2Ñ2ˆEÜ˜UÓ#Ð#r2   c                ó˜   — | j                   �4t        | j                   d«      r | j                   j                  dd|i|¤ŽS t        d«      ‚)NÚembed_videoÚpathsz:Must provide `embedding` which has attribute `embed_video`© )ra   Úhasattrr{   r+   )rp   r|   Úkwargss      r0   Ú_embed_videozVDMS._embed_videoÛ   sH   € Ø�>‰>Ð%¬'°$·.±.À-Ô*PØ-�4—>‘>×-Ñ-ÑD°EÐD¸VÑDÐDäØLóð r2   c                ó”   — | j                   �2t        | j                   d«      r| j                   j                  |¬«      S t        d«      ‚)NÚembed_image©Úurisz:Must provide `embedding` which has attribute `embed_image`)ra   r~   r‚   r+   )rp   r„   s     r0   Ú_embed_imagezVDMS._embed_imageã   sA   € Ø�>‰>Ð%¬'°$·.±.À-Ô*PØ—>‘>×-Ñ-°4Ð-Ó8Ð8äØLóð r2   c                ó‚   — t        | j                  t        «      r| j                  j                  |«      S t	        d«      ‚)NzEMust provide `embedding` which is expected to be an Embeddings object)r)   ra   r   Úembed_queryr+   )rp   Útexts     r0   Ú_embed_queryzVDMS._embed_queryë   s5   € Ü�d—n‘n¤jÔ1Ø—>‘>×-Ñ-¨dÓ3Ð3äØWóð r2   c                ó¢   — | j                   �| j                   S | j                  j                  «       dv rd„ S t        d| j                  › d�«      ‚)a8  
        The 'correct' relevance function
        may differ depending on a few things, including:
        - the distance / similarity metric used by the VectorStore
        - the scale of your embeddings (OpenAI's are unit normed. Many others are not!)
        - embedding dimensionality
        - etc.
        )ÚipÚl2c                ó   — | S r4   r}   )r,   s    r0   Ú<lambda>z1VDMS._select_relevance_score_fn.<locals>.<lambda>  s   € ™Qr2   z=No supported normalization function for distance_strategy of z;.Consider providing relevance_score_fn to VDMS constructor.)rm   rc   Úlowerr+   rs   s    r0   Ú_select_relevance_score_fnzVDMS._select_relevance_score_fnó   sf   € ð ×+Ñ+Ð7Ø×3Ñ3Ð3ð ×!Ñ!×'Ñ'Ó)¨\Ñ9ÙÐäð-Ø-1×-CÑ-CÐ,Dð EMðMóð r2   c                óò   — | j                   €d|d<    | j                  d||||dœ|¤Ž}g }|D ]G  \  }}	| j                   €|j                  ||	f«       Œ&|j                  || j                  |	«      f«       ŒI |S )z?Return docs and their similarity scores on a scale from 0 to 1.TÚnormalize_distance)ÚqueryÚkÚfetch_kÚfilterr}   )rm   Úsimilarity_search_with_scorerD   )
rp   r“   r”   r•   r–   r   Údocs_and_scoresÚdocs_and_rel_scoresr7   Úscores
             r0   Ú(_similarity_search_with_relevance_scoresz-VDMS._similarity_search_with_relevance_scores
  s¨   € ð ×+Ñ+Ð3Ø+/ˆFÐ'Ñ(Ø;˜$×;Ñ;ð 
ØØØØñ	
ð
 ñ
ˆð *,ÐÛ)‰JˆC�Ø×/Ñ/Ð7Ø#×*Ñ*¨C°¨<Õ8à#×*Ñ*àØ×8Ñ8¸Ó?ðõð	 *ð #Ð"r2   c                óø  — t        ||dd«       |�|n|D �cg c]  }d ‘Œ c}}t        ||dd«       |�|n*|D �cg c]  }t        t        j                  «       «      ‘Œ! c}}t        ||dd«       g }g }g }	t	        ||||«      D ]V  \  }
}}}| j                  ||
|||¬«      \  }}|€Œ$|j                  |«       |j                  |«       |	j                  |«       ŒX | j                  ||«      \  }}|	S c c}w c c}w )Nrw   rt   Ú	metadatasÚids©r?   ra   Údocumentr%   )r1   ÚstrÚuuidÚuuid4ÚzipÚ_VDMS__get_add_queryrD   Ú_VDMS__run_vdms_query)rp   rb   rw   rt   r�   rž   r8   Úall_queriesÚ	all_blobsÚinserted_idsÚmetaÚembr7   r%   r“   r'   ÚresponseÚresponse_arrays                     r0   ÚaddzVDMS.add*  s  € ô 	˜E :¨w¸ÔEà!*Ð!6‘IÉ5Ó<QÉ5ÀaºTÈ5Ñ<Qˆ	Ü˜E 9¨g°{ÔCà�_‰cÁeÓ*LÁeÀ¬3¬t¯z©z«|Õ+<ÀeÑ*LˆÜ˜E 3¨°Ô7à!#ˆØ!ˆ	Ø"$ˆÜ"% i°¸UÀCÖ"HÑˆD�#�s˜BØ×.Ñ.Ø¨$¸#ÈÐPRð /ó ‰KˆE�4ð ÑØ×"Ñ" 5Ô)Ø× Ñ  Ô&Ø×#Ñ# BÕ'ð #Ið $(×#8Ñ#8¸ÀiÓ#PÑ ˆ�.àÐùò+ =Rùò +Ms
   —	C2¹$C7c                óº   — t        d|| j                  t        |d|«      t        |d|«      ¬«      }| j                  |g«      \  }}d|d   v rt	        d|› �«      ‚|S )NÚAddDescriptorSetÚvaluerh   ÚFailedCommandr   zFailed to add collection )Ú_add_descriptorsetÚembedding_dimensionÚgetattrr¦   r+   )rp   rb   rd   ri   r“   r¬   r8   s          r0   rn   zVDMS.add_setK  ss   € ô #ØØØ×$Ñ$Ü˜6 7¨FÓ3Ü˜6 7¨FÓ3ô
ˆð ×+Ñ+¨U¨GÓ4‰ˆ�!à˜h q™kÑ)ÜÐ8¸Ð8IÐJÓKÐKàÐr2   c                ó6  — g }g }| j                  |«      }d|i}|€dddgi}nddg|d<   |�
d|d   g|d<   t        d|ddddd||¬	«	      }|j                  |«       | j                  ||«      \  }	}
t	        d
|d¬«      }| j                  |g|«      \  }}d|	d   v S )zA
        Deletes entire collection if id is not provided
        ÚlistNÚ	_deletionú==é   r   r%   r;   ©ÚlabelÚrefrR   ÚlinkÚk_neighborsÚconstraintsr6   ÚFindDescriptorSetT)Ú
storeIndex)Ú_VDMS__get_propertiesÚ_add_descriptorrD   r¦   r³   )rp   rb   rž   rÀ   r§   r¨   Úcollection_propertiesr6   r“   r¬   r­   ÚresponseSetr8   s                r0   Ú__deletezVDMS.__delete`  së   € ð "$ˆØ!ˆ	à $× 5Ñ 5°oÓ FÐØÐ0Ð1ˆàÐØ&¨¨q¨	Ð2‰Kà(,¨a yˆK˜Ñ$àˆ?Ø!% s¨1¡v ˆK˜ÑäØØØØØØØØ#Øô

ˆð 	×Ñ˜5Ô!Ø#'×#8Ñ#8¸ÀiÓ#PÑ ˆ�.ô #Ø ¸Tô
ˆð ×.Ñ.°¨w¸	ÓB‰ˆ�QØ 8¨A¡;Ð.Ð.r2   r?   c                óü  — |€i }ntd|i}t        | j                  ||«      \  }}|rT|d   d   j                  «       D �	�
ci c]  \  }	}
|	|
d   “Œ }}	}
d|› d�}|dz  }t        |«       t        d|› �«       |d fS |r|j	                  |«       |d	vr||d
<   |j                  «       D ],  }|| j                  vsŒ| j                  j                  |«       Œ. t        d|d d |d d d d ¬«	      }t        |«      }||fS c c}
}	w )Nr%   r;   rÀ   éÿÿÿÿz[!] Embedding with id (z) exists in DB;z#Therefore, skipped and not insertedz	Skipped values are: )NÚ r&   ÚAddDescriptorr»   )
Ú_check_descriptor_exists_by_idrj   rB   ÚprintÚupdateÚkeysrÅ   rD   rÄ   Úembedding2bytes)rp   rb   r?   ra   r    r%   rR   Ú	id_existsr“   Úprop_keyÚprop_valÚskipped_valueÚpstrr”   r'   s                  r0   Ú__get_add_queryzVDMS.__get_add_query�  s^  € ð ˆ:Ø$&‰Eà˜2�JˆEÜ=Ø—‘˜o¨ró ÑˆI�uñ ð /4Ð4DÑ.EØ%ñ/ç‘e“gð/ô!ñ/Ñ*˜ (ð ˜h r™lÑ*ð/ð ñ !ð 1°°°OÐD�ØÐ=Ñ=�Ü�d”ÜÐ.¨}¨oÐ>Ô?Ø˜d�{Ð"áØ�L‰L˜Ô"Ø˜:Ñ%Ø'ˆE�)Ñà—‘–ˆAØ˜×2Ñ2Ò2Ø×*Ñ*×1Ñ1°!Õ4ð ô  ØØØØØØØØØô

ˆô ˜yÓ)ˆð Øð
ð 	
ùóG!s   ¿C8Fc                óÄ   — t        |||¬«      }| j                  |g«      \  }}t        |«      dkD  rt        |d   «      j	                  d«      }|S t        t        «      }|S )N)Úunique_entityÚdeletionr   Ú,)Ú_find_property_entityr¦   r*   Ú
_bytes2strÚsplitr   ÚDEFAULT_PROPERTIES)rp   rb   rØ   rÙ   Ú
find_queryr¬   Úresponse_blobrÅ   s           r0   Ú__get_propertieszVDMS.__get_propertiesÅ  sr   € ô +Ø¨=À8ô
ˆ
ð #'×"7Ñ"7¸¸Ó"EÑˆ�-Üˆ}Ó Ò!Ü$.¨}¸QÑ/?Ó$@×$FÑ$FÀsÓ$KÐ!ð %Ð$ô %-Ô-?Ó$@Ð!Ø$Ð$r2   c                ó˜   — | j                   j                  ||«      \  }}t        ||«      }|r| j                   j                  «        ||fS r4   )rj   r“   Ú_check_valid_responseÚprint_last_response)rp   r§   r¨   rä   r¬   r­   r8   s          r0   Ú__run_vdms_queryzVDMS.__run_vdms_queryÕ  sI   € ð $(§<¡<×#5Ñ#5°kÀ9Ó#MÑ ˆ�.ä! +¨xÓ8ˆÙØ�L‰L×,Ñ,Ô.Ø˜Ð'Ð'r2   c                ó.  — t        ||dd«       t        ||dd«       |�|n|D �cg c]  }d‘Œ c}}t        ||dd«       | j                  |«      }g }t        ||||«      D ]‘  \  }	}
}}d| j                  i}ddd	gi}|�d|g|d
<   t	        d|ddddd||¬«	      }| j                  |g«      \  }}| j                  ||	|
||¬«      \  }}|€Œj| j                  |g|g«      \  }}|j                  |«       Œ“ | j                  ||| j                  «       yc c}w )z‹
        Updates (find, delete, add) a collection based on id.
        If more than one collection returned with id, error occuers
        rž   Ú	documentsrt   Nr�   r·   r¸   r¹   rº   r%   r;   r»   rŸ   )	r1   rÃ   r¤   rÅ   rÄ   r¦   r¥   rD   Ú_VDMS__update_properties)rp   rb   rž   rç   rt   r�   r8   Ú
orig_propsÚupdated_idsrª   r«   r7   r%   r6   rÀ   r“   r¬   r­   r'   s                      r0   Ú__updatezVDMS.__updateâ  sj  € ô 	˜C ¨E°;Ô?ä˜C ¨U°LÔAà!*Ð!6‘IÉ3Ó<OÉ3ÀaºTÈ3Ñ<Oˆ	Ü˜C ¨E°;Ô?à×*Ñ*¨?Ó;ˆ
à!#ˆÜ"% i°¸YÈÖ"LÑˆD�#�s˜BØ˜t×9Ñ9Ð:ˆGà&¨¨q¨	Ð2ˆKàˆ~Ø%)¨2 J�˜DÑ!ä#Ø ØØØØØØ Ø'Øô
ˆEð (,×'<Ñ'<¸e¸WÓ'EÑ$ˆH�nà×.Ñ.ØØØØØð /ó ‰KˆE�4ð ÑØ+/×+@Ñ+@À%ÀÈ4È&Ó+QÑ(�˜.Ø×"Ñ" 2Õ&ð? #MðB 	× Ñ Ø˜Z¨×)CÑ)Cõ	
ùòO =Ps   ¥	Dc                ó´   — |�Vt        |«      }|D ]  }||vsŒ|j                  |«       Œ ||k7  r(t        |d|¬«      \  }}| j                  ||g«      \  }}	y y y )NrÎ   )Úcommand_typeÚall_properties)r   rD   Ú_build_property_queryr¦   )
rp   rb   Úcurrent_collection_propertiesÚnew_collection_propertiesÚold_collection_propertiesÚpropr§   Úblob_arrr¬   r8   s
             r0   Ú__update_propertieszVDMS.__update_properties  s   € ð %Ð0Ü(0Ð1NÓ(OÐ%Û1�ØÐ<Ò<Ø1×8Ñ8¸Õ>ð 2ð -Ð0IÒIÜ(=Ø#Ø!)Ø#@ô)Ñ%�˜Xð
 #×3Ñ3°KÀ(ÀÓL‘�™!ð Jð 1r2   Tc           	     óî  — |D �cg c]  }| j                  |¬«      ‘Œ }}|r|rt        |«      D ]  \  }	}|||	   d<   Œ n|rg }|D ]  }|j                  d|i«       Œ |�|n*|D �
cg c]  }
t        t	        j
                  «       «      ‘Œ! c}
}| j                  |¬«      }|€|D �
cg c]  }
i ‘Œ }}
n|D �cg c]  }t        |«      ‘Œ }} | j                  d|||||dœ|¤Ž |S c c}w c c}
w c c}
w c c}w )a™  Run more images through the embeddings and add to the vectorstore.

        Images are added as embeddings (AddDescriptor) instead of separate
        entity (AddImage) within VDMS to leverage similarity search capability

        Args:
            uris: List of paths to the images to add to the vectorstore.
            metadatas: Optional list of metadatas associated with the images.
            ids: Optional list of unique IDs.
            batch_size (int): Number of concurrent requests to send to the server.
            add_path: Bool to add image path as metadata

        Returns:
            List of ids from adding images into the vectorstore.
        )Ú
image_pathr÷   rƒ   ©rw   rt   rž   r�   Ú
batch_sizer}   )	Úencode_imageÚ	enumeraterD   r¡   r¢   r£   r…   Ú_validate_vdms_propertiesÚadd_from)rp   r„   r�   rž   rù   Úadd_pathr   ÚuriÚ	b64_textsÚmidxr8   rt   Úms                r0   Ú
add_imageszVDMS.add_images1  s)  € ñ2 CGÓGÁ$¸3�T×&Ñ&°#Ð&Õ6À$ˆ	ÐGá™	Ü& tž_‘	��cØ03�	˜$‘ Ò-ñ -áØˆIÛ�Ø× Ñ  ,°Ð!4Õ5ð ð �_‰cÁdÓ*KÁdÀ¬3¬t¯z©z«|Õ+<ÀdÑ*Kˆð ×&Ñ&¨DÐ&Ó1ˆ
àÐÙ%)Ó*¡T š TˆIÑ*á?HÓI¹y¸!Ô2°1Õ5¸yˆIÐIàˆ�‰ð 	
ØØ!ØØØ!ñ	
ð ò	
ð ˆ
ùò; Hùò +Lùò +ùâIs   …C#Á&$C(Â%	C-Â5C2c           	     óš  — |€|D �cg c]  }d‘Œ }}|r|rt        |«      D ]  \  }	}
|
||	   d<   Œ n|rg }|D ]  }
|j                  d|
i«       Œ |�|n*|D �cg c]  }t        t        j                  «       «      ‘Œ! c}} | j
                  dd|i|¤Ž}|€|D �cg c]  }i ‘Œ }} | j                  d|||||dœ|¤Ž |S c c}w c c}w c c}w )aÞ  Run videos through the embeddings and add to the vectorstore.

        Videos are added as embeddings (AddDescriptor) instead of separate
        entity (AddVideo) within VDMS to leverage similarity search capability

        Args:
            paths: List of paths to the videos to add to the vectorstore.
            metadatas: Optional list of text associated with the videos.
            metadatas: Optional list of metadatas associated with the videos.
            ids: Optional list of unique IDs.
            batch_size (int): Number of concurrent requests to send to the server.
            add_path: Bool to add video path as metadata

        Returns:
            List of ids from adding videos into the vectorstore.
        rÊ   Ú
video_pathr|   rø   r}   )rû   rD   r¡   r¢   r£   r€   rý   )rp   r|   rw   r�   rž   rù   rþ   r   r8   r  Úpathrt   s               r0   Ú
add_videoszVDMS.add_videosi  s  € ð4 ˆ=Ù!&Ó'¡˜A’R ˆEÐ'á™	Ü'¨Ö.‘
��dØ04�	˜$‘ Ò-ñ /áØˆIÛ�Ø× Ñ  ,°Ð!5Õ6ð ð �_‰cÁeÓ*LÁeÀ¬3¬t¯z©z«|Õ+<ÀeÑ*Lˆð '�T×&Ñ&Ñ=¨UÐ=°fÑ=ˆ
àÐÙ%*Ó+¡U š UˆIÐ+àˆ�‰ð 	
ØØ!ØØØ!ñ	
ð ò	
ð ˆ
ùò7 (ùò +Mùò ,s   ‡	B>Á$CÂ	Cc           	     ó8  — t        |«      }|€*|D �cg c]  }t        t        j                  «       «      ‘Œ! }}| j	                  |«      }|€|D �cg c]  }i ‘Œ }}n|D �cg c]  }t        |«      ‘Œ }} | j                  d|||||dœ|¤Ž}	|	S c c}w c c}w c c}w )a»  Run more texts through the embeddings and add to the vectorstore.

        Args:
            texts: List of strings to add to the vectorstore.
            metadatas: Optional list of metadatas associated with the texts.
            ids: Optional list of unique IDs.
            batch_size (int): Number of concurrent requests to send to the server.

        Returns:
            List of ids from adding the texts into the vectorstore.
        rø   r}   )r·   r¡   r¢   r£   ry   rü   rý   )
rp   rw   r�   rž   rù   r   r8   rt   r  r©   s
             r0   Ú	add_textszVDMS.add_texts¡  s¸   € ô( �U“ˆØˆ;Ù.3Ó4©e¨”3”t—z‘z“|Õ$¨eˆCÐ4à×*Ñ*¨5Ó1ˆ
àÐÙ%*Ó+¡U š UˆIÑ+á?HÓI¹y¸!Ô2°1Õ5¸yˆIÐIà$�t—}‘}ð 
ØØ!ØØØ!ñ
ð ñ
ˆð Ðùò# 5ùò
 ,ùâIs   ’$BÁ	BÁBc                ó‚  — | j                  | j                  «      }g }t        dt        |«      |«      D ]a  }	t	        |	|z   t        |«      «      }
||	|
 }||	|
 }||	|
 }|r||	|
 }| j                  | j                  |||¬«      }|j                  |«       Œc | j                  | j                  || j                  «       |S )Nr   )rt   rw   r�   rž   )	rÃ   ro   Úranger*   Úminr®   Úextendrè   rÅ   )rp   rw   rt   rž   r�   rù   r   ré   r©   Ú	start_idxÚend_idxÚbatch_textsÚbatch_embedding_vectorsÚ	batch_idsÚbatch_metadatasÚresults                   r0   rý   zVDMS.add_fromÊ  sâ   € ð ×*Ñ*¨4×+@Ñ+@ÓAˆ
Ø"$ˆÜ˜q¤# e£*¨jÖ9ˆIÜ˜) jÑ0´#°e³*Ó=ˆGà 	¨'Ð2ˆKØ&0°¸7Ð&CÐ#Ø˜I gÐ.ˆIÙØ"+¨I°gÐ">�à—X‘XØ×%Ñ%Ø2Ø!Ø)Øð ó ˆFð ×Ñ Õ'ð# :ð( 	× Ñ Ø×!Ñ! :¨t×/IÑ/Iô	
ð Ðr2   c                óL  — | j                   j                  «       st        d«      ‚| j                  t        vrt        d«      ‚| j
                  t        vrt        d«      ‚| j                  €t        d«      ‚|�|| _        nÌ| j                  �6t        | j                  d«      r t        | j                  d«      «      | _        nŠ| j                  �~t        | j                  d«      st        | j                  d«      rRt        | j                  d	«      r1	 | j                  j                  j                  j                  | _        nt        d
«      ‚| j                  |«      }t        | d«      r| j                   j#                  |«       y || _        y # t        $ r t        d
«      ‚w xY w)Nz_VDMS client must be connected to a VDMS server.Please use VDMS_Client to establish a connectionz-distance_strategy must be either 'L2' or 'IP'z]engine must be either 'TileDBDense', 'TileDBSparse', 'FaissFlat', 'FaissIVFFlat', or 'Flinng'úMust provide embedding functionr‡   zThis is a sample sentence.r‚   r{   Úmodelz>Embedding dimension needed. Please define embedding_dimensionsrÅ   )rj   Úis_connectedr+   rc   r   rk   r   ra   r´   r~   r*   r‰   r  Útoken_embeddingÚembedding_dimrÃ   rÅ   r  )rp   rb   rf   Úcurrent_propss       r0   rl   zVDMS._check_required_inputsï  sˆ  € ð �|‰|×(Ñ(Ô*ÜðEóð ð ×!Ñ!Ô)CÑCÜÐLÓMÐMð ×(Ñ(Ô0AÑAÜð=óð ð �>‰>Ð!ÜÐ>Ó?Ð?àÐ+Ø';ˆDÕ$Ø�^‰^Ð'¬G°D·N±NÀMÔ,RÜ'*Ø×!Ñ!Ð">Ó?ó(ˆDÕ$ð �^‰^Ð'Ü�D—N‘N MÔ2Ü�t—~‘~ }Ô5ä�t—~‘~ wÔ/ðàŸ™×,Ñ,×<Ñ<×JÑJð Õ,ô !ØTóð ð
 ×-Ñ-¨oÓ>ˆÜ�4Ð0Ô1Ø×&Ñ&×-Ñ-¨mÕ<à4AˆDÕ&øô "ò Ü$ØXóð ðús   Ä/F ÆF#c                ó    — g }g }ddgdœ}t        d|d d d d d d |¬«	      }|j                  |«       | j                  ||«      \  }}|d   d   d   S )NrÊ   r%   )Úcountr·   r;   r»   r   Úreturned)rÄ   rD   r¦   )rp   rb   r§   r¨   r6   r“   r¬   r­   s           r0   r  z
VDMS.count'  sy   € Ø!#ˆØ!ˆ	à¨¨Ñ/ˆÜØØØØØØØØØô

ˆð 	×Ñ˜5Ô!à#'×#8Ñ#8¸ÀiÓ#PÑ ˆ�.Ø˜‰{Ð+Ñ,¨ZÑ8Ð8r2   c                ó,   — t        j                  |«      S r4   )Úbase64Ú	b64decode)rp   Úbase64_images     r0   Údecode_imagezVDMS.decode_image=  s   € Ü×Ñ Ó-Ð-r2   c                óJ   — |�|n| j                   }| j                  |||¬«      S )z÷Delete by ID. These are the IDs in the vectorstore.

        Args:
            ids: List of ids to delete.

        Returns:
            Optional[bool]: True if deletion is successful,
            False otherwise, None if not implemented.
        )rž   rÀ   )ro   Ú_VDMS__delete)rp   rž   rb   rÀ   r   Únames         r0   ÚdeletezVDMS.delete@  s+   € ð  #2Ð"=‰À4×CXÑCXˆØ�}‰}˜T s¸ˆ}ÓDÐDr2   c                ó’   — d}d}t        ||||¬«      }| j                  |g|«      \  }	}
|r||	d   v r|	d   |   d   d   d   }|	|
|fS )Nrº   r;   )r¿   r6   r   r<   rÉ   r$   )rÄ   r¦   )rp   Úsetnamer•   r6   r¨   Ú	normalizeÚmax_distÚcommand_strr“   r¬   r­   s              r0   Úget_k_candidateszVDMS.get_k_candidatesS  sw   € ð ˆØ&ˆÜØØØØô	
ˆð $(×#8Ñ#8¸%¸À)Ó#LÑ ˆ�.á˜¨°©Ñ3Ø ‘{ ;Ñ/°
Ñ;¸BÑ?ÀÑLˆHà˜¨Ð1Ð1r2   c	                ó¤  — g }	t        |«      }
|
�|	j                  |
«       |€| j                  ||||	|¬«      \  }}}�n5|€ddgi}n&d|vrdg|d<   nd|d   vr|d   j                  d«       t        ||||¬«      }| j	                  |g«      \  }}||d   v r*|d   |   d   dkD  r|d   |   d   D �cg c]  }|d   ‘Œ	 }}ng g fS | j                  ||||	|¬«      \  }}}||d   vs||d   v r|d   |   d   dk(  rg g fS g }|d   |   d   D ]*  }|d   |v r|j                  |«       t        |«      |k(  sŒ* n ||d   |   d<   t        |«      |d   |   d<   t        |«      |k  rd}t        |«       |rS|dt        j                  fv rd	n|}t        |d   |   d   «      D ]$  \  }}|d
   |z  |d
<   |d
   |d   |   d   |   d
<   Œ& ||fS c c}w )N)r*  r·   r%   ©rÀ   r6   r   r  r<   z4Returned items < k_neighbors; Try increasing fetch_kg      ð?r$   )
rÐ   rD   r-  rÄ   r¦   r*   rÍ   ÚnpÚinfrû   )rp   r,  r)  r¿   r•   rÀ   r6   Úquery_embeddingr’   r¨   r'   r¬   r­   r+  r“   rL   Úids_of_interestÚnew_entitiesrx   Úent_idxs                       r0   Úget_descriptor_responsezVDMS.get_descriptor_responsej  s£  € ð  "ˆ	Ü˜Ó/ˆØÐØ×Ñ˜TÔ"àÐà15×1FÑ1FØ˜ g¨yÐDVð 2Gó 2Ñ.ˆH�n¢hð ˆØ! D 6Ð*‘Ø˜wÑ&Ø#' &�˜’Ø˜W V™_Ñ,Ø˜‘×&Ñ& tÔ,ô $ØØØ'Øô	ˆEð (,×'<Ñ'<¸e¸WÓ'EÑ$ˆH�nØ˜h q™kÑ)¨h°q©k¸+Ñ.FÀzÑ.RÐUVÒ.Và)1°!©°[Ñ)AÀ*Ò)Mó#Ù)M #�C˜“IÐ)Mð  ñ #ð ˜2�v�ð 26×1FÑ1FØ˜ '¨9Ð@Rð 2Gó 2Ñ.ˆH�n hð  (¨1¡+Ñ-Ø˜x¨™{Ñ*¨x¸©{¸;Ñ/GÈ
Ñ/SÐWXÒ/Xà˜2�v�ð (*ˆLØ ‘{ ;Ñ/°
Ô;�Ø�t‘9 Ñ/Ø ×'Ñ'¨Ô,Ü�|Ó$¨Ó3Ùð	 <ð
 4@ˆH�Q‰K˜Ñ$ ZÑ0Ü36°|Ó3DˆH�Q‰K˜Ñ$ ZÑ0Ü�<Ó  ;Ò.ØN�Ü�e”áØ&¨1¬b¯f©f¨+Ñ5‘s¸8ˆHÜ )¨(°1©+°kÑ*BÀ:Ñ*NÖ O‘�˜Ø#& {Ñ#3°hÑ#>��KÑ ØMPØñN�˜‘˜KÑ(¨Ñ4°WÑ=¸kÒJð !Pð ˜Ð'Ð'ùòI#s   Â3Gc                ó®   — t        |d«      5 }|j                  «       }t        j                  |«      j	                  d«      cd d d «       S # 1 sw Y   y xY w)NÚrbzutf-8)ÚopenÚreadr   Ú	b64encodeÚdecode)rp   r÷   Úfr'   s       r0   rú   zVDMS.encode_image¶  s>   € Ü�*˜dÔ# qØ—6‘6“8ˆDÜ×#Ñ# DÓ)×0Ñ0°Ó9÷ $×#Ò#ús   �4AÁAc           	     ó°   — |d   }| j                  ||D �cg c]  }|j                  ‘Œ c}|D �cg c]  }|j                  ‘Œ c}||||¬«      S c c}w c c}w )a  Create a VDMS vectorstore from a list of documents.

        Args:
            collection_name (str): Name of the collection to create.
            documents (List[Document]): List of documents to add to vectorstore.
            embedding (Embeddings): Embedding function. Defaults to None.
            ids (Optional[List[str]]): List of document IDs. Defaults to None.
            batch_size (int): Number of concurrent requests to send to the server.

        Returns:
            VDMS: VDMS vectorstore.
        rZ   )rZ   rw   r�   ra   rž   rù   rb   )Ú
from_textsr>   r?   )	Úclsrç   ra   rž   rù   rb   r   rZ   r7   s	            r0   Úfrom_documentszVDMS.from_documents»  sg   € ð, # 8Ñ,ˆà�~‰~ØÙ/8Ó9©y¨�3×#Ó#¨yÑ9Ù/8Ó9©y¨�s—|“|¨yÑ9ØØØ!Ø+ð ó 	
ð 		
ùâ9ùÚ9s
   –A
¯Ac                ó²   — |d   } | |||¬«      }	|€*|D �
cg c]  }
t        t        j                  «       «      ‘Œ! }}
|	j                  ||||¬«       |	S c c}
w )aH  Create a VDMS vectorstore from a raw documents.

        Args:
            texts (List[str]): List of texts to add to the collection.
            embedding (Embeddings): Embedding function. Defaults to None.
            metadatas (Optional[List[dict]]): List of metadatas. Defaults to None.
            ids (Optional[List[str]]): List of document IDs. Defaults to None.
            batch_size (int): Number of concurrent requests to send to the server.
            collection_name (str): Name of the collection to create.

        Returns:
            VDMS: VDMS vectorstore.
        rZ   )rb   ra   rZ   )rw   r�   rž   rù   )r¡   r¢   r£   r	  )r@  rw   ra   r�   rž   rù   rb   r   rZ   Úvdms_collectionr8   s              r0   r?  zVDMS.from_textsÞ  ss   € ð0 # 8Ñ,ˆÙØ+ØØô
ˆð ˆ;Ù.3Ó4©e¨”3”t—z‘z“|Õ$¨eˆCÐ4Ø×!Ñ!ØØØØ!ð	 	"ô 	
ð Ðùò 5s   —$Ac                óÚ   — g }g }ddi}|�||d<   d|v r| j                  |«      }||d<   d|v rd|d	<   t        d
|d||¬«      }	|j                  |	«       | j                  ||«      \  }
}|
|fS )aŽ  Gets the collection.
        Get embeddings and their associated data from the data store.
        If no constraints provided returns all embeddings up to limit.

        Args:
            constraints: A dict used to filter results by.
                   E.g. `{"color" : ["==", "red"], "price": [">", 4.00]}`. Optional.
            limit: The number of documents to return. Optional.
            include: A list of what to include in the results.
                     Can contain `"embeddings"`, `"metadatas"`, `"documents"`.
                     Ids are always included.
                     Defaults to `["metadatas", "documents"]`. Optional.
        r  rÊ   NÚlimitr?   r·   rt   Tr'   r;   )r¿   rÀ   r6   )rÃ   rÄ   rD   r¦   )rp   rb   rÀ   rE  Úincluder§   r¨   r6   rÅ   r“   r¬   r­   s               r0   ÚgetzVDMS.get  s©   € ð( "$ˆØ!ˆ	à#*¨B -ˆàÐØ$ˆG�GÑð ˜Ñ Ø$(×$9Ñ$9¸/Ó$JÐ!Ø3ˆG�F‰Oð ˜7Ñ"Ø"ˆG�F‰OäØØØØ#Øô
ˆð 	×Ñ˜5Ô!à#'×#8Ñ#8¸ÀiÓ#PÑ ˆ�.Ø˜Ð'Ð'r2   g      à?c                óT  — | j                   €t        d«      ‚t        j                  j	                  |«      s(t        | j                   d«      r| j                  |«      }n³t        j                  j	                  |«      r-t        | j                   d«      r| j                  |g¬«      d   }ngt        j                  j	                  |«      r-t        | j                   d«      r| j                  |g¬«      d   }nd|› d	�}|d
z  }|dz  }t        |«      ‚| j                  |||||¬«      }	|	S ©aR  Return docs selected using the maximal marginal relevance.
        Maximal marginal relevance optimizes for similarity to query AND diversity
        among selected documents.

        Args:
            query (str): Query to look up. Text or path for image or video.
            k: Number of Documents to return. Defaults to 4.
            fetch_k: Number of Documents to fetch to pass to MMR algorithm.
            lambda_mult: Number between 0 and 1 that determines the degree
                        of diversity among the results with 0 corresponding
                        to maximum diversity and 1 to minimum diversity.
                        Defaults to 0.5.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List of Documents selected by maximal marginal relevance.
        zBFor MMR search, you must specify an embedding function oncreation.r‡   r‚   rƒ   r   r{   ©r|   ú(Could not generate embedding for query 'ú'.ú9If using path for image or video, verify embedding model ú6has callable functions 'embed_image' or 'embed_video'.)Úlambda_multr–   )
ra   r+   Úosr  Úisfiler~   r‰   r…   r€   Ú'max_marginal_relevance_search_by_vector)
rp   r“   r”   r•   rO  r–   r   Úembedding_vectorÚ	error_msgÚdocss
             r0   Úmax_marginal_relevance_searchz"VDMS.max_marginal_relevance_search9  s  € ð4 �>‰>Ð!ÜØTóð ô �w‰w�~‰~˜eÔ$¬°·±ÀÔ)OØ#×0Ñ0°Ó7ÑÜ�W‰W�^‰^˜EÔ"¤w¨t¯~©~¸}Ô'MØ#×0Ñ0°u°gÐ0Ó>¸qÑAÑÜ�W‰W�^‰^˜EÔ"¤w¨t¯~©~¸}Ô'MØ#×0Ñ0¸°wÐ0Ó?ÀÑBÑàBÀ5À'ÈÐLˆIØÐTÑTˆIØÐQÑQˆIÜ˜YÓ'Ð'à×;Ñ;ØØØØ#Øð <ó 
ˆð ˆr2   c                ó„  — | j                  |g||g d¢¬«      }t        |d   d   «      dk(  rg S |d   d   D �cg c]  }t        t        |«      «      ‘Œ }	}t	        t        j                  |t
        j                  ¬«      |	||¬«      }
t        |«      }t        |«      D ��cg c]  \  }}||
v sŒ|‘Œ }}}|S c c}w c c}}w ©aH  Return docs selected using the maximal marginal relevance.
        Maximal marginal relevance optimizes for similarity to query AND diversity
        among selected documents.

        Args:
            embedding: Embedding to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            fetch_k: Number of Documents to fetch to pass to MMR algorithm.
            lambda_mult: Number between 0 and 1 that determines the degree
                        of diversity among the results with 0 corresponding
                        to maximum diversity and 1 to minimum diversity.
                        Defaults to 0.5.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List of Documents selected by maximal marginal relevance.
        )r�   rç   Ú	distancesrt   )Úquery_embeddingsÚ	n_resultsr–   rF  r   rº   ©Údtype)r”   rO  )
Úquery_collection_embeddingsr*   r·   Ú_bytes2embeddingr   r0  ÚarrayÚfloat32r9   rû   )rp   ra   r”   r•   rO  r–   r   r6   r  Úembedding_listÚmmr_selectedÚ
candidatesÚiÚrÚselected_resultss                  r0   rR  z,VDMS.max_marginal_relevance_search_by_vectoro  sé   € ð4 ×2Ñ2Ø'˜[ØØÚIð	 3ó 
ˆô ˆw�q‰z˜!‰}Ó Ò"àˆIð >EÀQ¹ZÈº]óÙ=J°6”Ô% fÓ-Õ.¸]ð ð ô 6Ü—‘˜¬"¯*©*Ô5ØØØ'ô	ˆLô *¨'Ó2ˆJô (¨
Ô3ô Ù3‘d�a˜°q¸LÒ7H’Ð3ð ñ  ð $Ð#ùò!ùó s   ¹B7Â!B<Â.B<c                óT  — | j                   €t        d«      ‚t        j                  j	                  |«      s(t        | j                   d«      r| j                  |«      }n³t        j                  j	                  |«      r-t        | j                   d«      r| j                  |g¬«      d   }ngt        j                  j	                  |«      r-t        | j                   d«      r| j                  |g¬«      d   }nd|› d	�}|d
z  }|dz  }t        |«      ‚| j                  |||||¬«      }	|	S rI  )
ra   r+   rP  r  rQ  r~   r‰   r…   r€   Ú2max_marginal_relevance_search_with_score_by_vector)
rp   r“   r”   r•   rO  r–   r   ra   rT  rU  s
             r0   Ú(max_marginal_relevance_search_with_scorez-VDMS.max_marginal_relevance_search_with_score¦  s  € ð4 �>‰>Ð!ÜØTóð ô �w‰w�~‰~˜eÔ$¬°·±ÀÔ)OØ×)Ñ)¨%Ó0‰IÜ�W‰W�^‰^˜EÔ"¤w¨t¯~©~¸}Ô'MØ×)Ñ)°¨wÐ)Ó7¸Ñ:‰IÜ�W‰W�^‰^˜EÔ"¤w¨t¯~©~¸}Ô'MØ×)Ñ)°°Ð)Ó8¸Ñ;‰IàBÀ5À'ÈÐLˆIØÐTÑTˆIØÐQÑQˆIÜ˜YÓ'Ð'à×FÑFØØØØ#Øð Gó 
ˆð ˆr2   c                ó”  — | j                  |g||g d¢¬«      }t        |d   d   «      dk(  rg S |d   d   D �cg c]  }t        t        |«      «      ‘Œ }	}t	        t        j                  |t
        j                  ¬«      |	||¬«      }
t        |«      }t        |«      D ���cg c]  \  }\  }}||
v sŒ||f‘Œ }}}}|S c c}w c c}}}w rX  )
r^  r*   r·   r_  r   r0  r`  ra  r5   rû   )rp   ra   r”   r•   rO  r–   r   r6   r  rb  rc  rd  re  rf  Úsrg  s                   r0   ri  z7VDMS.max_marginal_relevance_search_with_score_by_vectorÚ  sñ   € ð4 ×2Ñ2Ø'˜[ØØÚIð	 3ó 
ˆô ˆw�q‰z˜!‰}Ó Ò"àˆIð >EÀQ¹ZÈº]óÙ=J°6”Ô% fÓ-Õ.¸]ð ð ô 6Ü—‘˜¬"¯*©*Ô5ØØØ'ô	ˆLô 5°WÓ=ˆJô )2°*Ô(=õ Ù(=™9˜1™f˜q !ÀÀlÒAR��A’Ð(=ð ò  ð $Ð#ùò!ùô s   ¹B>Â"CÂ2Cc                óî   — g }	|€| j                   }|€|	S |j                  ddg«      }
|€d|
v r| j                  d|
v dœ}|D ]1  }| j                  d|||||||¬«      \  }}|	j	                  ||g«       Œ3 |	S )NrF  r�   rt   )r·   r'   r;   )r¿   r•   rÀ   r6   r’   r2  )ro   rG  rÅ   r6  rD   )rp   rZ  rb   r[  r•   r–   r6   r’   r   Úall_responsesrF  Úqembr¬   r­   s                 r0   r^  z VDMS.query_collection_embeddings  s¸   € ð $&ˆàÐ"Ø"×3Ñ3ˆOàÐ#Ø Ð à—*‘*˜Y¨¨Ó6ˆØˆ?˜{¨gÑ5à×2Ñ2Ø$¨Ð/ñˆGó
 %ˆDØ'+×'CÑ'CØ ØØ%ØØ"ØØ#5Ø $ð (Dó 	(Ñ$ˆH�nð × Ñ  (¨NÐ!;Õ<ð %ð Ðr2   c                óf   —  | j                   |f|||dœ|¤Ž}|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )aÃ  Run similarity search with VDMS.

        Args:
            query (str): Query to look up. Text or path for image or video.
            k (int): Number of results to return. Defaults to 3.
            fetch_k (int): Number of candidates to fetch for knn (>= k).
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List[Document]: List of documents most similar to the query text.
        )r”   r•   r–   )r—   )	rp   r“   r”   r•   r–   r   r˜   r7   r8   s	            r0   Úsimilarity_searchzVDMS.similarity_search:  sK   € ð& <˜$×;Ñ;Øð
Ø °ñ
Ø:@ñ
ˆñ #2Ô2¡/™˜˜Q’ /Ò2Ð2ùÓ2s   �-c                óH   —  | j                   d|g|||dœ|¤Ž}t        |«      S )aÆ  Return docs most similar to embedding vector.
        Args:
            embedding (List[float]): Embedding to look up documents similar to.
            k (int): Number of Documents to return. Defaults to 3.
            fetch_k (int): Number of candidates to fetch for knn (>= k).
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.
        Returns:
            List of Documents most similar to the query vector.
        ©rZ  r[  r•   r–   r}   )r^  r9   ©rp   ra   r”   r•   r–   r   r6   s          r0   Úsimilarity_search_by_vectorz VDMS.similarity_search_by_vectorR  s@   € ð" 3�$×2Ñ2ð 
Ø'˜[ØØØñ	
ð
 ñ
ˆô   Ó(Ð(r2   c                ój  — | j                   €t        d«      ‚t        j                  j	                  |«      s(t        | j                   d«      r| j                  |«      }n³t        j                  j	                  |«      r-t        | j                   d«      r| j                  |g¬«      d   }ngt        j                  j	                  |«      r-t        | j                   d«      r| j                  |g¬«      d   }nd|› d	�}|d
z  }|dz  }t        |«      ‚ | j                  d|g|||dœ|¤Ž}t        |«      S )aE  Run similarity search with VDMS with distance.

        Args:
            query (str): Query to look up. Text or path for image or video.
            k (int): Number of results to return. Defaults to 3.
            fetch_k (int): Number of candidates to fetch for knn (>= k).
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List[Tuple[Document, float]]: List of documents most similar to
            the query text and cosine distance in float for each.
            Lower score represents more similarity.
        r  r‡   r‚   rƒ   r   r{   rJ  rK  rL  rM  rN  rs  r}   )ra   r+   rP  r  rQ  r~   r‰   r…   r€   r^  r5   )	rp   r“   r”   r•   r–   r   r2  rT  r6   s	            r0   r—   z!VDMS.similarity_search_with_scorem  s!  € ð* �>‰>Ð!ÜÐ>Ó?Ð?ä—7‘7—>‘> %Ô(¬W°T·^±^À]Ô-SØ/3×/@Ñ/@ÀÓ/G‘Ü—‘—‘ Ô&¬7°4·>±>À=Ô+QØ"&×"3Ñ"3¸%¸Ð"3Ó"AÀ!Ñ"D‘Ü—‘—‘ Ô&¬7°4·>±>À=Ô+QØ"&×"3Ñ"3¸5¸'Ð"3Ó"BÀ1Ñ"E‘àFÀuÀgÈRÐP�	ØÐXÑX�	ØÐUÑU�	Ü  Ó+Ð+à6�d×6Ñ6ð Ø"1Ð!2ØØØñ	ð
 ñˆGô +¨7Ó3Ð3r2   c                óH   —  | j                   d|g|||dœ|¤Ž}t        |«      S )a6  
        Return docs most similar to embedding vector and similarity score.

        Args:
            embedding (List[float]): Embedding to look up documents similar to.
            k (int): Number of Documents to return. Defaults to 3.
            fetch_k (int): Number of candidates to fetch for knn (>= k).
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List[Tuple[Document, float]]: List of documents most similar to
            the query text. Lower score represents more similarity.
        rs  r}   )r^  r5   rt  s          r0   Ú&similarity_search_with_score_by_vectorz+VDMS.similarity_search_with_score_by_vector›  s@   € ð0 3�$×2Ñ2ð 
Ø'˜[ØØØñ	
ð
 ñ
ˆô +¨7Ó3Ð3r2   c                ó,   — | j                  ||g|g«      S )z®Update a document in the collection.

        Args:
            document_id (str): ID of the document to update.
            document (Document): Document to update.
        )Úupdate_documents)rp   rb   Údocument_idr    s       r0   Úupdate_documentzVDMS.update_document¼  s   € ð ×$Ñ$ _°{°mÀhÀZÓPÐPr2   c                óÜ   — |D �cg c]  }|j                   ‘Œ }}|D �cg c]  }t        |j                  «      ‘Œ }}| j                  |«      }| j	                  |||||¬«       yc c}w c c}w )zÅUpdate a document in the collection.

        Args:
            ids (List[str]): List of ids of the document to update.
            documents (List[Document]): List of documents to update.
        )r�   rt   rç   N)r>   rü   r?   ry   Ú_VDMS__update)rp   rb   rž   rç   r    rˆ   r?   rt   s           r0   rz  zVDMS.update_documentsÇ  s„   € ñ 7@Ó@±i¨(�×%Ó%°iˆÐ@áIRó
ÙIR¸XÔ% h×&7Ñ&7Õ8Èð 	ð 
ð ×*Ñ*¨4Ó0ˆ
à�‰ØØØØ!Øð 	õ 	
ùò Aùò
s
   …A$žA))rZ   ú	vdms.vdmsra   úOptional[Embeddings]rb   r¡   rc   ÚDISTANCE_METRICSrd   ÚENGINESre   z"Optional[Callable[[float], float]]rf   úOptional[int]ÚreturnÚNone)r„  r€  )rw   ú	List[str]r„  úList[List[float]])r|   r†  r   r   r„  r‡  )r„   r†  r„  r‡  )rˆ   r¡   r„  úList[float])r„  zCallable[[float], float])r“   r¡   r”   Úintr•   r‰  r–   úOptional[Dict[str, Any]]r   r   r„  úList[Tuple[Document, float]])NN)rb   r¡   rw   r†  rt   r‡  r�   ú1Optional[Union[List[None], List[Dict[str, Any]]]]rž   úOptional[List[str]]r„  r
   )r   r   )rb   r¡   rd   r‚  ri   r�  r„  r¡   )rb   r¡   rž   zUnion[None, List[str]]rÀ   úUnion[None, Dict[str, Any]]r„  Úbool)NNNN)rb   r¡   r?   úOptional[Any]ra   úUnion[List[float], None]r    r�  r%   úOptional[str]r„  z4Tuple[Dict[str, Dict[str, Any]], Union[bytes, None]]©FF)rb   r¡   rØ   úOptional[bool]rÙ   r”  r„  r†  )r§   z
List[Dict]r¨   úOptional[List]rä   r”  r„  úTuple[Any, Any]r4   )rb   r¡   rž   r†  rç   r†  rt   r‡  r�   rŒ  r„  r…  )rb   r¡   rð   r
   rñ   r•  r„  r…  )r„   r†  r�   úOptional[List[dict]]rž   r�  rù   r‰  rþ   r”  r   r   r„  r†  )NNNrº   T)r|   r†  rw   r�  r�   r—  rž   r�  rù   r‰  rþ   r”  r   r   r„  r†  )rw   zIterable[str]r�   r—  rž   r�  rù   r‰  r   r   r„  r†  )rw   r†  rt   r‡  rž   r†  r�   r—  rù   r‰  r   r   r„  r†  )rb   r¡   rf   zUnion[int, None]r„  r…  )rb   r¡   r„  r‰  )r"  r¡   r„  Úbytes)NNN)
rž   r�  rb   r’  rÀ   úOptional[Dict]r   r   r„  r�  )NNF)r)  r¡   r•   rƒ  r6   rŠ  r¨   r•  r*  r”  r„  z(Tuple[List[Dict[str, Any]], List, float])r,  r¡   r)  r¡   r¿   r‰  r•   r‰  rÀ   úOptional[dict]r6   rŠ  r2  zOptional[List[float]]r’   r�  r„  z!Tuple[List[Dict[str, Any]], List])r÷   r¡   r„  r¡   )r@  ú
Type[VDMS]rç   úList[Document]ra   r€  rž   r�  rù   r‰  rb   r¡   r   r   r„  r`   )r@  r›  rw   r†  ra   r€  r�   r—  rž   r�  rù   r‰  rb   r¡   r   r   r„  r`   )
rb   r¡   rÀ   r™  rE  rƒ  rF  r†  r„  r–  )r“   r¡   r”   r‰  r•   r‰  rO  Úfloatr–   úOptional[Dict[str, List]]r   r   r„  rœ  )ra   rˆ  r”   r‰  r•   r‰  rO  r�  r–   rž  r   r   r„  rœ  )r“   r¡   r”   r‰  r•   r‰  rO  r�  r–   rž  r   r   r„  r‹  )ra   rˆ  r”   r‰  r•   r‰  rO  r�  r–   rž  r   r   r„  r‹  )rZ  zOptional[List[List[float]]]rb   r’  r[  r‰  r•   r‰  r–   rŽ  r6   rŽ  r’   r�  r   r   r„  z!List[Tuple[Dict[str, Any], List]])r“   r¡   r”   r‰  r•   r‰  r–   rž  r   r   r„  rœ  )ra   rˆ  r”   r‰  r•   r‰  r–   rž  r   r   r„  rœ  )r“   r¡   r”   r‰  r•   r‰  r–   rž  r   r   r„  r‹  )ra   rˆ  r”   r‰  r•   r‰  r–   rž  r   r   r„  r‹  )rb   r¡   r{  r¡   r    r   r„  r…  )rb   r¡   rž   r†  rç   rœ  r„  r…  )3Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚDEFAULT_COLLECTION_NAMErq   Úpropertyrt   ry   r€   r…   r‰   r�   Ú	DEFAULT_KÚDEFAULT_FETCH_Kr›   r®   rn   r%  r¥   rÃ   r¦   r~  rè   ÚDEFAULT_INSERT_BATCH_SIZEr  r  r	  rý   rl   r  r#  r'  r-  r6  rú   ÚclassmethodrA  r?  rG  rV  rR  rj  ri  r^  rq  ru  r—   rx  r|  rz  r}   r2   r0   r`   r`   ‹   sØ	  „ ñ$ðT +/Ø6Ø.2Ø%ØAEØ.2ñ
àð
ð (ð	
ð
 ð
ð ,ð
ð ð
ð ?ð
ð ,ð
ð 
ó
ð8 òó ðó$óóóóð4 Ø&Ø+/ð#àð#ð ð#ð ð	#ð
 )ð#ð ð#ð 
&ó#ðJ HLØ#'ðàðð ðð &ð	ð
 Eðð !ðð 
óðH &Ø#'ð	àðð ðð !ð	ð
 
óð0 '+Ø37ð	+/àð+/ð $ð+/ð 1ð	+/ð
 
ó+/ð` #'Ø.2Ø"&Ø ð6
àð6
ð  ð6
ð ,ð	6
ð
  ð6
ð ð6
ð 
>ó6
ðv ).Ø#(ð	%àð%ð &ð%ð !ð	%ð
 
ó%ð& %'Ø.3ð	(àð(ð "ð(ð ,ð	(ð
 
ó(ð& HLð9
àð9
ð ð9
ð ð	9
ð
 &ð9
ð Eð9
ð 
ó9
ðvMàðMð (,ðMð $2ð	Mð
 
óMð. +/Ø#'Ø3Ø#'ð6àð6ð (ð6ð !ð	6ð
 ð6ð !ð6ð ð6ð 
ó6ðv &*Ø*.Ø#'ØØ#'ð6àð6ð #ð6ð (ð	6ð
 !ð6ð ð6ð !ð6ð ð6ð 
ó6ðv +/Ø#'Ø3ð'àð'ð (ð'ð !ð	'ð
 ð'ð ð'ð 
ó'ð\ +/Ø3ð#àð#ð &ð#ð ð	#ð
 (ð#ð ð#ð ð#ð 
ó#ðJ6BØ"ð6BØ:Jð6Bà	ó6Bóp9ó,.ð
 $(Ø)-Ø&*ð	Eà ðEð 'ðEð $ð	Eð
 ðEð 
óEð. -1Ø$(Ø$)ð2àð2ð ð2ð *ð	2ð
 "ð2ð "ð2ð 
2ó2ð6 %Ø&Ø&*Ø,0Ø15Ø#(ðJ(àðJ(ð ðJ(ð ð	J(ð
 ðJ(ð $ðJ(ð *ðJ(ð /ðJ(ð !ðJ(ð 
+óJ(óX:ð
 ð +/Ø#'Ø3Ø6ð 
Øð 
à!ð 
ð (ð 
ð !ð	 
ð
 ð 
ð ð 
ð ð 
ð 
ò 
ó ð 
ðD ð +/Ø*.Ø#'Ø3Ø6ð&Øð&àð&ð (ð&ð (ð	&ð
 !ð&ð ð&ð ð&ð ð&ð 
ò&ó ð&ðV '+Ø#Ø(˜\ð0(àð0(ð $ð0(ð ð	0(ð
 ð0(ð 
ó0(ðj Ø&Ø Ø,0ð4àð4ð ð4ð ð	4ð
 ð4ð *ð4ð ð4ð 
ó4ðr Ø&Ø Ø,0ð5$àð5$ð ð5$ð ð	5$ð
 ð5$ð *ð5$ð ð5$ð 
ó5$ðt Ø&Ø Ø,0ð2àð2ð ð2ð ð	2ð
 ð2ð *ð2ð ð2ð 
&ó2ðn Ø&Ø Ø,0ð5$àð5$ð ð5$ð ð	5$ð
 ð5$ð *ð5$ð ð5$ð 
&ó5$ðr 9=Ø)-Ø"Ø&Ø.2Ø/3Ø#(ð'à5ð'ð 'ð'ð ð	'ð
 ð'ð ,ð'ð -ð'ð !ð'ð ð'ð 
+ó'ðX Ø&Ø,0ð3àð3ð ð3ð ð	3ð
 *ð3ð ð3ð 
ó3ð6 Ø&Ø,0ð)àð)ð ð)ð ð	)ð
 *ð)ð ð)ð 
ó)ð< Ø&Ø,0ð,4àð,4ð ð,4ð ð	,4ð
 *ð,4ð ð,4ð 
&ó,4ðb Ø&Ø,0ð4àð4ð ð4ð ð	4ð
 *ð4ð ð4ð 
&ó4ðB	QØ"ð	QØ14ð	QØ@Hð	Qà	ó	Qð
Ø"ð
Ø)2ð
Ø?Mð
à	ô
r2   r`   c	                óÖ   — d|i}	d| v r|r||	d<   |�||	d<   |t         vr||	d<   d| v r|�||	d<   d| v r|�t        |«      |	d<   d| v r|t         vr||	d	<   d| v r|t         vr||	d
<   | |	i}
|
S )NÚsetÚAddr¼   Ú_refÚ
propertiesr¾   ÚFindr¿   rÀ   r6   )rC   r‰  )r,  r)  r¼   r½   rR   r¾   r¿   rÀ   r6   Úentityr“   s              r0   rÄ   rÄ   â  s·   € ð $ WÐ-€Fà�Ñ¡Øˆˆw‰à
€Øˆˆv‰àÔ*Ñ*Ø$ˆˆ|Ñà�Ñ Ð 0Øˆˆv‰à�Ñ Ð!8Ü # KÓ 0ˆˆ}Ñà�Ñ Ô4JÑ!JØ +ˆˆ}Ñà�Ñ Ô0FÑ!FØ#ˆˆyÑà˜&Ð!€EØ€Lr2   c                óü   — | dk(  rAt        d„ ||fD «       «      r-||dœ}|�||d<   |�||d<   |�||d<   |d i fvr||d<   |�7||d<   n1| d	k(  rd
|i}|r||d<   |	d i fvr|	|d<   |
�|
|d<   nt        d| › �«      ‚| |i}|S )Nr°   c              3  ó$   K  — | ]  }|d u–— Œ
 y ­wr4   r}   )Ú.0Úvars     r0   Ú	<genexpr>z%_add_descriptorset.<locals>.<genexpr>  s   è ø€ ð 1Ù#3˜Cˆ�4ŒÑ#3ùs   ‚)r&  Ú
dimensionsrd   ri   r¬  r­  r¾   rÁ   rª  rÂ   rÀ   r6   zUnknown command: )Úallr+   )r,  r&  Únum_dimsrd   ri   r½   rR   r¾   rÂ   rÀ   r6   r¯  r“   s                r0   r³   r³     só   € ð Ð(Ò(¬Sñ 1Ø$(¨(Ñ#3ó1ô .ð Ø"ñ"
ˆð
 ÐØ%ˆF�8ÑàÐØ%ˆF�8Ñàˆ?Ø ˆF�6‰Nà˜˜r˜
Ñ"Ø#(ˆF�<Ñ àÐØ!ˆF�6ŠNà	Ð+Ò	+Ø˜�ˆáØ#-ˆF�<Ñ à˜t R˜jÑ(Ø$/ˆF�=Ñ!àÐØ 'ˆF�9Òô Ð,¨[¨MÐ:Ó;Ð;à˜&Ð!€EØ€Lr2   c                ó²   — t        |«      dkD  rdj                  |«      nd}d}i }d|d<   d|d<   d	| i}d
|d<   ||d<   ||d<   t        |«      }i }|||<   ||fS )Nr   rÚ   rÊ   Ú	AddEntityr­  ÚclassTr'   r&  zqueryable propertiesÚtyper&   )r*   ÚjoinÚ
_str2bytes)rb   rî   Úall_properties_strÚ	querytyper¯  rR   Ú	byte_datar“   s           r0   Ú_add_entity_with_blobrÁ  ?  sŠ   € ô 69¸Ó5HÈ1Ò5L˜Ÿ™ .Ô1ÐRTÐà€IØ€FØ"€Fˆ7�OØ€Fˆ6�Nà# _Ð5€EØ*€Eˆ&�MØ)€Eˆ)ÑØ €Fˆ<ÑäÐ-Ó.€Ià€EØ€Eˆ)ÑØ�)ÐÐr2   Úfindc                óN  — g }g }g d¢}|j                  «       |vr)t        dj                  dj                  |«      «      «      ‚|j                  «       dk(  r"t	        | d¬«      }|j                  |«       ||fS |j                  «       dk(  r5t        | |«      \  }}|j                  |«       |j                  |«       ||fS |j                  «       dk(  rOt	        | d¬	«      }|j                  |«       t        | |«      \  }}|j                  |«       |j                  |«       ||fS )
N)rÂ  r®   rÎ   z"[!] Invalid type. Choices are : {}rÚ   rÂ  T)rØ   r®   rÎ   )rÙ   )r�   r+   Úformatr¼  rÛ   rD   rÁ  )	rb   rí   rî   r½   r§   rô   Úchoicesr“   rÀ  s	            r0   rï   rï   U  s,  € ð  €KØ€Hâ'€GØ×ÑÓ 7Ñ*ÜÐ=×DÑDÀSÇXÁXÈgÓEVÓWÓXÐXà×ÑÓ˜vÒ%Ü% oÀTÔJˆØ×Ñ˜5Ô!ð" ˜Ð Ð ð 
×	Ñ	Ó	 Ò	&Ü0°À.ÓQÑˆˆyØ×Ñ˜5Ô!Ø�‰˜	Ô"ð ˜Ð Ð ð 
×	Ñ	Ó	 Ò	)ä% oÀÔEˆØ×Ñ˜5Ô!ô 1°À.ÓQÑˆˆyØ×Ñ˜5Ô!Ø�‰˜	Ô"à˜Ð Ð r2   c                ó4   — t        j                  | d¬«      }|S )Nra  r\  )r0  Ú
frombuffer)r'   r«   s     r0   r_  r_  x  s   € Ü
�-‰-˜ IÔ
.€CØ€Jr2   c                ó"   — | j                  «       S r4   )r<  )Úin_bytess    r0   rÜ   rÜ   }  s   € Ø�?‰?ÓÐr2   c           
     ó€   — t        t        | D ��cg c]  }|j                  «       D ]  }|‘Œ Œ c}}«      «      S c c}}w r4   )r·   rª  rÏ   )r§   Úqr”   s      r0   Ú_get_cmds_from_queryrÌ  �  s2   € Ü”¡Ô>¡˜1°Q·V±V¶X°’Q°X�Q Ò>Ó?Ó@Ð@ùÓ>s   �:c                ój   ‡— t        | «      }t        ‰t        «      xr t        ˆfd„|D «       «      }|S )Nc              3  ód   •K  — | ]'  }|‰d    v xr d‰d    |   v xr ‰d    |   d   d kD  –— Œ) y­w)r   r  Nr}   )r²  Úcmdr¬   s     €r0   r´  z(_check_valid_response.<locals>.<genexpr>‡  s\   øè ø€ ð 3ñ ˆCð 	ˆx˜‰{Ðò 	-Ø˜( 1™+ cÑ*Ð*ò	-à�Q‰K˜Ñ˜ZÑ(¨1Ñ,ó	-ñ ùs   ƒ-0)rÌ  r)   r·   Úany)r§   r¬   Úcmd_listÚ	valid_ress    `  r0   rã   rã   …  s<   ø€ Ü# KÓ0€HÜ˜8¤TÓ*ò ¬só 3ñ ó	3ó 0€Ið Ðr2   c                ó‚   — dd|gi}t        d||dgddœ¬«      }|g}| j                  |«      \  }}t        ||«      }||fS )Nr%   r¹   r;   rÊ   )r·   r  r/  )rÄ   r“   rã   )	rZ   r)  r%   rÀ   ÚfindDescriptorr§   Úresr8   rÒ  s	            r0   rÌ   rÌ   �  sb   € ð
 ˜$ ˜Ð$€KÜ$ØØØØ˜¨"Ñ-ô	€Nð "Ð"€KØ�\‰\˜+Ó&�F€Cˆä% k°3Ó7€IØ�nÐ$Ð$r2   c                ó\   — d}| �'t        j                  | d¬«      }|j                  «       }|S )zConvert embedding to bytes.Nra  r\  )r0  r`  Útobytes)ra   r'   r«   s      r0   rÐ   rÐ   £  s/   € ð €DØÐÜ�h‰h�y¨	Ô2ˆØ�{‰{‹}ˆØ€Kr2   c                ó�   — d}i }d|d<   |r||d<   i }d|d<   d|d<   d	g|d
<   ||d<   i }|rddg|d<   d| g|d<   ||d<   i }|||<   |S )NÚ
FindEntityr­  rº  ÚuniqueTr'   rÊ   r  r&   r·   r6   r¹   rº   r¸   r&  rÀ   r}   )rb   rØ   rÙ   r¿  r¯  r6   rÀ   r“   s           r0   rÛ   rÛ   ­  s”   € ð
 €IØ€FØ"€Fˆ7�OÙØ(ˆˆxÑà €GØ€GˆF�OØ€GˆGÑØ �k€GˆF�OØ€Fˆ9Ñà"$€KÙØ$(¨! 9ˆ�KÑ Ø Ð1€K�ÑØ'€Fˆ=Ñà€EØ€Eˆ)ÑØ€Lr2   c                ó,   — t         j                  | «      S r4   )r¡   Úencode)Úin_strs    r0   r½  r½  É  s   € Ü�:‰:�fÓÐr2   c                óx   — i }| j                  «       D ]$  \  }}t        |t        «      rŒ||t        |«      <   Œ& |S r4   )rB   r)   r·   r¡   )r?   Únew_metadataÚkeyr±   s       r0   rü   rü   Í  s<   € Ø#%€LØ—n‘nÖ&‰
ˆˆUÜ˜%¤Õ&Ø%*ˆLœ˜S›Ò"ð 'ð Ðr2   )
r,   r   r-   r   r.   r¡   r/   r¡   r„  r…  )r6   r   r„  rœ  )r6   r   r„  r‹  )Ú	localhostiÙ  )rX   r¡   rY   r‰  r„  r  )NNNNNNN)r,  r¡   r)  r¡   r¼   r’  r½   rƒ  rR   rš  r¾   rš  r¿   rƒ  rÀ   rš  r6   rš  r„  úDict[str, Dict[str, Any]])	NNNNNNFNN)r,  r¡   r&  r¡   r·  rƒ  rd   r’  ri   r’  r½   rƒ  rR   r™  r¾   r™  rÂ   r�  rÀ   r™  r6   r™  r„  úDict[str, Any])rb   r¡   rî   r
   r„  zTuple[Dict[str, Any], bytes])
rb   r¡   rí   r¡   rî   r
   r½   rƒ  r„  r–  )r'   r˜  r„  r   )rÉ  r˜  r„  r¡   )r§   r·   r„  r†  )r§   z
List[dict]r¬   r   r„  r�  )rZ   r  r)  r¡   r%   r¡   r„  zTuple[bool, Any])ra   r‘  r„  zUnion[bytes, None]r“  )rb   r¡   rØ   r”  rÙ   r”  r„  râ  )rÝ  r¡   r„  r˜  )r?   rã  r„  r   )EÚ
__future__r   r   ÚloggingrP  r¢   Úcopyr   Útypingr   r   r   r   r	   r
   r   r   r   r   r   r   r   Únumpyr0  Úlangchain_core._api.deprecationr   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.vectorstoresr   Ú&langchain_community.vectorstores.utilsr   rU   r�  r·   r   Ú__annotations__r‚  r   r£  r§  r¥  r¦  rÞ   rA   rC   Ú	getLoggerrŸ  rF   r1   r9   r5   r[   r`   rÄ   r³   rÁ  rï   r_  rÜ   rÌ  rã   rÌ   rÐ   rÛ   r½  rü   r}   r2   r0   Ú<module>rð     s  ðÞ "ã Û Û 	Û Ý ÷÷ ÷ õ ó  Ý 6Ý -Ý 0Ý 3å MáÛð ð
ñÐ ñ 6:¹(ÐCSÓ:TÓ5UÐ Ð2Ó UØ
ðñ€ñ $(©°Ó(9Ó#:Ð �=Ó :Ø%Ð ØÐ à€	à˜a‘-€Ú3Ð Ú<Ð Ø,¨d°BÐ7Ð ð 
ˆ×	Ñ	˜8Ó	$€óó$DóôDñ( �( GÐ@UÔVôP
ˆ;ó P
ó WðP
ðr*  ØØ ØØ!%Ø"&Ø"ð#Øð#àð#ð ð#ð 
ð	#ð
 ð#ð ð#ð ð#ð  ð#ð ð#ð ó#ðR #Ø Ø ØØ ØØØ"&Ø"ð4Øð4à
ð4ð ð4ð ð	4ð
 ð4ð 
ð4ð ð4ð ð4ð ð4ð  ð4ð ð4ð ó4ðnØðØ*.ðà!óð0 ØØð	 !Øð !àð !ð ð !ð 
ð	 !ð
 ó !óFó
óAóð%Øð%àð%ð 	ð%ð ó	%ó&ð %*Ø$ðØðà!ðð ðð ó	ó8ôr2   