From 53ac3b37c2cea962c8481cfd1e0c30d06ed5916c Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Tue, 23 Jul 2024 06:10:15 -0600 Subject: [PATCH] Disable semantic search by default and don't start processes unless enabled --- .../rootfs/etc/s6-overlay/s6-rc.d/chroma/run | 15 ++++++++-- .../semantic_search/get_search_settings.py | 28 +++++++++++++++++++ frigate/config.py | 2 +- 3 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 docker/main/rootfs/usr/local/semantic_search/get_search_settings.py diff --git a/docker/main/rootfs/etc/s6-overlay/s6-rc.d/chroma/run b/docker/main/rootfs/etc/s6-overlay/s6-rc.d/chroma/run index 45b44779b..ef477d8a2 100644 --- a/docker/main/rootfs/etc/s6-overlay/s6-rc.d/chroma/run +++ b/docker/main/rootfs/etc/s6-overlay/s6-rc.d/chroma/run @@ -9,8 +9,19 @@ set -o errexit -o nounset -o pipefail # Tell S6-Overlay not to restart this service s6-svc -O . -echo "[INFO] Starting ChromaDB..." +search_enabled=`python3 /usr/local/semantic_search/get_search_settings.py | jq -r .enabled` # Replace the bash process with the Frigate process, redirecting stderr to stdout exec 2>&1 -exec /usr/local/chroma run --path /config/chroma --host 127.0.0.1 + +if [[ "$search_enabled" == 'true' ]]; then + echo "[INFO] Starting ChromaDB..." + exec /usr/local/chroma run --path /config/chroma --host 127.0.0.1 +else + while true + do + sleep 9999 + continue + done + exit 0 +fi diff --git a/docker/main/rootfs/usr/local/semantic_search/get_search_settings.py b/docker/main/rootfs/usr/local/semantic_search/get_search_settings.py new file mode 100644 index 000000000..e4ec4ea1c --- /dev/null +++ b/docker/main/rootfs/usr/local/semantic_search/get_search_settings.py @@ -0,0 +1,28 @@ +"""Prints the semantic_search config as json to stdout.""" + +import json +import os + +import yaml + +config_file = os.environ.get("CONFIG_FILE", "/config/config.yml") + +# Check if we can use .yaml instead of .yml +config_file_yaml = config_file.replace(".yml", ".yaml") +if os.path.isfile(config_file_yaml): + config_file = config_file_yaml + +try: + with open(config_file) as f: + raw_config = f.read() + + if config_file.endswith((".yaml", ".yml")): + config: dict[str, any] = yaml.safe_load(raw_config) + elif config_file.endswith(".json"): + config: dict[str, any] = json.loads(raw_config) +except FileNotFoundError: + config: dict[str, any] = {} + +search_config: dict[str, any] = config.get("semantic_search", {"enabled": False}) + +print(json.dumps(search_config)) diff --git a/frigate/config.py b/frigate/config.py index 126d964ff..a430b3d6c 100644 --- a/frigate/config.py +++ b/frigate/config.py @@ -736,7 +736,7 @@ class ReviewConfig(FrigateBaseModel): class SemanticSearchConfig(FrigateBaseModel): - enabled: bool = Field(default=True, title="Enable semantic search.") + enabled: bool = Field(default=False, title="Enable semantic search.") reindex: Optional[bool] = Field( default=False, title="Reindex all detections on startup." )