3636from vectorcode .database .utils import get_collection_id , hash_file
3737from vectorcode .subcommands .vectorise import get_uuid
3838
39- logger = logging .getLogger (name = __name__ )
39+ _logger = logging .getLogger (name = __name__ )
4040
4141
4242def __convert_chroma_query_results (
@@ -80,7 +80,7 @@ async def _try_server(base_url: str):
8080 try :
8181 async with httpx .AsyncClient () as client :
8282 response = await client .get (url = heartbeat_url )
83- logger .debug (f"Heartbeat { heartbeat_url } returned { response = } " )
83+ _logger .debug (f"Heartbeat { heartbeat_url } returned { response = } " )
8484 if response .status_code == 200 :
8585 return True
8686 except (httpx .ConnectError , httpx .ConnectTimeout ):
@@ -109,7 +109,7 @@ async def _start_server(configs: Config):
109109 if not os .path .isdir (db_log_path ):
110110 os .makedirs (db_log_path )
111111 if not os .path .isdir (db_path ):
112- logger .warning (
112+ _logger .warning (
113113 f"Using local database at { os .path .expanduser ('~/.local/share/vectorcode/chromadb/' )} ." ,
114114 )
115115 db_path = os .path .expanduser ("~/.local/share/vectorcode/chromadb/" )
@@ -119,7 +119,7 @@ async def _start_server(configs: Config):
119119 port = int (s .getsockname ()[1 ])
120120
121121 server_url = f"http://127.0.0.1:{ port } "
122- logger .warning (f"Starting bundled ChromaDB server at { server_url } ." )
122+ _logger .warning (f"Starting bundled ChromaDB server at { server_url } ." )
123123 env .update ({"ANONYMIZED_TELEMETRY" : "False" })
124124 process = await asyncio .create_subprocess_exec (
125125 sys .executable ,
@@ -151,11 +151,11 @@ class _Chroma0ClientModel:
151151 process : Optional [Process ] = None
152152
153153
154- class Chroma0ClientManager :
155- singleton : Optional ["Chroma0ClientManager " ] = None
154+ class _Chroma0ClientManager :
155+ singleton : Optional ["_Chroma0ClientManager " ] = None
156156 __clients : dict [str , _Chroma0ClientModel ]
157157
158- def __new__ (cls ) -> "Chroma0ClientManager " :
158+ def __new__ (cls ) -> "_Chroma0ClientManager " :
159159 if cls .singleton is None :
160160 cls .singleton = super ().__new__ (cls )
161161 cls .singleton .__clients = {}
@@ -171,7 +171,7 @@ async def get_client(self, configs: Config, need_lock: bool = True):
171171 if self .__clients .get (project_root ) is None :
172172 process = None
173173 if not await _try_server (url ):
174- logger .info (f"Starting a new server at { url } " )
174+ _logger .info (f"Starting a new server at { url } " )
175175 process = await _start_server (configs )
176176 is_bundled = True
177177
@@ -183,11 +183,11 @@ async def get_client(self, configs: Config, need_lock: bool = True):
183183 lock = None
184184 if self .__clients [project_root ].is_bundled and need_lock :
185185 lock = LockManager ().get_lock (str (db_path ))
186- logger .debug (f"Locking { db_path } " )
186+ _logger .debug (f"Locking { db_path } " )
187187 await lock .acquire ()
188188 yield self .__clients [project_root ].client
189189 if lock is not None :
190- logger .debug (f"Unlocking { db_log_path } " )
190+ _logger .debug (f"Unlocking { db_log_path } " )
191191 await lock .release ()
192192
193193 def get_processes (self ) -> list [Process ]:
@@ -196,7 +196,7 @@ def get_processes(self) -> list[Process]:
196196 async def kill_servers (self ):
197197 termination_tasks : list [asyncio .Task ] = []
198198 for p in self .get_processes ():
199- logger .info (f"Killing bundled chroma server with PID: { p .pid } " )
199+ _logger .info (f"Killing bundled chroma server with PID: { p .pid } " )
200200 p .terminate ()
201201 termination_tasks .append (asyncio .create_task (p .wait ()))
202202 await asyncio .gather (* termination_tasks )
@@ -210,11 +210,19 @@ async def _create_client(self, configs: Config) -> AsyncClientAPI:
210210 }
211211 settings .update (valid_settings )
212212 parsed_url = urlparse (configs .db_params ["db_url" ])
213- logger .debug (f"Creating chromadb0 client from { db_settings } " )
214- settings ["chroma_server_host" ] = parsed_url .hostname or "127.0.0.1"
215- settings ["chroma_server_http_port" ] = parsed_url .port or 8000
216- settings ["chroma_server_ssl_enabled" ] = parsed_url .scheme == "https"
217- settings ["chroma_server_api_default_path" ] = parsed_url .path or APIVersion .V2
213+ _logger .debug (f"Creating chromadb0 client from { db_settings } " )
214+ settings ["chroma_server_host" ] = settings .get (
215+ "chroma_server_host" , parsed_url .hostname or "127.0.0.1"
216+ )
217+ settings ["chroma_server_http_port" ] = settings .get (
218+ "chroma_server_http_port" , parsed_url .port or 8000
219+ )
220+ settings ["chroma_server_ssl_enabled" ] = settings .get (
221+ "chroma_server_ssl_enabled" , parsed_url .scheme == "https"
222+ )
223+ settings ["chroma_server_api_default_path" ] = settings .get (
224+ "chroma_server_api_default_path" , parsed_url .path or APIVersion .V2
225+ )
218226 settings_obj = Settings (** settings )
219227 return await chromadb .AsyncHttpClient (
220228 settings = settings_obj ,
@@ -293,14 +301,15 @@ async def _create_or_get_collection(
293301 "embedding_function" : self ._configs .embedding_function ,
294302 }
295303 db_params = self ._configs .db_params
296- for key in db_params .get ("hnsw" , {}).keys ():
304+ user_hnsw = db_params .get ("hnsw" , {})
305+ for key in user_hnsw .keys ():
297306 meta_field_name : str = key
298307 if not meta_field_name .startswith ("hnsw:" ):
299308 meta_field_name = f"hnsw:{ meta_field_name } "
300- if db_params .get (key ) is not None :
301- collection_meta [meta_field_name ] = db_params [key ]
309+ if user_hnsw .get (key ) is not None :
310+ collection_meta [meta_field_name ] = user_hnsw [key ]
302311
303- async with Chroma0ClientManager ().get_client (self ._configs , True ) as client :
312+ async with _Chroma0ClientManager ().get_client (self ._configs , True ) as client :
304313 collection_id = get_collection_id (collection_path )
305314 if not allow_create :
306315 try :
@@ -349,7 +358,7 @@ def chunk_to_meta(chunk: Chunk) -> chromadb.Metadata:
349358 meta ["end" ] = chunk .end .row
350359 return meta
351360
352- async with Chroma0ClientManager ().get_client (self ._configs ) as client :
361+ async with _Chroma0ClientManager ().get_client (self ._configs ) as client :
353362 max_bs = await client .get_max_batch_size ()
354363 for batch_start_idx in range (0 , len (chunks ), max_bs ):
355364 batch_chunks = [
@@ -376,7 +385,7 @@ def chunk_to_meta(chunk: Chunk) -> chromadb.Metadata:
376385 return VectoriseStats (add = 1 )
377386
378387 async def list_collections (self ):
379- async with Chroma0ClientManager ().get_client (
388+ async with _Chroma0ClientManager ().get_client (
380389 self ._configs , need_lock = False
381390 ) as client :
382391 result : list [CollectionInfo ] = []
@@ -456,6 +465,6 @@ async def delete(self, collection_path: str, file_path: str | Sequence[str]):
456465 )
457466
458467 async def drop (self , collection_path : str ):
459- async with Chroma0ClientManager ().get_client (self ._configs ) as client :
468+ async with _Chroma0ClientManager ().get_client (self ._configs ) as client :
460469 await self ._create_or_get_collection (collection_path , False )
461470 await client .delete_collection (get_collection_id (collection_path ))
0 commit comments