Files
2026-07-13 13:22:34 +08:00

77 lines
2.6 KiB
Python

from typing import Any
from mlflow.exceptions import MlflowException
from mlflow.protos.databricks_pb2 import INVALID_PARAMETER_VALUE
from mlflow.types.schema import Schema
class TensorDatasetSchema:
"""
Represents the schema of a dataset with tensor features and targets.
"""
def __init__(self, features: Schema, targets: Schema = None):
if not isinstance(features, Schema):
raise MlflowException(
f"features must be mlflow.types.Schema, got '{type(features)}'",
INVALID_PARAMETER_VALUE,
)
if targets is not None and not isinstance(targets, Schema):
raise MlflowException(
f"targets must be either None or mlflow.types.Schema, got '{type(features)}'",
INVALID_PARAMETER_VALUE,
)
self.features = features
self.targets = targets
def to_dict(self) -> dict[str, Any]:
"""Serialize into a 'jsonable' dictionary.
Returns:
dictionary representation of the schema's features and targets (if defined).
"""
return {
"mlflow_tensorspec": {
"features": self.features.to_json(),
"targets": self.targets.to_json() if self.targets is not None else None,
},
}
@classmethod
def from_dict(cls, schema_dict: dict[str, Any]):
"""Deserialize from dictionary representation.
Args:
schema_dict: Dictionary representation of model signature. Expected dictionary format:
`{'features': <json string>, 'targets': <json string>" }`
Returns:
TensorDatasetSchema populated with the data from the dictionary.
"""
if "mlflow_tensorspec" not in schema_dict:
raise MlflowException(
"TensorDatasetSchema dictionary is missing expected key 'mlflow_tensorspec'",
INVALID_PARAMETER_VALUE,
)
schema_dict = schema_dict["mlflow_tensorspec"]
features = Schema.from_json(schema_dict["features"])
if "targets" in schema_dict and schema_dict["targets"] is not None:
targets = Schema.from_json(schema_dict["targets"])
return cls(features, targets)
else:
return cls(features)
def __eq__(self, other) -> bool:
return (
isinstance(other, TensorDatasetSchema)
and self.features == other.features
and self.targets == other.targets
)
def __repr__(self) -> str:
return f"features:\n {self.features!r}\ntargets:\n {self.targets!r}\n"