Files
insforge--insforge/examples/python-ml-experiment-tracker/tracker/models.py
T
wehub-resource-sync 3a28426bf4
Lint and Format Check / lint-and-format (push) Failing after 0s
Check Migrations / Check for duplicate migration numbers (push) Failing after 1s
CI Pre-merge Check / CI Pre-merge Check (push) Failing after 2m17s
chore: import upstream snapshot with attribution
2026-07-13 12:23:40 +08:00

59 lines
1.6 KiB
Python

from __future__ import annotations
import dataclasses
from typing import Any
@dataclasses.dataclass
class Experiment:
"""An experiment groups related runs under a shared name."""
id: str
name: str
description: str | None
created_at: str
@classmethod
def from_dict(cls, data: dict[str, Any]) -> "Experiment":
"""Construct an Experiment from a raw API response dict."""
return cls(
id=data["id"],
name=data["name"],
description=data.get("description"),
created_at=data.get("created_at", ""),
)
@dataclasses.dataclass
class Run:
"""A single execution record belonging to an experiment."""
id: str
experiment_id: str | None
experiment_name: str
run_name: str | None
status: str
params: dict[str, Any]
metrics: dict[str, Any]
started_at: str
finished_at: str | None
notes: str | None
created_at: str
@classmethod
def from_dict(cls, data: dict[str, Any]) -> "Run":
"""Construct a Run from a raw API response dict, applying safe defaults."""
return cls(
id=data["id"],
experiment_id=data.get("experiment_id"),
experiment_name=data["experiment_name"],
run_name=data.get("run_name"),
status=data.get("status", "completed"),
params=data.get("params") or {},
metrics=data.get("metrics") or {},
started_at=data.get("started_at", ""),
finished_at=data.get("finished_at"),
notes=data.get("notes"),
created_at=data.get("created_at", ""),
)