o
    1Xxi@                     @   s  U d dl Z d dlZd dl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 d dlmZmZmZ d dlmZ d dlmZ d dlmZ d dlZd	Zzd d
lmZ W n eyl   dZd d
lmZ d dlmZ Y nw esud dlmZ d	Zzd dlmZ W n ey   d	ZY nw e e!Z"dZ#dhZ$h dZ%ddddddddddddddddZ&ee'e'f e(d< d Z)d!Z*G d"d# d#eZ+ed$d%d&Z,G d'd% d%eeZ-G d(d) d)e-Z.ed*Z/d+e'd,ee/ d-ee/ fd.d/Z0d0ee1 d-e'fd1d2Z2dS )3    N)ABC)TopologicalSorter)OptionalListAnyDictSetIterableUnion)TypeTypeVarcast)EnforceOverrides)override)LiteralF)BaseSettingsT)	validator)is_thin_clienta  [91mYou are using a deprecated configuration of Chroma.

[94mIf you do not have data you wish to migrate, you only need to change how you construct
your Chroma client. Please see the "New Clients" section of https://docs.trychroma.com/deployment/migration.
________________________________________________________________________________________________

If you do have data you wish to migrate, we have a migration tool you can use in order to
migrate your data to the new Chroma architecture.
Please `pip install chroma-migrate` and run `chroma-migrate` to migrate your data and then
change how you construct your Chroma client.

See https://docs.trychroma.com/deployment/migration for more information or join our discord at https://discord.gg/8g5FESbj for help![0mchroma_db_impl>	   duckdb+parquetchromadb.db.duckdb.DuckDBchromadb.api.local.LocalAPI!chromadb.db.clickhouse.Clickhouse#chromadb.db.duckdb.PersistentDuckDBrestlocalduckdb
clickhousechroma_api_implchroma_client_auth_providerchroma_server_authn_providerchroma_server_authz_providerchroma_sysdb_implchroma_consumer_implchroma_producer_implchroma_quota_provider_impl"chroma_rate_limiting_provider_implchroma_segment_manager_implchroma_segment_directory_implchroma_memberlist_provider_implchroma_product_telemetry_impl)zchromadb.api.APIzchromadb.api.ServerAPIz%chromadb.api.async_api.AsyncServerAPIz chromadb.auth.ClientAuthProviderz*chromadb.auth.ServerAuthenticationProviderz)chromadb.auth.ServerAuthorizationProviderzchromadb.db.system.SysDBzchromadb.ingest.Consumerzchromadb.ingest.Producerzchromadb.quota.QuotaProviderz+chromadb.rate_limiting.RateLimitingProviderzchromadb.segment.SegmentManagerz-chromadb.segment.distributed.SegmentDirectoryz/chromadb.segment.distributed.MemberlistProviderz1chromadb.telemetry.product.ProductTelemetryClient_abstract_type_keysdefault_tenantdefault_databasec                   @   sh  e Zd ZU dZeed< dZeed< edddddded	ee fd
dZ	dZ
ee ed< dZeed< dZeed< dZeed< dZee ed< dZeeeef  ed< dZee ed< dZee ed< dZeeeef  ed< dZee ed< g Zee ed< dZeed< dZeed< dZeed< dZee ed < dZeed!< dZee ed"< dZ ee ed#< dZ!ee ed$< d%gd%gd%gd&Z"eeee f ed'< dZ#eed(< dZ$ee ed)< dZ%ee ed*< dZ&ee ed+< dZ'ee ed,< dZ(ee ed-< dZ)ee ed.< d/Z*eed0< e*Z+eed1< dZ,eed2< dZ-ee ed3< d4Z.ee ed5< i Z/eeef ed6< dZ0ee ed7< d8Z1e2d9 ed:< d;Z3e2d< ed=< d>Z4eed?< d@Z5eedA< dBZ6eedC< dDZ7dZ8ee edE< dFZ9eedG< dFZ:eedH< dFZ;eedI< dJZ<eedK< dDZ=dLZ>dZ?ee edM< dZ@ee edN< dZAee edO< dPZBeedQ< dRed	eCfdSdTZDdRed	eCfdUdVZEG dWdX dXZFdS )YSettings environmentzchromadb.api.segment.SegmentAPIr   chroma_server_nofileT)prealwaysallow_reusevreturnc                 C   s    t |tu r| dkrd S |S )Nr/   )typestrstrip)clsr5    r;   N/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/chromadb/config.pyempty_str_to_noneg   s   zSettings.empty_str_to_noneN(   chroma_server_thread_pool_sizedefault	tenant_idtopic_namespacechroma_server_hostchroma_server_headerschroma_server_http_portFchroma_server_ssl_enabledchroma_server_ssl_verify/api/v1chroma_server_api_default_path chroma_server_cors_allow_originsis_persistentz./chromapersist_directoryr   chroma_memory_limit_byteschroma_segment_cache_policyallow_reset"chroma_auth_token_transport_headerr   chroma_client_auth_credentialsGET)rH   z/api/v1/heartbeatz/api/v1/versionchroma_server_auth_ignore_paths;chroma_overwrite_singleton_tenant_database_access_from_authr    chroma_server_authn_credentials$chroma_server_authn_credentials_filer!   chroma_server_authz_configchroma_server_authz_config_filez*chromadb.telemetry.product.posthog.Posthogr*   chroma_telemetry_implanonymized_telemetrychroma_otel_collection_endpointchromadbchroma_otel_service_namechroma_otel_collection_headerschroma_otel_granularityapply)nonevalidater`   
migrationsmd5)rd   sha256migrations_hash_algorithmzRchromadb.segment.impl.distributed.segment_directory.RendezvousHashSegmentDirectoryr(   zTchromadb.segment.impl.distributed.segment_directory.CustomResourceMemberlistProviderr)   zquery-service-memberlistworker_memberlist_name	localhostchroma_server_grpc_portz chromadb.db.impl.sqlite.SqliteDBr"   r$   r#   z7chromadb.segment.impl.manager.local.LocalSegmentManagerr'   i  r%   r&   r   z9chromadb.ingest.impl.simple_policy.SimpleAssignmentPolicy(chroma_collection_assignment_policy_implkeyc                 C   s$   | | }|du rt d| d|S )zYReturn the value of a required config key, or raise an exception if it is not
        setNzMissing required config value '')
ValueErrorselfrk   valr;   r;   r<   require   s   zSettings.requirec                 C   s(   t | |}t|tr|tv rtt|S N)getattr
isinstancer8   _legacy_config_valuesrm   LEGACY_ERRORrn   r;   r;   r<   __getitem__  s   
zSettings.__getitem__c                   @   s   e Zd ZdZdZdS )zSettings.Configz.envzutf-8N)__name__
__module____qualname__env_fileenv_file_encodingr;   r;   r;   r<   Config  s    r}   )Grx   ry   rz   r0   r8   __annotations__r   r   r   r=   r1   intr?   rA   rB   rC   rD   r   rE   rF   boolrG   r
   rI   rJ   r   rK   rL   rM   rN   rO   rP   r   rQ   rS   rT   r    rU   rV   r!   rW   rX   r*   rY   rZ   r[   r]   r^   r_   rc   r   rf   r(   r)   rg   chroma_coordinator_hostri   r"   r$   r#   r'   chroma_logservice_hostchroma_logservice_portr%   r&   r   rj   r   rq   rw   r}   r;   r;   r;   r<   r.   ]   s   
 

r.   T	Component)boundc                   @   sz   e Zd ZU ed  ed< ded< eed< dddZdee d	efd
dZ	d	ed  fddZ
dddZdddZdddZdS )r   _dependenciesSystem_system_runningsystemc                 C   s   t  | _|| _d| _d S )NF)setr   r   r   )ro   r   r;   r;   r<   __init__  s   
zComponent.__init__r7   r6   c                 C   s   | j |}| j| |S )zbGet a Component instance of the given type, and register as a dependency of
        that instance.)r   instancer   add)ro   r7   instr;   r;   r<   rq     s   zComponent.requirec                 C   s   | j S )z<Return the full set of components this component depends on.)r   ro   r;   r;   r<   dependencies&  s   zComponent.dependenciesNc                 C      t d| jj  d| _dS )zWIdempotently stop this component's execution and free all associated
        resources.zStopping component FNloggerdebug	__class__rx   r   r   r;   r;   r<   stop*  s   
zComponent.stopc                 C   r   )z-Idempotently start this component's executionzStarting component TNr   r   r;   r;   r<   start0  s   
zComponent.startc                 C   s   t d| jj  dS )zgReset this component's state to its initial blank state. Only intended to be
        called from tests.zResetting component N)r   r   r   rx   r   r;   r;   r<   reset_state5  s   zComponent.reset_state)r   r   r6   N)rx   ry   rz   r   r~   r   r   r   r   rq   r   r   r   r   r;   r;   r;   r<   r     s   
 


c                       s   e Zd ZU eed< eee ef ed< def fddZdee	 de	fddZ
dee fd	d
Zed fddZed fddZedddZ  ZS )r   settings
_instancesc                    s~  t r|d dvrtdtD ]}|| d urttq|d d ur7|d dkr7td |d dkr7td	 |d
 d urt dkrdd l	}|
|j\}}|d
 }||krctd| d|  nN||krz||j||f td|  W n6 ty } ztd| d| d|  W Y d }~nd }~ww ||k rtd| d| d ntd || _i | _t |  d S )Nr   )zchromadb.api.fastapi.FastAPIz'chromadb.api.async_fastapi.AsyncFastAPIa  Chroma is running in http-only client mode, and can only be run with 'chromadb.api.fastapi.FastAPI' or 'chromadb.api.async_fastapi.AsyncFastAPI' as the chroma_api_impl.             see https://docs.trychroma.com/guides#using-the-python-http-only-client for more information.rN   LRUzAFailed to set chroma_segment_cache_policy: Only LRU is available.rM   r   zPFailed to set chroma_segment_cache_policy: chroma_memory_limit_bytes is require.r1   WindowszUchroma_server_nofile cannot be set to a value greater than the current hard limit of z. Keeping soft limit at zSet chroma_server_nofile to z&Failed to set chroma_server_nofile to z: z" nofile soft limit will remain at zchroma_server_nofile is set to z., but this is less than current soft limit of z'. chroma_server_nofile will not be set.zWchroma_server_nofile is not supported on Windows. chroma_server_nofile will not be set.)r   RuntimeError_legacy_config_keysrm   rv   r   errorplatformr   resource	getrlimitRLIMIT_NOFILEloggingwarning	setrlimitinfo	Exceptionr   r   superr   )ro   r   rk   r   	curr_soft	curr_harddesired_softer   r;   r<   r   ?  sd   
zSystem.__init__r7   r6   c                 C   s   t |r#t|}|tvrtd| t| }| j|}t||}|| jvr8|| }|| j|< | j	r8|
  | j| }tt|S )z|Return an instance of the component type specified. If the system is running,
        the component will be started as well.z"Cannot instantiate abstract type: )inspect
isabstractget_fqnr+   rm   r   rq   	get_classr   r   r   r   r   )ro   r7   type_fqnrk   fqnimplr   r;   r;   r<   r     s   





zSystem.instancec                 C   s4   t  }| j D ]}|j|g| R   q| S )zYReturn the full set of all components and their dependencies in dependency
        order.)r   r   valuesr   r   static_order)ro   sorter	componentr;   r;   r<   
components  s   zSystem.componentsNc                    s$   t    |  D ]}|  q	d S rr   )r   r   r   ro   r   r   r;   r<   r     s   

zSystem.startc                    s,   t    tt|  D ]}|  qd S rr   )r   r   reversedlistr   r   r   r;   r<   r     s   

zSystem.stopc                 C   s2   | j jstdtt|  D ]}|  qdS )zOReset the state of this system and all constituents in reverse dependency orderzResetting is not allowed by this configuration (to enable it, set `allow_reset` to `True` in your Settings() or include `ALLOW_RESET=TRUE` in your environment variables)N)r   rO   rm   r   r   r   r   r   r;   r;   r<   r     s   
zSystem.reset_stater   )rx   ry   rz   r.   r~   r   r   r   r   r   r   r	   r   r   r   r   r   __classcell__r;   r;   r   r<   r   ;  s   
 A	r   Cr   r7   r6   c                 C   s2   |  dd\}}t|}t||}ttt |S )zIGiven a fully qualifed class name, import the module and return the class.   )rsplit	importlibimport_modulers   r   r   r   )r   r7   module_name
class_namemoduler:   r;   r;   r<   r     s   

r   r:   c                 C   s   | j  d| j S )z.Given a class, return its fully qualified namer   )ry   rx   )r:   r;   r;   r<   r     s   r   )3r   r   r   abcr   graphlibr   typingr   r   r   r   r   r	   r
   r   r   r   	overridesr   r   typing_extensionsr   r   in_pydantic_v2pydanticr   ImportErrorpydantic.v1r   r   chromadb.is_thin_client	getLoggerrx   r   rv   r   ru   r+   r8   r~   DEFAULT_TENANTDEFAULT_DATABASEr.   r   r   r   r   r   objectr   r;   r;   r;   r<   <module>   st   
 $
 6&z