From 2c5955bda82ac679656fbe95f1f33e6874b8930e Mon Sep 17 00:00:00 2001 From: Daniel Han Date: Sat, 4 Jul 2026 04:31:07 +0000 Subject: [PATCH] Coerce num_epochs in normalized() and use utf-8 for run records num_epochs was only int-coerced for the range check, so a string value from a dict-built config would reach resolve_train_steps' arithmetic; normalized() now stores the coerced int. Run record reads/writes pass encoding utf-8 explicitly so non-ASCII prompts survive on Windows --- studio/backend/core/training/diffusion_train_common.py | 1 + studio/backend/core/training/diffusion_training_service.py | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/studio/backend/core/training/diffusion_train_common.py b/studio/backend/core/training/diffusion_train_common.py index e291c8c0fc..fc46898eb7 100644 --- a/studio/backend/core/training/diffusion_train_common.py +++ b/studio/backend/core/training/diffusion_train_common.py @@ -407,6 +407,7 @@ class DiffusionLoraConfig: lora_target_modules = targets, max_grad_norm = float(self.max_grad_norm), hf_token = token or None, + num_epochs = int(self.num_epochs), cache_variants = int(self.cache_variants), compile_transformer = compile_transformer, base_precision = base_precision, diff --git a/studio/backend/core/training/diffusion_training_service.py b/studio/backend/core/training/diffusion_training_service.py index 23c0cd2bbd..43946acefe 100644 --- a/studio/backend/core/training/diffusion_training_service.py +++ b/studio/backend/core/training/diffusion_training_service.py @@ -99,7 +99,7 @@ def list_diffusion_runs(limit: int = 20) -> list[dict]: out: list[dict] = [] for p in files[: max(0, int(limit))]: try: - rec = json.loads(p.read_text()) + rec = json.loads(p.read_text(encoding = "utf-8")) except Exception: # noqa: BLE001 -- a corrupt record never breaks the listing continue # A valid-JSON file with the wrong shape (an old or hand-edited record that is not a @@ -124,7 +124,7 @@ def get_diffusion_run(job_id: str) -> Optional[dict]: return None p = _runs_dir() / f"{job_id}.json" try: - return json.loads(p.read_text()) + return json.loads(p.read_text(encoding = "utf-8")) except Exception: # noqa: BLE001 -- missing/corrupt record return None @@ -403,7 +403,7 @@ class DiffusionTrainingService: }, } path = _runs_dir() / f"{s['job_id']}.json" - path.write_text(json.dumps(record)) + path.write_text(json.dumps(record), encoding = "utf-8") except Exception: # noqa: BLE001 -- persisting history must never break the run pass