o
    \h[                     @   sx  d dl Z d dlmZ d dlZd dlZd dlmZmZm	Z	m
Z
mZmZ d dlZd dlZd dlmZ d dl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" d dl#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/ d dl0m1Z1 d dl0m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB eCeDZEG dd deeZFdS )    N)UUID)AnyOptionalcastTupleSequenceDict)override)__version__)UserIdentity)AsyncServerAPI)BaseHTTPClient)CreateCollectionConfigurationUpdateCollectionConfiguration'create_collection_configuration_to_json'update_collection_configuration_to_json)DEFAULT_DATABASEDEFAULT_TENANTSystemSettings)OpenTelemetryClientOpenTelemetryGranularitytrace_method)ProductTelemetryClient)async_to_sync)DatabaseTenant
Collection)%optional_embeddings_to_base64_strings)	Documents
EmbeddingsPyEmbeddingsIDsInclude	MetadatasURIsWhereWhereDocument	GetResultQueryResultCollectionMetadatavalidate_batchconvert_np_embeddings_to_listIncludeMetadataDocuments!IncludeMetadataDocumentsDistances"IncludeMetadataDocumentsEmbeddingsc                       s*  e Zd ZU i Zeeejf ed< de	f fddZ
dsddZdtd	d
ZdedededdfddZedt fddZdejfddZdededeeef defddZedejedefddZedejeefdededdfddZedejeefdededefd dZed!ejeefdededdfd"d!Zed#ejeddefd$ee d%ee dedee fd&d#Zed'ejededdfd(d'Z ed)ejedede!fd*d)Z"ed+ejede#fd,d+Z$ed-ejeddee%fd$ee d%ee ded.edee& f
d/d-Z'ed0ejeee%fded.edefd1d0Z(ed2ejeddd3ee%fded4ee) d5ee* d6e+ded.ede&fd7d2Z,ed8ejeee%fdeded.ede&fd9d8Z-ed:ejeddee%fded4ee) d5ee* ded.ede&fd;d:Z.ed<ejedddee%fd=e/d>ee d?ee* d@ee0 ded.eddfdAd<Z1edBejeee%fdCe/d>eded.ede&f
dDdBZ2edEejeee%fdeded.eddfdFdEZ3edGejeee%fdCe/ded.edefdHdGZ4edIejedJee%fdCe/dKeded.ede5f
dLdIZ6edMejeddddde7ee%fdCe/dNee8 dOee9 d$ee d%ee dPee: dQe;ded.ede5fdRdMZ<edSejedddee%fdCe/dNee8 dOee9 dPee: ded.eddfdTdSZ=edUej>dVe?e8ee@ eeA eeB eeC f dWedefdXdUZDedYej>edddee%fdNe8dCe/dZeEd[eeA d\eeB d]eeC ded.ede+fd^dYZFed_ej>eddddee%fdCe/dNe8dZeeE d[eeA d\eeB d]eeC ded.ede+fd`d_ZGedaej>edddee%fdCe/dNe8dZeEd[eeA d\eeB d]eeC ded.ede+fdbdaZHedcej>eddJddeIee%fdCe/ddeEdNee8 deedOee9 dPee: dQe;ded.edeJfdfdcZKedgej>ede+fdhdgZLediejedefdjdiZMedeNfdkdlZOedmejdefdndmZPedoejde+fdpdoZQedqejedefdrdqZR  ZSS )uAsyncFastAPI_clientssystemc                    sp   t  | |jd |jd | t| _| t| _|j| _t	j
t|jj|jj|jj|jjd| _d S )Nchroma_server_hostchroma_server_http_port)r3   r4   chroma_server_ssl_enableddefault_api_path)super__init__settingsrequirer   _opentelemetry_clientr   _product_telemetry_client	_settingsr0   resolve_urlstrr3   r4   r5   chroma_server_api_default_path_api_url)selfr2   	__class__ ]/home/air/segue/gemini/backup/venv/lib/python3.10/site-packages/chromadb/api/async_fastapi.pyr8   A   s   
zAsyncFastAPI.__init__returnc                    s   |    | S N)_get_clientrB   rE   rE   rF   
__aenter__R   s   zAsyncFastAPI.__aenter__Nc                    sB   t | jdkr| j \}}| I d H  t | jdksd S d S )Nr   )lenr1   popitemaclose)rB   _clientrE   rE   rF   _cleanupV   s
   zAsyncFastAPI._cleanupexc_type	exc_value	tracebackc                    s   |   I d H  d S rH   rQ   )rB   rR   rS   rT   rE   rE   rF   	__aexit__[   s   zAsyncFastAPI.__aexit__c                    s&   t    td fdd}|  d S )NrG   c                      s      I d H  d S rH   rU   rE   rJ   rE   rF   sync_cleanupb   s   z'AsyncFastAPI.stop.<locals>.sync_cleanuprG   N)r7   stopr   )rB   rW   rC   rJ   rF   rY   ^   s   

zAsyncFastAPI.stopc                 C   s   d }z
t  }| }W n ty   d}Y nw || jvrH| jjp"i  }d|d< dt d |d< t	j
| jd}t	jd || jjpAd|d	| j|< | j| S )
Nr   zapplication/jsonzContent-TypezChroma Python Client vz( (https://github.com/chroma-core/chroma)z
User-Agent)max_keepalive_connectionsF)timeoutheadersverifylimits)asyncioget_event_loop__hash__RuntimeErrorr1   r=   chroma_server_headerscopyr
   httpxLimitskeepalive_secsAsyncClientchroma_server_ssl_verify)rB   	loop_hashloopr\   r^   rE   rE   rF   rI   h   s0   


zAsyncFastAPI._get_clientmethodpathkwargsc                    sz   d|v rt |d}||d< tjj|dd d d}| j| }|  j||fi t	t
|I d H }t| t |jS )Njsoncontent/)safeencodingerrors)orjsondumpspopurllibparsequoterA   rI   requestr   r   r   _raise_chroma_errorloadstext)rB   rl   rm   rn   dataescaped_pathurlresponserE   rE   rF   _make_request   s   
$
zAsyncFastAPI._make_requestzAsyncFastAPI.heartbeatc                    s    |  ddI d H }t|d S )Nget znanosecond heartbeat)r   int)rB   r   rE   rE   rF   	heartbeat   s   zAsyncFastAPI.create_databasenametenantc                    s(   | j dd| dd|idI d H  d S )Npost	/tenants/
/databasesr   ro   r   rB   r   r   rE   rE   rF   create_database   s   
zAsyncFastAPI.get_databasec                    sB   | j dd| d| d|idI d H }t|d |d |d dS )	Nr   r   /databases/r   paramsidr   r   r   r   )r   r   )rB   r   r   r   rE   rE   rF   get_database   s   zAsyncFastAPI.delete_databasec                    s$   |  dd| d| I d H  d S )Ndeleter   r   r   r   rE   rE   rF   delete_database   s
   zAsyncFastAPI.list_databaseslimitoffsetc                    s:   | j dd| dt||ddI d H }dd |D S )Nr   r   r   r   r   r   c                 S   s&   g | ]}t |d  |d |d dqS )r   r   r   r   )r   ).0dbrE   rE   rF   
<listcomp>   s    z/AsyncFastAPI.list_databases.<locals>.<listcomp>r   r   _clean_params)rB   r   r   r   r   rE   rE   rF   list_databases   s   
zAsyncFastAPI.create_tenantc                    s    | j ddd|idI d H  d S )Nr   z/tenantsr   r   r   )rB   r   rE   rE   rF   create_tenant   s   zAsyncFastAPI.get_tenantc                    s&   |  dd| I d H }t|d dS )Nr   r   r   )r   )r   r   )rB   r   	resp_jsonrE   rE   rF   
get_tenant   s   
zAsyncFastAPI.get_user_identityc                    s   t di | ddI d H S )Nr   z/auth/identityrE   )r   r   rJ   rE   rE   rF   get_user_identity   s   zAsyncFastAPI.list_collectionsdatabasec                    sD   | j dd| d| dt||ddI d H }dd |D }|S )	Nr   r   r   /collectionsr   r   c                 S   s   g | ]}t |qS rE   )CollectionModel	from_json)r   json_collectionrE   rE   rF   r     s    
z1AsyncFastAPI.list_collections.<locals>.<listcomp>r   )rB   r   r   r   r   r   modelsrE   rE   rF   list_collections   s   	zAsyncFastAPI.count_collectionsc                    s,   |  dd| d| dI d H }tt|S )Nr   r   r   z/collections_countr   r   r   )rB   r   r   r   rE   rE   rF   count_collections  s   

zAsyncFastAPI.create_collectionFconfigurationmetadataget_or_createc           
         sN   |rt |nd}| jdd| d| d||||ddI dH }t|}	|	S )zCreates a collectionNr   r   r   r   )r   r   r   r   r   )r   r   r   r   )
rB   r   r   r   r   r   r   config_jsonr   modelrE   rE   rF   create_collection  s    


zAsyncFastAPI.get_collectionc              	      s4   |  dd| d| d| I d H }t|}|S )Nr   r   r   /collections/r   r   r   )rB   r   r   r   r   r   rE   rE   rF   get_collection>  s   

z%AsyncFastAPI.get_or_create_collectionc                    s   | j |||d||dI d H S )NT)r   r   r   r   r   r   )r   )rB   r   r   r   r   r   rE   rE   rF   get_or_create_collectionO  s   zAsyncFastAPI._modifyr   new_namenew_metadatanew_configurationc                    sB   | j dd| d| d| |||rt|nd ddI d H  d S )Nputr   r   r   )r   r   r   r   )r   r   )rB   r   r   r   r   r   r   rE   rE   rF   _modifyd  s   zAsyncFastAPI._forkcollection_idc              	      s>   | j dd| d| d| dd|idI d H }t|}|S )Nr   r   r   r   z/forkr   r   r   )rB   r   r   r   r   r   r   rE   rE   rF   _fork}  s   	
zAsyncFastAPI.delete_collectionc              	      s*   |  dd| d| d| I d H  d S )Nr   r   r   r   r   )rB   r   r   r   rE   rE   rF   delete_collection  s
   zAsyncFastAPI._countc              
      s2   |  dd| d| d| dI dH }tt|S )z0Returns the number of embeddings in the databaser   r   r   r   z/countNr   )rB   r   r   r   r   rE   rE   rF   _count  s   	

zAsyncFastAPI._peek
   nc                    s    | j ||||tdI d H }|S )N)r   r   r   include)_getr/   )rB   r   r   r   r   resprE   rE   rF   _peek  s   	zAsyncFastAPI._getidswherewhere_documentr   c
              
      s   dd |D }
| j dd| d|	 d| d||||||
dd	I d H }t|d
 |dd |dd |dd d |dd |dS )Nc                 S      g | ]}|d kr|qS r   rE   r   irE   rE   rF   r         z%AsyncFastAPI._get.<locals>.<listcomp>r   r   r   r   z/get)r   r   r   r   r   r   r   r   
embeddings	metadatas	documentsuris)r   r   r   r   r   r   included)r   r(   r   )rB   r   r   r   r   r   r   r   r   r   filtered_includer   rE   rE   rF   r     s,   



zAsyncFastAPI._deletec              	      s8   | j dd| d| d| d|||ddI d H  d S )Nr   r   r   r   z/delete)r   r   r   r   r   )rB   r   r   r   r   r   r   rE   rE   rF   _delete  s   
zAsyncFastAPI._submit_batchbatchr   c                    sZ   |   I dH }|d |rt|d n|d |d |d |d d}| jd||d	I dH S )
z?
        Submits a batch of embeddings to the database
        Nr               )r   r   r   r   r   r   r   )supports_base64_encodingr   r   )rB   r   r   r   r   rE   rE   rF   _submit_batch  s   
zAsyncFastAPI._addr   r   r   r   c	           
   
      sZ   |t ||||f}	t|	d|  I d H i | |	d| d| dt| dI d H  dS )Nmax_batch_sizer   r   r   z/addTr,   r+   get_max_batch_sizer   r?   )
rB   r   r   r   r   r   r   r   r   r   rE   rE   rF   _add     
zAsyncFastAPI._updatec	           
   
      sf   ||d ur
t |nd |||f}	t|	d|  I d H i | |	d| d| dt| dI d H  dS )Nr   r   r   r   z/updateTr   
rB   r   r   r   r   r   r   r   r   r   rE   rE   rF   _update3  s   	
zAsyncFastAPI._upsertc	           
   
      sZ   |t ||||f}	t|	d|  I d H i | |	d| d| dt| dI d H  dS )Nr   r   r   r   z/upsertTr   r   rE   rE   rF   _upsertR  r   zAsyncFastAPI._queryquery_embeddings	n_resultsc
              
      s   dd |D }
| j dd| d|	 d| d||d urt|nd ||||
dd	I d H }t|d
 |dd |dd |dd |dd |dd d |dS )Nc                 S   r   r   rE   r   rE   rE   rF   r   |  r   z'AsyncFastAPI._query.<locals>.<listcomp>r   r   r   r   z/query)r   r   r   r   r   r   r   r   	distancesr   r   r   r   )r   r   r   r   r   r   r   r   )r   r,   r)   r   )rB   r   r   r   r   r   r   r   r   r   r   r   rE   rE   rF   _querym  s2   




zAsyncFastAPI.resetc                       |  ddI d H }tt|S )Nr   z/reset)r   r   boolrB   r   rE   rE   rF   reset     
zAsyncFastAPI.get_versionc                    r   )Nr   z/version)r   r   r?   r   rE   rE   rF   get_version  r   c                 C   s   | j S rH   )r=   rJ   rE   rE   rF   get_settings  s   zAsyncFastAPI.get_settingsz"AsyncFastAPI.get_pre_flight_checksc                    s*   | j d u r| ddI d H }|| _ | j S )Nr   z/pre-flight-checks)pre_flight_checksr   r   rE   rE   rF   get_pre_flight_checks  s
   
z%AsyncFastAPI.supports_base64_encodingc                    &   |   I d H }tt|dd}|S )Nr   F)r   r   r   r   )rB   r   b64_encoding_enabledrE   rE   rF   r     s   zAsyncFastAPI.get_max_batch_sizec                    r   )Nr   )r   r   r   r   )rB   r   r   rE   rE   rF   r     s   )rG   r0   rX   )T__name__
__module____qualname__r1   r   r   re   rh   __annotations__r   r8   rK   rQ   r   rV   r	   rY   rI   r?   r   r   r   	OPERATIONr   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   r   r   r   r(   r   r-   r"   r&   r'   r#   r   r   ALLr   r!   r$   r   r%   r   r    r   r   r   r.   r)   r   r   r   r   r   r   r   r   __classcell__rE   rE   rC   rF   r0   6   s`  
 	

	 





















	

&
	

	

	

	

	

)

r0   )Gr_   uuidr   urllib.parserx   ru   typingr   r   r   r   r   r   loggingre   	overridesr	   chromadbr
   chromadb.authr   chromadb.api.async_apir   chromadb.api.base_http_clientr   %chromadb.api.collection_configurationr   r   r   r   chromadb.configr   r   r   r    chromadb.telemetry.opentelemetryr   r   r   chromadb.telemetry.productr   chromadb.utils.async_to_syncr   chromadb.typesr   r   r   r   chromadb.api.typesr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   	getLoggerr   loggerr0   rE   rE   rE   rF   <module>   s,     L
