| """Destinos de logging (TensorBoard, Weights & Biases) para o train.py. |
| |
| Variáveis opcionais para rastrear o dataset no mesmo run W&B (ver train.py): |
| DATASET_VERSION, DATASET_MANIFEST_HASH, DATASET_MANIFEST_PATH. |
| """ |
|
|
| from __future__ import annotations |
|
|
| import os |
|
|
| DEFAULT_WANDB_PROJECT = "bequick" |
| DEFAULT_WANDB_ENTITY = "amaro-neto-amaro" |
|
|
|
|
| def wandb_credentials_or_offline() -> bool: |
| """True se houver API key ou modo offline (wandb local sem upload).""" |
| key = (os.environ.get("WANDB_API_KEY") or "").strip() |
| offline = (os.environ.get("WANDB_MODE") or "").strip().lower() == "offline" |
| return bool(key) or offline |
|
|
|
|
| def wandb_reporting_requested() -> bool: |
| if (os.environ.get("WANDB_DISABLED") or "").strip().lower() in ("1", "true", "yes"): |
| return False |
| return wandb_credentials_or_offline() |
|
|
|
|
| def apply_wandb_defaults() -> None: |
| os.environ.setdefault("WANDB_PROJECT", DEFAULT_WANDB_PROJECT) |
| os.environ.setdefault("WANDB_ENTITY", DEFAULT_WANDB_ENTITY) |
|
|
|
|
| def wandb_package_available() -> bool: |
| try: |
| import wandb |
| except ImportError: |
| return False |
| return True |
|
|
|
|
| def build_report_backends() -> list[str]: |
| backends: list[str] = ["tensorboard"] |
| if not wandb_reporting_requested(): |
| return backends |
| if not wandb_package_available(): |
| print( |
| "AVISO: wandb configurado (WANDB_API_KEY ou WANDB_MODE=offline) " |
| "mas pacote nao instalado. Instala com: pip install wandb" |
| ) |
| return backends |
| apply_wandb_defaults() |
| backends.append("wandb") |
| return backends |
|
|