
    Zi)9                        d dl mZmZm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Zd dl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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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@ d dlAmBZB d dlCZCg dZDd dlEmFZF  ejG        eH          ZI e            aJdZKdeLfdZM eM            ZNdZO	 d dlPmQZQ eQZOn# eR$ r dZOY nw xY weOsld dlSZSeSjT        dk     r]eNrPd dlUZUd dlVZV eUjW        eVjX        ddddg            eYd           eVjZ        [                    d          eVjZ        d<   n e\d          d:dZ]defdZ^deefdee         d e_d!e_defd"Z`d#deefd$ee_eBf         dee         d e_d!e_def
d%Zaddeefd$ee_         dee         d e_d!e_def
d&Zbd'd(dddeefd)e_d*ecd+eLd,eee_e_f                  dee         d e_d!e_defd-Zdd'd(dddeefd)e_d*ecd+eLd,eee_e_f                  dee         d e_d!e_defd.Ze	 	 	 	 d;d/d0d1d2d ee_         d!ee_         d3ee_         dee         d4e_d5ecd6eLdefd7Zft          eefded e_d!e_defd8Z e            fdedefd9ZdS )<    )DictOptionalUnionN)Client)AdminClient)AsyncClient)TokenTransportHeader)DEFAULT_DATABASEDEFAULT_TENANTSettings)AdminAPIAsyncClientAPI	ClientAPI)
Collection)CmekCollectionMetadataUpdateMetadata	DocumentsEmbeddingFunction
EmbeddingsURIURIsIDsIncludeMetadata	Metadatas	ReadLevelWhereQueryResult	GetResultWhereDocumentUpdateCollectionMetadataSparseVectorSparseVectorsSparseEmbeddingFunctionSchemaVectorIndexConfigHnswIndexConfigSpannIndexConfigFtsIndexConfigSparseVectorIndexConfigStringInvertedIndexConfigIntInvertedIndexConfigFloatInvertedIndexConfigBoolInvertedIndexConfig)Search)KeyKKnnRrf)Path)%r   r   r   r   r   r!   r   r   r   r   r   r   r   r   r   r"   r   r    r	   r0   r1   r2   r3   r4   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   )CloudClientArgz1.5.2returnc                  2    	 dd l } dS # t          $ r Y dS w xY w)Nr   TF)google.colabImportError)googles    N/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/__init__.pyis_in_colabr=   s   s:    t   uus    
F)is_thin_client)   #   r   z-mpipinstallzpysqlite3-binary	pysqlite3sqlite3z[91mYour system has an unsupported version of sqlite3. Chroma                     requires sqlite3 >= 3.35.0.[0m
[94mPlease visit                     https://docs.trychroma.com/troubleshooting#sqlite to learn how                     to upgrade.[0mc                  2    t          j        j        di | adS )zGOverride Chroma's default settings, environment variables or .env filesN )chromadbconfigr   
__settings)kwargss    r<   	configurerK      s      )33F33JJJ    c                      t           S N)rI   rF   rL   r<   get_settingsrO      s    rL   settingstenantdatabasec                     | t                      } d| _        t          |          }t          |          }t          | ||          S )a  Create an in-memory client for local use.

    This client stores all data in memory and does not persist to disk.
    It is intended for testing and development.

    Args:
        settings: Optional settings to override defaults.
        tenant: Tenant name to use for requests. Defaults to the default tenant.
        database: Database name to use for requests. Defaults to the default database.

    Returns:
        ClientAPI: A configured client instance.
    NFrP   rQ   rR   )r   is_persistentstrClientCreatorrT   s      r<   EphemeralClientrX      sH    $ ::"H [[F8}}H(6HMMMMrL   z./chromapathc                     |t                      }t          |           |_        d|_        t          |          }t          |          }t	          |||          S )a  Create a persistent client that stores data on disk.

    This client is intended for local development and testing. For production,
    prefer a server-backed Chroma instance.

    Args:
        path: Directory to store persisted data.
        settings: Optional settings to override defaults.
        tenant: Tenant name to use for requests.
        database: Database name to use for requests.

    Returns:
        ClientAPI: A configured client instance.
    NTrQ   rR   rP   )r   rV   persist_directoryrU   rW   rY   rP   rQ   rR   s       r<   PersistentClientr^      sV    ( ::!$TH!H [[F8}}HHMMMMrL   c                     |t                      }d|_        | du|_        | pd|_        t	          |          }t	          |          }t          |||          S )a  
    Creates an ephemeral or persistance instance of Chroma that saves to disk.
    This is useful for testing and development, but not recommended for production use.

    Args:
        path: An optional directory to save Chroma's data to. The client is ephemeral if a None value is provided. Defaults to None.
        tenant: The tenant to use for this client.
        database: The database to use for this client.
    Nz!chromadb.api.rust.RustBindingsAPI r[   )r   chroma_api_implrU   r\   rV   rW   r]   s       r<   
RustClientrb      sa     ::BH!-H!%H [[F8}}HHMMMMrL   	localhosti@  hostportsslheadersc                    |t                      }t          |           } t          |          }t          |          }t          |          }t          |          }d|_        |j        r&|j        | k    rt          d|j         d|  d          | |_        |j        r&|j        |k    rt          d|j         d| d          ||_        ||_        ||_	        t          |||          S )a>  Create a client that connects to a Chroma server.

    Args:
        host: Hostname of the Chroma server.
        port: HTTP port of the Chroma server.
        ssl: Whether to enable SSL for the connection.
        headers: Optional headers to send with each request.
        settings: Optional settings to override defaults.
        tenant: Tenant name to use for requests.
        database: Database name to use for requests.

    Returns:
        ClientAPI: A configured client instance.

    Raises:
        ValueError: If settings specify a different host or port.
    Nchromadb.api.fastapi.FastAPI(Chroma server host provided in settings[3] is different to the one provided in HttpClient: []-Chroma server http port provided in settings[r[   )r   rV   intboolra   chroma_server_host
ValueErrorchroma_server_http_portchroma_server_ssl_enabledchroma_server_headersrW   rd   re   rf   rg   rP   rQ   rR   s          r<   
HttpClientrv     sB   6 :: t99Dt99D
s))C[[F8}}H=H" 
x'Bd'J'J Ox7R  O  O  HL  O  O  O
 
 	
 #'H' 
H,LPT,T,T YH<\  Y  Y  RV  Y  Y  Y
 
 	
 (,H$),H&%,H"HMMMMrL   c                   K   |t                      }t          |           } t          |          }t          |          }t          |          }t          |          }d|_        |j        r&|j        | k    rt          d|j         d|  d          | |_        |j        r&|j        |k    rt          d|j         d| d          ||_        ||_        ||_	        t          j        |||           d{V S )a  Create an async client that connects to a Chroma HTTP server.

    This supports multiple clients connecting to the same server and is the
    recommended production configuration.

    Args:
        host: Hostname of the Chroma server.
        port: HTTP port of the Chroma server.
        ssl: Whether to enable SSL for the connection.
        headers: Optional headers to send with each request.
        settings: Optional settings to override defaults.
        tenant: Tenant name to use for requests.
        database: Database name to use for requests.

    Returns:
        AsyncClientAPI: A configured async client instance.

    Raises:
        ValueError: If settings specify a different host or port.
    Nz'chromadb.api.async_fastapi.AsyncFastAPIrj   rk   rl   rm   r[   )r   rV   rn   ro   ra   rp   rq   rr   rs   rt   AsyncClientCreatorcreateru   s          r<   AsyncHttpClientrz   8  sp     < :: t99Dt99D
s))C[[F8}}HHH" 
x'Bd'J'J Ox7R  O  O  HL  O  O  O
 
 	
 #'H' 
H,LPT,T,T YH<\  Y  Y  RV  Y  Y  Y
 
 	
 (,H$),H&%,H"#*8         rL   zapi.trychroma.comi  T)
cloud_host
cloud_port
enable_sslapi_keyr{   r|   r}   c          	         t          dd|          g}t          d |D                       s5|D ]2}|j        p#t          j                            |j                  |_        3d |D             }	|	rOt          dd                    d |	D                        d	d                    d
 |	D                                  |t                      }| pt          j                            d          } | t          |           } |pt          j                            d          }|t          |          }t          |          }t          |          }t          |          }t          |          }d|_        ||_        ||_        ||_        d|_        ||_        t&          j        |_        d|_        t/          | ||          S )ag  Create a client for Chroma Cloud.

    If not provided, `tenant`, `database`, and `api_key` will be inferred from the environment variables `CHROMA_TENANT`, `CHROMA_DATABASE`, and `CHROMA_API_KEY`.

    Args:
        tenant: Tenant name to use, or None to infer from credentials.
        database: Database name to use, or None to infer from credentials.
        api_key: API key for Chroma Cloud.
        settings: Optional settings to override defaults.

    Returns:
        ClientAPI: A configured client instance.

    Raises:
        ValueError: If no API key is provided or available in the environment.
    r~   CHROMA_API_KEY)nameenv_varvaluec                     g | ]	}|j         
S rF   r   .0args     r<   
<listcomp>zCloudClient.<locals>.<listcomp>  s    333c	333rL   c                      g | ]}|j         	|S rN   r   r   s     r<   r   zCloudClient.<locals>.<listcomp>  s    FFFCCI4EC4E4E4ErL   zMissing required arguments: z, c                     g | ]	}|j         
S rF   )r   r   s     r<   r   zCloudClient.<locals>.<listcomp>  s    5W5W5W3ch5W5W5WrL   z8. Please provide them or set the environment variables: c                     g | ]	}|j         
S rF   )r   r   s     r<   r   zCloudClient.<locals>.<listcomp>  s    OtOtOt`cPSP[OtOtOtrL   NCHROMA_TENANTCHROMA_DATABASEri   z1chromadb.auth.token_authn.TokenAuthClientProviderTr[   )r6   allr   osenvirongetr   rq   joinr   rV   rn   ro   ra   rp   rr   rs   chroma_client_auth_providerchroma_client_auth_credentialsr	   X_CHROMA_TOKEN"chroma_auth_token_transport_header;chroma_overwrite_singleton_tenant_database_access_from_authrW   )
rQ   rR   r~   rP   r{   r|   r}   required_argsr   missing_argss
             r<   CloudClientr   s  s   8 	I/?wOOOM
 33]33344 A  	A 	AC	@RZ^^CK%@%@CIIFF=FFFL 
x4995W5W,5W5W5W+X+X x xEIYYOtOtgsOtOtOtEuEux x
 
 	

 :: 6rz~~o66FV<2:>>*;<<Hx=='llGZJZJj!!J=H",H'1H$)3H& 	< ( /6H+2F2UH/KOHHHMMMMrL   c                 b    t          |          }t          |          }t          |||           S )z
    Return a running chroma.API instance

    tenant: The tenant to use for this client. Defaults to the default tenant.
    database: The database to use for this client. Defaults to the default database.
    r[   )rV   rW   rT   s      r<   r   r     s/     [[F8}}HHMMMMrL   c                 "    t          |           S )z:Create an admin client for tenant and database management.rP   )AdminClientCreatorr   s    r<   r   r     s    x0000rL   )r7   N)NNNN)gtypingr   r   r   loggingchromadb.api.clientr   rW   r   r   chromadb.api.async_clientr   rx   chromadb.auth.token_authnr	   chromadb.configrG   r
   r   r   chromadb.apir   r   r   chromadb.api.models.Collectionr   chromadb.api.typesr   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/   "chromadb.execution.expression.planr0   &chromadb.execution.expression.operatorr1   r2   r3   r4   pathlibr5   r   __all__chromadb.typesr6   	getLogger__name__loggerrI   __version__ro   r=   IN_COLAB	is_clientchromadb.is_thin_clientr>   r:   rD   sqlite_version_info
subprocesssys
check_call
executable
__import__modulespopRuntimeErrorrK   rO   rV   rX   r^   rb   rn   rv   rz   r   rF   rL   r<   <module>r      s   ( ( ( ( ( ( ( ( ( (  7 7 7 7 7 7      H G G G G G : : : : : :     F F F F F F F F F F < < < < < < < < < < 5 5 5 5 5 5                                                                                                                                   F 6 5 5 5 5 5                  				) ) )V * ) ) ) ) )		8	$	$XZZ
T     ;==	666666II   III  NNN"Z// 	JJJ!J!ui9KL   J{###%([__[%A%ACK	"",(  4 4 4 4h    
 $( $N Nx NN N 	N N N N< (#' $	N N
T	
Nx N N 	N
 N N N NB #' $	N N
3-Nx N N 	N
 N N N N< (,#' $3N 3N
3N
3N 
3N d38n%	3N
 x 3N 3N 3N 3N 3N 3N 3Nn (,#' $8 8
8
8 
8 d38n%	8
 x 8 8 8 8 8 8 8x !"!#'	FN *FN FN FNSMFNsmFN c]FN x 	FN FN FN FN FN FN FN FNT $ $N NNN N 	N N N N& &.XZZ 1 1( 1H 1 1 1 1 1 1s   C% %C/.C/