o
    1Xxi82                     @   s"  d dl mZmZ d dlmZ d dlmZ d dl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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m Z  d d
l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+ d dl,m-  m.Z/ G dd dee
Z0G dd dee	Z1dS )    )OptionalSequence)UUID)overrideN)AdminAPI	ClientAPI	ServerAPI)CollectionConfiguration)SharedSystemClient)CollectionMetadata
DataLoader	Documents
EmbeddableEmbeddingFunction
Embeddings	GetResultIDsIncludeLoadable	MetadatasQueryResultURIs)SettingsSystem)DEFAULT_TENANTDEFAULT_DATABASE)
Collection)ChromaError)DatabaseTenantWhereWhereDocumentc                       s\  e Zd ZU dZeZeed< eZ	eed< e
ed< eed< eee fdedededdf fd	d
Zeeeefdedededd fddZedefddZe	dZdee dee dee fddZedefddZedde ddfdedee dee deee  deee   de!defddZ"ede dfdedee# deee  deee   def
d d!Z$edde dfdedee dee deee  deee   defd"d#Z%e		dZde#d$ee d%ee ddfd&d'Z&ededdfd(d)Z'e			d[d*e(d+e#d,e)d-ee* d.ee+ d/ee, de!fd0d1Z-e				d\d+e#d*e(d,ee) d-ee* d.ee+ d/ee, de!fd2d3Z.e			d[d+e#d*e(d,e)d-ee* d.ee+ d/ee, de!fd4d5Z/ed+e#defd6d7Z0ed]d+e#d9ede1fd:d;Z2edi dddddi g d<f	d+e#d*ee( d=ee3 d>ee dee dee d?ee d@ee dAee4 dBe5de1fdCdDZ6i i fd+e#d*ee( d=ee3 dAee4 de(f
dEdFZ7ed8i i g dGfd+e#dHe)dIed=e3dAe4dBe5de8fdJdKZ9ede!fdLdMZ:edefdNdOZ;edefdPdQZ<edefdRdSZ=eefdededdfdTdUZ>ededdfdVdWZ?dededdfdXdYZ@  ZAS )^Clienta  A client for Chroma. This is the main entrypoint for interacting with Chroma.
    A client internally stores its tenant and database and proxies calls to a
    Server API instance of Chroma. It treats the Server API and corresponding System
    as a singleton, so multiple clients connecting to the same resource will share the
    same API instance.

    Client implementations should be implement their own API-caching strategies.
    tenantdatabase_server_admin_clientsettingsreturnNc                    sP   t  j|d || _|| _t| j| _| j||d | j	t
| _|   d S )Nr'   r#   r$   )super__init__r#   r$   AdminClientfrom_system_systemr&   _validate_tenant_databaseinstancer   r%   _submit_client_start_event)selfr#   r$   r'   	__class__ R/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/chromadb/api/client.pyr,   2   s   zClient.__init__systemc                 C   s   t | | |||jd}|S )N)r#   r$   r'   r
   _populate_data_from_systemr'   )clsr8   r#   r$   r1   r6   r6   r7   r.   D   s   
zClient.from_systemc                 C   
   | j  S N)r%   	heartbeatr3   r6   r6   r7   r>   T      
zClient.heartbeatlimitoffsetc                    s&    fdd j j|| j jdD S )Nc                    s   g | ]	}t  j|d qS ))clientmodel)r   r%   ).0rD   r?   r6   r7   
<listcomp>\   s    z+Client.list_collections.<locals>.<listcomp>r*   )r%   list_collectionsr#   r$   )r3   rA   rB   r6   r?   r7   rG   X   s
   
zClient.list_collectionsc                 C   s   | j j| j| jdS Nr*   )r%   count_collectionsr#   r$   r?   r6   r6   r7   rI   c   s   zClient.count_collectionsFnameconfigurationmetadataembedding_functiondata_loaderget_or_createc                 C   s.   | j j||| j| j||d}t| j |||dS )N)rJ   rL   r#   r$   rO   rK   rC   rD   rM   rN   )r%   create_collectionr#   r$   r   )r3   rJ   rK   rL   rM   rN   rO   rD   r6   r6   r7   rQ   i   s   zClient.create_collectionidc                 C   s*   | j j||| j| jd}t| j |||dS )N)rR   rJ   r#   r$   rP   )r%   get_collectionr#   r$   r   )r3   rJ   rR   rM   rN   rD   r6   r6   r7   rS      s   
zClient.get_collectionc                 C   s,   | j j||| j| j|d}t| j |||dS )N)rJ   rL   r#   r$   rK   rP   )r%   get_or_create_collectionr#   r$   r   )r3   rJ   rK   rL   rM   rN   rD   r6   r6   r7   rT      s   zClient.get_or_create_collectionnew_namenew_metadatac                 C   s   | j j|||dS )N)rR   rU   rV   )r%   _modify)r3   rR   rU   rV   r6   r6   r7   rW      s
   zClient._modifyc                 C   s   | j j|| j| jdS )N)rJ   r#   r$   )r%   delete_collectionr#   r$   r3   rJ   r6   r6   r7   rX      s
   zClient.delete_collectionidscollection_id
embeddings	metadatas	documentsurisc                 C      | j j||||||dS )N)rZ   r[   r\   r]   r^   r_   )r%   _add)r3   rZ   r[   r\   r]   r^   r_   r6   r6   r7   ra         
zClient._addc                 C   r`   N)r[   rZ   r\   r]   r^   r_   )r%   _updater3   r[   rZ   r\   r]   r^   r_   r6   r6   r7   rd      rb   zClient._updatec                 C   r`   rc   )r%   _upsertre   r6   r6   r7   rf      rb   zClient._upsertc                 C      | j j|dS )N)r[   )r%   _count)r3   r[   r6   r6   r7   rh   	  s   zClient._count
   nc                 C      | j j||dS )N)r[   rj   )r%   _peek)r3   r[   rj   r6   r6   r7   rl     s   zClient._peek)r\   r]   r^   wheresortpage	page_sizewhere_documentincludec                 C   s    | j j|||||||||	|
d
S )N)
r[   rZ   rm   rn   rA   rB   ro   rp   rq   rr   )r%   _get)r3   r[   rZ   rm   rn   rA   rB   ro   rp   rq   rr   r6   r6   r7   rs     s   zClient._getc                 C   s   | j j||||dS )N)r[   rZ   rm   rq   )r%   _delete)r3   r[   rZ   rm   rq   r6   r6   r7   rt   1  s   zClient._delete)r\   r]   r^   	distancesquery_embeddings	n_resultsc                 C   r`   )N)r[   rv   rw   rm   rq   rr   )r%   _query)r3   r[   rv   rw   rm   rq   rr   r6   r6   r7   rx   ?  rb   zClient._queryc                 C   r<   r=   )r%   resetr?   r6   r6   r7   ry   R  r@   zClient.resetc                 C   r<   r=   )r%   get_versionr?   r6   r6   r7   rz   V  r@   zClient.get_versionc                 C   r<   r=   )r%   get_settingsr?   r6   r6   r7   r{   Z  r@   zClient.get_settingsc                 C   r<   r=   )r%   get_max_batch_sizer?   r6   r6   r7   r|   ^  r@   zClient.get_max_batch_sizec                 C   s   | j ||d || _|| _d S rH   r0   r#   r$   )r3   r#   r$   r6   r6   r7   
set_tenantf  s   
zClient.set_tenantc                 C   s   | j | j|d || _d S rH   r}   )r3   r$   r6   r6   r7   set_databasel  s   
zClient.set_databasec              
   C   s   z	| j j|d W n' tjy   td ty" } z|d }~w ty0   td| dw z| j j||d W d S  tjyH   td tyY   td| d| dw )NrJ   zACould not connect to a Chroma server. Are you sure it is running?zCould not connect to tenant z. Are you sure it exists?rJ   r#   zCould not connect to database z for tenant )r&   
get_tenanthttpxConnectError
ValueErrorr   	Exceptionget_database)r3   r#   r$   er6   r6   r7   r0   q  s2   
z Client._validate_tenant_database)NN)NNN)NNNN)ri   )B__name__
__module____qualname____doc__r   r#   str__annotations__r   r$   r   r   r   r,   classmethodr   r   r.   intr>   r   r   r   rG   rI   efDefaultEmbeddingFunctionr	   r   r   r   r   r   boolrQ   r   rS   rT   rW   rX   r   r   r   r   r   ra   rd   rf   rh   r   rl   r    r!   r   rs   rt   r   rx   ry   rz   r{   r|   r~   r   r0   __classcell__r6   r6   r4   r7   r"       s  
 	

	


		

r"   c                       s   e Zd ZU eed< e fdeddf fddZeefde	de	ddfd	d
Z
eefde	de	defddZede	ddfddZede	defddZeededd fddZ  ZS )r-   r%   r'   r(   Nc                    s   t  | | jt| _d S r=   )r+   r,   r/   r1   r   r%   )r3   r'   r4   r6   r7   r,     s   zAdminClient.__init__rJ   r#   c                 C   rk   Nr   )r%   create_databaser3   rJ   r#   r6   r6   r7   r        zAdminClient.create_databasec                 C   rk   r   )r%   r   r   r6   r6   r7   r     r   zAdminClient.get_databasec                 C   rg   Nr   )r%   create_tenantrY   r6   r6   r7   r        zAdminClient.create_tenantc                 C   rg   r   )r%   r   rY   r6   r6   r7   r     r   zAdminClient.get_tenantr8   c                 C   s   t | | |jd}|S )Nr)   r9   )r;   r8   r1   r6   r6   r7   r.     s   
zAdminClient.from_system)r   r   r   r   r   r   r,   r   r   r   r   r   r   r   r   r   r   r   r.   r   r6   r6   r4   r7   r-     s$   
 r-   )2typingr   r   uuidr   	overridesr   r   chromadb.apir   r   r   chromadb.api.configurationr	   !chromadb.api.shared_system_clientr
   chromadb.api.typesr   r   r   r   r   r   r   r   r   r   r   r   r   chromadb.configr   r   r   r   chromadb.api.models.Collectionr   chromadb.errorsr   chromadb.typesr   r   r    r!   "chromadb.utils.embedding_functionsutilsembedding_functionsr   r"   r-   r6   r6   r6   r7   <module>   s$    <  p