Pulpie Orange Small
Pareto-optimal main-content extraction from HTML.
210M-parameter encoder · 0.862 ROUGE-5 F1 on WebMainBench · the recommended, default Pulpie model.
Pulpie Orange Small extracts the main content from raw HTML, stripping navigation, ads, sidebars, and footers. It is an encoder that labels every HTML block as content or boilerplate in a single forward pass, so it approaches state-of-the-art extraction quality while running far faster and cheaper than autoregressive extractors.
At 210M parameters it matches Dripper (0.6B) in quality on WebMainBench (0.862 vs 0.864) while running 20x faster on an L4 GPU. It has the best size-to-quality ratio in the Pulpie family and is the recommended model for production.
Usage
The easiest way to use this model is through the
pulpie package, which handles HTML simplification, chunking, classification, and reconstruction:
1from pulpie import Extractor
2
3extractor = Extractor() # defaults to pulpie-orange-small
4result = extractor.extract(html)
5
6print(result.markdown) # clean Markdown
7print(result.html) # clean HTML
8print(result.n_main, result.n_other) # blocks kept vs dropped
Extractor auto-detects CUDA, Apple MPS, then CPU. See the
GitHub README for batch and multi-GPU usage.
How it works
Pulpie runs a four-stage pipeline:
- Simplify — remove scripts, styles, and formatting noise; tag each block with a unique ID.
- Chunk — pack blocks into sequences of up to 8,192 tokens separated by
<|sep|> markers (~80% of pages fit in one chunk).
- Classify — a single encoder forward pass labels every block (at its
<|sep|> position) as content or boilerplate.
- Reconstruct — return the kept blocks as HTML, or convert to Markdown.
This model is a token-classification head over
EuroBERT-210m, distilled from the 2.1B
Pulpie Orange Large teacher (KL-divergence 0.7 + hard-label cross-entropy 0.3, temperature 2.0).
Benchmarks
WebMainBench, English subset (6,647 pages), ROUGE-5 F1:
| Model | Params | ROUGE-5 F1 | Throughput (L4) |
|---|
| Pulpie Orange Large | 2.1B | 0.873 | 1.3 pages/sec |
| Dripper | 0.6B | 0.864 | 0.68 pages/sec |
| Pulpie Orange Base | 610M | 0.863 | 3.9 pages/sec |
| Pulpie Orange Small (this model) | 210M | 0.862 | 13.7 pages/sec |
| magic-html | - | 0.700 | - |
| Trafilatura | - | 0.619 | - |
Cleaning 1 billion pages on an L4 costs ~$7,900 with Pulpie Orange Small versus ~$159,000 with Dripper. Full analysis in the
blog post.
Model family
Acknowledgements
Pulpie builds directly on the work of the MinerU-HTML and Dripper team (Ma et al., 2025). Their simplify_html preprocessing, block-level annotation scheme, and the WebMainBench benchmark are foundational to this work. Built on EuroBERT (Boizard et al., 2025).
Citation
1@note{pulpie2026,
2 title = {Pulpie: Pareto-Optimal Models for Cleaning the Web},
3 author = {Minhas, Bhavnick and Nigam, Shreyash and Feyn Research},
4 year = {2026},
5 venue = {Feyn Field Notes}
6}
Built by
Feyn. Model weights licensed under
CC BY-NC 4.0 (non-commercial); contact
team@usefeyn.com for commercial licensing. The
pulpie library is Apache 2.0.