Skip to content

Commit 3be511e

Browse files
authored
Release 4.0.12 (#263)
* metadata access fix for wandb logging * bump version --------- Co-authored-by: dylan <dylan@bitmind.ai>
1 parent 95d9a4a commit 3be511e

File tree

3 files changed

+41
-44
lines changed

3 files changed

+41
-44
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4.0.11
1+
4.0.12

gas/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__version__ = "4.0.11"
1+
__version__ = "4.0.12"
22

33
version_split = __version__.split(".")
44
__spec_version__ = (

gas/utils/wandb_utils.py

Lines changed: 39 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -66,77 +66,67 @@ def _ensure_run(self):
6666
)
6767
return self.run
6868

69-
def _check_media_exists(self, filepath):
69+
def _check_media_exists(self, metadata_dict):
7070
"""
71-
Check if a media file has already been logged to WandB using only UUID lookup.
71+
Check if a media file has already been logged to WandB using UUID from metadata.
7272
7373
Args:
74-
filepath: Path to the media file to check
74+
metadata_dict: Dictionary containing metadata with potential media_uuid
7575
7676
Returns:
7777
tuple: (exists (bool), media_uuid (str or None))
7878
"""
79-
metadata_path = os.path.splitext(filepath)[0] + ".json"
80-
if os.path.exists(metadata_path):
79+
if not metadata_dict:
80+
return False, None
81+
82+
media_uuid = metadata_dict.get("media_uuid")
83+
if media_uuid:
8184
try:
82-
with open(metadata_path, "r") as f:
83-
metadata = json.load(f)
84-
85-
media_uuid = metadata.get("media_uuid")
86-
if media_uuid:
87-
api = wandb.Api()
88-
project = f"subnet-{self.config.netuid}-validator"
89-
artifact_path = f"{self.config.wandb.entity}/{project}/media-{media_uuid}:latest"
90-
try:
91-
artifact = api.artifact(artifact_path)
92-
return True, media_uuid
93-
except wandb.errors.CommError:
94-
pass
95-
except (json.JSONDecodeError, IOError) as e:
96-
bt.logging.warning(f"Error reading metadata file: {e}")
85+
api = wandb.Api()
86+
project = f"subnet-{self.config.netuid}-validator"
87+
artifact_path = f"{self.config.wandb.entity}/{project}/media-{media_uuid}:latest"
88+
artifact = api.artifact(artifact_path)
89+
return True, media_uuid
90+
except wandb.errors.CommError:
91+
# Artifact doesn't exist in W&B
92+
pass
9793

9894
return False, None
9995

100-
def _maybe_log_media(self, media_path, metadata_path):
96+
def _maybe_log_media(self, media_path, metadata_dict):
10197
"""
10298
Log media as a WandB Artifact, with simple UUID-based deduplication.
10399
Only logs media that hasn't been logged yet.
104100
Only logs synthetic, locally generated media.
105101
106102
Args:
107103
media_path: Path to the media file
108-
metadata_path: Path to the metadata JSON file
104+
metadata_dict: Dictionary containing metadata from database
109105
110106
Returns:
111107
str or None: UUID assigned to the media if logged, None if not logged
112108
"""
113-
exists, existing_uuid = self._check_media_exists(media_path)
109+
exists, existing_uuid = self._check_media_exists(metadata_dict)
114110
if exists:
115111
bt.logging.info(f"Media already exists in WandB with UUID: {existing_uuid}")
116112
return existing_uuid
117113

118114
run = self._ensure_run()
119115

120-
metadata = {}
121-
if os.path.exists(metadata_path):
122-
try:
123-
with open(metadata_path, "r") as f:
124-
metadata = json.load(f)
125-
except json.JSONDecodeError:
126-
bt.logging.warning(f"Error parsing metadata file: {metadata_path}")
116+
if not metadata_dict:
117+
bt.logging.warning("No metadata provided for media logging")
118+
return None
119+
120+
metadata = metadata_dict.copy()
127121

128122
# Only create uuids for and log locally generated synthetic media.
129123
# All other media are already stored on Huggingface
130124
if not metadata.get("model_name"):
125+
bt.logging.debug(f"WandB: Skipping media logging - no model_name in metadata")
131126
return None
132127

133128
if not metadata.get("media_uuid"):
134129
metadata["media_uuid"] = str(uuid.uuid4())
135-
try:
136-
with open(metadata_path, "w") as f:
137-
json.dump(metadata, f, indent=2)
138-
except IOError as e:
139-
bt.logging.warning(f"Error writing metadata file: {e}")
140130

141131
media_uuid = metadata["media_uuid"]
142132
media_artifact = wandb.Artifact(
@@ -223,16 +213,23 @@ def log(self, challenge_results, media_sample, aug_params):
223213
# Step 1: Log media if applicable
224214
# Only locally generated synthetic media are logged
225215
media_path = media_sample.get("path")
226-
metadata_path = media_sample.get("metadata_path")
227-
if media_path and metadata_path:
228-
media_uuids = [self._maybe_log_media(media_path, metadata_path)]
216+
metadata_dict = media_sample.get("metadata")
217+
218+
bt.logging.debug(f"WandB media logging: media_path={media_path}, metadata_present={metadata_dict is not None}")
219+
220+
if media_path and metadata_dict:
221+
media_uuid = self._maybe_log_media(media_path, metadata_dict)
222+
media_uuids = [media_uuid] if media_uuid else []
229223
else:
230224
media_uuids = []
231225
for i in range(1):
232-
media_path = media_sample.get(f"sample_{i}", {}).get("path")
233-
metadata_path = media_sample.get(f"sample_{i}", {}).get("metadata_path")
234-
if media_path and metadata_path:
235-
media_uuids.append(self._maybe_log_media(media_path, metadata_path))
226+
sample = media_sample.get(f"sample_{i}", {})
227+
media_path = sample.get("path")
228+
metadata_dict = sample.get("metadata")
229+
if media_path and metadata_dict:
230+
media_uuid = self._maybe_log_media(media_path, metadata_dict)
231+
if media_uuid:
232+
media_uuids.append(media_uuid)
236233

237234
# Step 2: Log challenge results with reference to logged media uuid if available
238235
self._log_challenge_results(challenge_results, media_sample, media_uuids, aug_params)

0 commit comments

Comments
 (0)