altametris.sara.core.cache_manager¶
Gestionnaire de cache local pour les poids téléchargés depuis Azure.
Ce module fournit un système de cache intelligent pour stocker localement les poids de modèles téléchargés depuis Azure Blob Storage, avec support de TTL et nettoyage automatique.
Example
>>> from altametris.sara.core import CacheManager
>>> cache = CacheManager(cache_dir="/tmp/model_cache", ttl_seconds=86400)
>>> # Vérifier si un weight est en cache
>>> if cache.is_cached("models/yolo11x.pt"):
... path = cache.get_cached_path("models/yolo11x.pt")
... print(f"Model cached at: {path}")
>>> # Mettre à jour les métadonnées après téléchargement
>>> cache.update_cache_metadata(
... "models/yolo11x.pt",
... source="azure://models/yolo11x.pt",
... size_bytes=104857600
... )
Attributes¶
Classes¶
Gestionnaire de cache local pour les poids de modèles téléchargés. |
Module Contents¶
- altametris.sara.core.cache_manager.logger¶
- class altametris.sara.core.cache_manager.CacheManager(cache_dir: str | None = None, ttl_seconds: int | None = None)¶
Gestionnaire de cache local pour les poids de modèles téléchargés.
Le cache utilise une structure de répertoires miroir du blob storage:
cache_dir/ models/ yolo11x.pt yolo11x.pt.meta (métadonnées JSON)
- Parameters:
cache_dir – Répertoire racine du cache (défaut: ~/.cache/altametris/weights). Stocké comme attribut après initialisation.
ttl_seconds – Durée de vie des fichiers en secondes (défaut: 7 jours). Après ce délai, les fichiers sont considérés comme expirés. Valeur None = pas d’expiration. Stocké comme attribut après initialisation.
Note
Les attributs principaux sont
cache_dir(Path),ttl_seconds(int | None), et_meta_suffix(str, toujours “.meta”).Example
>>> cache = CacheManager(cache_dir="/tmp/cache", ttl_seconds=3600) >>> cache.is_cached("models/yolo11x.pt") False >>> cache.update_cache_metadata("models/yolo11x.pt", source="azure://models/yolo11x.pt", size_bytes=1024) >>> cache.is_cached("models/yolo11x.pt") True >>> stats = cache.get_cache_stats() >>> print(f"Cache contains {stats['total_files']} files, {stats['total_size_mb']:.2f} MB")
- cache_dir¶
- ttl_seconds = None¶
- is_cached(cache_key: str) bool¶
Vérifie si un élément est en cache et non expiré.
Un élément est considéré comme valide si: 1. Le fichier existe dans le cache 2. Le fichier de métadonnées existe et est valide (JSON parsable) 3. Le TTL n’est pas dépassé (si ttl_seconds est défini)
- Parameters:
cache_key – Clé de cache à vérifier (ex: “models/yolo11x.pt”)
- Returns:
True si l’élément est en cache et valide, False sinon
Example
>>> cache = CacheManager(ttl_seconds=3600) >>> cache.is_cached("models/yolo11x.pt") False >>> # Après téléchargement et update_cache_metadata... >>> cache.is_cached("models/yolo11x.pt") True
- get_cached_path(cache_key: str) pathlib.Path¶
Retourne le chemin local d’un élément en cache.
- Parameters:
cache_key – Clé de cache (ex: “models/yolo11x.pt”)
- Returns:
Chemin absolu du fichier dans le cache
Example
>>> cache = CacheManager() >>> if cache.is_cached("models/yolo11x.pt"): ... path = cache.get_cached_path("models/yolo11x.pt") ... print(f"Load model from: {path}")
- update_cache_metadata(cache_key: str, source: str | None = None, size_bytes: int | None = None, **extra_metadata: Any) None¶
Enregistre ou met à jour les métadonnées d’un fichier en cache.
Cette méthode doit être appelée après avoir téléchargé un fichier dans le cache pour enregistrer ses métadonnées (timestamp, source, taille)!!!.
Les métadonnées sont stockées dans un fichier JSON avec le suffixe .meta
- Parameters:
cache_key – Clé de cache (ex: “models/yolo11x.pt”)
source – URL ou chemin source (ex: “azure://models/yolo11x.pt”)
size_bytes – Taille du fichier en octets
**extra_metadata – Métadonnées additionnelles à stocker
- Raises:
ConfigurationError – Si le fichier cache n’existe pas ou si l’écriture échoue
Example
>>> cache = CacheManager() >>> # Après avoir téléchargé le fichier dans cache.get_cached_path(...) >>> cache.update_cache_metadata( ... "models/yolo11x.pt", ... source="azure://models/yolo11x.pt", ... size_bytes=104857600, ... version="v1.0" ... )
- cleanup_expired() int¶
Supprime tous les fichiers expirés du cache.
Parcourt récursivement le cache et supprime: 1. Les fichiers dont le TTL est dépassé 2. Les fichiers de métadonnées associés 3. Les répertoires vides résultants
- Returns:
Nombre de fichiers supprimés (paires fichier + métadonnées comptent comme 1)
Example
>>> cache = CacheManager(ttl_seconds=3600) >>> # Après 2 heures... >>> removed = cache.cleanup_expired() >>> print(f"Removed {removed} expired files")
- clear_cache(pattern: str | None = None) int¶
Vide le cache complètement ou selon un pattern.
- Parameters:
pattern – Pattern optionnel (glob style, ex:
"models/*.pt","yolo11*"). Si None, supprime tout le cache.- Returns:
Nombre de fichiers supprimés (paires fichier + métadonnées comptent comme 1)
Example
>>> cache = CacheManager() >>> # Supprimer tous les modèles yolo11 >>> removed = cache.clear_cache(pattern="models/yolo11*.pt") >>> print(f"Removed {removed} files") >>> # Vider complètement le cache >>> removed = cache.clear_cache() >>> print(f"Cache cleared: {removed} files removed")
- get_cache_stats() dict[str, Any]¶
Retourne des statistiques détaillées sur le cache.
- Returns:
total_files: Nombre total de fichiers en cache
total_size_bytes: Taille totale en octets
total_size_mb: Taille totale en MB
expired_files: Nombre de fichiers expirés (si TTL configuré)
valid_files: Nombre de fichiers valides (si TTL configuré)
cache_dir: Chemin du répertoire de cache
ttl_seconds: TTL configuré (ou None)
- Return type:
Dictionnaire contenant
Example
>>> cache = CacheManager() >>> stats = cache.get_cache_stats() >>> print(f"Cache: {stats['total_files']} files, {stats['total_size_mb']:.2f} MB") >>> if stats['expired_files'] > 0: ... print(f"Warning: {stats['expired_files']} expired files")