Repository: chroma-core/chroma

Issue #1587: Dev container runs pip install everytime container is stopped and started [Bug]: 
Created: 2023-12-26T11:37:47Z
What happened?
The container always re-installs chroma-hnswlib and numpy each time it is stopped and started. Not when torn down with "down" but just stopped temporarily with "stop" keyword.
And sometimes when network is slow, this can break and make the container redundant without retrying the process.
Can this be set to just install on initial build and reinstall from cache if at all needed?
Because after the install fails, it goes ahead to start the uvicorn server even though the code on the container is currently broken, so the client side cannot access it.
Versions
chroma:0.4.18.dev23
Relevant log output
2023-12-26 12:18:30 Rebuilding hnsw to ensure architecture compatibility
2023-12-26 12:18:37 Collecting chroma-hnswlib
2023-12-26 12:18:38   Downloading chroma_hnswlib-0.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB)
2023-12-26 12:19:24      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 56.8 kB/s eta 0:00:00
2023-12-26 12:19:32 Collecting numpy
2023-12-26 12:19:32   Downloading numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)
2023-12-26 12:22:19      ━━━━━━━━━━━━━━━━━━╸                      8.6/18.2 MB 58.2 kB/s eta 0:02:46
2023-12-26 12:22:19 ERROR: Exception:
2023-12-26 12:22:19 Traceback (most recent call last):
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/urllib3/response.py", line 438, in _error_catcher
2023-12-26 12:22:19     yield
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/urllib3/response.py", line 561, in read
2023-12-26 12:22:19     data = self._fp_read(amt) if not fp_closed else b""
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/urllib3/response.py", line 527, in _fp_read
2023-12-26 12:22:19     return self._fp.read(amt) if amt is not None else self._fp.read()
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/http/client.py", line 466, in read
2023-12-26 12:22:19     s = self.fp.read(amt)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/socket.py", line 705, in readinto
2023-12-26 12:22:19     return self._sock.recv_into(b)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/ssl.py", line 1307, in recv_into
2023-12-26 12:22:19     return self.read(nbytes, buffer)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/ssl.py", line 1163, in read
2023-12-26 12:22:19     return self._sslobj.read(len, buffer)
2023-12-26 12:22:19 TimeoutError: The read operation timed out
2023-12-26 12:22:19 
2023-12-26 12:22:19 During handling of the above exception, another exception occurred:
2023-12-26 12:22:19 
2023-12-26 12:22:19 Traceback (most recent call last):
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/cli/base_command.py", line 160, in exc_logging_wrapper
2023-12-26 12:22:19     status = run_func(*args)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/cli/req_command.py", line 247, in wrapper
2023-12-26 12:22:19     return func(self, options, args)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/commands/install.py", line 419, in run
2023-12-26 12:22:19     requirement_set = resolver.resolve(
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 92, in resolve
2023-12-26 12:22:19     result = self._result = resolver.resolve(
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 481, in resolve
2023-12-26 12:22:19     state = resolution.resolve(requirements, max_rounds=max_rounds)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 373, in resolve
2023-12-26 12:22:19     failure_causes = self._attempt_to_pin_criterion(name)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 213, in _attempt_to_pin_criterion
2023-12-26 12:22:19     criteria = self._get_updated_criteria(candidate)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 204, in _get_updated_criteria
2023-12-26 12:22:19     self._add_to_criteria(criteria, requirement, parent=candidate)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 172, in _add_to_criteria
2023-12-26 12:22:19     if not criterion.candidates:
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/resolvelib/structs.py", line 151, in __bool__
2023-12-26 12:22:19     return bool(self._sequence)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 155, in __bool__
2023-12-26 12:22:19     return any(self)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 143, in <genexpr>
2023-12-26 12:22:19     return (c for c in iterator if id(c) not in self._incompatible_ids)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 47, in _iter_built
2023-12-26 12:22:19     candidate = func()
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 206, in _make_candidate_from_link
2023-12-26 12:22:19     self._link_candidate_cache[link] = LinkCandidate(
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 297, in __init__
2023-12-26 12:22:19     super().__init__(
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 162, in __init__
2023-12-26 12:22:19     self.dist = self._prepare()
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 231, in _prepare
2023-12-26 12:22:19     dist = self._prepare_distribution()
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 308, in _prepare_distribution
2023-12-26 12:22:19     return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/operations/prepare.py", line 491, in prepare_linked_requirement
2023-12-26 12:22:19     return self._prepare_linked_requirement(req, parallel_builds)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/operations/prepare.py", line 536, in _prepare_linked_requirement
2023-12-26 12:22:19     local_file = unpack_url(
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/operations/prepare.py", line 166, in unpack_url
2023-12-26 12:22:19     file = get_http_url(
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/operations/prepare.py", line 107, in get_http_url
2023-12-26 12:22:19     from_path, content_type = download(link, temp_dir.path)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/network/download.py", line 147, in __call__
2023-12-26 12:22:19     for chunk in chunks:
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/cli/progress_bars.py", line 53, in _rich_progress_bar
2023-12-26 12:22:19     for chunk in iterable:
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_internal/network/utils.py", line 63, in response_chunks
2023-12-26 12:22:19     for chunk in response.raw.stream(
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/urllib3/response.py", line 622, in stream
2023-12-26 12:22:19     data = self.read(amt=amt, decode_content=decode_content)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/urllib3/response.py", line 560, in read
2023-12-26 12:22:19     with self._error_catcher():
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/contextlib.py", line 153, in __exit__
2023-12-26 12:22:19     self.gen.throw(typ, value, traceback)
2023-12-26 12:22:19   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/urllib3/response.py", line 443, in _error_catcher
2023-12-26 12:22:19     raise ReadTimeoutError(self._pool, None, "Read timed out.")
2023-12-26 12:22:19 pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
2023-12-26 12:22:21 
2023-12-26 12:22:21 [notice] A new release of pip is available: 23.0.1 -> 23.3.2
2023-12-26 12:22:21 [notice] To update, run: pip install --upgrade pip
2023-12-26 12:22:22 WARNING:  [26-12-2023 11:22:22] chroma_server_nofile is set to 65535, but this is less than current soft limit of 1048576. chroma_server_nofile will not be set.
2023-12-26 12:22:22 INFO:     [26-12-2023 11:22:22] Anonymized telemetry enabled. See                     https://docs.trychroma.com/telemetry for more information.
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Starting component System
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Starting component OpenTelemetryClient
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Starting component SimpleAssignmentPolicy
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Starting component SqliteDB
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Starting component Posthog
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Starting component LocalSegmentManager
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Starting component SegmentAPI
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Server Auth Provider: chromadb.auth.basic.BasicAuthServerProvider
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Registering provider: local_authz_config
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Registering provider: simple_rbac
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Registering provider: basic
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Registering provider: basic
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Registering provider: htpasswd_file
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Registering provider: token_config
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Registering provider: user_token_config
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Registering provider: token
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Registering provider: token
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Starting component HtpasswdFileServerAuthCredentialsProvider
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Starting component BasicAuthServerProvider
2023-12-26 12:22:22 DEBUG:    [26-12-2023 11:22:22] Starting component FastAPIChromaAuthMiddleware
2023-12-26 12:22:22 INFO:     [26-12-2023 11:22:22] Started server process [13]
2023-12-26 12:22:22 INFO:     [26-12-2023 11:22:22] Waiting for application startup.
2023-12-26 12:22:22 INFO:     [26-12-2023 11:22:22] Application startup complete.
2023-12-26 12:22:22 INFO:     [26-12-2023 11:22:22] Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

Duplicate issue #1568: [Install issue]: Rebuilding hnsw breaking docker image
Created: 2023-12-22T17:25:57Z
What happened?
Chroma keeps trying to rebuild the hnsw library but gets stuck and times out causing it to fail my health check and break the docker compose.
Eventually chroma sorts itself out but I have to manually start my containers relying on it. Is there a way to disable this rebuild every time? It seems a bit unnecessary but I dont know the full scope of what it does either.
Thanks for the help guys.
Versions
Chroma 0.4.22.dev6 Windows
Relevant log output
2023-12-22 12:22:24 WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)")': /simple/chroma-hnswlib/
2023-12-22 12:22:07 Rebuilding hnsw to ensure architecture compatibility
2023-12-22 12:22:24 Collecting chroma-hnswlib
2023-12-22 12:22:24   Downloading chroma_hnswlib-0.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB)
2023-12-22 12:23:56      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━         1.9/2.4 MB 26.1 kB/s eta 0:00:18
2023-12-22 12:23:56 ERROR: Exception:
2023-12-22 12:23:56 Traceback (most recent call last):
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/urllib3/response.py", line 438, in _error_catcher
2023-12-22 12:23:56     yield
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/urllib3/response.py", line 561, in read
2023-12-22 12:23:56     data = self._fp_read(amt) if not fp_closed else b""
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/urllib3/response.py", line 527, in _fp_read
2023-12-22 12:23:56     return self._fp.read(amt) if amt is not None else self._fp.read()
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/http/client.py", line 466, in read
2023-12-22 12:23:56     s = self.fp.read(amt)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/socket.py", line 705, in readinto
2023-12-22 12:23:56     return self._sock.recv_into(b)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/ssl.py", line 1307, in recv_into
2023-12-22 12:23:56     return self.read(nbytes, buffer)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/ssl.py", line 1163, in read
2023-12-22 12:23:56     return self._sslobj.read(len, buffer)
2023-12-22 12:23:56 TimeoutError: The read operation timed out
2023-12-22 12:23:56 
2023-12-22 12:23:56 During handling of the above exception, another exception occurred:
2023-12-22 12:23:56 
2023-12-22 12:23:56 Traceback (most recent call last):
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/cli/base_command.py", line 160, in exc_logging_wrapper
2023-12-22 12:23:56     status = run_func(*args)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/cli/req_command.py", line 247, in wrapper
2023-12-22 12:23:56     return func(self, options, args)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/commands/install.py", line 419, in run
2023-12-22 12:23:56     requirement_set = resolver.resolve(
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 92, in resolve
2023-12-22 12:23:56     result = self._result = resolver.resolve(
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 481, in resolve
2023-12-22 12:23:56     state = resolution.resolve(requirements, max_rounds=max_rounds)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 348, in resolve
2023-12-22 12:23:56     self._add_to_criteria(self.state.criteria, r, parent=None)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 172, in _add_to_criteria
2023-12-22 12:23:56     if not criterion.candidates:
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/resolvelib/structs.py", line 151, in __bool__
2023-12-22 12:23:56     return bool(self._sequence)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 155, in __bool__
2023-12-22 12:23:56     return any(self)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 143, in <genexpr>
2023-12-22 12:23:56     return (c for c in iterator if id(c) not in self._incompatible_ids)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 47, in _iter_built
2023-12-22 12:23:56     candidate = func()
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 206, in _make_candidate_from_link
2023-12-22 12:23:56     self._link_candidate_cache[link] = LinkCandidate(
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 297, in __init__
2023-12-22 12:23:56     super().__init__(
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 162, in __init__
2023-12-22 12:23:56     self.dist = self._prepare()
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 231, in _prepare
2023-12-22 12:23:56     dist = self._prepare_distribution()
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 308, in _prepare_distribution
2023-12-22 12:23:56     return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/operations/prepare.py", line 491, in prepare_linked_requirement
2023-12-22 12:23:56     return self._prepare_linked_requirement(req, parallel_builds)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/operations/prepare.py", line 536, in _prepare_linked_requirement
2023-12-22 12:23:56     local_file = unpack_url(
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/operations/prepare.py", line 166, in unpack_url
2023-12-22 12:23:56     file = get_http_url(
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/operations/prepare.py", line 107, in get_http_url
2023-12-22 12:23:56     from_path, content_type = download(link, temp_dir.path)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/network/download.py", line 147, in __call__
2023-12-22 12:23:56     for chunk in chunks:
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/cli/progress_bars.py", line 53, in _rich_progress_bar
2023-12-22 12:23:56     for chunk in iterable:
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_internal/network/utils.py", line 63, in response_chunks
2023-12-22 12:23:56     for chunk in response.raw.stream(
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/urllib3/response.py", line 622, in stream
2023-12-22 12:23:56     data = self.read(amt=amt, decode_content=decode_content)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/urllib3/response.py", line 560, in read
2023-12-22 12:23:56     with self._error_catcher():
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/contextlib.py", line 153, in __exit__
2023-12-22 12:23:56     self.gen.throw(typ, value, traceback)
2023-12-22 12:23:56   File "/usr/local/lib/python3.10/site-packages/pip/_vendor/urllib3/response.py", line 443, in _error_catcher
2023-12-22 12:23:56     raise ReadTimeoutError(self._pool, None, "Read timed out.")
2023-12-22 12:23:56 pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
2023-12-22 12:23:59 
2023-12-22 12:23:59 [notice] A new release of pip is available: 23.0.1 -> 23.3.2
2023-12-22 12:23:59 [notice] To update, run: pip install --upgrade pip
2023-12-22 12:24:00 /chroma/./chromadb/utils/embedding_functions.py:613: SyntaxWarning: "is" with a literal. Did you mean "=="?
2023-12-22 12:24:00   if self._task_type is "RETRIEVAL_DOCUMENT":
2023-12-22 12:24:00 DEBUG:    [22-12-2023 17:24:00] Registering provider: token_config
2023-12-22 12:24:00 DEBUG:    [22-12-2023 17:24:00] Registering provider: user_token_config
2023-12-22 12:24:00 DEBUG:    [22-12-2023 17:24:00] Registering provider: token
2023-12-22 12:24:00 DEBUG:    [22-12-2023 17:24:00] Registering provider: token
2023-12-22 12:24:01 WARNING:  [22-12-2023 17:24:01] chroma_server_nofile is set to 65535, but this is less than current soft limit of 1048576. chroma_server_nofile will not be set.
2023-12-22 12:24:01 INFO:     [22-12-2023 17:24:01] Anonymized telemetry enabled. See                     https://docs.trychroma.com/telemetry for more information.
2023-12-22 12:24:01 DEBUG:    [22-12-2023 17:24:01] Starting component System
2023-12-22 12:24:01 DEBUG:    [22-12-2023 17:24:01] Starting component OpenTelemetryClient
2023-12-22 12:24:01 DEBUG:    [22-12-2023 17:24:01] Starting component SimpleAssignmentPolicy
2023-12-22 12:24:01 DEBUG:    [22-12-2023 17:24:01] Starting component SqliteDB
2023-12-22 12:24:01 DEBUG:    [22-12-2023 17:24:01] Starting component Posthog
2023-12-22 12:24:01 DEBUG:    [22-12-2023 17:24:01] Starting component LocalSegmentManager
2023-12-22 12:24:01 DEBUG:    [22-12-2023 17:24:01] Starting component SegmentAPI
2023-12-22 12:24:01 INFO:     [22-12-2023 17:24:01] Started server process [89]
2023-12-22 12:24:01 INFO:     [22-12-2023 17:24:01] Waiting for application startup.
2023-12-22 12:24:01 INFO:     [22-12-2023 17:24:01] Application startup complete.
2023-12-22 12:24:01 INFO:     [22-12-2023 17:24:01] Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
2023-12-22 12:24:07 INFO:     [22-12-2023 17:24:07] 127.0.0.1:40896 - "GET /api/v1/heartbeat HTTP/1.1" 200
2023-12-22 12:24:17 INFO:     [22-12-2023 17:24:17] 127.0.0.1:51136 - "GET /api/v1/heartbeat HTTP/1.1" 200
2023-12-22 12:24:27 INFO:     [22-12-2023 17:24:27] 127.0.0.1:33130 - "GET /api/v1/heartbeat HTTP/1.1" 200
2023-12-22 12:24:38 INFO:     [22-12-2023 17:24:38] 127.0.0.1:45198 - "GET /api/v1/heartbeat HTTP/1.1" 200
2023-12-22 12:24:48 INFO:     [22-12-2023 17:24:48] 127.0.0.1:50756 - "GET /api/v1/heartbeat HTTP/1.1" 200
2023-12-22 12:24:58 INFO:     [22-12-2023 17:24:58] 127.0.0.1:44268 - "GET /api/v1/heartbeat HTTP/1.1" 200
2023-12-22 12:25:08 INFO:     [22-12-2023 17:25:08] 127.0.0.1:44106 - "GET /api/v1/heartbeat HTTP/1.1" 200
2023-12-22 12:25:18 INFO:     [22-12-2023 17:25:18] 127.0.0.1:51220 - "GET /api/v1/heartbeat HTTP/1.1" 200
2023-12-22 12:25:28 INFO:     [22-12-2023 17:25:28] 127.0.0.1:50782 - "GET /api/v1/heartbeat HTTP/1.1" 200

Closing comment (2023-12-30T09:16:29Z): @Solomin0, @theabrahamaudu, Actually, we already have pre-built images for all architectures, so technically speaking, we are not rebuilding it (most of the time), only re-downloading it. This issue is somewhat a duplicate of #1587. That said, let me reiterate here too. If you run Chroma via docker docker run -d chromadb/chroma:latest, then you will be re-downloading the hnsw lib + numpy. This is due to the default docker entrypoint script, which forces reinstallation - 
  
    
      chroma/bin/docker_entrypoint.sh
    
    
         Line 4
      in
      73bfda2
    
  
  
    

        
          
           pip install --force-reinstall --no-cache-dir chroma-hnswlib 
        
    
  


If you'd like to skip this re-downloading, you can always execute the uvicorn command as entry command instead of the default script. Here is an example:
docker run -d -e IS_PERSISTENT=TRUE -v ./chromadb:/chroma/chroma/ chromadb/chroma:latest uvicorn chromadb.app:app --workers 1 --host 0.0.0.0 --port 8000 \
  --proxy-headers --log-config chromadb/log_config.yml
Meanwhile, we'll do some thinking on how to improve the script so that boot times are faster if there is no need to re-download (e.g., architecture matches the already installed version).