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