
    eiO                        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      ZPy)    )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                   L    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.e2jf                        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                   j                  d      | _        |j                   j                  d      | _        |j                   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     f/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/chromadb/db/impl/grpc/client.pyrR   zGrpcSysDB.__init__O   s_     & 7 78Q R!'!8!89R!S(.(?(?2)
% w''    returnNc                 2   t        j                  | j                   d| j                   dg      | _        t               t               g}t        j                  | j                  g| | _        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    --$$%Qt'='=&>?:;
 ()+K+MN..t}}L|L%dmm4w}rV   c                 T    | j                   j                          t        |          S N)rF   closerQ   stoprS   rT   s    rU   rc   zGrpcSysDB.stopc   s    w|~rV   c                 f    | j                   j                  t                      t        |          S ra   )rE   
ResetStaterB   rQ   reset_staterd   s    rU   rg   zGrpcSysDB.reset_stateh   s'    $$UW-w"$$rV   idnametenantc                 z   	 t        |j                  ||      }| j                  j                  || j                        }y # t
        j                  $ re}t        j                  d| d| d| d|        |j                         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    	"+rvvDPG((77!>!> 8 H }} 	"KK1$7HLY_X``opqors vvx4??999+--/!	"s   ?A B:A B55B:c           	         	 t        ||      }| j                  j                  || j                        }t	        t        |j                  j                        |j                  j                  |j                  j                        S # t        j                  $ rb}t        j                  d| d| d|        |j                         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BG((44!>!> 5 H H--001&&++((// 
 }} 	"KK)$|F8?STRUV vvx4??444#o%/!	"s   BB
 
C?AC::C?c           	      V   	 t        ||      }| j                  j                  || j                         y # t        j
                  $ r^}t        j                  d| d| d|        |j                         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EG,,!>!> -  }} 	 KK,TF,vhoVWUXY vvx4??444#o%	 s   47 B(
AB##B(limitoffsetc                    	 t        |||      }| j                  j                  || j                        }g }|j                  D ]G  }|j                  t        t        |j                        |j                  |j                               I |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UG((66!>!> 7 H ')G"*"4"4 N$5$56+00-44 N}} 	"KK6vhoaSQ  /!		"s   BB C$%C		Cc                 V   	 t        |      }| j                  j                  || j                        }y # t        j
                  $ r_}t        j                  d| d|        |j                         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4G((55!>!> 6 H }} 	"KK24&sKLvvx4??999+--/!		"s   36 B(	AB##B(c                    	 t        |      }| j                  j                  || j                        }t	        |j
                  j                        S # t        j                  $ r_}t        j                  d| d|        |j                         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1G((22!>!> 3 H __))  }} 	"KK/v_QCHIvvx4??444#o%/!		"s   AA C(ACCsegmentc                 l   	 t        |      }t        |      }| j                  j                  || j                        }y # t
        j                  $ r_}t        j                  d| d|        |j                         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5M*%G ((66!>!> 7 H }} 	"KK3G9IaSIJvvx4??999+--/!		"s   >A B3AB..B3
collectionc           	         	 t        |j                  |j                        }| j                  j                  || j                        }y # t
        j                  $ rb}t        j                  d| d| d|        |j                         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    	"*66%>>G ((66!>!> 7 H }} 	"KK3B47G
|Sbcdbef vvx4??444#o%/!	"s   AA C AB;;C typescopec                    	 t        |r|j                  nd ||rt        |      nd |j                        }| j                  j	                  || j
                        }g }|j                  D ]  }t        |      }	|j                  |	         |S # t        j                  $ r3}
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<,U3$%>>	G ((44!>!> 5 H &(G!)!2!2 (,];w'( N}} 	"KK+B4wtfHUGK[\f[ggvwxvyz  /!		"s   BB C!.CCmetadatac           	         	 d }|t               k7  rt        t        t        d f   |      }t	        |j
                  |j
                  |rt        |      nd       }||j                  d       d|_        | j                  j                  || j                         y # t        j                  $ r-}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*66%>>! 2.AG "":.)-&++!>!> ,  }} 	"KK3B47G
|S\]^\_`  /!		"s   BB C.(CCFschemaconfigurationr   	dimensionget_or_creater   c                 R   	 t        |j                  |t        |t        t        |            |rt        |      nd |||	|
|D cg c]  }t        |       c}	      }| j                  j                  || j                        }t        |j                        }||j                  fS c c}w # t        j                  $ rh}t        j                   d| d| d|
 d|	 d| 
       |j#                         t        j$                  j&                  k(  r
t)               t+               d }~ww xY w)N)	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   r   rE   CreateCollectionrI   r   r   createdr[   rs   r   errorru   rv   rw   r   r   )rS   rh   ri   r   r   r   r   r   r   rj   r   r   rx   ry   r   rz   s                   rU   create_collectionzGrpcSysDB.create_collection:  s0   	"-66'R!4(:H#E( @H1(;T#+!CKL*73LG ((99!>!> : H /x/B/BCJx//// M }} 	"LL1"WTF.QYPZZfgmfnn}~  ~A  B vvx4??999+--/!	"s,   A B+ B&AB+ &B+ +D&>A#D!!D&c                 0   	 t        |j                  ||      }| j                  j                  || j                        }y # t
        j                  $ r}t        j                  d| d| d| d|        t        t
        j                  |      }t        j                  d|j                          dt
        j                  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    	"-66!G
 ((99!>!> : H }} 
	"LL1"^H:\Z`Yaapqrpst TYY"ALLqvvxj(9$//:S:S9TU vvx4??444#o%/!
	"s   ?A DB;DDc                    	 d }|t        |j                  ||      }|||t        d      t        |||||      }||t        ||||      }| j                  j	                  || j
                        }g }	|j                  D ]  }
|	j                  t        |
              |	S # t        j                  $ r3}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  s9   '	"G~/vv!
 >h&6$ H  0!%! zdl/!%!	 04/@/@/O/O!>!> 0P 0H )+G&22 B
4Z@ABN}} 	"LL4RDvYvhVabjakkz{|z}~  /!		"s   B%B( (C.;.C))C.c                 Z   	 ||dk(  r3t        |      }| j                  j                  |      }|j                  S t        ||      }| j                  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@595F5F5W5W6  ~~%1!% 6:5F5F5W5W6  ~~%}} 	"LLEaSIJ/!	"s   9A0 3A0 0B*"B%%B*c                     	 t        |j                        }| 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  ss    	"."&&9G262C2C2U2U3H 999}} 	"LL4RD8LQCPQ/!	"s   <? A<%A77A<z"SysDB.get_collection_with_segmentscollection_idc           	         	 t        |j                        }| j                  j                  |      }t	        t        |j                        |j                  D cg c]  }t        |       c}      S c c}w # t        j                  $ r_}|j                         t        j                  j                  k(  r
t               t        j                   d| d|        t#               d }~ww xY w)Nr   )r   r   r   z  and its segments due to error: )r+   rq   rE   GetCollectionWithSegmentsr9   r   r   r   r   r[   rs   ru   rv   r   r   r   r   r   )rS   r   rx   ry   r   rz   s         rU   get_collection_with_segmentsz&GrpcSysDB.get_collection_with_segments  s    	"6-:K:KLG!!;;GD  )01D1DEEMEVEVW',W5W W}} 	"vvx4??444#o%LL+M?:Z[\Z]^  /!	"s+   AA9 A4
,A9 4A9 9C+AC&&C+c           	         	 d }|t               k7  rt        t        |      }d }|t               k7  rt        t        t        d f   |      }d }|t               k7  rt        t        t
        d f   |      }d }	|t               k7  rt        t        t        d f   |      }	t        |j                  |||rt        |      nd |	rt        |	      nd       }
||
j                  d       d|
_        | j                  j                  |
| j                        }y # t         j"                  $ r}t        t         j$                  |      }t'        j(                  d| d| d|        |j+                         t         j,                  j.                  k(  r
t1               |j+                         t         j,                  j2                  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KM)"&uS$Y'7"C!N;=(!%eND,@&A8!L"&-&*7=>'# .66)! 2.A ' (S'( G "":.)-&((99!>!> : H }} 		"TYY"ALL1"WTF/RSQTU vvx4??444#o%vvx4??999+--/!		"s   DD G"B,GGc                 N    | j                   j                  t               d       y )NT)wait_for_ready)rE   rf   rB   )rS   s    rU   reset_and_wait_for_readyz"GrpcSysDB.reset_and_wait_for_ready-  s    $$UWT$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   s6   5 ll!!(v (     % % 1?""!"+."	" "  4B " "c "x " "& 7E  C    $       $ $$	"}" " 	"
 
(	" "6 
"# 
"$ 
" 
" "s "v " " "g "$ " " " "4 "D " ""  ""(,"" TN" sm	"
 %" 
'	" "8 
 @K}	"" " #8N#;<	"
 
" "@  (,#'#$(&"&" &"  	&"
 5&" 7#&" 8$&" C=&" &" &" &" 
z4	 &" &"P  %(	"" " 	"
 
" "6  ""$(# $0"TN0" sm0" 	0"
 0" }0" 0" 
*	0" 0"d  %"&"" 3-" 
	" "2 	"d 	"s 	" 	" ,.F.P.P "!"	" "(  '2m5@]?J} M:":" s#:" $HSM2	:"
 #8N#;<:" (23
:" 
:" :"x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    rV   rU   <module>r      s    ? ?    & L L $ O O      . : A A   , jC jCrV   