#!/usr/bin/env python3 """Hotpatch the stale Space image before training runs.""" import os, sys, shutil # Patch model.py to use getattr for retina_contrastive p = "/workspace/feather/hydra/model.py" txt = open(p).read() old = "self.sdr_semantic.retina_contrastive is not None" new = "getattr(self.sdr_semantic, 'retina_contrastive', None) is not None" if old in txt: txt = txt.replace(old, new) open(p, "w").write(txt) print("[hotpatch] retina_contrastive guard patched") else: print("[hotpatch] retina_contrastive guard already present or ref changed") # Also patch sdr_semantic.py to ensure retina_contrastive always exists sp = "/workspace/feather/subsystems/sdr_semantic.py" stxt = open(sp).read() # The conditional init has it, but the stale image may have a version without the fallback # Add a safety fallback at the end of __init__ fallback = """ # Hotpatch safety: ensure retina_contrastive always exists if not hasattr(self, 'retina_contrastive'): self.retina_contrastive = None """ if "Hotpatch safety" not in stxt: stxt = stxt.replace("self._som_step: int = 0", "self._som_step: int = 0" + fallback) open(sp, "w").write(stxt) print("[hotpatch] sdr_semantic retina_contrastive safety added") else: print("[hotpatch] safety already present") os.execl(sys.executable, sys.executable, "/app/entrypoint.py")