
    ugM                     ^   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	 d dl
mZ d dlmZmZmZmZ d dlmZmZmZmZmZmZ d dlmc 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(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d d
l7m8Z8m9Z9 d dl:Z:d dl;m<Z< d dl=m>Z>m?Z?m@Z@mAZA  G d de8e      ZBy)    )futures)AnyDictListcast)UUID)	overrides)CollectionConfigurationInternal)DEFAULT_DATABASEDEFAULT_TENANT	ComponentSystem)from_proto_metadatafrom_proto_update_metadatafrom_proto_segmentfrom_proto_segment_scopeto_proto_collectionto_proto_segmentN)CreateCollectionRequestCreateCollectionResponseCreateDatabaseRequestCreateDatabaseResponseCreateSegmentRequestCreateSegmentResponseCreateTenantRequestCreateTenantResponseDeleteCollectionRequestDeleteCollectionResponseDeleteSegmentRequestDeleteSegmentResponseGetCollectionsRequestGetCollectionsResponse GetCollectionWithSegmentsRequest!GetCollectionWithSegmentsResponseGetDatabaseRequestGetDatabaseResponseGetSegmentsRequestGetSegmentsResponseGetTenantRequestGetTenantResponseResetStateResponseUpdateCollectionRequestUpdateCollectionResponseUpdateSegmentRequestUpdateSegmentResponse)SysDBServiceradd_SysDBServicer_to_server)Empty)
CollectionMetadataSegmentSegmentScopec                       e Zd ZU dZej
                  ed<   eed<   i Ze	e
ef   ed<   i Ze	e
ee
   f   ed<   i Ze	e
e	e
e	e
ef   f   f   ed<   i Ze	e
e	e
ef   f   ed<   def fd	Zed& fd       Zed& fd       Zed& fd       Z ed      dedej2                  d
efd       Z ed      dedej2                  d
efd       Z ed      dedej2                  d
e fd       Z! ed      de"dej2                  d
e#fd       Z$ ed      de%dej2                  d
e&fd       Z'dedej2                  d
e&fdZ( ed      de)dej2                  d
e*fd       Z+ ed      de,dej2                  d
e-fd       Z. ed      de/dej2                  d
e0fd       Z1 ed      de2dej2                  d
e3fd       Z4 ed      de5dej2                  d
e6fd       Z7 ed      de8dej2                  d
e9fd       Z: ed      de;dej2                  d
e<fd        Z= ed      de>dej2                  d
e?fd!       Z@ ed      deAdej2                  d
eBfd"       ZCd#eDd$eEj                  d
dfd%ZG xZHS )'GrpcMockSysDBzA mock sysdb implementation that can be used for testing the grpc client. It stores
    state in simple python data structures instead of a database._server_server_port	_segments_collection_to_segments$_tenants_to_databases_to_collections_tenants_to_database_to_idsystemc                 b    |j                   j                  d      | _        t        |   |      S )Nchroma_server_grpc_port)settingsrequirer:   super__init__)selfr?   	__class__s     Q/var/www/openai/venv/lib/python3.12/site-packages/chromadb/db/impl/grpc/server.pyrE   zGrpcMockSysDB.__init__C   s+    "OO334MNw''    returnNc                 ,   t        j                  t        j                  d            | _        t        | | j                         | j                  j                  d| j                          | j                  j                          t        | !         S )N
   )max_workersz[::]:)
grpcserverr   ThreadPoolExecutorr9   r1   add_insecure_portr:   startrD   rF   rG   s    rH   rR   zGrpcMockSysDB.startG   sh    {{7#=#="#MN#D$,,7&&t/@/@.A'BCw}rI   c                 V    | j                   j                  d        t        |          S N)r9   stoprD   rS   s    rH   rV   zGrpcMockSysDB.stopO   s!    $w|~rI   c                    i | _         i | _        i | j                  t        <   i | j                  t           t        <   i | j                  t        <   t        d      | j                  t           t        <   t        |          S )Nr   )int)r;   r=   r   r   r>   r   rD   reset_staterS   s    rH   rY   zGrpcMockSysDB.reset_stateT   sq    461DF11.AVX11.ABRS:<''7LPUVK''78HIw"$$rI   F)check_signaturerequestcontextc                    |j                   }|j                  }|| j                  vr.|j                  t        j
                  j                  d| d       || j                  |   v r.|j                  t        j
                  j                  d| d       i | j                  |   |<   t        |j                        | j                  |   |<   t               S )NTenant 
 not found	Database  already existshex)tenantnamer=   abortrN   
StatusCode	NOT_FOUNDALREADY_EXISTSr   idr>   r   )rF   r[   r\   rd   databases        rH   CreateDatabasezGrpcMockSysDB.CreateDatabase_   s     <<BBBMM$//33wvhj5QRt@@HHMM..)H:_0U GI11&9(C<@WZZ<P''/9%''rI   c                    |j                   }|j                  }|| j                  vr.|j                  t        j
                  j                  d| d       || j                  |   vr.|j                  t        j
                  j                  d| d       | j                  |   |   }t        t        j                  |j                  ||            S )Nr^   r_   r`   )rj   re   rd   )rk   )rd   re   r=   rf   rN   rg   rh   r>   r&   protoDatabaserc   )rF   r[   r\   rd   rk   rj   s         rH   GetDatabasezGrpcMockSysDB.GetDatabaseo   s     <<BBBMM$//33wvhj5QR4DDVLLMM$//33y
*5UV,,V4X>"^^rvvHVL
 	
rI   c                     |j                   }|| j                  v r.|j                  t        j                  j
                  d| d       i | j                  |<   i | j                  |<   t               S )Nr^   ra   )re   r=   rf   rN   rg   ri   r>   r   rF   r[   r\   rd   s       rH   CreateTenantzGrpcMockSysDB.CreateTenant~   sj     T>>>MM..'&0Q =?11&924''/#%%rI   c                     |j                   }|| j                  vr.|j                  t        j                  j
                  d| d       t        t        j                  |            S )Nr^   r_   )re   )rd   )	re   r=   rf   rN   rg   rh   r*   rn   Tenantrr   s       rH   	GetTenantzGrpcMockSysDB.GetTenant   sU     BBBMM$//33wvhj5QR <<V,
 	
rI   c                 P    t        |j                        }| j                  ||      S rU   )r   segmentCreateSegmentHelper)rF   r[   r\   rx   s       rH   CreateSegmentzGrpcMockSysDB.CreateSegment   s%     %W__5''99rI   rx   c                     |d   j                   | j                  v r1|j                  t        j                  j
                  d|d    d       || j                  |d   j                   <   t               S )Nrj   Segment ra   )rc   r;   rf   rN   rg   ri   r   )rF   rx   r\   s      rH   ry   z!GrpcMockSysDB.CreateSegmentHelper   sd    4=.MM..74=/9 -4wt}(()$&&rI   c                     |j                   }|| j                  v r| j                  |= t               S |j                  t        j
                  j                  d| d       y )Nr|   r_   )rj   r;   r    rf   rN   rg   rh   )rF   r[   r\   id_to_deletes       rH   DeleteSegmentzGrpcMockSysDB.DeleteSegment   sR     zz4>>)|,(**MM))Xl^:+NrI   c                    |j                  d      rt        |j                        nd }|j                  d      r|j                  nd }|j                  d      rt	        |j
                        nd }t        |j                        }g }| j                  j                         D ]?  }|r	|d   |k7  r|r	|d   |k7  r|r	|d   |k7  r$|r	|d   |k7  r/|j                  |       A t        |D cg c]  }t        |       c}      S c c}w )Nrj   rb   typescope
collection)segments)HasFieldr   rj   r   r   r   r   r;   valuesappendr(   r   )	rF   r[   r\   	target_idtarget_typetarget_scopetarget_collectionfound_segmentsrx   s	            rH   GetSegmentszGrpcMockSysDB.GetSegments   s    -4,<,<T,BDWZZ(	&-&6&6v&>gllD ( %W]]3 	
 !W%7%78~~,,.GWT]i7wv+= 0L @ W\%:>O%O!!'* / #?MN~G&w/~N
 	
Ns   .Dc                    t        |j                        }|j                  | j                  vr/|j	                  t
        j                  j                  d| d       y | j                  |j                     }|j                  d      rFt        t        t        t        f   |d         }|d   i |d<   | j                  ||j                         |j                  d      r|j                  ri |d<   t!               S )Nr|   r_   metadatareset_metadata)r   rj   rc   r;   rf   rN   rg   rh   r   r   r   strr   _merge_metadatar   r   r/   )rF   r[   r\   id_to_updaterx   targets         rH   UpdateSegmentzGrpcMockSysDB.UpdateSegment   s     GJJ'4>>1MM))Xl^:+N nn\%5%56G
+d38ngj.AB:&.*,GJ'$$VW-=-=> 01g6L6L&(
#(**rI   c                 f   |j                   }|j                  }|j                  }|| j                  vr.|j	                  t
        j                  j                  d| d       || j                  |   vr.|j	                  t
        j                  j                  d| d       | j                  j                         D ]  \  }}|j                         D ]  \  }}	|j                  |	v s||j                  k7  s||j                  k7  r>|j	                  t
        j                  j                  d|j                   d| d|        q|j                  r~|j	                  t
        j                  j                  d|j                   d| d|          | j                  |   |   }
|
j                         D cg c]  }|d   |k(  s| }}t        |      dk  sJ t        |      d	kD  rU|j                  r|d	   }t        t        |      d
      S |j	                  t
        j                  j                  d| d       t!        j"                  |j$                        }t'        |j                        }t)        ||j                   |t+        |j,                        |j.                  ||d	      }g }|j0                  D ]  }t3        |      }|d   j4                  | j6                  v rT|D ]  }| j9                  t;        |      |         |j	                  t
        j                  j                  d|d    d       | j=                  ||       |j?                  |d   j4                          ||
|j                  <   | d| d|j                   }|| j@                  |<   t        t        |      d      S c c}w )Nr^   r_   r`   Collection z already exists in tenant z
 database re      r   F)r   createdra   rb   )rj   re   configurationr   	dimensionrk   rd   versionrj   )rj   r|   :T)!re   rd   rk   r=   rf   rN   rg   rh   itemsrj   ri   get_or_creater   lenr   r   r
   from_json_strconfiguration_json_strr   r3   r   r   r   r   r   rc   r;   r   r   ry   r   r<   )rF   r[   r\   collection_namerd   rk   search_tenant	databasessearch_databasesearch_collectionscollectionscmatchesexisting_collectionr   rj   new_collectionsegments_addedsegment_protorx   scollection_unique_keys                         rH   CreateCollectionzGrpcMockSysDB.CreateCollection   sz    ",,##BBBMM$//33wvhj5QR4DDVLLMM$//33y
*5UV 66<<>
7@7H3!3::!33%7*g.>.>> OO::)'**5OP]^hixhyz %22   OO::)'**5OP]^hixhyz 8I ?( ??GQ)002S2ai?6R12S7|q   w<!$$&-aj#/23FG!  MM..o.o>
 8EE**
 gjj!#'()9)9:''	
 $--M(7Gt}  DNN2'A&&';q'A7K (doo<<QUWf>gh$$Wg6!!'$-"3"34 . #1GJJ#)(!H:Qwzzl C>L$$%:;'*>:
 	
_ Ts   3N.N.c                 B   |j                   }|j                  }|j                  }|| j                  vr.|j	                  t
        j                  j                  d| d       || j                  |   vr.|j	                  t
        j                  j                  d| d       | j                  |   |   }||v r<||= | d| d| }| j                  |   }|r|D ]  }	| j                  |	=  t               S |j	                  t
        j                  j                  d| d       y )Nr^   r_   r`   r   r   )rj   rd   rk   r=   rf   rN   rg   rh   r<   r;   r   )
rF   r[   r\   collection_idrd   rk   r   r   segment_ids
segment_ids
             rH   DeleteCollectionzGrpcMockSysDB.DeleteCollection?  s     

##BBBMM$//33wvhj5QR4DDVLLMM$//33y
*5UV??GQK'M*'-haz=/$J!667LMK"-Jz2 #.+--MM))[z+RrI   c           
         |j                  d      rt        |j                        nd }|j                  d      r|j                  nd }i }| j                  j                         D ]  \  }}|j                         D ]h  \  }}	|j                  dk7  r||j                  k7  r%|j                  dk7  r||j                  k7  rD|j                  |	       t        d| d| d|	        j  g }
|j                         D ])  }|r	|d   |k7  r|r	|d   |k7  r|
j                  |       + t        |
D cg c]  }t        |       c}      S c c}w )	Nrj   rb   re    Tenant: , Database: , Collections: )r   )r   r   rj   re   r=   r   rd   rk   updateprintr   r   r"   r   )rF   r[   r\   r   target_nameallCollectionsrd   r   rk   r   found_collectionsr   s               rH   GetCollectionszGrpcMockSysDB.GetCollectionsX  sV    -4,<,<T,BDWZZ(	&-&6&6v&>gllD!%!J!J!P!P!RFI)2):%+>>R'Fgnn,D##r)h':J:J.J%%k2vhl8*OK=Y *; "S (//1JZ-:z&1[@$$Z0 2 &BSBSJ#J/BS
 	
s   /E	c           
      p   i }| j                   j                         D ]B  \  }}|j                         D ]*  \  }}|j                  |       t        d| d| d|        , D |j	                  |j
                  d       }|8|j                  t        j                  j                  d|j
                   d       |j                   d|j                   d|j
                   }	| j                  |	   D 
cg c]  }
| j                  |
    }}
|D ch c]  }|d   	 c}t        j                  t        j                   t        j"                  hk7  r0|j                  t        j                  j$                  d| d	|        t'        t)        |      |D cg c]  }t+        |       c}
      S c c}
w c c}w c c}w )Nr   r   r   zCollection with id r_   r   r   z#Incomplete segments for collection z: )r   r   )r=   r   r   r   getrj   rf   rN   rg   rh   rd   rk   r<   r;   r6   METADATARECORDVECTORINTERNALr$   r   r   )rF   r[   r\   r   rd   r   rk   r   r   r   rj   r   rx   s                rH   GetCollectionWithSegmentsz'GrpcMockSysDB.GetCollectionWithSegmentsw  s    !%!J!J!P!P!RFI)2):%+%%k2vhl8*OK=Y *; "S $''

D9
MM$//337J7::,V`5ab#-#4#4"5Qz7J7J6K1WZZL Y151M1MNc1de1d2DNN2&1de,45HGGH5,:O:OQ]QdQdfrfyfy9zzMM$//226YZdYeeghpgq4rs0*:6?GHxG&w/xH
 	
	 f5
 Is   1F)F.F3
c                    t        |j                        }i }| j                  j                         D ].  \  }}|j                         D ]  \  }}|j                  |v s|} 0 |j                  |vr/|j                  t        j                  j                  d| d       y ||j                     }	|j                  d      r|j                  |	d<   |j                  d      r|j                  |	d<   |j                  d      rJt        |j                        }
d }|
"i }|
j                         D ]  \  }}|	|||<    ||	d<   t               S |j                  d      r|j                  ri |	d<   t               S )Nr   r_   re   r   r   r   )r   rj   r=   r   rc   rf   rN   rg   rh   r   re   r   r   r   r   r-   )rF   r[   r\   r   r   rd   r   rk   maybe_collectionsr   update_metadatacleaned_metadatakeyvalues                 rH   UpdateCollectionzGrpcMockSysDB.UpdateCollection  s    GJJ'!%!J!J!P!P!RFI/8/@++##'88"3K 0A "S
 ;.MM))[j+Q %\%5%56J'%,\\
6",*1*;*;
;'
+
 #=W=M=M"N#' ".')$&5&;&;&=
U ,49,S1 '> *:
:&
 ,--	 !!"23))-/Jz*+--rI   c                 6    | j                          t               S rU   )rY   r+   )rF   r[   r\   s      rH   
ResetStatezGrpcMockSysDB.ResetState  s     	!##rI   r   sourcec                     t        t        t        t        f   |      }t        t        t        t        f   t	        |            }|j                  |       |j                         D ]  \  }}|	||v s||=  y rU   )r   r   r   r   r   r   r   )rF   r   r   target_metadatasource_metadatar   r   s          rH   r   zGrpcMockSysDB._merge_metadata  sh    tCH~v6tCH~/I&/QR/)//1JC}#C( 2rI   )rJ   N)I__name__
__module____qualname____doc__rN   Server__annotations__rX   r;   r   r   r5   r<   r   r=   r3   r>   r   r   rE   r	   rR   rV   rY   r   ServicerContextr   rl   r%   r&   rp   r   r   rs   r)   r*   rv   r   r   rz   ry   r   r    r   r'   r(   r   r.   r/   r   r   r   r   r   r   r   r!   r"   r   r#   r$   r   r,   r-   r   r2   r+   r   r4   rn   UpdateMetadatar   __classcell__)rG   s   @rH   r8   r8   6   s*   E [[$&ItCL!&46T#tCy.16 	 )$T#tCO,,--+  >@S$sDy/%9 :?(v (     % % u%(,(7;7K7K(	( &( u%
)
484H4H
	
 &
 u%
&*
&595I5I
&	
& &
& u%
'
262F2F
	
 &
 u%:+:6:6J6J:	: &:'7 'T=Q=Q 'Vk ' u%
+
6:6J6J
	
 &
 u%
)
484H4H
	
 &
6 u%+++6:6J6J+	+ &+& u%V
.V
9=9M9MV
	!V
 &V
p u%.9=9M9M	! &0 u%
,
7;7K7K
	
 &
< u%
7
BFBVBV
	*
 &
. u%'..'.9=9M9M'.	!'. &'.R u%$$'+';';$	$ &$)h )8L8L )QU )rI   r8   )C
concurrentr   typingr   r   r   r   uuidr   r	   chromadb.api.configurationr
   chromadb.configr   r   r   r   chromadb.proto.convertr   r   r   r   r   r   chromadb.proto.chroma_pb2rn   
chroma_pb2chromadb.proto.coordinator_pb2r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   #chromadb.proto.coordinator_pb2_grpcr0   r1   rN   google.protobuf.empty_pb2r2   chromadb.typesr3   r4   r5   r6   r8    rI   rH   <module>r      sz     ( (   F O O  * )       :  + F FQ)M9 Q)rI   