# `Latu.ML.PipelineModel`
[🔗](https://github.com/zero-one-group/latu_ml/blob/v0.4.2/lib/latu/ml/pipeline_model.ex#L1)

A fitted pipeline: its stages, in order, with every estimator replaced by the model it fitted.

**It owns those models.** Each one is an entry in the session's ML cache, so
`Latu.ML.delete/1` on a pipeline model releases every model inside it — including the ones in
a nested pipeline — and nothing else does. `Latu.ML.with_model/3` takes a pipeline and brackets
the whole thing.

`Latu.ML.transform/2` composes the stages lazily: the frame it hands back carries every stage's
relation and reaches no server until you collect it. There is no server-side pipeline, so there
is nothing to release but the models.

`session` is where those models live, and it is what `Latu.ML.save/3` writes through.

# `t`

```elixir
@type t() :: %Latu.ML.PipelineModel{
  session: Latu.Session.t(),
  stages: [Latu.ML.Pipeline.stage()],
  uid: String.t()
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
