altametris.sara.core.http_weight_manager¶
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.
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¶
Classes¶
Gestionnaire de téléchargement de poids via APIM avec OAuth2 JWT. |
Module Contents¶
- altametris.sara.core.http_weight_manager.requests = None¶
- altametris.sara.core.http_weight_manager.logger¶
- class altametris.sara.core.http_weight_manager.HTTPWeightDownloader(credentials: altametris.sara.core.auth.DsCredentials, cache_manager: altametris.sara.core.cache_manager.CacheManager | None = None, apim_base_url: str | None = 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.
- Parameters:
credentials – Instance de DsCredentials pour l’authentification JWT.
cache_manager – Instance de CacheManager (créée automatiquement si None).
apim_base_url – URL de base de l’APIM (lu depuis env si None).
show_progress – Afficher une barre de progression pour les téléchargements.
max_retries – Nombre maximum de tentatives en cas d’échec.
retry_delay – Délai initial en secondes entre les tentatives (backoff exponentiel).
timeout – Timeout HTTP en secondes pour les requêtes.
- Raises:
ConfigurationError – Si la configuration est invalide
ImportError – Si requests n’est pas installé
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)
- credentials¶
- show_progress = True¶
- max_retries = 3¶
- retry_delay = 1.0¶
- timeout = 300¶
- apim_base_url¶
- cache = None¶
- 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.
- Parameters:
weight_path – Chemin du fichier des poids (ex: “weights/yolo11x.pt”)
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
AzureDownloadError – Si le téléchargement échoue et pas de cache disponible
ConfigurationError – Si les paramètres sont invalides
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)
- list_weights(prefix: str | None = None) list[dict[str, Any]]¶
Liste les poids disponibles via l’API APIM.
- Parameters:
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)
- Return type:
Liste de dictionnaires contenant les métadonnées de chaque fichier de poids
- Raises:
AzureAuthenticationError – Si l’authentification échoue
AzureDownloadError – Si la requête échoue
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")
- clear_cache(pattern: str | None = None) int¶
Vide le cache local des poids téléchargés.
- Parameters:
pattern – Pattern optionnel (glob style, ex:
apim/*.pt). Si None, supprime tout le cache APIM.- Returns:
Nombre de fichiers supprimés
- get_cache_stats() dict[str, Any]¶
Retourne les statistiques du cache local.
- Returns:
Dictionnaire avec les statistiques du cache (voir CacheManager.get_cache_stats)