Compare commits

...
2 changed files with 64 additions and 32 deletions
@@ -3,6 +3,7 @@
import io
import logging
import os
import threading
import numpy as np
from PIL import Image
@@ -53,6 +54,11 @@ class JinaV2Embedding(BaseEmbedding):
self.tokenizer = None
self.image_processor = None
self.runner = None
# Lock to prevent concurrent calls (text and vision share this instance)
self._call_lock = threading.Lock()
# download the model and tokenizer
files_names = list(self.download_urls.keys()) + [self.tokenizer_file]
if not all(
os.path.exists(os.path.join(self.download_path, n)) for n in files_names
@@ -200,6 +206,9 @@ class JinaV2Embedding(BaseEmbedding):
def __call__(
self, inputs: list[str] | list[Image.Image] | list[str], embedding_type=None
) -> list[np.ndarray]:
# Lock the entire call to prevent race conditions when text and vision
# embeddings are called concurrently from different threads
with self._call_lock:
self.embedding_type = embedding_type
if not self.embedding_type:
raise ValueError(
@@ -251,11 +251,30 @@ function GeneralFilterButton({
updateLabelFilter,
}: GeneralFilterButtonProps) {
const { t } = useTranslation(["components/filter"]);
const { data: config } = useSWR<FrigateConfig>("config", {
revalidateOnFocus: false,
});
const [open, setOpen] = useState(false);
const [currentLabels, setCurrentLabels] = useState<string[] | undefined>(
selectedLabels,
);
const allAudioListenLabels = useMemo<Set<string>>(() => {
if (!config) {
return new Set<string>();
}
const labels = new Set<string>();
Object.values(config.cameras).forEach((camera) => {
if (camera?.audio?.enabled) {
camera.audio.listen.forEach((label) => {
labels.add(label);
});
}
});
return labels;
}, [config]);
const buttonText = useMemo(() => {
if (isMobile) {
return t("labels.all.short");
@@ -266,13 +285,17 @@ function GeneralFilterButton({
}
if (selectedLabels.length == 1) {
return getTranslatedLabel(selectedLabels[0]);
const label = selectedLabels[0];
return getTranslatedLabel(
label,
allAudioListenLabels.has(label) ? "audio" : "object",
);
}
return t("labels.count", {
count: selectedLabels.length,
});
}, [selectedLabels, t]);
}, [selectedLabels, allAudioListenLabels, t]);
// ui