
    ZiO                        d dl 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mZmZmZmZ d dlmZ d dlmZmZmZ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(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@mAZA d dlBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZL d dlMmNZN d dlOZO G d de          ZPdS )    )ListOptionalSequenceTupleUnioncast)UUID)	overrides)CreateCollectionConfiguration+create_collection_configuration_to_json_strUpdateCollectionConfiguration+update_collection_configuration_to_json_strCollectionMetadata)Schema)DEFAULT_DATABASEDEFAULT_TENANTSystemlogger)SysDB)NotFoundErrorUniqueConstraintErrorInternalError)from_proto_collectionfrom_proto_segmentto_proto_update_metadatato_proto_segmentto_proto_segment_scope)CreateCollectionRequestCreateDatabaseRequestCreateSegmentRequestCreateTenantRequestCountCollectionsRequestCountCollectionsResponseDeleteCollectionRequestDeleteDatabaseRequestDeleteSegmentRequestGetCollectionsRequestGetCollectionsResponseGetCollectionSizeRequestGetCollectionSizeResponse GetCollectionWithSegmentsRequest!GetCollectionWithSegmentsResponseGetDatabaseRequestGetSegmentsRequestGetTenantRequestListDatabasesRequestUpdateCollectionRequestUpdateSegmentRequest)	SysDBStub) RetryOnRpcErrorClientInterceptor)OtelInterceptor)OpenTelemetryGranularitytrace_method)

CollectionCollectionAndSegmentsDatabaseMetadataOptionalArgumentSegmentSegmentScopeTenantUnspecifiedUpdateMetadata)EmptyNc                   |    e Zd ZU dZeed<   ej        ed<   eed<   e	ed<   e	ed<   de
f fdZed3 fd            Zed3 fd            Zed3 fd            Zeefdededed	d
fd            Zeefdeded	efd            Zeefdeded	d
fd            Zed
d
efdee	         dee	         ded	ee         fd            Zeded	d
fd            Zeded	efd            Zeded	d
fd            Zededed	d
fd            Ze	 	 	 d4dedee         dee         dee         d	ee         f
d            Z e e!            fdeded e"ee#                  d	d
fd!            Z$ed
d
d"ee%fdeded#ee&         d$e'd%ee         d ee(         d&ee	         d'e)ded(ed	e*e+e)f         fd)            Z,eee%fdeded(ed	d
fd*            Z-ed
d
ee%d
d
fdee         dee         ded(edee	         dee	         d	ee+         fd+            Z.eed
fded(ee         d	e	fd,            Z/eded	e	fd-            Z0 e1d.e2j3                  ed/ed	e4fd0                        Z5e e!             e!             e!             e!            fdede"e         d&e"ee	                  d e"ee#                  d$e"ee6                  d	d
fd1            Z7d3d2Z8 xZ9S )5	GrpcSysDBzA gRPC implementation of the SysDB. In the distributed system, the SysDB is also
    called the 'Coordinator'. This implementation is used by Chroma frontend servers
    to call a remote SysDB (Coordinator) service._sys_db_stub_channel_coordinator_url_coordinator_port_request_timeout_secondssystemc                     |j                             d          | _        |j                             d          | _        |j                             d          | _        t                                          |          S )Nchroma_coordinator_hostchroma_server_grpc_port$chroma_sysdb_request_timeout_seconds)settingsrequirerG   rH   rI   super__init__)selfrJ   	__class__s     Y/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/db/impl/grpc/client.pyrR   zGrpcSysDB.__init__O   sl     & 7 78Q R R!'!8!89R!S!S(.(?(?2)
 )
% ww'''    returnNc                 <   t          j        | j         d| j         dg          | _        t                      t                      g}t          j        | j        g|R  | _        t          | j                  | _	        t                                                      S )N:)zgrpc.max_concurrent_streamsi  )options)grpcinsecure_channelrG   rH   rF   r5   r4   intercept_channelr3   rE   rQ   start)rS   interceptorsrT   s     rU   r^   zGrpcSysDB.startX   s    -$??t'=??:;
 
 
 ())+K+M+MN.t}L|LLL%dm44ww}}rV   c                 v    | j                                          t                                                      S N)rF   closerQ   stoprS   rT   s    rU   rc   zGrpcSysDB.stopc   s)    ww||~~rV   c                     | j                             t                                 t                                                      S ra   )rE   
ResetStaterB   rQ   reset_staterd   s    rU   rg   zGrpcSysDB.reset_stateh   s4    $$UWW---ww""$$$rV   idnametenantc                 l   	 t          |j        ||          }| j                            || j                  }d S # t
          j        $ rh}t          j        d| d| d| d|            |	                                t
          j
        j        k    rt                      t                      d }~ww xY w)Nrh   ri   rj   timeoutzFailed to create database name z and database id  for tenant  due to error: )r   hexrE   CreateDatabaserI   r[   RpcErrorr   infocode
StatusCodeALREADY_EXISTSr   r   )rS   rh   ri   rj   requestresponsees          rU   create_databasezGrpcSysDB.create_databasem   s    	"+rvDPPPG(77!> 8  HHH } 	" 	" 	"Ks$ssssY_sspqss   vvxx4?999+---//!	"s   8< B3A#B..B3c           	         	 t          ||          }| j                            || j                  }t	          t          |j        j                  |j        j        |j        j	                  S # t          j        $ re}t          j        d| d| d|            |                                t          j        j        k    rt#                      t%                      d }~ww xY w)Nri   rj   rm   rq   rl   zFailed to get database ro   rp   )r-   rE   GetDatabaserI   r:   r	   databaserh   ri   rj   r[   rs   r   rt   ru   rv   	NOT_FOUNDr   r   )rS   ri   rj   rx   ry   rz   s         rU   get_databasezGrpcSysDB.get_database~   s    	"(d6BBBG(44!> 5  H H-0111&+(/   
 } 	" 	" 	"KV$VVFVVSTVV   vvxx4?444#oo%//!	"s   A/A2 2C&A C!!C&c           	      L   	 t          ||          }| j                            || j                   d S # t          j        $ r^}t          j        d| d| d|            |                                t          j	        j
        k    rt                      t          d }~ww xY w)Nr}   rm   zFailed to delete database ro   rp   )r%   rE   DeleteDatabaserI   r[   rs   r   rt   ru   rv   r   r   r   )rS   ri   rj   rx   rz   s        rU   delete_databasezGrpcSysDB.delete_database   s    	 +fEEEG,,!> -      } 	  	  	 KYTYYvYYVWYY   vvxx4?444#oo%	 s   26 B#ABB#limitoffsetc                    	 t          |||          }| j                            || j                  }g }|j        D ]D}|                    t          t          |j                  |j	        |j
                             E|S # t          j        $ r-}t          j        d| d|            t                      d }~ww xY w)N)r   r   rj   rm   r~   rl   z$Failed to list databases for tenant rp   )r0   rE   ListDatabasesrI   	databasesappendr:   r	   rh   ri   rj   r[   rs   r   rt   r   )	rS   r   r   rj   rx   ry   resultsproto_databaserz   s	            rU   list_databaseszGrpcSysDB.list_databases   s    	"*vfUUUG(66!> 7  H ')G"*"4  N$5666+0-4      N} 	" 	" 	"KQvQQaQQ    //!		"s   BB C(B<<Cc                 R   	 t          |          }| j                            || j                  }d S # t          j        $ rb}t          j        d| d|            |                                t          j	        j
        k    rt                      t                      d }~ww xY w)Nri   rm   zFailed to create tenant rp   )r!   rE   CreateTenantrI   r[   rs   r   rt   ru   rv   rw   r   r   rS   ri   rx   ry   rz   s        rU   create_tenantzGrpcSysDB.create_tenant   s    		")t444G(55!> 6  HHH } 	" 	" 	"KK4KKKKLLLvvxx4?999+---//!		"s   15 B&AB!!B&c                    	 t          |          }| j                            || j                  }t	          |j        j                  S # t          j        $ rb}t          j
        d| d|            |                                t          j        j        k    rt                      t                      d }~ww xY w)Nr   rm   zFailed to get tenant rp   )r/   rE   	GetTenantrI   r?   rj   ri   r[   rs   r   rt   ru   rv   r   r   r   r   s        rU   
get_tenantzGrpcSysDB.get_tenant   s    	"&D111G(22!> 3  H _)    } 	" 	" 	"KHHHQHHIIIvvxx4?444#oo%//!		"s   A
A B>AB99B>segmentc                 p   	 t          |          }t          |          }| j                            || j                  }d S # t
          j        $ rb}t          j        d| d|            |	                                t
          j
        j        k    rt                      t                      d }~ww xY w)N)r   rm   zFailed to create segment 	, error: )r   r    rE   CreateSegmentrI   r[   rs   r   rt   ru   rv   rw   r   r   )rS   r   proto_segmentrx   ry   rz   s         rU   create_segmentzGrpcSysDB.create_segment   s    	",W55M*%  G (66!> 7  HHH } 	" 	" 	"KIGIIaIIJJJvvxx4?999+---//!		"s   A A B5AB00B5
collectionc           	      n   	 t          |j        |j                  }| j                            || j                  }d S # t
          j        $ re}t          j        d| d| d|            |	                                t
          j
        j        k    rt                      t                      d }~ww xY w)N)rh   r   rm   z!Failed to delete segment with id  for collection rp   )r&   rq   rE   DeleteSegmentrI   r[   rs   r   rt   ru   rv   r   r   r   )rS   r   rh   rx   ry   rz   s         rU   delete_segmentzGrpcSysDB.delete_segment   s    	"*6%>  G (66!> 7  HHH } 	" 	" 	"KfBff
ffcdff   vvxx4?444#oo%//!	"s   <A   B4A B//B4typescopec                    	 t          |r|j        nd ||rt          |          nd |j                  }| j                            || j                  }g }|j        D ]&}t          |          }	|                    |	           '|S # t          j
        $ r6}
t          j        d| d| d| d| d|
 
           t                      d }
~
ww xY w)N)rh   r   r   r   rm   zFailed to get segment id z, type z, scope r   rp   )r.   rq   r   rE   GetSegmentsrI   segmentsr   r   r[   rs   r   rt   r   )rS   r   rh   r   r   rx   ry   r   r   r   rz   s              rU   get_segmentszGrpcSysDB.get_segments   s   	"()266T7<F,U333$%>	  G (44!> 5  H &(G!)!2 ( (,];;w''''N} 	" 	" 	"KzBzztzzUzz\fzzwxzz    //!		"s   BB C1CCmetadatac           	         	 d }|t                      k    r"t          t          t          d f         |          }t	          |j        |j        |rt          |          nd           }||                    d           d|_        | j	        
                    || j                   d S # t          j        $ r0}t          j        d| d| d|            t!                      d }~ww xY w)N)rh   r   r   r   Trm   z!Failed to update segment with id r   r   )r@   r   r   rA   r2   rq   r   
ClearFieldreset_metadatarE   UpdateSegmentrI   r[   rs   r   rt   r   )rS   r   rh   r   write_metadatarx   rz   s          rU   update_segmentzGrpcSysDB.update_segment  s    	"!N;==((!%eND,@&A8!L!L*6%>!1.AAA  G "":...)-&++!> ,      } 	" 	" 	"K`B``
``]^``    //!		"s   B"B& &C%5+C  C%Fschemaconfigurationr   	dimensionget_or_creater   c                 ,   	 t          |j        |t          |t          t          |                    |rt          |          nd |||	|
d |D             	  	        }| j                            || j                  }t          |j
                  }||j        fS # t          j        $ rk}t          j        d| d| d|
 d|	 d| 
           |                                t          j        j        k    rt'                      t)                      d }~ww xY w)	Nc                 ,    g | ]}t          |          S  )r   .0r   s     rU   
<listcomp>z/GrpcSysDB.create_collection.<locals>.<listcomp>T  s!    LLL*733LLLrV   )	rh   ri   configuration_json_strr   r   r   rj   r   r   rm   zFailed to create collection id , name  for database  and tenant rp   )r   rq   r   r   r   r   rE   CreateCollectionrI   r   r   createdr[   rs   r   errorru   rv   rw   r   r   )rS   rh   ri   r   r   r   r   r   r   rj   r   rx   ry   r   rz   s                  rU   create_collectionzGrpcSysDB.create_collection:  sr   	"-6'R!4(:H#E#E( ( @HQ1(;;;T#+!LL8LLL  G (99!> :  H /x/BCCJx///} 	" 	" 	"L B"  B  BT  B  BQY  B  Bgm  B  B~  B  B   vvxx4?999+---//!	"s   BB D(A&DDc                    	 t          |j        ||          }| j                            || j                  }d S # t
          j        $ r}t          j        d| d| d| d|            t          t
          j
        |          }t          j        d|                                 dt
          j        j                    |                                t
          j        j        k    rt                      t                      d }~ww xY w)	N)rh   rj   r   rm   zFailed to delete collection id r   r   rp   zError code: z, NotFoundError: )r$   rq   rE   DeleteCollectionrI   r[   rs   r   r   r   Callru   rv   r   r   r   )rS   rh   rj   r   rx   ry   rz   s          rU   delete_collectionzGrpcSysDB.delete_collectionc  s"   	"-6!  G
 (99!> :  HHH } 
	" 
	" 
	"Lt"ttHttZ`ttqrtt   TY""ALUqvvxxUU$/:SUU   vvxx4?444#oo%//!
	"s   8< DB8DDc                    	 d }|t          |j        ||          }|'||t          d          t          |||||          }||t          ||||          }| j                            || j                  }g }	|j        D ]$}
|	                    t          |
                     %|	S # t          j
        $ r6}t          j        d| d| d| d	| d
| 
           t                      d }~ww xY w)N)rh   r   r   zmIf name is specified, tenant and database must also be specified in order to uniquely identify the collection)ri   rj   r   r   r   )rj   r   r   r   rm   z"Failed to get collections with id r   z	, tenant z, database rp   )r'   rq   
ValueErrorrE   GetCollectionsrI   collectionsr   r   r[   rs   r   r   r   )rS   rh   ri   rj   r   r   r   rx   ry   r   r   rz   s               rU   get_collectionszGrpcSysDB.get_collections  s~   '	"G~/v!  
 >h&6$ H   0!%!   zdl/!%!	   04/@/O/O!> 0P 0 0H )+G&2 B B
4Z@@AAAAN} 	" 	" 	"L~R~~~~v~~bj~~{|~~    //!		"s   B+B. .C3=1C..C3c                 R   	 ||dk    r1t          |          }| j                            |          }|j        S t          ||          }| j                            |          }|j        S # t          j        $ r*}t          j        d|            t                      d }~ww xY w)N )rj   )rj   r   z*Failed to count collections due to error: )	r"   rE   CountCollectionscountr[   rs   r   r   r   )rS   rj   r   rx   ry   rz   s         rU   count_collectionszGrpcSysDB.count_collections  s    	"8r>>1@@@595F5W5W6 6  ~%1!%   6:5F5W5W6 6  ~%} 	" 	" 	"LIaIIJJJ//!	"s   8A- 1A- -B&<%B!!B&c                     	 t          |j                  }| j                            |          }|j        S # t
          j        $ r-}t          j        d| d|            t                      d }~ww xY w)Nrh   Failed to get collection z size due to error: )
r)   rq   rE   GetCollectionSizetotal_records_post_compactionr[   rs   r   r   r   )rS   rh   rx   ry   rz   s        rU   get_collection_sizezGrpcSysDB.get_collection_size  s    	"."&999G262C2U2U3 3H 99} 	" 	" 	"LPRPPQPPQQQ//!	"s   58 A4(A//A4z"SysDB.get_collection_with_segmentscollection_idc                    	 t          |j                  }| j                            |          }t	          t          |j                  d |j        D                       S # t          j	        $ rb}|
                                t          j        j        k    rt                      t          j        d| d|            t!                      d }~ww xY w)Nr   c                 ,    g | ]}t          |          S r   )r   r   s     rU   r   z:GrpcSysDB.get_collection_with_segments.<locals>.<listcomp>  s!    WWW',W55WWWrV   )r   r   r   z  and its segments due to error: )r+   rq   rE   GetCollectionWithSegmentsr9   r   r   r   r[   rs   ru   rv   r   r   r   r   r   )rS   r   rx   ry   rz   s        rU   get_collection_with_segmentsz&GrpcSysDB.get_collection_with_segments  s    	"6-:KLLLG!;;GDD  )01DEEWWXEVWWW    } 	" 	" 	"vvxx4?444#oo%L^M^^[\^^    //!	"s   A A# #C2ACCc           	         	 d }|t                      k    rt          t          |          }d }|t                      k    r"t          t          t          d f         |          }d }|t                      k    r"t          t          t
          d f         |          }d }	|t                      k    r"t          t          t          d f         |          }	t          |j        |||rt          |          nd |	rt          |	          nd           }
||
                    d           d|
_        | j                            |
| j                  }d S # t           j        $ r}t          t           j        |          }t'          j        d| d| d|            |                                t           j        j        k    rt1                      |                                t           j        j        k    rt5                      t7                      d }~ww xY w)N)rh   ri   r   r   r   r   Trm   zFailed to update collection id r   rp   )r@   r   strr   intrA   r   r1   rq   r   r   r   r   rE   UpdateCollectionrI   r[   rs   r   r   r   ru   rv   r   r   rw   r   r   )rS   rh   ri   r   r   r   
write_namewrite_dimensionr   write_configurationrx   ry   rz   s                rU   update_collectionzGrpcSysDB.update_collection  s   0	"J{}}$$!#t__
"OKMM))"&uS$Y'7"C"C!N;==((!%eND,@&A8!L!L"&--&*7=>' '# .6)!1.AAA '('R'( ( (   G "":...)-&(99!> :  HHH } 		" 		" 		"TY""ALU"UUTUURSUU   vvxx4?444#oo%vvxx4?999+---//!		"s   EE	 	HB/HHc                 V    | j                             t                      d           d S )NT)wait_for_ready)rE   rf   rB   )rS   s    rU   reset_and_wait_for_readyz"GrpcSysDB.reset_and_wait_for_ready-  s(    $$UWWT$BBBBBrV   )rW   N)NNN):__name__
__module____qualname____doc__r3   __annotations__r[   Channelr   r   r   rR   r
   r^   rc   rg   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;   boolr   r8   r   r   r   r   r   r7   r6   	OPERATIONr9   r   r   r   r   __classcell__)rT   s   @rU   rD   rD   D   s        5 5 l!!!!(v ( ( ( ( ( (      Y      Y % % % % % Y% 1?" ""!"+."	" " " Y"  4B " " "c "x " " " Y"& 7E    C    $       Y    $ $$	" "}" " 	"
 
(	" " " Y"6 
"# 
"$ 
" 
" 
" Y
" "s "v " " " Y" "g "$ " " " Y" " "4 "D " " " Y""  ""(," "" TN" sm	"
 %" 
'	" " " Y"8 
 @K{}}	" "" " #8N#;<	"
 
" " " Y"@  (,#'#$(&" &"&" &"  	&"
 5&" 7#&" 8$&" C=&" &" &" &" 
z4	 &" &" &" Y&"P  %(	" "" " 	"
 
" " " Y"6  ""$(# $0" 0"TN0" sm0" 	0"
 0" }0" 0" 
*	0" 0" 0" Y0"d  %"&" "" 3-" 
	" " " Y"2 	"d 	"s 	" 	" 	" Y	" \,.F.P  "!"	" " " Y "(  '2kmm5@[]]?J{}} KMM:" :":" s#:" $HSM2	:"
 #8N#;<:" (23
:" 
:" :" :" Y:"xC C C C C C C CrV   rD   )Qtypingr   r   r   r   r   r   uuidr	   r
   %chromadb.api.collection_configurationr   r   r   r   r   chromadb.api.typesr   chromadb.configr   r   r   r   chromadb.db.systemr   chromadb.errorsr   r   r   chromadb.proto.convertr   r   r   r   r   chromadb.proto.coordinator_pb2r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   #chromadb.proto.coordinator_pb2_grpcr3   chromadb.proto.utilsr4   %chromadb.telemetry.opentelemetry.grpcr5    chromadb.telemetry.opentelemetryr6   r7   chromadb.typesr8   r9   r:   r;   r<   r=   r>   r?   r@   rA   google.protobuf.empty_pb2rB   r[   rD   r   rV   rU   <module>r      sp   ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?                          & % % % % % L L L L L L L L L L L L $ $ $ $ $ $ O O O O O O O O O O                                                          . : 9 9 9 9 9 A A A A A A A A A A A A                               , + + + + + jC jC jC jC jC jC jC jC jC jCrV   