altametris.sara.core.http_weight_manager ======================================== .. py:module:: altametris.sara.core.http_weight_manager .. autoapi-nested-parse:: HTTP downloader for model weights via APIM with OAuth2 JWT authentication. Ce module fournit un gestionnaire pour télécharger automatiquement les poids de modèles depuis APIM (Azure API Management) avec authentification OAuth2 JWT, avec support de cache local et retry logic. L'authentification utilise DsCredentials pour générer des tokens JWT qui sont ensuite utilisés dans les headers HTTP des requêtes vers l'APIM. .. rubric:: Example >>> from altametris.sara.core.auth import DsCredentials >>> from altametris.sara.core import HTTPWeightDownloader >>> # Initialiser avec authentification >>> creds = DsCredentials() >>> downloader = HTTPWeightDownloader(credentials=creds) >>> # Télécharger un modèle via APIM >>> local_path = downloader.download_weight("weights/yolo11x.pt") >>> print(f"Model downloaded to: {local_path}") >>> # Lister les modèles disponibles >>> weights = downloader.list_weights(prefix="yolo11") >>> for weight in weights: ... print(f"- {weight['name']} ({weight['size_mb']:.2f} MB)") Attributes ---------- .. autoapisummary:: altametris.sara.core.http_weight_manager.requests altametris.sara.core.http_weight_manager.logger Classes ------- .. autoapisummary:: altametris.sara.core.http_weight_manager.HTTPWeightDownloader Module Contents --------------- .. py:data:: requests :value: None .. py:data:: logger .. py:class:: HTTPWeightDownloader(credentials: altametris.sara.core.auth.DsCredentials, cache_manager: Optional[altametris.sara.core.cache_manager.CacheManager] = None, apim_base_url: Optional[str] = None, show_progress: bool = True, max_retries: int = 3, retry_delay: float = 1.0, timeout: int = 300) Gestionnaire de téléchargement de poids via APIM avec OAuth2 JWT. Ce gestionnaire utilise des requêtes HTTP avec authentification JWT pour télécharger les poids de modèles depuis Azure API Management (APIM). Il intègre le système de cache local et fournit une retry logic robuste. :param credentials: Instance de DsCredentials pour l'authentification JWT. :param cache_manager: Instance de CacheManager (créée automatiquement si None). :param apim_base_url: URL de base de l'APIM (lu depuis env 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). :param timeout: Timeout HTTP en secondes pour les requêtes. :raises ConfigurationError: Si la configuration est invalide :raises ImportError: Si requests n'est pas installé .. rubric:: Example >>> from altametris.sara.core.auth import DsCredentials >>> from altametris.sara.core import HTTPWeightDownloader >>> # Utiliser avec authentification JWT >>> creds = DsCredentials() >>> downloader = HTTPWeightDownloader(credentials=creds) >>> # Télécharger un modèle >>> path = downloader.download_weight("weights/yolo11x.pt") >>> # Forcer le re-téléchargement >>> path = downloader.download_weight("weights/yolo11x.pt", force_download=True) .. py:attribute:: credentials .. py:attribute:: show_progress :value: True .. py:attribute:: max_retries :value: 3 .. py:attribute:: retry_delay :value: 1.0 .. py:attribute:: timeout :value: 300 .. py:attribute:: apim_base_url .. py:attribute:: cache :value: None .. py:method:: download_weight(weight_path: str, 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 APIM. 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 (ex: "weights/yolo11x.pt") :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'existent pas :raises AzureDownloadError: Si le téléchargement échoue et pas de cache disponible :raises ConfigurationError: Si les paramètres sont invalides .. rubric:: Example >>> downloader = HTTPWeightDownloader(credentials=DsCredentials()) >>> # Première fois: télécharge depuis APIM >>> path = downloader.download_weight("weights/yolo11x.pt") >>> print(f"Downloaded to: {path}") >>> # Deuxième fois: retourne depuis le cache >>> path = downloader.download_weight("weights/yolo11x.pt") >>> print(f"Loaded from cache: {path}") >>> # Forcer le téléchargement >>> path = downloader.download_weight("weights/yolo11x.pt", force_download=True) .. py:method:: list_weights(prefix: Optional[str] = None) -> list[dict[str, Any]] Liste les poids disponibles via l'API APIM. :param prefix: Préfixe optionnel pour filtrer (ex: "yolo11") :returns: - name: Nom du fichier - size_bytes: Taille en octets - size_mb: Taille en MB - last_modified: Timestamp de dernière modification (si disponible) :rtype: Liste de dictionnaires contenant les métadonnées de chaque fichier de poids :raises AzureAuthenticationError: Si l'authentification échoue :raises AzureDownloadError: Si la requête échoue .. rubric:: Example >>> downloader = HTTPWeightDownloader(credentials=DsCredentials()) >>> # Lister tous les modèles >>> weights = downloader.list_weights() >>> for weight in weights: ... print(f"{weight['name']}: {weight['size_mb']:.2f} MB") >>> # Lister seulement les modèles yolo11 >>> yolo_weights = downloader.list_weights(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: ``apim/*.pt``). Si None, supprime tout le cache APIM. :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)