
    ZiH                        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 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	 d dlmZ n# e$ r dZd dlmZ d dlmZ Y nw xY wesd dlmZ d
Z 	 d dl!m Z  n# e$ r d
Z Y nw xY w ej"        e#          Z$dZ%dhZ&h dZ'i ddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1Z(ee)e)f         e*d2<   d3Z+d4Z, G d5 d6e)e          Z- G d7 d8e          Z. G d9 d:e          Z/ ed;d<=          Z0 G d> d<ee          Z1 G d? d@e1          Z2 edA          Z3dBe)dCee3         dDee3         fdEZ4dFee5         dDe)fdGZ6dS )H    N)ABC)Enum)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/MMeYNTmh3x 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
clickhousezchromadb.api.APIchroma_api_implzchromadb.api.ServerAPIz%chromadb.api.async_api.AsyncServerAPIz chromadb.auth.ClientAuthProviderchroma_client_auth_providerz*chromadb.auth.ServerAuthenticationProviderchroma_server_authn_providerz)chromadb.auth.ServerAuthorizationProviderchroma_server_authz_providerzchromadb.db.system.SysDBchroma_sysdb_implz-chromadb.execution.executor.abstract.Executorchroma_executor_implzchromadb.ingest.Consumerchroma_consumer_implzchromadb.ingest.Producerchroma_producer_implzchromadb.quota.QuotaEnforcerchroma_quota_enforcer_implz%chromadb.rate_limit.RateLimitEnforcerchroma_rate_limit_enforcer_implz*chromadb.rate_limit.AsyncRateLimitEnforcer%chroma_async_rate_limit_enforcer_implzchromadb.segment.SegmentManagerchroma_segment_manager_implz-chromadb.segment.distributed.SegmentDirectorychroma_segment_directory_implz/chromadb.segment.distributed.MemberlistProviderchroma_memberlist_provider_implz1chromadb.telemetry.product.ProductTelemetryClientchroma_product_telemetry_impl_abstract_type_keysdefault_tenantdefault_databasec                       e Zd ZdZdZdS )
APIVersionz/api/v1z/api/v2N)__name__
__module____qualname__V1V2     L/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/config.pyr3   r3   _   s        	B	BBBr:   r3   c                       e Zd ZdZdZdZdS )RoutingModea  
    Routing mode for the segment directory

    node - Assign based on the node name, used in production with multi-node settings with the assumption that
    there is one query service pod per node. This is useful for when there is a disk based cache on the
    node that we want to route to.

    id - Assign based on the member id, used in development and testing environments where the node name is not
    guaranteed to be unique. (I.e a local development kubernetes env). Or when there are multiple query service
    pods per node.
    nodeidN)r4   r5   r6   __doc__NODEIDr9   r:   r;   r=   r=   g   s$        
 
 D	BBBr:   r=   c                   D   e Zd ZU dZeed<   dZeed<    edddd          ded	ee         f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<   ej        Zee         ed<   g 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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&<   ej         d'gej         d(d'gej         d)d'gej(         d'gej(         d(d'gej(         d)d'gi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d0<   dZ0ee         ed1<   d2Z1eed3<   e1Z2eed4<   dZ3eed5<   dZ4ee         ed6<   d7Z5ee         ed8<   i Z6eeef         ed9<   dZ7ee         ed:<   d;Z8e9d<         ed=<   d>Z:e9d?         ed@<   dAZ;eedB<   e<j=        Z>e<edC<   dDZ?eedE<   dFZ@eedG<   dHZAdZBee         edI<   dJZCeedK<   dJZDeedL<   dJZEeedM<   dNZFeedO<   dPZGeedQ<   dRZHeedS<   dHZIdTZJdZKee         edU<   dZLee         edV<   dWZMeedX<   dYZNeedZ<   d[ZOeed\<   d]ZPeed^<   d]ZQeed_<   d`ZReeda<   dZSee         edb<   dcZTeedd<   deed	eUfdfZVdeed	eUfdgZW G dh di          ZXdS )jSettings environmentz!chromadb.api.rust.RustBindingsAPIr    chroma_server_nofileT)prealwaysallow_reusevreturnc                 f    t          |          t          u r|                                dk    rd S |S )NrE   )typestrstrip)clsrK   s     r;   empty_str_to_nonezSettings.empty_str_to_none   s+    77c>>aggii2oo4r:   N(   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chroma_server_api_default_path chroma_server_cors_allow_originsg      D@chroma_http_keepalive_secschroma_http_max_connections%chroma_http_max_keepalive_connectionsis_persistentz./chromapersist_directoryr   chroma_memory_limit_byteschroma_segment_cache_policyallow_reset"chroma_auth_token_transport_headerr!   chroma_client_auth_credentialsGETz
/heartbeatz/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validaterw   
migrationsmd5)r{   sha256migrations_hash_algorithmzRchromadb.segment.impl.distributed.segment_directory.RendezvousHashSegmentDirectoryr,   %chroma_segment_directory_routing_modezTchromadb.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+   z/chromadb.execution.executor.local.LocalExecutorr%      chroma_query_replication_factori  chroma_quota_provider_impl"chroma_rate_limiting_provider_implz8chromadb.quota.simple_quota_enforcer.SimpleQuotaEnforcerr(   z=chromadb.rate_limit.simple_rate_limit.SimpleRateLimitEnforcerr)   zBchromadb.rate_limit.simple_rate_limit.SimpleAsyncRateLimitEnforcerr*      )chroma_logservice_request_timeout_seconds$chroma_sysdb_request_timeout_seconds<   $chroma_query_request_timeout_secondsr   z9chromadb.ingest.impl.simple_policy.SimpleAssignmentPolicy(chroma_collection_assignment_policy_implkeyc                 @    | |         }|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selfr   vals      r;   requirezSettings.require7  s1     3i;EsEEEFFF
r:   c                     t          | |          }t          |t                    r|t          v rt	          t
                    |S N)getattr
isinstancerO   _legacy_config_valuesr   LEGACY_ERRORr   s      r;   __getitem__zSettings.__getitem__?  sA    dC  c3 	+C+@$@$@\***
r:   c                       e Zd ZdZdZdS )Settings.Configz.envzutf-8N)r4   r5   r6   env_fileenv_file_encodingr9   r:   r;   Configr   F  s        #r:   r   )Yr4   r5   r6   rF   rO   __annotations__r    r   r   rR   rG   intrT   rV   rW   rX   rY   r	   rZ   r[   boolr\   r   r3   r8   r]   r^   r   r_   floatr`   ra   rb   rc   rd   re   rf   rg   r!   rh   r7   rj   rk   r"   rl   rm   r#   rn   ro   r.   rp   rq   rr   rt   ru   rv   rz   r   r}   r,   r=   rB   r~   r-   r   chroma_coordinator_hostr   r$   r'   r&   r+   r%   r   chroma_logservice_hostchroma_logservice_portr   r   r(   r)   r*   r   r   r   r   r   r   r   r   r   r9   r:   r;   rD   rD   x   sl        
 K ?OS>>>Y%4$OOO# (3-    PO
 +/(3-...*,"C,,, Is$OS$$$(,,,,6:8DcN3:::-1Xc]11105x~555;?huT3Y'78???;E="HZ$8HHH24$d3i4442666615#555;?)8C=???  M4's'''%&s&&&15#555K 9=&<<< 26#555 59"HSM888 =UG=$$$ug="""UG=UG=$$$ug="""UG=#T#tCy.%9    IN?MMM 37 (3-66659#Xc]999:>((3->>> 37 (3-6660444459#Xc]999 *V!3UUU!>3>>>!%$%%%57#Xc]777.8hsm88857"DcN777-1Xc]111 8?J34>>> ;@w7??? *~!3}}}9D);GGG ,B#S  B  B  B"<C<<<)-1Xc]111?s??? B#BBB B#BBB 	B      !R#QQQ+,#S,,,("044448<&<<< 	C    
 	H $S   
 	M *3    67-s66601(#11102(#222 %)NHSM(((C -c   3 3    s s    $ $ $ $ $ $ $ $ $ $r:   rD   T	Component)boundc                       e Zd ZU ed          ed<   ded<   eed<   ddZdee         defd	Z	ded          fd
Z
ddZddZddZdS )r   _dependenciesSystem_system_runningsystemc                 H    t                      | _        || _        d| _        d S )NF)setr   r   r   )r   r   s     r;   __init__zComponent.__init__S  s      UUr:   rN   rL   c                 n    | j                             |          }| j                            |           |S )zbGet a Component instance of the given type, and register as a dependency of
        that instance.)r   instancer   add)r   rN   insts      r;   r   zComponent.requireX  s5     |$$T**t$$$r:   c                     | j         S )z<Return the full set of components this component depends on.)r   r   s    r;   dependencieszComponent.dependencies_  s    !!r:   Nc                 b    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__r4   r   r   s    r;   stopzComponent.stopc  s/     	D4>+BDDEEEr:   c                 b    t                               d| j        j                    d| _        dS )z-Idempotently start this component's executionzStarting component TNr   r   s    r;   startzComponent.starti  s-    D4>+BDDEEEr:   c                 T    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   r4   r   s    r;   reset_statezComponent.reset_staten  s*     	EDN,CEEFFFFFr:   )r   r   rL   N)r4   r5   r6   r
   r   r   r   r   r   r   r   r   r   r   r9   r:   r;   r   r   N  s         {####NNN   
DG     "c+. " " " "      
G G G G G Gr:   c                        e Zd ZU eed<   eee         ef         ed<   def fdZdee	         de	fdZ
dee         fdZed fd	            Zed fd
            Zedd            Z xZS )r   settings
_instancesc           	         t           r|d         dvrt          d          t          D ]}||         t          t                    |d         L|d         dk    r@t
                              d           |d         dk    rt
                              d	           |d
         t          j                    dk    rdd l	}|
                    |j                  \  }}|d
         }||k    rt          j        d| d|            n||k    rv	 |                    |j        ||f           t
                              d|            n|# t           $ r-}t
                              d| d| d|            Y d }~nJd }~ww xY w||k     r!t
                              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.re   LRUzAFailed to set chroma_segment_cache_policy: Only LRU is available.rd   r   zPFailed to set chroma_segment_cache_policy: chroma_memory_limit_bytes is require.rG   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_keysr   r   r   errorplatformr   resource	getrlimitRLIMIT_NOFILEloggingwarning	setrlimitinfo	Exceptionr   r   superr   )	r   r   r   r   	curr_soft	curr_harddesired_softer   s	           r;   r   zSystem.__init__x  s    		)* 3   #k  
 ' 	/ 	/C}( ... ) 23?675@@LLS   3499f  
 *+7  I--'/'9'9(:P'Q'Q$	9'(>?)++O _py  _  _  T]  _  _    "I-- **$2\94M   $Q<$Q$QRRRR$    F\  F  FUV  F  F  {D  F  F       
 "I--NN i,  i  iv  i  i  i   m   !s   :E 
E?#E::E?rN   rL   c                    t          j        |          rat          |          }|t          vrt	          d|           t          |         }| j                            |          }t          ||          }|| j        vr0 ||           }|| j        |<   | j	        r|
                                 | 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/   r   r   r   	get_classr   r   r   r   r   )r   rN   type_fqnr   fqnimplr   s          r;   r   zSystem.instance  s     d## 	(t}}H222 !Ld!L!LMMM%h/C-'',,CS$''Dt&&4::D$(DOD!} 

t$At}}r:   c                     t                      }| j                                        D ]"} |j        |g|                                R   #|                                S )zYReturn the full set of all components and their dependencies in dependency
        order.)r   r   valuesr   r   static_order)r   sorter	components      r;   
componentszSystem.components  sh     0A/B/B//11 	= 	=IFJy<9#9#9#;#;<<<<<""$$$r:   Nc                     t                                                       |                                 D ]}|                                 d S r   )r   r   r   r   r   r   s     r;   r   zSystem.start  sJ    ** 	 	IOO	 	r:   c                     t                                                       t          t          |                                                     D ]}|                                 d S r   )r   r   reversedlistr   r   s     r;   r   zSystem.stop  sZ    !$t'8'8"9"9:: 	 	INN	 	r:   c                     | j         j        st          d          t          t	          |                                                     D ]}|                                 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   rf   r   r   r   r   r   )r   r   s     r;   r   zSystem.reset_state  ss     }( 	 |   "$t'8'8"9"9:: 	$ 	$I!!####	$ 	$r:   r   )r4   r5   r6   rD   r   r	   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r   s   @r;   r   r   t  s'        T)_i/0000? ? ? ? ? ? ?BT!W     *%HY/ % % % %      X
      X
 $ $ $ X$ $ $ $ $r:   r   Cr   rN   rL   c                     |                      dd          \  }}t          j        |          }t          ||          }t	          t
          t                   |          S )zIGiven a fully qualifed class name, import the module and return the class.   )rsplit	importlibimport_moduler   r   r   r   )r   rN   module_name
class_namemodulerQ   s         r;   r   r     sM    !jja00K$[11F
&*
%
%CQr:   rQ   c                 $    | j          d| j         S )z.Given a class, return its fully qualified namer   )r5   r4   )rQ   s    r;   r   r     s    n--s|---r:   )7r   r   r   abcr   enumr   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	getLoggerr4   r   r   r   r   r/   rO   r   DEFAULT_TENANTDEFAULT_DATABASEr3   r=   rD   r   r   r   r   r   objectr   r9   r:   r;   <module>r     sw                      & & & & & & B B B B B B B B B B B B B B B B B B & & & & & & & & & & & & & & & &       % % % % % % &%%%%%%% & & &N((((((%%%%%%%%&
  #"""""" 6666666   NNN 
	8	$	$R  
 
 
  ' )	'
 /' ,->' '(E' 12P' 01O'  3' 45K'  6'  6' #$@' ,-N'  12Y!'" &'D#'$ 45T%'& 67X''( 89X)' T#s(^   . "%     d       $   "P$ P$ P$ P$ P$| P$ P$ P$f GC{####G #G #G #G #G% #G #G #GLw$ w$ w$ w$ w$Y w$ w$ w$t GCLL3 d1g $q'    .f .# . . . . . .s$   A A21A2 B BB