Spaces:
Running
Running
File size: 2,815 Bytes
e60e7e0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | """Single-sourced host-token → inference_platform mapping.
There is exactly ONE authority for the host-token → platform mapping:
``seed/inference_platforms.yaml``. This module lazy-loads that file at import
time, inverts each row's ``aliases`` list into ``{host_token_lower: platform_id}``,
and exports the accessors that downstream consumers (fuzzy.py, the models.dev
refresh) use. Do NOT hand-copy the map into the strategy files — import it here.
Imports ONLY stdlib + yaml (no fuzzy, no schemas) to avoid an import cycle.
"""
from __future__ import annotations
import json
from pathlib import Path
from typing import Optional
import yaml
# Sentinel host token that means "missing developer field" → no platform.
_UNKNOWN_SENTINEL = "unknown"
# seed/inference_platforms.yaml lives at the repo root's seed/ dir.
# This file is src/eval_card_registry/lib/inference_platforms_map.py, so the
# repo root is four parents up.
_SEED_PATH = (
Path(__file__).resolve().parents[3] / "seed" / "inference_platforms.yaml"
)
_HOST_TOKEN_TO_PLATFORM: dict[str, Optional[str]] = {}
_LOADED = False
def _coerce_aliases(raw) -> list[str]:
"""Accept either a YAML list or a JSON-encoded list string (the seed CLI
JSON-encodes the column, but the YAML on disk holds native lists)."""
if isinstance(raw, str):
try:
decoded = json.loads(raw)
except (ValueError, TypeError):
return [raw] if raw else []
return list(decoded) if isinstance(decoded, list) else []
return list(raw or [])
def _load() -> None:
global _LOADED
_HOST_TOKEN_TO_PLATFORM.clear()
if _SEED_PATH.exists():
with open(_SEED_PATH) as f:
platforms = yaml.safe_load(f) or []
for plat in platforms:
platform_id = plat.get("id")
for alias in _coerce_aliases(plat.get("aliases")):
if alias:
_HOST_TOKEN_TO_PLATFORM[alias.lower()] = platform_id
# The missing-developer sentinel maps to None.
_HOST_TOKEN_TO_PLATFORM[_UNKNOWN_SENTINEL] = None
_LOADED = True
def _ensure_loaded() -> None:
if not _LOADED:
_load()
def get_host_token_platform(token: str) -> Optional[str]:
"""Return the inference_platforms.id for a host token (e.g. 'fireworks/',
'-bedrock', 'azure/'), or None if the token is unknown / the `unknown`
sentinel. Case-insensitive."""
if not token:
return None
_ensure_loaded()
return _HOST_TOKEN_TO_PLATFORM.get(token.lower())
def all_host_tokens() -> set[str]:
"""Return the set of known host tokens (lowercased), including the
`unknown` sentinel."""
_ensure_loaded()
return set(_HOST_TOKEN_TO_PLATFORM.keys())
# Load eagerly on import; safe (graceful no-op if the seed file is absent).
_load()
|