Text Classification
Transformers
Safetensors
lfm2
feature-extraction
betterwright
accessibility
browser-agent
reranking
long-context
custom_code
Instructions to use ProCreations/betterwright-encoder-350m with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use ProCreations/betterwright-encoder-350m with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="ProCreations/betterwright-encoder-350m", trust_remote_code=True)# Load model directly from transformers import AutoTokenizer, AutoModel tokenizer = AutoTokenizer.from_pretrained("ProCreations/betterwright-encoder-350m", trust_remote_code=True) model = AutoModel.from_pretrained("ProCreations/betterwright-encoder-350m", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
| license: other | |
| license_name: lfm-open-license-v1.0 | |
| license_link: https://huggingface.co/LiquidAI/LFM2.5-Encoder-350M/blob/main/LICENSE | |
| library_name: transformers | |
| pipeline_tag: text-classification | |
| tags: | |
| - betterwright | |
| - accessibility | |
| - browser-agent | |
| - reranking | |
| - long-context | |
| base_model: LiquidAI/LFM2.5-Encoder-350M | |
| # BetterWright Encoder 350M | |
| A task-conditioned accessibility-tree relevance encoder for reducing browser | |
| agent context while preserving action targets and evidence. It is trained from | |
| `LiquidAI/LFM2.5-Encoder-350M` in bfloat16. | |
| All 355,011,331 parameters are trained; this checkpoint does not use LoRA, | |
| adapters, or a frozen backbone. The model has three outputs: chunk relevance, | |
| token/node relevance, and a confidence signal for deterministic fallback. | |
| BetterWright keeps its original snapshot whenever the confidence gate is not | |
| met. | |
| The training corpus contains 500,000 deduplicated structural examples grounded | |
| in 5,256 independently generated and audited tasks from 141 real-site domains. | |
| Domains—not rows—define the split: 110 train, 8 validation, and 23 held-out | |
| test domains. | |
| The corpus is primarily BetterWright accessibility trees, with a smaller share | |
| of alternate accessibility serializations for robustness. | |
| ## Input | |
| ```text | |
| [BETTERWRIGHT_TASK] | |
| <the current browser task or observation query> | |
| [ACCESSIBILITY_SUBTREE] | |
| <BetterWright aria tree chunk> | |
| ``` | |
| The released checkpoint is progressively trained at 8K, 16K, 32K, and 64K | |
| sequence lengths. Normal inference should still use hierarchical chunks for | |
| lower latency; 64K is intended for unusually large dumps and packed tabs. | |
| ## Quick start | |
| ```python | |
| import torch | |
| from transformers import AutoModel, AutoTokenizer | |
| model_id = "ProCreations/betterwright-encoder-350m" | |
| tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True) | |
| model = AutoModel.from_pretrained( | |
| model_id, | |
| trust_remote_code=True, | |
| torch_dtype=torch.bfloat16, | |
| ).eval() | |
| batch = tokenizer( | |
| "[BETTERWRIGHT_TASK]\nOpen pricing\n[ACCESSIBILITY_SUBTREE]\n" | |
| '- link "Pricing" [ref=e12]', | |
| return_tensors="pt", | |
| ) | |
| with torch.inference_mode(): | |
| output = model(**batch) | |
| relevance = torch.sigmoid(output.logits) | |
| confidence = torch.sigmoid(output.uncertainty_logits) | |
| token_relevance = torch.sigmoid(output.token_logits) | |
| ``` | |
| Production pruning should use the validated thresholds in | |
| `relevance_config.json`, deterministic must-retain rules, and exact full-tree | |
| fallback. A raw relevance score alone is not a safe deletion decision. | |
| ## Training | |
| - 500,000 unique pairs: 77.7% BetterWright trees, 13.1% alternate ARIA trees, | |
| and 9.1% compact accessibility outlines. | |
| - 391,777 train, 25,891 validation, and 82,332 untouched-test pairs, split by | |
| domain before structural expansion. | |
| - Full-parameter BF16 AdamW training with global batch 128, a cosine schedule, | |
| and a class weight derived from the exact training distribution. | |
| - A balanced positive/negative packed-tree curriculum at 8K, 16K, 32K, and | |
| 64K tokens, with exact required-node span supervision. | |
| ## Evaluation policy | |
| Fallback thresholds are selected on validation domains. The production policy | |
| uses eight ranked 1,800-character structural regions, preserves referenced | |
| nodes, bounded child context, ancestry, and deterministic must-retain states, | |
| and returns the exact original tree on low confidence, errors, insufficient | |
| benefit, or an over-limit result. | |
| | Domain split | Tasks | Target/evidence recall | Perfect-task recall | Pruning coverage | Mean token savings when active | Token-weighted savings | | |
| | --- | ---: | ---: | ---: | ---: | ---: | ---: | | |
| | Validation (8 domains) | 288 | 100.000% | 100.000% | 12.50% | 33.38% | 3.42% | | |
| | Held-out test (23 domains) | 877 | 99.584% | 99.544% | 22.46% | 44.09% | 9.69% | | |
| | Post-training reserve (17 additional domains) | 161 | 100.000% | 100.000% | 33.54% | 16.78% | 2.42% | | |
| The exact reports and frozen policy are distributed as `eval.json`, | |
| `reserve_eval.json`, and `relevance_config.json`. The 99.5% target is evaluated | |
| on whole tasks and required accessibility refs, not inferred from training | |
| loss. A nine-site live navigational replay retained and clicked 6/9 current | |
| targets; two large pages exceeded the runtime ceiling after fallback and one | |
| site did not expose the requested label. This limitation is intentionally not | |
| hidden by substituting easier sites. | |
| ## Safety and limitations | |
| This is a relevance model, not an autonomous browser agent. It must not be the | |
| only path for security decisions. Snapshot text is untrusted data. Consumers | |
| should keep deterministic must-retain rules and fall back to the full tree on | |
| model errors, timeouts, low confidence, or insufficient retained context. | |
| Savings are substantial when pruning activates, but coverage is deliberately | |
| conservative and very large pages can still fall back above the caller's size | |
| ceiling. This checkpoint is therefore an alpha integration, not a claim that | |
| every page becomes smaller. | |