Models¶
A model in mteb
covers two concepts: metadata and implementation.
- Metadata contains information about the model such as maximum input
length, valid frameworks, license, and degree of openness.
- Implementation is a reproducible workflow, which allows others to run the same model again, using the same prompts, hyperparameters, aggregation strategies, etc.

mteb
Utilities¶
mteb.get_model_metas(model_names=None, languages=None, open_weights=None, frameworks=None, n_parameters_range=(None, None), use_instructions=None, zero_shot_on=None)
¶
Load all models' metadata that fit the specified criteria.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
model_names
|
Iterable[str] | None
|
A list of model names to filter by. If None, all models are included. |
None
|
languages
|
Iterable[str] | None
|
A list of languages to filter by. If None, all languages are included. |
None
|
open_weights
|
bool | None
|
Whether to filter by models with open weights. If None this filter is ignored. |
None
|
frameworks
|
Iterable[str] | None
|
A list of frameworks to filter by. If None, all frameworks are included. |
None
|
n_parameters_range
|
tuple[int | None, int | None]
|
A tuple of lower and upper bounds of the number of parameters to filter by. If (None, None), this filter is ignored. |
(None, None)
|
use_instructions
|
bool | None
|
Whether to filter by models that use instructions. If None, all models are included. |
None
|
zero_shot_on
|
list[AbsTask] | None
|
A list of tasks on which the model is zero-shot. If None this filter is ignored. |
None
|
Source code in mteb/models/get_model_meta.py
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
|
mteb.get_model_meta(model_name, revision=None, fetch_from_hf=True)
¶
A function to fetch a model metadata object by name.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
model_name
|
str
|
Name of the model to fetch |
required |
revision
|
str | None
|
Revision of the model to fetch |
None
|
fetch_from_hf
|
bool
|
Whether to fetch the model from HuggingFace Hub if not found in the registry |
True
|
Returns:
Type | Description |
---|---|
ModelMeta
|
A model metadata object |
Source code in mteb/models/get_model_meta.py
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
|
mteb.get_model(model_name, revision=None, **kwargs)
¶
A function to fetch and load model object by name.
Note
This function loads the model into memory. If you only want to fetch the metadata, use get_model_meta
instead.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
model_name
|
str
|
Name of the model to fetch |
required |
revision
|
str | None
|
Revision of the model to fetch |
None
|
**kwargs
|
Any
|
Additional keyword arguments to pass to the model loader |
{}
|
Returns:
Type | Description |
---|---|
MTEBModels
|
A model object |
Source code in mteb/models/get_model_meta.py
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
|
Metadata¶
mteb.models.model_meta.ModelMeta
¶
Bases: BaseModel
The model metadata object.
Attributes:
Name | Type | Description |
---|---|---|
loader |
Callable[..., MTEBModels] | None
|
the function that loads the model. If None it will assume that the model is not implemented. Cross-encoders like models would implement only |
loader_kwargs |
dict[str, Any]
|
The keyword arguments to pass to the loader function. |
name |
str | None
|
The name of the model, ideally the name on huggingface. It should be in the format "organization/model_name". |
n_parameters |
int | None
|
The number of parameters in the model, e.g. 7_000_000 for a 7M parameter model. Can be None if the number of parameters is not known (e.g. for proprietary models) or if the loader returns a SentenceTransformer model from which it can be derived. |
memory_usage_mb |
float | None
|
The memory usage of the model in MB. Can be None if the memory usage is not known (e.g. for proprietary models). To calculate it use the |
max_tokens |
float | None
|
The maximum number of tokens the model can handle. Can be None if the maximum number of tokens is not known (e.g. for proprietary models). |
embed_dim |
int | None
|
The dimension of the embeddings produced by the model. Currently all models are assumed to produce fixed-size embeddings. |
revision |
str | None
|
The revision number of the model. If None, it is assumed that the metadata (including the loader) is valid for all revisions of the model. |
release_date |
StrDate | None
|
The date the model's revision was released. |
license |
Licenses | StrURL | None
|
The license under which the model is released. Required if open_weights is True. |
open_weights |
bool | None
|
Whether the model is open source or proprietary. |
public_training_code |
str | None
|
A link to the publicly available training code. If None, it is assumed that the training code is not publicly available. |
public_training_data |
str | bool | None
|
A link to the publicly available training data. If None, it is assumed that the training data is not publicly available. |
similarity_fn_name |
ScoringFunction | None
|
The distance metric used by the model. |
framework |
list[FRAMEWORKS]
|
The framework the model is implemented in, can be a list of frameworks e.g. |
reference |
StrURL | None
|
A URL to the model's page on huggingface or another source. |
languages |
list[ISOLanguageScript] | None
|
The languages the model is intended to be specified as a 3-letter language code followed by a script code e.g., "eng-Latn" for English in the Latin script. |
use_instructions |
bool | None
|
Whether the model uses instructions E.g. for prompt-based models. This also includes models that require a specific format for input, such as "query: {document}" or "passage: {document}". |
citation |
str | None
|
The citation for the model. This is a bibtex string. |
training_datasets |
set[str] | None
|
A dictionary of datasets that the model was trained on. Names should be names as their appear in |
adapted_from |
str | None
|
Name of the model from which this model is adapted. For quantizations, fine-tunes, long doc extensions, etc. |
superseded_by |
str | None
|
Name of the model that supersedes this model, e.g., nvidia/NV-Embed-v2 supersedes v1. |
is_cross_encoder |
bool | None
|
Whether the model can act as a cross-encoder or not. |
modalities |
list[Modalities]
|
A list of strings representing the modalities the model supports. Default is ["text"]. |
Source code in mteb/models/model_meta.py
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 |
|
calculate_memory_usage_mb()
¶
Calculates the memory usage (in FP32) of the model in MB.
Source code in mteb/models/model_meta.py
263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 |
|
get_training_datasets()
¶
Returns all training datasets of the model including similar tasks.
Source code in mteb/models/model_meta.py
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 |
|
is_zero_shot_on(tasks)
¶
Indicates whether the given model can be considered zero-shot or not on the given tasks. Returns None if no training data is specified on the model.
Source code in mteb/models/model_meta.py
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
|
validate_similarity_fn_name(value)
classmethod
¶
Converts the similarity function name to the corresponding enum value. sentence_transformers uses Literal['cosine', 'dot', 'euclidean', 'manhattan'], and pylate uses Literal['MaxSim']
Source code in mteb/models/model_meta.py
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
|
zero_shot_percentage(tasks)
¶
Indicates how out-of-domain the selected tasks are for the given model.
Source code in mteb/models/model_meta.py
247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 |
|
Model Protocols¶
mteb.models.Encoder
¶
Bases: Protocol
The interface for an encoder in MTEB.
Besides the required functions specified below, the encoder can additionally specify the following signatures seen below. In general the interface is kept aligned with sentence-transformers interface. In cases where exceptions occurs these are handled within MTEB.
Source code in mteb/models/models_protocols.py
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
|
mteb_model_meta
property
¶
Metadata of the model
__init__(model_name, revision, **kwargs)
¶
The initialization function for the encoder. Used when calling it from the mteb run CLI.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
model_name
|
str
|
Name of the model |
required |
revision
|
str | None
|
revision of the model |
required |
kwargs
|
Any
|
Any additional kwargs |
{}
|
Source code in mteb/models/models_protocols.py
88 89 90 91 92 93 94 95 96 |
|
encode(inputs, *, task_metadata, hf_split, hf_subset, prompt_type=None, **kwargs)
¶
Encodes the given sentences using the encoder.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
inputs
|
DataLoader[BatchedInput]
|
Batch of inputs to encode. |
required |
task_metadata
|
TaskMetadata
|
The metadata of the task. Encoders (e.g. SentenceTransformers) use to select the appropriate prompts, with priority given to more specific task/prompt combinations over general ones. The order of priorities for prompt selection are: 1. Composed prompt of task name + prompt type (query or passage) 2. Specific task prompt 3. Composed prompt of task type + prompt type (query or passage) 4. Specific task type prompt 5. Specific prompt type (query or passage) |
required |
hf_split
|
str
|
Split of current task, allows to know some additional information about current split. E.g. Current language |
required |
hf_subset
|
str
|
Subset of current task. Similar to |
required |
prompt_type
|
PromptType | None
|
The name type of prompt. (query or passage) |
None
|
**kwargs
|
Any
|
Additional arguments to pass to the encoder. |
{}
|
Returns:
Type | Description |
---|---|
Array
|
The encoded input in a numpy array or torch tensor of the shape (Number of sentences) x (Embedding dimension). |
Source code in mteb/models/models_protocols.py
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
|
similarity(embeddings1, embeddings2)
¶
Compute the similarity between two collections of embeddings. The output will be a matrix with the similarity scores between all embeddings from the first parameter and all embeddings from the second parameter. This differs from similarity_pairwise which computes the similarity between corresponding pairs of embeddings.
read more at: https://www.sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.similarity
Parameters:
Name | Type | Description | Default |
---|---|---|---|
embeddings1
|
Array
|
[num_embeddings_1, embedding_dim] or [embedding_dim]-shaped numpy array or torch tensor. |
required |
embeddings2
|
Array
|
[num_embeddings_2, embedding_dim] or [embedding_dim]-shaped numpy array or torch tensor. |
required |
Returns:
Type | Description |
---|---|
Array
|
A [num_embeddings_1, num_embeddings_2]-shaped torch tensor with similarity scores. |
Source code in mteb/models/models_protocols.py
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
|
similarity_pairwise(embeddings1, embeddings2)
¶
Compute the similarity between two collections of embeddings. The output will be a vector with the similarity scores between each pair of embeddings.
read more at: https://www.sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.similarity_pairwise
Parameters:
Name | Type | Description | Default |
---|---|---|---|
embeddings1
|
Array
|
[num_embeddings, embedding_dim] or [embedding_dim]-shaped numpy array or torch tensor. |
required |
embeddings2
|
Array
|
[num_embeddings, embedding_dim] or [embedding_dim]-shaped numpy array or torch tensor. |
required |
Returns:
Type | Description |
---|---|
Array
|
A [num_embeddings]-shaped torch tensor with pairwise similarity scores. |
Source code in mteb/models/models_protocols.py
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
|
mteb.models.SearchProtocol
¶
Bases: Protocol
Interface for searching models.
Source code in mteb/models/models_protocols.py
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
|
mteb_model_meta
property
¶
Metadata of the model
index(corpus, *, task_metadata, hf_split, hf_subset, encode_kwargs)
¶
Index the corpus for retrieval.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
corpus
|
CorpusDatasetType
|
Corpus dataset to index. |
required |
task_metadata
|
TaskMetadata
|
Metadata of the task, used to determine how to index the corpus. |
required |
hf_split
|
str
|
Split of current task, allows to know some additional information about current split. |
required |
hf_subset
|
str
|
Subset of current task. Similar to |
required |
encode_kwargs
|
dict[str, Any]
|
Additional arguments to pass to the encoder during indexing. |
required |
Source code in mteb/models/models_protocols.py
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
|
search(queries, *, task_metadata, hf_split, hf_subset, top_k, encode_kwargs, top_ranked=None)
¶
Search the corpus using the given queries.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
queries
|
QueryDatasetType
|
Queries to find |
required |
task_metadata
|
TaskMetadata
|
Task metadata |
required |
hf_split
|
str
|
split of the dataset |
required |
hf_subset
|
str
|
subset of the dataset |
required |
top_ranked
|
TopRankedDocumentsType | None
|
Top-ranked documents for each query, mapping query IDs to a list of document IDs. Passed only from Reranking tasks. |
None
|
top_k
|
int
|
Number of top documents to return for each query. |
required |
encode_kwargs
|
dict[str, Any]
|
Additional arguments to pass to the encoder during indexing. |
required |
Returns:
Type | Description |
---|---|
RetrievalOutputType
|
Dictionary with query IDs as keys with dict as values, where each value is a mapping of document IDs to their relevance scores. |
Source code in mteb/models/models_protocols.py
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
|
mteb.models.CrossEncoderProtocol
¶
Bases: Protocol
The interface for a CrossEncoder in MTEB.
Besides the required functions specified below, the cross-encoder can additionally specify the following signatures seen below. In general the interface is kept aligned with sentence-transformers interface. In cases where exceptions occurs these are handled within MTEB.
Source code in mteb/models/models_protocols.py
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 |
|
mteb_model_meta
property
¶
Metadata of the model
__init__(model_name, revision, **kwargs)
¶
The initialization function for the encoder. Used when calling it from the mteb run CLI.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
model_name
|
str
|
Name of the model |
required |
revision
|
str | None
|
revision of the model |
required |
kwargs
|
Any
|
Any additional kwargs |
{}
|
Source code in mteb/models/models_protocols.py
185 186 187 188 189 190 191 192 193 |
|
predict(inputs1, inputs2, *, task_metadata, hf_split, hf_subset, prompt_type=None, **kwargs)
¶
Predicts relevance scores for pairs of inputs. Note that, unlike the encoder, the cross-encoder can compare across inputs.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
inputs1
|
DataLoader[BatchedInput]
|
First Dataloader of inputs to encode. For reranking tasks, these are queries (for text only tasks |
required |
inputs2
|
DataLoader[BatchedInput]
|
Second Dataloader of inputs to encode. For reranking, these are documents (for text only tasks |
required |
task_metadata
|
TaskMetadata
|
Metadata of the current task. |
required |
hf_split
|
str
|
Split of current task, allows to know some additional information about current split. E.g. Current language |
required |
hf_subset
|
str
|
Subset of current task. Similar to |
required |
prompt_type
|
PromptType | None
|
The name type of prompt. (query or passage) |
None
|
**kwargs
|
Any
|
Additional arguments to pass to the cross-encoder. |
{}
|
Returns:
Type | Description |
---|---|
Array
|
The predicted relevance scores for each inputs pair. |
Source code in mteb/models/models_protocols.py
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
|
mteb.models.MTEBModels = Union[Encoder, CrossEncoderProtocol, SearchProtocol]
module-attribute
¶
Type alias for all MTEB model types as many models implement multiple protocols and many tasks can be solved by multiple model types.