
    Ig:                     Z   d dl Z 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 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*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dl<m=Z= d dl>Z> G d de      Z?y)    N)ListOptionalSequenceTupleUnioncast)UUID)	overrides)CollectionConfigurationInternal)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DeleteCollectionRequestDeleteSegmentRequestGetCollectionsRequestGetCollectionsResponseGetDatabaseRequestGetSegmentsRequestGetTenantRequestUpdateCollectionRequestUpdateSegmentRequest)	SysDBStub) RetryOnRpcErrorClientInterceptor)OtelInterceptor)	
CollectionDatabaseMetadataOptionalArgumentSegmentSegmentScopeTenantUnspecifiedUpdateMetadata)Emptyc                   >    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d+ fd       Zed+ fd       Zed+ 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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	 	 	 d,d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$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        e        e       fdede e   d!e ee	      de ee!      d	d
f
d)       Z,d+d*Z- xZ.S )-	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requirer7   r8   r9   super__init__)selfr:   	__class__s     Y/var/www/html/answerous/venv/lib/python3.12/site-packages/chromadb/db/impl/grpc/client.pyrB   zGrpcSysDB.__init__<   s_     & 7 78Q R!'!8!89R!S(.(?(?2)
% w''    returnNc                 ,   t        j                  | j                   d| j                         | _        t               t               g}t        j                  | j                  g| | _        t        | j                        | _	        t        | -         S )N:)grpcinsecure_channelr7   r8   r6   r(   r'   intercept_channelr&   r5   rA   start)rC   interceptorsrD   s     rE   rM   zGrpcSysDB.startE   s|    --$$%Qt'='=&>?
 ()+K+MN..t}}L|L%dmm4w}rF   c                 T    | j                   j                          t        |          S N)r6   closerA   stoprC   rD   s    rE   rR   zGrpcSysDB.stopO   s    w|~rF   c                 f    | j                   j                  t                      t        |          S rP   )r5   
ResetStater2   rA   reset_staterS   s    rE   rV   zGrpcSysDB.reset_stateT   s'    $$UW-w"$$rF   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rW   rX   rY   timeoutzFailed to create database name z and database id  for tenant  due to error: )r   hexr5   CreateDatabaser9   rJ   RpcErrorr   infocode
StatusCodeALREADY_EXISTSr   r   )rC   rW   rX   rY   requestresponsees          rE   create_databasezGrpcSysDB.create_databaseY   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)rX   rY   r\   )r`   r[   zFailed to get database r^   r_   )r!   r5   GetDatabaser9   r*   r	   databaserW   rX   rY   rJ   rb   r   rc   rd   re   	NOT_FOUNDr   r   )rC   rX   rY   rg   rh   ri   s         rE   get_databasezGrpcSysDB.get_databasej   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|        |j                         t        j                  j                  k(  r
t               t               d }~ww xY w)NrX   r\   zFailed to create tenant r_   )r   r5   CreateTenantr9   rJ   rb   r   rc   rd   re   rf   r   r   rC   rX   rg   rh   ri   s        rE   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)Nrq   r\   zFailed to get tenant r_   )r#   r5   	GetTenantr9   r/   rY   rX   rJ   rb   r   rc   rd   re   rn   r   r   rs   s        rE   
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)rx   r\   zFailed to create segment 	, error: )r   r   r5   CreateSegmentr9   rJ   rb   r   rc   rd   re   rf   r   r   )rC   rx   proto_segmentrg   rh   ri   s         rE   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)rW   r~   r\   z!Failed to delete segment with id  for collection r_   )r   r`   r5   DeleteSegmentr9   rJ   rb   r   rc   rd   re   rn   r   r   )rC   r~   rW   rg   rh   ri   s         rE   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)rW   r   r   r~   r\   zFailed to get segment id z, type z, scope r   r_   )r"   r`   r   r5   GetSegmentsr9   segmentsr   appendrJ   rb   r   rc   r   )rC   r~   rW   r   r   rg   rh   resultsr|   rx   ri   s              rE   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)rW   r~   r   r   Tr\   z!Failed to update segment with id r   rz   )r0   r   r   r1   r%   r`   r   
ClearFieldreset_metadatar5   UpdateSegmentr9   rJ   rb   r   rc   r   )rC   r~   rW   r   write_metadatarg   ri   s          rE   update_segmentzGrpcSysDB.update_segment   s    	"!N;=(!%eND,@&A8!L*66%>>! 2.AG "":.)-&++!>!> ,  }} 	"KK3B47G
|S\]^\_`  /!		"s   BB C.(CCFconfigurationr   	dimensionget_or_createrm   c
                 >   	 t        |j                  ||j                         |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)	rW   rX   configuration_json_strr   r   r   rY   rm   r   r\   zFailed to create collection id , name  for database  and tenant r_   )r   r`   to_json_strr   r   r5   CreateCollectionr9   r   r~   createdrJ   rb   r   errorrd   re   rf   r   r   )rC   rW   rX   r   r   r   r   r   rY   rm   rx   rg   rh   r~   ri   s                  rE   create_collectionzGrpcSysDB.create_collection   s#   	"-66'4'@'@'B?G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*   6B! B
AB! B! !D4A#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)rW   rY   rm   r\   zFailed to delete collection id r   r   r_   zError code: z, NotFoundError: )r   r`   r5   DeleteCollectionr9   rJ   rb   r   r   r   Callrd   re   rn   r   r   )rC   rW   rY   rm   rg   rh   ri   s          rE   delete_collectionzGrpcSysDB.delete_collection!  s    	"-66!G
 ((99!>!> : H }} 	"LL1"^H:\Z`Yaapqrpst TYY"ALL<z1B4??C\C\B]^_vvx4??444#o%/!	"s   ?A DB;DDlimitoffsetc                    	 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)rW   r   r   zmIf name is specified, tenant and database must also be specified in order to uniquely identify the collection)rX   rY   rm   r   r   )rY   rm   r   r   r\   z"Failed to get collections with id r   z	, tenant z, database r_   )r   r`   
ValueErrorr5   GetCollectionsr9   collectionsr   r   rJ   rb   r   r   r   )rC   rW   rX   rY   rm   r   r   rg   rh   r   r~   ri   s               rE   get_collectionszGrpcSysDB.get_collections8  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           	      @   	 d }|t               k7  rt        t        |      }d }|t               k7  rt        t        t        d f   |      }d }|t               k7  rt        t        t
        d f   |      }t        |j                  |||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
t-               |
j'                         t        j(                  j.                  k(  r
t1               t3               d }
~
ww xY w)N)rW   rX   r   r   r   Tr\   zFailed to update collection id r   r_   )r0   r   strr   intr1   r$   r`   r   r   r   r5   UpdateCollectionr9   rJ   rb   r   r   r   rd   re   rn   r   rf   r   r   )rC   rW   rX   r   r   
write_namewrite_dimensionr   rg   rh   ri   s              rE   update_collectionzGrpcSysDB.update_collectionk  sj   %	"J{}$!#t_
"OKM)"&uS$Y'7"C!N;=(!%eND,@&A8!L-66)! 2.AG "":.)-&((99!>!> : H }} 		"TYY"ALL1"WTF/RSQTU vvx4??444#o%vvx4??999+--/!		"s   CC F,B,FFc                 N    | j                   j                  t               d       y )NT)wait_for_ready)r5   rU   r2   )rC   s    rE   reset_and_wait_for_readyz"GrpcSysDB.reset_and_wait_for_ready  s    $$UWT$BrF   )rG   N)NNN)/__name__
__module____qualname____doc__r&   __annotations__rJ   Channelr   r   r   rB   r
   rM   rR   rV   r   r	   rj   r*   ro   rt   r/   rw   r-   r}   r   r   r.   r   r   r0   r,   r1   r   r   r   r+   boolr   r)   r   r   r   r   r   __classcell__)rD   s   @rE   r4   r4   1   s   5 ll!!(v (     % % 1?""!"+."	" "  4B " "c "x " "& 
"# 
"$ 
" 
" "s "v " " "g "$ " " " "4 "D " ""  ""(,"" TN" sm	"
 %" 
'	" "8 
 @K}	"" " #8N#;<	"
 
" "@  (,#'#$(#"#" #" 7	#"
 7##" 8$#" C=#" #" #" #" 
z4	 #" #"J &4FV"" #"@C"	" ",  ""$(# $0"TN0" sm0" 	0"
 0" }0" 0" 
*	0" 0"d  '2m5@]?J},"," s#," $HSM2	,"
 #8N#;<," 
," ,"\CrF   r4   )@loggingtypingr   r   r   r   r   r   uuidr	   r
   chromadb.api.configurationr   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%   #chromadb.proto.coordinator_pb2_grpcr&   chromadb.proto.utilsr'   %chromadb.telemetry.opentelemetry.grpcr(   chromadb.typesr)   r*   r+   r,   r-   r.   r/   r0   r1   google.protobuf.empty_pb2r2   rJ   r4    rF   rE   <module>r      sv     ? ?   F L L $ O O     : A A
 
 
 , jC jCrF   