Spaces:
Sleeping
Sleeping
| """ | |
| adapters/onnx_adapter.py — ONNX Model Zoo adapter. | |
| Fetches the curated list of ONNX Zoo models from the GitHub API. | |
| """ | |
| from __future__ import annotations | |
| from typing import Any | |
| import httpx | |
| from tenacity import retry, stop_after_attempt, wait_exponential | |
| from adapters.base import BaseAdapter | |
| from models.model import Model, ModelMetrics, ModelVersion | |
| from observability.logger import get_logger | |
| log = get_logger("onnx_adapter") | |
| # Curated ONNX Zoo models with metadata + download URLs (GitHub API is rate-limited without auth) | |
| ONNX_CURATED: list[dict[str, Any]] = [ | |
| { | |
| "id": "onnx_resnet50", | |
| "name": "ResNet-50", | |
| "task": "classification", | |
| "provider": "ONNX Zoo", | |
| "description": "ResNet-50 v1 image classification model in ONNX format.", | |
| "download_url": "https://github.com/onnx/models/raw/main/validated/vision/classification/resnet/model/resnet50-v2-7.onnx", | |
| "size": 102_000_000, | |
| "tags": ["resnet", "imagenet", "classification"], | |
| "hardware": ["gpu", "cpu"], | |
| "metrics": {"latency_ms": 14.2, "top1": 74.9}, | |
| "downloads": 250_000, | |
| "versions": [{"version": "1.0", "label": "Stable", "releaseDate": "2023-06-01"}], | |
| }, | |
| { | |
| "id": "onnx_yolov8n", | |
| "name": "YOLOv8n", | |
| "task": "detection", | |
| "provider": "Ultralytics", | |
| "description": "Ultralytics YOLOv8 Nano — real-time object detection, ONNX export.", | |
| "download_url": "https://github.com/ultralytics/yolov8/releases/download/v8.0.0/yolov8n.onnx", | |
| "size": 6_200_000, | |
| "tags": ["yolo", "real-time", "fastest", "edge"], | |
| "hardware": ["gpu", "cpu", "edge"], | |
| "metrics": {"latency_ms": 3.1, "mAP": 37.3}, | |
| "downloads": 420_000, | |
| "versions": [{"version": "8.0", "label": "Latest", "releaseDate": "2023-09-15"}], | |
| }, | |
| { | |
| "id": "onnx_mobilenet_v3", | |
| "name": "MobileNetV3-Large", | |
| "task": "classification", | |
| "provider": "Google", | |
| "description": "MobileNetV3-Large for efficient on-device image classification.", | |
| "download_url": "https://github.com/onnx/models/raw/main/validated/vision/classification/mobilenet/model/mobilenetv3-large-1.11.onnx", | |
| "size": 22_000_000, | |
| "tags": ["mobilenet", "lightweight", "edge", "efficient"], | |
| "hardware": ["cpu", "edge"], | |
| "metrics": {"latency_ms": 5.8, "top1": 75.2, "fps": 180}, | |
| "downloads": 310_000, | |
| "versions": [{"version": "3.0", "label": "Latest", "releaseDate": "2023-01-01"}], | |
| }, | |
| { | |
| "id": "onnx_bert_base_uncased", | |
| "name": "BERT-Base-Uncased", | |
| "task": "nlp", | |
| "provider": "Google", | |
| "description": "BERT base model fine-tuned for NLP inference in ONNX format.", | |
| "download_url": "https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/onnx/model.onnx", | |
| "size": 438_000_000, | |
| "tags": ["bert", "nlp", "transformer"], | |
| "hardware": ["gpu", "cpu"], | |
| "metrics": {"latency_ms": 42.0}, | |
| "downloads": 198_000, | |
| "versions": [{"version": "1.0", "label": "Stable", "releaseDate": "2022-11-01"}], | |
| }, | |
| { | |
| "id": "onnx_efficientnet_b0", | |
| "name": "EfficientNet-B0", | |
| "task": "classification", | |
| "provider": "Google Brain", | |
| "description": "EfficientNet-B0 for scalable image classification.", | |
| "download_url": "https://github.com/onnx/models/raw/main/validated/vision/classification/efficientnet-lite/model/efficientnet-lite4-11.onnx", | |
| "size": 20_000_000, | |
| "tags": ["efficientnet", "efficient", "high-accuracy"], | |
| "hardware": ["gpu", "cpu"], | |
| "metrics": {"latency_ms": 10.4, "top1": 77.1}, | |
| "downloads": 145_000, | |
| "versions": [{"version": "1.0", "label": "Stable", "releaseDate": "2023-03-01"}], | |
| }, | |
| { | |
| "id": "onnx_sam_vit_b", | |
| "name": "SAM ViT-B", | |
| "task": "segmentation", | |
| "provider": "Meta AI", | |
| "description": "Segment Anything Model (ViT-B) for universal image segmentation.", | |
| "download_url": "https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth", | |
| "size": 375_000_000, | |
| "tags": ["sam", "segmentation", "sota"], | |
| "hardware": ["gpu"], | |
| "metrics": {"latency_ms": 68.0}, | |
| "downloads": 88_000, | |
| "versions": [{"version": "1.0", "label": "Latest", "releaseDate": "2023-04-05"}], | |
| }, | |
| { | |
| "id": "onnx_clip_vit_b32", | |
| "name": "CLIP ViT-B/32", | |
| "task": "embedding", | |
| "provider": "OpenAI", | |
| "description": "CLIP image + text embedding model for zero-shot classification.", | |
| "download_url": "https://openaipublic.blob.core.windows.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba4f386/ViT-B-32.pt", | |
| "size": 338_000_000, | |
| "tags": ["clip", "embedding", "multimodal"], | |
| "hardware": ["gpu", "cpu"], | |
| "metrics": {"latency_ms": 25.0}, | |
| "downloads": 275_000, | |
| "versions": [{"version": "1.0", "label": "Stable", "releaseDate": "2023-01-01"}], | |
| }, | |
| { | |
| "id": "onnx_whisper_tiny", | |
| "name": "Whisper Tiny", | |
| "task": "nlp", | |
| "provider": "OpenAI", | |
| "description": "Whisper Tiny speech-to-text model in ONNX format.", | |
| "download_url": "https://openaipublic.azureedge.net/main/whisper/models/65147644a518d12f04e32d6f3b26facc3f8dd46e5390956a9424930e36a852c0/tiny.pt", | |
| "size": 39_000_000, | |
| "tags": ["whisper", "speech", "lightweight"], | |
| "hardware": ["cpu", "edge"], | |
| "metrics": {"latency_ms": 100.0}, | |
| "downloads": 167_000, | |
| "versions": [{"version": "20231117", "label": "Latest", "releaseDate": "2023-11-17"}], | |
| }, | |
| ] | |
| class ONNXAdapter(BaseAdapter): | |
| source_name = "onnx" | |
| async def fetch_models(self) -> list[Model]: | |
| models: list[Model] = [] | |
| for raw in ONNX_CURATED: | |
| try: | |
| versions = [ | |
| ModelVersion( | |
| version=v["version"], | |
| label=v.get("label", "Stable"), | |
| releaseDate=v.get("releaseDate", ""), | |
| ) | |
| for v in raw.get("versions", []) | |
| ] | |
| metrics_raw = raw.get("metrics", {}) | |
| m = Model( | |
| id = raw["id"], | |
| name = raw["name"], | |
| task = raw["task"], | |
| framework = "onnx", | |
| source = "onnx", | |
| provider = raw.get("provider", "ONNX Zoo"), | |
| description = raw.get("description", ""), | |
| download_url = raw.get("download_url"), | |
| size = raw.get("size", 0), | |
| size_label = self._format_size(raw.get("size", 0)), | |
| tags = raw.get("tags", []), | |
| hardware = raw.get("hardware", ["gpu"]), | |
| status = "available", | |
| downloaded = False, | |
| downloads = raw.get("downloads"), | |
| rating = 4.2, | |
| metrics = ModelMetrics(**metrics_raw), | |
| versions = versions, | |
| ) | |
| models.append(m) | |
| except Exception as exc: | |
| log.warning("onnx_parse_failed", model_id=raw.get("id"), error=str(exc)) | |
| log.info("onnx_fetch_complete", total=len(models)) | |
| return models | |