idacy's picture
Fix live inference slider regression
c789799 verified
Raw
History Blame Contribute Delete
1.88 kB
"""Live inference API for the datacenter verification demo."""
from __future__ import annotations
import os
import subprocess
from functools import cache
from pathlib import Path
from typing import NamedTuple
__all__ = ["__version__", "BuildInfo", "build_info"]
__version__ = "0.1.0"
class BuildInfo(NamedTuple):
sha: str | None
source: str | None
def _clean_sha(value: str | None) -> str | None:
if not value:
return None
cleaned = value.strip()
if not cleaned or cleaned.lower() in {"unknown", "none", "null"}:
return None
return cleaned
def _sha_from_env() -> BuildInfo | None:
for name in (
"DCV_BUILD_SHA",
"SPACE_COMMIT_SHA",
"HF_SPACE_COMMIT_SHA",
"GITHUB_SHA",
"RENDER_GIT_COMMIT",
"COMMIT_SHA",
"SOURCE_COMMIT",
):
sha = _clean_sha(os.getenv(name))
if sha:
return BuildInfo(sha=sha, source=f"env:{name}")
return None
def _sha_from_file() -> BuildInfo | None:
for path in (Path("/app/.dcv-build-sha"), Path.cwd() / ".dcv-build-sha"):
try:
sha = _clean_sha(path.read_text(encoding="utf-8"))
except OSError:
continue
if sha:
return BuildInfo(sha=sha, source=str(path))
return None
def _sha_from_git() -> BuildInfo | None:
try:
result = subprocess.run(
["git", "rev-parse", "--short=12", "HEAD"],
check=True,
capture_output=True,
text=True,
timeout=1,
)
except (OSError, subprocess.SubprocessError):
return None
sha = _clean_sha(result.stdout)
if sha:
return BuildInfo(sha=sha, source="git")
return None
@cache
def build_info() -> BuildInfo:
return _sha_from_env() or _sha_from_file() or _sha_from_git() or BuildInfo(sha=None, source=None)