low_bit_open_llm_leaderboard / src /notifications.py
wenjiao's picture
Disable notification discussion fallback
55a6840
Raw
History Blame Contribute Delete
2.43 kB
"""Hugging Face submission notifications.
Notifies a submitter by ``@``-mentioning them in a discussion comment on the
leaderboard Space, which triggers Hugging Face's native notification.
Configuration (see :mod:`src.envs`):
* ``HF_TOKEN`` β€” token used to post the comment / discussion.
* ``REPO_ID`` β€” the Space repo id (default notification target).
* ``NOTIFICATION_DISCUSSION_NUM`` β€” comments are posted on this existing
discussion. If unset, notification sending is skipped.
"""
import logging
from datetime import datetime, timezone
from huggingface_hub import HfApi
from src.envs import HF_TOKEN, NOTIFICATION_DISCUSSION_NUM, REPO_ID
logger = logging.getLogger(__name__)
def send_hf_notification(
username: str,
message: str,
*,
repo_id: str | None = None,
discussion_num: int | None = None,
) -> str | None:
"""Post a notification to ``username`` on the leaderboard Space.
Returns the discussion URL on success, or ``None`` if the notification
could not be sent (missing token / username, or an API error). All
failures are swallowed and logged so the caller's loop is never broken.
"""
if not HF_TOKEN:
logger.warning("[notify] HF_TOKEN not set β€” skipping notification for %r", username)
return None
username = (username or "").strip().lstrip("@")
if not username:
logger.warning("[notify] empty username β€” skipping notification")
return None
repo_id = repo_id or REPO_ID
if discussion_num is None:
discussion_num = NOTIFICATION_DISCUSSION_NUM
if not discussion_num:
logger.warning(
"[notify] NOTIFICATION_DISCUSSION_NUM not set β€” skipping notification for %r",
username,
)
return None
now = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S UTC")
comment = f"@{username}\n\n{message}\n\nTime: {now}"
api = HfApi(token=HF_TOKEN)
try:
api.comment_discussion(
repo_id=repo_id,
repo_type="space",
discussion_num=int(discussion_num),
comment=comment,
)
url = f"https://huggingface.co/spaces/{repo_id}/discussions/{discussion_num}"
except Exception:
logger.error("[notify] failed to notify @%s", username, exc_info=True)
return None
logger.info("[notify] notified @%s (%s)", username, url)
return url