Garrett Weaver
11/22/2025, 12:17 AM__init__
2. load the model from mlflow in my main script and pass as an argument like below
@daft.cls
class ModelPredictor:
"""Model predictor for Daft DataFrames."""
def __init__(self, model: lgb.Booster, train_config: TrainConfig) -> None:
self.model = copy.deepcopy(model)
self.train_config = train_configKevin Wang
11/22/2025, 12:19 AM__init__ !Garrett Weaver
11/22/2025, 12:25 AMSeries in the example)? Argument 1 to "predict" of "ModelPredictor" has incompatible type "*list[Expression]"; expected "Series"
@daft.method.batch(return_dtype=daft.DataType.float64())
def predict(self, *features: daft.Series): # type: ignore
"""Predict method for Daft Series."""
feature_df = pd.DataFrame(
{feature.name: feature.to_arrow() for feature in features}
)
return daft.Series.from_numpy(
model_predict(self.model, feature_df, self.train_config).to_numpy()
)Garrett Weaver
11/22/2025, 12:25 AMGarrett Weaver
11/22/2025, 12:26 AM# type: ignore, maybe it's because we are on an older version most likelyKevin Wang
11/22/2025, 12:26 AMGarrett Weaver
11/22/2025, 12:27 AMGarrett Weaver
11/22/2025, 12:28 AMreturn inference_features.with_column(
"regression_output",
model_predictor.predict(
*[daft.col(col) for col in train_config.feature_cols] # type: ignore
),
)Garrett Weaver
11/22/2025, 12:29 AMKevin Wang
11/22/2025, 12:29 AMGarrett Weaver
11/22/2025, 12:30 AMKevin Wang
11/22/2025, 12:31 AM@ray.remote on classes to create Ray Actors. Wonder if they do anything different that plays nicer with mypyGarrett Weaver
11/22/2025, 12:39 AMGarrett Weaver
11/22/2025, 1:00 AMKevin Wang
11/22/2025, 1:01 AM__init__ , if there is some issue with concurrent model weight loading.Kevin Wang
11/22/2025, 1:02 AMGarrett Weaver
11/22/2025, 1:02 AM