§
    ˜Štja)  ã                   óÆ  — d dl mZ d dlmZmZmZmZmZmZ d dl	Z	d dl
mZmZmZ d dlZd dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZ d d
lmZmZmZm Z m!Z! d dl"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z)m*Z* d dl+Z+d dl,m-Z- d dl.m/Z/  e+j0        ¦   «         dk    rd dl1Z1n e+j0        ¦   «         dk    rd dl2Z2ej3        dej4        dej5        diZ6 G d„ de¦  «        Z7dede dedefd„Z8dS )é    )ÚLock)ÚSegmentImplementationÚSegmentManagerÚMetadataReaderÚSegmentTypeÚVectorReaderÚSN)ÚSegmentLRUCacheÚ
BasicCacheÚSegmentCache)ÚSystemÚ	get_class)ÚSysDB)Úoverride)ÚPersistentLocalHnswSegment)ÚOpenTelemetryClientÚOpenTelemetryGranularityÚtrace_method)Ú
CollectionÚ	OperationÚSegmentÚSegmentScopeÚMetadata)ÚDictÚTypeÚSequenceÚOptionalÚcast)ÚUUIDÚuuid4)ÚLRUCache)Úget_directory_sizeÚWindowsz;chromadb.segment.impl.metadata.sqlite.SqliteMetadataSegmentz8chromadb.segment.impl.vector.local_hnsw.LocalHnswSegmentzMchromadb.segment.impl.vector.local_persistent_hnsw.PersistentLocalHnswSegmentc                   ó  ‡ — e Zd ZU eed<   eed<   eed<   eee	f         ed<   e
eef         ed<   ej        Zeed<   eed<   eed<   d	efˆ fd
„Z edej        ¦  «        deddfd„¦   «         Zed%ˆ fd„¦   «         Zed%ˆ fd„¦   «         Zed%ˆ fd„¦   «         Z edej        ¦  «        ededee         fd„¦   «         ¦   «         Z edej        ¦  «        ededee         fd„¦   «         ¦   «         Zdedefd„Z edej        ¦  «        dede defd„¦   «         Z! edej        ¦  «        dede"e#         de#fd„¦   «         Z$ ed ej        ¦  «        eded!e%ddfd"„¦   «         ¦   «         Z&dede"e	         fd#„Z'dede	fd$„Z(ˆ xZ)S )&ÚLocalSegmentManagerÚ_sysdbÚ_systemÚ_opentelemetry_clientÚ
_instancesÚ#_vector_instances_file_handle_cacheÚ_vector_segment_typeÚ_lockÚ_max_file_handlesÚsystemc                 ó  •‡ — t          ¦   «                              |¦  «         ‰                      t          ¦  «        ‰ _        |‰ _        |                     t          ¦  «        ‰ _        t          j	        t          ¦  «        ‰ _        i ‰ _        t          j        t          ¦   «         i‰ _        |j        j        dk    rE|j        j        dk    r5t)          |j        j        ˆ fd„ˆ fd„¬¦  «        ‰ j        t          j        <   n t          ¦   «         ‰ j        t          j        <   t-          ¦   «         ‰ _        ‰ j        j                             d¦  «        r®t0          j        ‰ _        t7          j        ¦   «         dk    r*t;          j        t:          j        ¦  «        d         ‰ _         n(tB          j"        j#         $                    ¦   «         ‰ _         ‰ j         tK          j&        ¦   «         z  }tO          |d„ ¬	¦  «        ‰ _(        d S d S )
NÚLRUr   c                 ó.   •— ‰                      |¦  «        S ©N)Úcallback_cache_evict)ÚkÚvÚselfs     €úa/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/chromadb/segment/impl/manager/local.pyú<lambda>z.LocalSegmentManager.__init__.<locals>.<lambda>N   s   ø€  d×&?Ò&?ÀÑ&BÔ&B€ ó    c                 ó.   •— ‰                      | ¦  «        S r2   )Ú_get_segment_disk_size)r4   r6   s    €r7   r8   z.LocalSegmentManager.__init__.<locals>.<lambda>O   s   ø€  D×$?Ò$?ÀÑ$BÔ$B€ r9   )ÚcapacityÚcallbackÚ	size_funcÚis_persistentr#   c                 ó*   — |                      ¦   «         S r2   )Úclose_persistent_index)Ú_r5   s     r7   r8   z.LocalSegmentManager.__init__.<locals>.<lambda>d   s   € °Q×5MÒ5MÑ5OÔ5O€ r9   )r=   ))ÚsuperÚ__init__Úrequirer   r&   r'   r   r(   ÚloggingÚ	getLoggerÚ__name__Úloggerr)   r   ÚMETADATAr   Úsegment_cacheÚsettingsÚchroma_segment_cache_policyÚchroma_memory_limit_bytesr
   ÚVECTORr   r,   r   ÚHNSW_LOCAL_PERSISTEDr+   Úplatformr.   ÚresourceÚ	getrlimitÚRLIMIT_NOFILEr-   ÚctypesÚwindllÚmsvcrtÚ_getmaxstdior   Úget_file_handle_countr!   r*   )r6   r.   Úsegment_limitÚ	__class__s   `  €r7   rD   zLocalSegmentManager.__init__>   sÄ  øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø—l’l¥5Ñ)Ô)ˆŒØˆŒØ%+§^¢^Õ4GÑ%HÔ%HˆÔ"ÝÔ'­Ñ1Ô1ˆŒØˆŒåÔ!¥:¡<¤<ð@
ˆÔð ŒOÔ7¸5Ò@Ð@Ø”Ô9¸AÒ=Ð=å6EØœÔBØBÐBÐBÐBØBÐBÐBÐBð7ñ 7ô 7ˆDÔ�|Ô2Ñ3Ð3õ 7A±l´lˆDÔ�|Ô2Ñ3å‘V”VˆŒ
ð Œ<Ô ×(Ò(¨Ñ9Ô9ð 	Ý(3Ô(HˆDÔ%ÝŒÑ Ô  IÒ-Ð-Ý)1Ô);½HÔ<RÑ)SÔ)SÐTUÔ)V�Ô&Ð&å)/¬Ô)=×)JÒ)JÑ)LÔ)L�Ô&àÔ&å-ÔCÑEÔEñFð õ
 8@ØÐ(OÐ(Oð8ñ 8ô 8ˆDÔ4Ð4Ð4ð	ð 	r9   z(LocalSegmentManager.callback_cache_evictÚsegmentÚreturnNc                 ó¾   — |d         }| j                              d|› �¦  «         |                      |¦  «        }|                     ¦   «          | j        |d         = d S )NÚ
collectionzLRU cache evict collection Úid)rI   ÚinfoÚ	_instanceÚstopr)   )r6   r\   Úcollection_idÚinstances       r7   r3   z(LocalSegmentManager.callback_cache_evictg   s_   € ð
   Ô-ˆØŒ×ÒÐF°}ÐFÐFÑGÔGÐGØ—>’> 'Ñ*Ô*ˆØ�Š‰ŒˆØŒO˜G DœMÐ*Ð*Ð*r9   c                 ó¨   •— | j                              ¦   «         D ]}|                     ¦   «          Œt          ¦   «                              ¦   «          d S r2   )r)   ÚvaluesÚstartrC   ©r6   re   r[   s     €r7   rh   zLocalSegmentManager.startr   sH   ø€ àœ×.Ò.Ñ0Ô0ð 	ð 	ˆHØ�NŠNÑÔÐÐÝ‰Œ�Š‰Œˆˆˆr9   c                 ó¨   •— | j                              ¦   «         D ]}|                     ¦   «          Œt          ¦   «                              ¦   «          d S r2   )r)   rg   rc   rC   ri   s     €r7   rc   zLocalSegmentManager.stopx   sD   ø€ àœ×.Ò.Ñ0Ô0ð 	ð 	ˆHØ�MŠM‰OŒOˆOˆOÝ‰Œ�Š‰Œˆˆˆr9   c                 ó0  •— | j                              ¦   «         D ]*}|                     ¦   «          |                     ¦   «          Œ+i | _         | j        t
          j                                      ¦   «          t          ¦   «                              ¦   «          d S r2   )	r)   rg   rc   Úreset_staterK   r   rO   ÚresetrC   ri   s     €r7   rl   zLocalSegmentManager.reset_state~   s‚   ø€ àœ×.Ò.Ñ0Ô0ð 	#ð 	#ˆHØ�MŠM‰OŒOˆOØ× Ò Ñ"Ô"Ð"Ð"ØˆŒØÔ�<Ô.Ô/×5Ò5Ñ7Ô7Ð7Ý‰Œ×ÒÑÔÐÐÐr9   z7LocalSegmentManager.prepare_segments_for_new_collectionr_   c                 ó”   — t          | j        t          j        |¦  «        }t          t          j        t          j        |¦  «        }||gS r2   )Ú_segmentr+   r   rO   r   ÚSQLITErJ   )r6   r_   Úvector_segmentÚmetadata_segments       r7   Ú#prepare_segments_for_new_collectionz7LocalSegmentManager.prepare_segments_for_new_collection‡   sM   € õ "ØÔ%¥|Ô':¸Jñ
ô 
ˆõ $ÝÔ¥Ô 5°zñ
ô 
Ðð Ð 0Ð1Ð1r9   z#LocalSegmentManager.delete_segmentsrd   c                 óº  — | j                              |¬¦  «        }|D �]1}|d         | j        v r£|d         t          j        j        k    r0|                      |t          ¦  «        }|                     ¦   «          nJ|d         t          j	        j        k    r/|                      |t          ¦  «        }|                     ¦   «          | j        |d         = |d         t          j        u r*| j        t          j                                      |¦  «         |d         t          j        u r*| j        t          j                                      |¦  «         �Œ3d„ |D ¦   «         S )N)r_   r`   ÚtypeÚscopec                 ó   — g | ]
}|d          ‘ŒS )r`   © )Ú.0Úss     r7   ú
<listcomp>z7LocalSegmentManager.delete_segments.<locals>.<listcomp>«   s   € Ð*Ð*Ð*˜A��$”Ð*Ð*Ð*r9   )r&   Úget_segmentsr)   r   rP   ÚvalueÚget_segmentr   Údeleterp   r   r   rO   rK   ÚpoprJ   )r6   rd   Úsegmentsr\   re   s        r7   Údelete_segmentsz#LocalSegmentManager.delete_segments—   s<  € ð ”;×+Ò+°}Ð+ÑEÔEˆØð 	Mñ 	MˆGØ�tŒ} ¤Ð/Ð/Ø˜6”?¥kÔ&FÔ&LÒLÐLØ#×/Ò/°½|ÑLÔL�HØ—O’OÑ%Ô%Ð%Ð%Ø˜V”_­Ô(:Ô(@Ò@Ð@Ø#×/Ò/°½~ÑNÔN�HØ—O’OÑ%Ô%Ð%Ø”O G¨D¤MÐ2Ø�wÔ¥<Ô#6Ð6Ð6ØÔ"¥<Ô#6Ô7×;Ò;¸MÑJÔJÐJØ�wÔ¥<Ô#8Ð8Ð8ØÔ"¥<Ô#8Ô9×=Ò=¸mÑLÔLÐLùØ*Ð* Ð*Ñ*Ô*Ð*r9   c           	      óB  — | j                              |t          j        ¬¦  «        }t	          |¦  «        dk    rdS t          t          j                             | j	        j
                             d¦  «        t          |d         d         ¦  «        ¦  «        ¦  «        }|S )N©r_   rv   r   Úpersist_directoryr`   )r&   r|   r   rO   Úlenr"   ÚosÚpathÚjoinr'   rL   rE   Ústr)r6   rd   r�   Úsizes       r7   r;   z*LocalSegmentManager._get_segment_disk_size­   s’   € Ø”;×+Ò+Ø$­LÔ,?ð ,ñ 
ô 
ˆõ ˆx‰=Œ=˜AÒÐØ�1å!ÝŒG�LŠLØ”Ô%×-Ò-Ð.AÑBÔBÝ�H˜Q”K Ô%Ñ&Ô&ñô ñ
ô 
ˆð ˆr9   z&LocalSegmentManager._get_segment_sysdbrv   c                 óà   ‡— | j                              ||¬¦  «        }t          d„ t                               ¦   «         D ¦   «         ¦  «        Št          t          ˆfd„|¦  «        ¦  «        }|S )Nr„   c                 ó   — g | ]	}|j         ‘Œ
S rx   )r}   )ry   r4   s     r7   r{   z:LocalSegmentManager._get_segment_sysdb.<locals>.<listcomp>Â   s   € ÐFÐFÐF q˜1œ7ÐFÐFÐFr9   c                 ó   •— | d         ‰v S ©Nru   rx   )rz   Úknown_typess    €r7   r8   z8LocalSegmentManager._get_segment_sysdb.<locals>.<lambda>Ä   s   ø€ ¨¨&¬	°[Ð(@€ r9   )r&   r|   ÚsetÚSEGMENT_TYPE_IMPLSÚkeysÚnextÚfilter)r6   rd   rv   r�   r\   r�   s        @r7   Ú_get_segment_sysdbz&LocalSegmentManager._get_segment_sysdb¼   sn   ø€ ð
 ”;×+Ò+°}ÈEÐ+ÑRÔRˆÝÐFÐFÕ,>×,CÒ,CÑ,EÔ,EÐFÑFÔFÑGÔGˆå•vÐ@Ð@Ð@Ð@À(ÑKÔKÑLÔLˆØˆr9   zLocalSegmentManager.get_segmentru   c                 óÊ  — |t           k    rt          j        }n*|t          k    rt          j        }nt          d|› �¦  «        ‚| j        |                              |¦  «        }|€7|                      ||¦  «        }| j        |          	                    ||¦  «         | j
        5  |                      |¦  «        }d d d ¦  «         n# 1 swxY w Y   t          t          |¦  «        S )NzInvalid segment type: )r   r   rJ   r   rO   Ú
ValueErrorrK   Úgetr–   r‘   r,   rb   r   r	   )r6   rd   ru   rv   r\   re   s         r7   r~   zLocalSegmentManager.get_segmentÇ   s  € ð
 •>Ò!Ð!Ý Ô)ˆEˆEØ•\Ò!Ð!Ý Ô'ˆEˆEåÐ<°dÐ<Ð<Ñ=Ô=Ð=àÔ$ UÔ+×/Ò/°Ñ>Ô>ˆØˆ?Ø×-Ò-¨m¸UÑCÔCˆGØÔ˜uÔ%×)Ò)¨-¸ÑAÔAÐAð ŒZð 	/ð 	/Ø—~’~ gÑ.Ô.ˆHð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/å•A�xÑ Ô Ð s   Â#CÃC	ÃC	z'LocalSegmentManager.hint_use_collectionÚ	hint_typec                 ó0  — t           t          fD ]†}|                      ||¦  «        }|t          k    rc| j        j                             d¦  «        rDt          t          |¦  «        }|                     ¦   «          | j	         
                    ||¦  «         Œ‡d S )Nr?   )r   r   r~   r'   rL   rE   r   r   Úopen_persistent_indexr*   r‘   )r6   rd   rš   ru   re   s        r7   Úhint_use_collectionz'LocalSegmentManager.hint_use_collectionÞ   sœ   € õ $¥\Ð2ð 	Vð 	VˆDà×'Ò'¨°tÑ<Ô<ˆHð •|Ò#Ð#¨¬Ô(=×(EÒ(EÀoÑ(VÔ(VÐ#ÝÕ :¸HÑEÔE�Ø×.Ò.Ñ0Ô0Ð0ØÔ8×<Ò<¸]ÈHÑUÔUÐUøð	Vð 	Vr9   c                 óp   — t           t          |d         ¦  «                 }t          |t          ¦  «        }|S r�   )r’   r   r   r   )r6   r\   Ú	classnameÚclss       r7   Ú_clszLocalSegmentManager._clsð   s-   € Ý&¥{°7¸6´?Ñ'CÔ'CÔDˆ	Ý˜	Õ#8Ñ9Ô9ˆØˆ
r9   c                 óÚ   — |d         | j         vrJ|                      |¦  «        } || j        |¦  «        }|                     ¦   «          || j         |d         <   | j         |d                  S )Nr`   )r)   r¡   r'   rh   )r6   r\   r    re   s       r7   rb   zLocalSegmentManager._instanceõ   sh   € Ø�4Œ= ¤Ð/Ð/Ø—)’)˜GÑ$Ô$ˆCØ�s˜4œ<¨Ñ1Ô1ˆHØ�NŠNÑÔÐØ-5ˆDŒO˜G DœMÑ*ØŒ˜w tœ}Ô-Ð-r9   )r]   N)*rH   Ú
__module__Ú__qualname__r   Ú__annotations__r   r   r   r   r   r!   r   r   ÚHNSW_LOCAL_MEMORYr+   r   ÚintrD   r   r   ÚOPERATION_AND_SEGMENTr   r3   r   rh   rc   rl   r   r   rs   r‚   r;   r   r–   r   r	   r~   r   r�   r¡   rb   Ú__classcell__)r[   s   @r7   r%   r%   2   s¦  ø€ € € € € € Ø€M€M�MØ€O€O�OØ.Ð.Ð.Ñ.Ø�TÐ0Ð0Ô1Ð1Ð1Ñ1Ø)1ØÐ(Ð(ô*ð ð ñ ð )4Ô(EÐ˜+ÐEÐEÑEØ€K€K�KØÐÐÑð'˜vð 'ð 'ð 'ð 'ð 'ð 'ðR €\Ø2Ø Ô6ñô ð+¨Gð +¸ð +ð +ð +ñ	ô ð+ð ðð ð ð ð ñ „Xðð
 ðð ð ð ð ñ „Xðð
 ðð ð ð ð ñ „Xðð €\ØAØ Ô6ñô ð ð	2Ø$ð	2à	�'Ô	ð	2ð 	2ð 	2ñ „Xñ	ô ð
	2ð €\Ø-Ø Ô6ñô ð ð+¨Tð +°h¸t´nð +ð +ð +ñ „Xñ	ô ð
+ð"°Dð ¸Sð ð ð ð ð €\Ø0Ø Ô6ñô ð°ð ¸\ð Ègð ð ð ñ	ô ðð €\Ø)Ø Ô6ñô ð!¨ð !°T¸!´Wð !Àð !ð !ð !ñ	ô ð!ð& €\Ø1Ø Ô6ñô ð ðV°ð VÀ)ð VÐPTð Vð Vð Vñ „Xñ	ô ð
Vð˜Gð ¨Ð-BÔ(Cð ð ð ð ð
. ð .Ð-Bð .ð .ð .ð .ð .ð .ð .ð .r9   r%   ru   rv   r_   r]   c                 óØ   — t          t          |          t          ¦  «        }|j        }d}|r|                     |¦  «        }t          t          ¦   «         | j        ||j        |i ¬¦  «        S )zRCreate a metadata dict, propagating metadata correctly for the given segment type.N)r`   ru   rv   r_   ÚmetadataÚ
file_paths)	r   r’   r   r«   Úpropagate_collection_metadatar   r    r}   r`   )ru   rv   r_   r    Úcollection_metadatar«   s         r7   ro   ro   þ   st   € å
Õ& tÔ,Õ.CÑ
DÔ
D€CØ$Ô-ÐØ#'€HØð JØ×4Ò4Ð5HÑIÔIˆåÝ‰7Œ7ØŒZØØ”=ØØðñ ô ð r9   )9Ú	threadingr   Úchromadb.segmentr   r   r   r   r   r	   rF   Ú)chromadb.segment.impl.manager.cache.cacher
   r   r   r‡   Úchromadb.configr   r   Úchromadb.db.systemr   Ú	overridesr   Ú2chromadb.segment.impl.vector.local_persistent_hnswr   Ú chromadb.telemetry.opentelemetryr   r   r   Úchromadb.typesr   r   r   r   r   Útypingr   r   r   r   r   Úuuidr   r    rQ   Úchromadb.utils.lru_cacher!   Úchromadb.utils.directoryr"   r.   rR   rU   rp   r¦   rP   r’   r%   ro   rx   r9   r7   ú<module>r¼      sª  ðØ Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €€€ðð ð ð ð ð ð ð ð ð ð
 
€	€	€	à -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
 RÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø Ð Ð Ð Ð Ð Ð Ð Ø €€€à -Ð -Ð -Ð -Ð -Ð -Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7ð €8„?ÑÔ˜	Ò!Ð!Ø€O€O€O€OØ€X„_ÑÔ˜)Ò#Ð#Ø€M€M€Mð ÔÐUØÔ!Ð#]ØÔ$Ð&uðÐ ðI.ð I.ð I.ð I.ð I.˜.ñ I.ô I.ð I.ðX�;ð  |ð Àð ÐPWð ð ð ð ð ð r9   