Skip to content

Commit 2bb6b31

Browse files
committed
add ChunkFacesConnector
1 parent 3116dd8 commit 2bb6b31

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import logging
2+
import modal
3+
4+
logging.basicConfig(level=logging.INFO)
5+
logger = logging.getLogger(__name__)
6+
7+
class ChunkFacesConnector:
8+
"""
9+
Modal dict connector for storing face_id appeared in each chunk and number of times it appears.
10+
"""
11+
12+
DEFAULT_DICT_NAME = "chunk-faces-store"
13+
14+
def __init__(self, dict_name: str = DEFAULT_DICT_NAME):
15+
self.dict_name = dict_name
16+
self.chunk_faces_store = modal.Dict.from_name(dict_name, create_if_missing=True)
17+
logger.info(f"Initialized ChunkFacesConnector with Dict: {dict_name}")
18+
19+
def add_chunk_faces(self, chunk_id: str, face_counts: dict[str, int]) -> bool:
20+
"""Add or update face counts for a given chunk."""
21+
try:
22+
if chunk_id in self.chunk_faces_store:
23+
existing_counts = self.chunk_faces_store[chunk_id]
24+
for face_id, count in face_counts.items():
25+
existing_counts[face_id] = existing_counts.get(face_id, 0) + count
26+
self.chunk_faces_store[chunk_id] = existing_counts
27+
else:
28+
self.chunk_faces_store[chunk_id] = face_counts
29+
logger.info(f"Added/Updated faces for chunk {chunk_id}")
30+
return True
31+
except Exception as e:
32+
logger.error(f"Error adding/updating faces for chunk {chunk_id}: {e}")
33+
return False
34+
35+
def get_chunk_faces(self, chunk_id: str) -> dict:
36+
"""Retrieve face counts for a given chunk."""
37+
try:
38+
if chunk_id in self.chunk_faces_store:
39+
face_counts = self.chunk_faces_store[chunk_id]
40+
logger.info(f"Retrieved faces for chunk {chunk_id}")
41+
return face_counts
42+
else:
43+
logger.info(f"No faces found for chunk {chunk_id}")
44+
return {}
45+
except Exception as e:
46+
logger.error(f"Error retrieving faces for chunk {chunk_id}: {e}")
47+
return {}
48+
49+
def delete_chunk_faces(self, chunk_id: str) -> bool:
50+
"""Delete face counts for a given chunk."""
51+
try:
52+
if chunk_id in self.chunk_faces_store:
53+
del self.chunk_faces_store[chunk_id]
54+
logger.info(f"Deleted faces for chunk {chunk_id}")
55+
return True
56+
else:
57+
logger.info(f"No faces to delete for chunk {chunk_id}")
58+
return False
59+
except Exception as e:
60+
logger.error(f"Error deleting faces for chunk {chunk_id}: {e}")
61+
return False

0 commit comments

Comments
 (0)