Mola 150M
Mola 150M answers typed decisions: given a state (text or JSON) and one or more questions, each a choice among named options or a yes/no statement, it returns a probability for every option. It is a 149M-parameter ModernBERT encoder that reads all the questions about a state in one forward pass.
| Parameters | 149,311,489 |
| Initial weights | cross-encoder/ettin-reranker-150m-v1 |
| Context | 8,192 tokens, nothing truncated (past the encoder config's 7,999 positions; rotary embeddings) |
| Licence | CC BY-NC 4.0, non-commercial use (LICENSE) |
Results: Decision Index 0.3, public suite
| Public index | Raw index | Breadth (skill) |
|---|---|---|
| 31.34 | 48.83 | 27.66 |
| Area | Weight | Benchmarks | Skill | Coverage |
|---|---|---|---|---|
| Knowledge & Reasoning | 25.8% | 11 | 11.97 | 99.98% |
| Language Understanding | 25.8% | 9 | 30.22 | 99.91% |
| Retrieval & Classification | 20.0% | 6 | 51.43 | 100.00% |
| Tools & Automation | 18.3% | 5 | 50.09 | 99.86% |
| Arts & Human Taste | 10.0% | 6 | 9.86 | 99.99% |
- Complete run of the kit (commit
9eb2dbe, edition 0.3): 140,178 scored requests, 140,170 answered, 8 unsupported (their state does not fit 8,192 tokens; they count as wrong). Results, scores and environment: codavidgarcia/mola-decision-index-results. - Latency per request on NVIDIA GeForce RTX 4090 (torch 2.11.0+cu126, CUDA 12.6), device-synchronized, model loading excluded: median 7.3 ms, p95 28.5 ms, mean 11.9 ms.
- The public index is 20% of the board's Full score; the other 80% comes from private tests run by the maintainers.
- Train splits of several of the suite's benchmarks are in the training data, so those scores are in-distribution results.
Use
from mola import Mola
model = Mola("codavidgarcia/mola-150m") # or a local folder holding these files
model.answer(
state={"ticket": "My card was charged twice for the same order."},
questions={
"intent": {"type": "choice", "instructions": "What does the customer want?",
"criteria": {"refund": "Money back for the duplicate charge", "cancel": "Cancel the order",
"info": "Just asking for information"}},
"urgent": {"type": "noul", "instructions": "The customer needs a fast response."},
})
# {"intent": {"type": "choice", "choice": ..., "probabilities": {...}}, "urgent": {"type": "noul", "noul": ...}}
mola.py needs torch, transformers (5.17.0, pinned in requirements.txt) and safetensors. The weights are
stored with encoder. and head. prefixes, so transformers' AutoModel does not load them; use mola.py.
With the Decision Index kit (commit 9eb2dbe) on PYTHONPATH and a
suite built with it, from this folder:
python -m decision_index pipeline --engine decision_index_engine:MolaEngine --option device=cuda --edition 0.3 --suite-dir <suite-0.3> --compact --out runs/mola-150m
Add --no-verify if your build fails the kit's frozen-file check (see the results dataset card).
How it reads a request
<state as sorted JSON>
(Q1) (choice) <instructions>
[MASK] <option 1>
[MASK] <option 2>
(Q2) (noul) <instructions>
[MASK] no
[MASK] yes
A choice option is the description given in criteria (the key when the description is null). A small head
(LayerNorm, Linear, GELU, Linear) turns the hidden state at each [MASK] into one logit, and a softmax runs over each
question's own options; a noul answer is the probability of yes. When the questions do not fit together in 8,192
tokens, each question gets its own sequence over the same state; when the state does not fit together with one of
its questions on its own, the whole request is refused (TooLong, Unsupported in the kit). On CUDA the encoder runs
in bfloat16 autocast.
Training
Full fine-tuning in stages on public datasets converted to typed decisions (among them the tasksource and Bekko collections, the train splits of several Decision Index benchmarks and other public datasets of the same task forms), with a cross-entropy loss between the softmax over each question's options and the row's target distribution. Sources, licences and attributions: DATA.md.
Limitations
- Mostly English. The public suite also scores Arabic (iSarcasmEval) and Japanese and Spanish (Amazon ESCI) requests; no language was evaluated on its own.
- Knowledge-heavy and multi-step reasoning benchmarks (GSM8K, GPQA, HLE, BBH) stay close to chance: a 150M encoder holds little world knowledge and does no step-by-step computation.
- The head was trained toward each row's target distribution; its probabilities are not calibrated on new domains, so check them on your data before setting a threshold.
- Requests whose state does not fit 8,192 tokens together with one of their questions are refused, never cut.
Licence
CC BY-NC 4.0 for the weights and code: non-commercial use, with attribution. The licence grants no trademark rights to the name "Mola" (section 2(b)(2)); please do not publish a modified model as Mola. The encoder derives from cross-encoder/ettin-reranker-150m-v1 (Apache-2.0), itself trained from the Ettin encoders (MIT); both notices are in LICENSE. Training-data licences and attributions: DATA.md.
- Downloads last month
- 22
Model tree for codavidgarcia/mola-150m
Base model
jhu-clsp/ettin-encoder-150m