---
title: "Model wrappers"
slug: "model-wrappers"
abstract: ""
---
# Model wrappers

In the context of the Cortex Processing Engine, a model wrapper is an implementation of `Sitecore.Processing.Engine.ML.Abstractions.IModel`. A model wrapper is passed in as part of the worker options dictionary when you register a task and defines the following:

- Model training logic (`TrainAsync()`) for a specific model.
- Model evaluation logic (`EvaluateAsync()`) for a specific model.
- Projection logic (`Projection`) that defines the structure

Different workers use different parts of the same model, and some workers - such as the merge worker - do not require a model wrapper at all. For example, in the model training task chain:

- The projection worker uses the projection logic - for example, to project xConnect data into a format that can be used in a machine learning context.
- The merger worker does not use the model wrapper.
- The training worker executes model training logic.

> [!note]
> If you want to use projection in a context other than machine learning, you still need to create an implementation of `IModel`. If you do not require model training and evaluation, you can return empty results.

## Model wrappers and trained models

There is no direct relationship between a class that implements `IModel` and a trained machine learning model. An `IModel` does not contain a reference to the location of the trained model in blob storage.

The relationship between a model wrapper and a trained model is limited to custom logic in the `TrainAsync()` and `EvaluateAsync()` methods of the model wrapper.