altametris.sara.core.azure_weight_manager ========================================= .. py:module:: altametris.sara.core.azure_weight_manager .. autoapi-nested-parse:: Gestionnaire de téléchargement de poids depuis Azure Blob Storage. Ce module fournit un gestionnaire pour télécharger automatiquement les poids de modèles depuis Azure Blob Storage, avec support de plusieurs méthodes d'authentification et intégration avec le système de cache local. Méthodes d'authentification supportées: - Connection String (dev local) - Managed Identity (production - RECOMMANDÉ) - SAS Token (accès temporaire) .. rubric:: Example >>> from altametris.sara.core import AzureWeightManager >>> # Utiliser avec Managed Identity >>> manager = AzureWeightManager( ... storage_account_name="myaccount", ... auth_method="managed_identity" ... ) >>> # Télécharger un modèle >>> local_path = manager.get_weights("models/yolo11x.pt") >>> print(f"Model downloaded to: {local_path}") >>> # Lister les modèles disponibles >>> weights = manager.list_weights("models", prefix="yolo11") >>> for weight in weights: ... print(f"- {weight['name']} ({weight['size_mb']:.2f} MB)") Attributes ---------- .. autoapisummary:: altametris.sara.core.azure_weight_manager.logger altametris.sara.core.azure_weight_manager.AuthMethod Classes ------- .. autoapisummary:: altametris.sara.core.azure_weight_manager.AzureWeightManager Module Contents --------------- .. py:data:: logger .. py:data:: AuthMethod .. py:class:: AzureWeightManager(storage_account_name: Optional[str] = None, auth_method: AuthMethod = 'connection_string', connection_string: Optional[str] = None, sas_token: Optional[str] = None, cache_manager: Optional[altametris.sara.core.cache_manager.CacheManager] = None, show_progress: bool = True, max_retries: int = 3, retry_delay: float = 1.0) Gestionnaire de téléchargement de poids depuis Azure Blob Storage avec support de cache local via CacheManager. :param storage_account_name: Nom du compte de stockage Azure. Requis pour managed_identity et sas_token. :param auth_method: Méthode d'authentification à utiliser: - "connection_string": Utilise AZURE_STORAGE_CONNECTION_STRING - "managed_identity": Utilise Azure Managed Identity - "sas_token": Utilise AZURE_STORAGE_SAS_TOKEN :param connection_string: Connection string Azure (optionnel, lu depuis env si None). :param sas_token: SAS token Azure (optionnel, lu depuis env si None). :param cache_manager: Instance de CacheManager (créée automatiquement si None). :param show_progress: Afficher une barre de progression pour les téléchargements. :param max_retries: Nombre maximum de tentatives en cas d'échec. :param retry_delay: Délai initial en secondes entre les tentatives (backoff exponentiel). :raises ConfigurationError: Si la configuration est invalide :raises ImportError: Si azure-storage-blob n'est pas installé .. py:attribute:: auth_method :value: 'connection_string' .. py:attribute:: storage_account_name :value: None .. py:attribute:: show_progress :value: True .. py:attribute:: max_retries :value: 3 .. py:attribute:: retry_delay :value: 1.0 .. py:attribute:: cache :value: None .. py:method:: get_weights(weight_path: str, container: str = 'models', force_download: bool = False) -> pathlib.Path Télécharge ou retourne depuis le cache les poids d'un modèle. Cette méthode vérifie d'abord si les poids sont en cache et valides. Si oui, retourne le chemin local. Sinon, télécharge depuis Azure. En cas d'échec du téléchargement, si un cache expiré existe, le retourne avec un warning. :param weight_path: Chemin du fichier des poids dans le conteneur (ex: "yolo11x.pt" ou "models/yolo11x.pt") :param container: Nom du conteneur Azure (défaut: "models") :param force_download: Si True, force le téléchargement même si en cache :returns: Chemin absolu du fichier de poids en local :raises WeightsNotFoundError: Si les poids n'existe pas :raises AzureDownloadError: Si le téléchargement échoue et pas de cache disponible :raises ConfigurationError: Si les paramètres sont invalides .. rubric:: Example >>> manager = AzureWeightManager(auth_method="managed_identity", storage_account_name="myaccount") >>> # Première fois: télécharge depuis Azure >>> path = manager.get_weights("yolo11x.pt", container="models") >>> print(f"Downloaded to: {path}") >>> # Deuxième fois: retourne depuis le cache >>> path = manager.get_weights("yolo11x.pt", container="models") >>> print(f"Loaded from cache: {path}") >>> # Forcer le téléchargement >>> path = manager.get_weights("yolo11x.pt", container="models", force_download=True) .. py:method:: list_weights(container: str = 'models', prefix: Optional[str] = None) -> list[dict[str, Any]] Liste les poids disponibles dans un conteneur Azure. :param container: Nom du conteneur (défaut: "models") :param prefix: Préfixe optionnel pour filtrer (ex: "yolo11" pour lister tous les yolo11) :returns: - name: Nom du blob - size_bytes: Taille en octets - size_mb: Taille en MB - last_modified: Timestamp de dernière modification - etag: ETag du blob :rtype: Liste de dictionnaires contenant les métadonnées de chaque fichier de poids :raises AzureError: Si le listing échoue :raises ConfigurationError: Si le conteneur est invalide .. rubric:: Example >>> manager = AzureWeightManager(auth_method="managed_identity", storage_account_name="myaccount") >>> # Lister tous les modèles >>> weights = manager.list_weights("models") >>> for weight in weights: ... print(f"{weight['name']}: {weight['size_mb']:.2f} MB") >>> # Lister seulement les modèles yolo11 >>> yolo_weights = manager.list_weights("models", prefix="yolo11") .. py:method:: clear_cache(pattern: Optional[str] = None) -> int Vide le cache local des poids téléchargés. :param pattern: Pattern optionnel (glob style, ex: ``"models/*.pt"``) Si None, supprime tout le cache. :returns: Nombre de fichiers supprimés .. py:method:: get_cache_stats() -> dict[str, Any] Retourne les statistiques du cache local. :returns: Dictionnaire avec les statistiques du cache (voir CacheManager.get_cache_stats)