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

  1. Add 'created_time' (epoch milliseconds int) to the dict passed to from_dict.
  2. 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.
  3. 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

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


AI-assisted analysis of mlflow/mlflow@6a27f2decc (2026-08-29). Data as JSON: /api/errors/425ea1c886142025. Report an issue: GitHub.