mlflow/mlflow · error · ValueError
created_time is required
Error message
created_time is required
What it means
EvaluationDataset.from_dict() validates that the input dictionary contains every required key before constructing the entity. This error means the 'created_time' key is absent from the dict passed to from_dict. The library requires it because a dataset cannot be reconstructed without its creation timestamp.
Source
Thrown at mlflow/entities/evaluation_dataset.py:611
})
if self.version is not None:
result["version"] = self.version
result["records"] = [record.to_dict() for record in self.records]
return result
@classmethod
def from_dict(cls, data: dict[str, Any]) -> "EvaluationDataset":
"""Create instance from dictionary representation."""
if "dataset_id" not in data:
raise ValueError("dataset_id is required")
if "name" not in data:
raise ValueError("name is required")
if "digest" not in data:
raise ValueError("digest is required")
if "created_time" not in data:
raise ValueError("created_time is required")
if "last_update_time" not in data:
raise ValueError("last_update_time is required")
dataset = cls(
dataset_id=data["dataset_id"],
name=data["name"],
digest=data["digest"],
created_time=data["created_time"],
last_update_time=data["last_update_time"],
tags=data.get("tags"),
schema=data.get("schema"),
profile=data.get("profile"),
created_by=data.get("created_by"),
last_updated_by=data.get("last_updated_by"),
version=data.get("version"),
)
if "experiment_ids" in data:
dataset._experiment_ids = data["experiment_ids"]View on GitHub (pinned to 6a27f2decc)
Solutions
- Add 'created_time' (epoch milliseconds int) to the dict passed to from_dict.
- If the source dict is stale/older format, re-fetch the dataset from the tracking server (MlflowClient.get_logged_model / dataset APIs) instead of deserializing manually.
- If the timestamp is genuinely unknown, set it to a sensible default (e.g. int(time.time() * 1000)) before calling from_dict.
Example fix
// before
EvaluationDataset.from_dict({"dataset_id": d.id, "name": d.name, "digest": d.digest, "last_update_time": lu})
// after
EvaluationDataset.from_dict({"dataset_id": d.id, "name": d.name, "digest": d.digest, "created_time": d.created_time, "last_update_time": lu}) Defensive patterns
Strategy: validation
Validate before calling
required = {"dataset_id", "name", "digest", "created_time", "last_update_time"}
missing = required - data.keys()
if missing:
raise ValueError(f"dict missing keys: {missing}") Type guard
def is_dataset_dict(d: object) -> bool:
return isinstance(d, dict) and {"dataset_id", "name", "digest", "created_time", "last_update_time"} <= d.keys() Try / catch
try:
ds = EvaluationDataset.from_dict(data)
except ValueError as e:
logger.error("malformed dataset payload: %s", e)
ds = None Prevention
- Always serialize datasets via the entity's own to_dict rather than hand-building dicts
- Keep client and server MLflow versions aligned so required fields match
- Add schema checks on JSON payloads before deserialization in pipelines
When it happens
Trigger: Calling mlflow.entities.EvaluationDataset.from_dict(data) where data is a dict with dataset_id, name, digest but no 'created_time' key — e.g. a dict hand-assembled, filtered, or produced by an older server/API version that omitted the field.
Common situations: Deserializing datasets serialized by an older MLflow version before created_time was added; manually building the dict and forgetting the timestamp; stripping fields when logging payloads to JSON.
Understand the failure class
Background: "Missing required field" and "field is required" errors: why libraries reject payloads that omit mandatory fields — this error's family across 20 libraries.
Related errors
- last_update_time is required
- base_model must be a non-empty string (HuggingFace model ID
- Unsupported adapter type: {adapter_type}. Supported types: {
- dataset_id is required
- dataset_record_id is required
AI-assisted analysis of mlflow/mlflow@6a27f2decc (2026-08-29).
Data as JSON: /api/errors/425ea1c886142025.
Report an issue: GitHub.