Download hub_logger.py from EarthSpeciesProject/NatureLM-Audio: direct link, hf CLI and curl.
- Browser
- Download file 2.27 kB
-
https://huggingface.co/spaces/EarthSpeciesProject/NatureLM-Audio/resolve/main/hub_logger.py
- Command line
-
hf download hf://spaces/EarthSpeciesProject/NatureLM-Audio/hub_logger.py
-
curl -L -o hub_logger.py https://huggingface.co/spaces/EarthSpeciesProject/NatureLM-Audio/resolve/main/hub_logger.py
2.27 kB
| """Log user interactions to a HuggingFace Hub dataset.""" | |
| import json | |
| import os | |
| import uuid | |
| from pathlib import Path | |
| from huggingface_hub import HfApi, HfFileSystem | |
| DATASET_REPO = "EarthSpeciesProject/naturelm-audio-space-logs" | |
| SPLIT = "test" | |
| TESTING = os.getenv("TESTING", "0") == "1" | |
| _hf_token = os.getenv("HF_TOKEN", None) | |
| _api = HfApi(token=_hf_token) | |
| _fs = HfFileSystem(token=_hf_token) | |
| _METADATA_PATH = f"datasets/{DATASET_REPO}/{SPLIT}/metadata.jsonl" | |
| def log_interaction( | |
| audio: str | Path, | |
| user_text: str, | |
| model_response: str, | |
| session_id: str = "", | |
| model_version: str = "", | |
| ) -> None: | |
| """Log a single user/model exchange (audio + text) to the Hub dataset. | |
| Parameters | |
| ---------- | |
| audio : str | Path | |
| Local path to the audio file uploaded by the user. | |
| user_text : str | |
| The user's query text. | |
| model_response : str | |
| The model's generated response. | |
| session_id : str | |
| Unique identifier for the user session. | |
| model_version : str | |
| Version string of the model that produced the response. | |
| """ | |
| data_id = str(uuid.uuid4()) | |
| if TESTING: | |
| data_id = "test-" + data_id | |
| session_id = "test-" + session_id | |
| suffix = Path(audio).suffix | |
| audio_repo_path = f"{SPLIT}/audio/{session_id}{suffix}" | |
| if not _fs.exists(f"datasets/{DATASET_REPO}/{audio_repo_path}"): | |
| _api.upload_file( | |
| path_or_fileobj=str(audio), | |
| path_in_repo=audio_repo_path, | |
| repo_id=DATASET_REPO, | |
| repo_type="dataset", | |
| ) | |
| record = { | |
| "user_message": user_text, | |
| "model_response": model_response, | |
| "file_name": f"audio/{session_id}{suffix}", | |
| "original_fn": Path(audio).name, | |
| "id": data_id, | |
| "session_id": session_id, | |
| "model_version": model_version, | |
| } | |
| line = json.dumps(record) + "\n" | |
| # HfFileSystem doesn't support append, so read-then-write. | |
| if _fs.exists(_METADATA_PATH): | |
| with _fs.open(_METADATA_PATH, "r") as f: | |
| lines = f.readlines() | |
| lines.append(line) | |
| with _fs.open(_METADATA_PATH, "w") as f: | |
| f.writelines(lines) | |
| else: | |
| with _fs.open(_METADATA_PATH, "w") as f: | |
| f.write(line) | |