§
    ˜Štj)  ã                   ó”   — d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	 dZ
dedeeeef         fd	„Zd
edededefd„Zdededdfd„ZdS )é    N)ÚTuple)ÚUUID)ÚSqlDB)ÚSegmentManagerÚVectorReaderz?persistent:\/\/(?P<tenant>.+)\/(?P<namespace>.+)\/(?P<topic>.+)Ú
topic_nameÚreturnc                 óÚ   — t          j        t          | ¦  «        }|st          d| › �¦  «        ‚|                     d¦  «        |                     d¦  «        |                     d¦  «        fS )z>Parse the topic name into the tenant, namespace and topic namezInvalid topic name: ÚtenantÚ	namespaceÚtopic)ÚreÚmatchÚtopic_regexÚ
ValueErrorÚgroup)r   r   s     úX/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/chromadb/ingest/impl/utils.pyÚparse_topic_namer      sc   € åŒH•[ *Ñ-Ô-€EØð >ÝÐ<°
Ð<Ð<Ñ=Ô=Ð=Ø�;Š;�xÑ Ô  %§+¢+¨kÑ":Ô":¸E¿KºKÈÑ<PÔ<PÐPÐPó    r   r   Úcollection_idc                 ó2   — d| › d|› dt          |¦  «        › �S )Nzpersistent://ú/)Ústr)r   r   r   s      r   Úcreate_topic_namer      s(   € ØD˜6ÐDÐD IÐDÐDµ°MÑ0BÔ0BÐDÐDÐDr   ÚdbÚsegment_managerc                 óH  — |                       ¦   «         5 }|                     d¦  «         d„ |                     ¦   «         D ¦   «         }ddd¦  «         n# 1 swxY w Y   t          |¦  «        dk    rdS |D ]*}|                     t          |¦  «        t          ¦  «         Œ+dS )uM  
    Trigger the migration of vector segments' max_seq_id from the pickled metadata file to SQLite.

    Vector segments migrate this field automatically on initâ€”so this should be used when we know segments are likely unmigrated and unloaded.

    This is a no-op if all vector segments have already migrated their max_seq_id.
    zÙ
            SELECT collection
            FROM "segments"
            WHERE "id" NOT IN (SELECT "segment_id" FROM "max_seq_id") AND
                  "type" = 'urn:chroma:segment/vector/hnsw-local-persisted'
        c                 ó   — g | ]
}|d          ‘ŒS )r   © )Ú.0Úrows     r   ú
<listcomp>z@trigger_vector_segments_max_seq_id_migration.<locals>.<listcomp>*   s   € Ð2TÐ2TÐ2T¸c°3°q´6Ð2TÐ2TÐ2Tr   Nr   )ÚtxÚexecuteÚfetchallÚlenÚget_segmentr   r   )r   r   ÚcurÚ'collection_ids_with_unmigrated_segmentsr   s        r   Ú,trigger_vector_segments_max_seq_id_migrationr*      s  € ð 
�Š‰Œð 	U�CØ�Šðñ	
ô 	
ð 	
ð 3UÐ2TÀSÇ\Â\Á^Ä^Ð2TÑ2TÔ2TÐ/ð	Uð 	Uð 	Uñ 	Uô 	Uð 	Uð 	Uð 	Uð 	Uð 	Uð 	Uøøøð 	Uð 	Uð 	Uð 	Uõ Ð2Ñ3Ô3°qÒ8Ð8Øˆà@ð Gð Gˆà×#Ò#¥D¨Ñ$7Ô$7½ÑFÔFÐFÐFðGð Gs   •4AÁAÁA)r   Útypingr   Úuuidr   Úchromadb.db.baser   Úchromadb.segmentr   r   r   r   r   r   r*   r   r   r   ú<module>r/      s  ðØ 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à "Ð "Ð "Ð "Ð "Ð "Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9àP€ðQ ð Q¨¨s°C¸¨}Ô)=ð Qð Qð Qð QðE˜cð E¨cð EÀ$ð EÈ3ð Eð Eð Eð EðGØðGØ .ðGà	ðGð Gð Gð Gð Gð Gr   