Skip to page content
SAVRN
Search Plan a project

Open-weight model · Text ranking

ettin-150m-memory-reranker-ft-v1

by Daecore Daecore/ettin-150m-memory-reranker-ft-v1

ettin-150m-memory-reranker-ft-v1 is an open-weight model for text ranking from Daecore, released under Apache License 2.0. It has 7,999-token context. Its published files total 309.1 MB. It draws 55 downloads a month.

An English cross-encoder for ranking passages from notes, procedures, decisions and technical documentation. Give it a query and candidate passages; it returns one relevance score per pair.

Parameters—
Context7,999
Weights4.5 MB
Licenseapache-2.0
AccessOpen weights
Monthly Downloads55

Model Card

By Daecore, published under apache-2.0, revision bf518ed9faf6.

An English cross-encoder for ranking passages from notes, procedures, decisions and technical documentation. Give it a query and candidate passages; it returns one relevance score per pair. It is a fine-tune of Ettin Reranker 150M and runs locally through ONNX Runtime. This revision adds a Vulkan FP32 graph, model.vulkan.onnx; the learned weights and the CUDA FP16 graph are unchanged. It omits the DirectML graph, which remains in the previous revision. Install tokenizers, numpy and onnxruntime-gpu[cuda,cudnn]==1.24.4. Keep model.onnx, model.onnx.data and the tokenizer from the same package together. This CUDA example assumes that package is in downloaded-model and scores two passages…

Read Daecore's full model card

Ettin-150M memory reranker

An English cross-encoder for ranking passages from notes, procedures, decisions and technical documentation. Give it a query and candidate passages; it returns one relevance score per pair. It is a fine-tune of Ettin Reranker 150M and runs locally through ONNX Runtime.

This revision adds a Vulkan FP32 graph, model.vulkan.onnx; the learned weights and the CUDA FP16 graph are unchanged. It omits the DirectML graph, which remains in the previous revision.

Quick start

Install tokenizers, numpy and onnxruntime-gpu[cuda,cudnn]==1.24.4. Keep model.onnx, model.onnx.data and the tokenizer from the same package together. This CUDA example assumes that package is in downloaded-model and scores two passages:

import numpy as np
import onnxruntime as ort
from pathlib import Path
from tokenizers import Tokenizer

root = Path("downloaded-model")  # The exact downloaded serving package.
tokenizer = Tokenizer.from_file(f"{root}/tokenizer.json")
tokenizer.no_padding()
tokenizer.no_truncation()
ort.preload_dlls()
session = ort.InferenceSession(
    f"{root}/model.onnx", providers=[("CUDAExecutionProvider", {"use_tf32": "0"})]
)
if "CUDAExecutionProvider" not in session.get_providers():
    raise RuntimeError("CUDA did not initialize; check the ONNX Runtime CUDA dependencies.")
query = "What must happen before a database migration?"
passages = [
    "Take a verified backup before applying the migration.",
    "The dashboard theme uses a blue background.",
]
query_tokens = tokenizer.encode(query, add_special_tokens=False)
if len(query_tokens.ids) > 128:
    raise ValueError("Query exceeds the qualified 128-token content limit.")
scores = []
for passage in passages:
    passage_tokens = tokenizer.encode(passage, add_special_tokens=False)
    passage_tokens.truncate(1022)
    pair = tokenizer.post_process(query_tokens, passage_tokens, add_special_tokens=True)
    inputs = {
        "input_ids": np.array([pair.ids], dtype=np.int64),
        "attention_mask": np.array([pair.attention_mask], dtype=np.int64),
    }
    scores.append(float(session.run(None, inputs)[0].reshape(-1)[0]))
print(sorted(zip(passages, scores), key=lambda item: item[1], reverse=True))

Higher scores rank first; raw scores are not probabilities. The input envelope is 128 query-content tokens plus 1,022 passage-content tokens and three special tokens, a maximum of 1,153 tokens. The example rejects an oversized query and truncates the passage, matching the tested input policy.

Evaluation

Upstream and fine-tuned Ettin scored the same 970 pools of 50 candidates, with all 48,500 pairs judged. The table uses the 873 answerable pools that contain at least one useful passage, so it measures ordering after retrieval. “Upstream” is the exact starting checkpoint without Daecore fine-tuning.

Metric, answerable pools Upstream Ettin Daecore fine-tune
Hit@3 83.16% 92.55%
Precision@3 59.76% 80.03%
nDCG@10 0.5519 0.7407

Grades 2 and 3 count as useful. Hit asks whether at least one useful passage appears, precision measures the useful share of returned positions, and nDCG rewards higher grades near the top. Many pools contain several useful passages, so random ordering already reaches 97.30% Hit@20; early precision and graded ranking are more informative than deep Hit. The comparison runs both models in PyTorch FP16 with matched tokenization on reused development inputs. The evaluation companion has every cutoff through 20, all-query results, model identities and metric code.

On public data, both models rerank the same 50 candidates that upstream Gemma retrieved for each query, scored with official relevance judgments:

Dataset Queries Upstream Ettin Daecore fine-tune
FiQA 648 0.4860 0.4527
SciFact 300 0.7487 0.7544

These are nDCG@10 scores for reranking fixed candidate pools, not dense Gemma scores. Fine-tuning lowered FiQA and slightly raised SciFact. Later continuation recipes did not recover FiQA while keeping Daecore ranking quality, so the original learned weights remain.

Training data and objective

Training passages come from generated organizational documents and one person's project documentation, much of it AI-written. Queries include full questions, keywords, identifiers and pasted fragments. Model judges assigned grades from 0 to 3, and several passages can be useful for one query. ListNet learns ordering within each candidate list, and a pairwise term emphasizes distinctions between neighboring grades. Lists rotate through the full labeled pools, so useful, partly useful and unhelpful passages stay in the comparison.

Training recipe and exposure | Item | Value | |---|---| | Starting model | `cross-encoder/ettin-reranker-150m-v1` | | Training queries | 2,882 with ranking supervision; 30 no-positive queries excluded from the ranking loss | | Unique query–passage pairs | 144,100 | | Unique passage texts | 35,006 | | Supervision | Four relevance grades, 0–3; grades 2–3 count as useful | | Objective | ListNet with an adjacent-grade pairwise term weighted 0.2 | | Adapter | LoRA+, rank 16, alpha 32; merged for serving | | Learning rates | 5e-5 for LoRA A and the scoring head; 8e-4 for LoRA B | | Training steps | 2,882 scheduled; 2,881 applied updates, accumulating four lists of 16 per step | | Exposure | 11,528 lists; 184,448 candidate presentations |

Runtime and limits

model.onnx is the CUDA FP16 graph and model.vulkan.onnx the Vulkan FP32 graph; both read model.onnx.data. The Vulkan derivation rewrites bounded mask operations and keeps the learned weights. The FP32 graph's results were also checked for correctness on the CPU execution provider; no CPU latency guidance is given.

Vulkan requires onnxruntime==1.24.4 and the native WebGPU plugin onnxruntime-ep-webgpu==0.4.0, registered explicitly. Add the plugin device to the session options with dawnBackendType=Vulkan, and create the session without a providers list; the plugin name alone does not select Vulkan. serving.vulkan.json records the tested provider options.

On 970 Daecore candidate pools, CUDA and Vulkan produced the same Hit@5, Hit@10 and Hit@20; Hit@3 differed by one query and nDCG@10 by 0.0004. The paths are not bit-exact, so close scores can swap order. Checks used Windows x64 with an NVIDIA RTX 3060 Ti (8 GB); other GPUs and Linux are untested, even where Vulkan is available. Inside Daecore, Ettin reorders up to 50 deduplicated BM25 and Gemma candidates; the retrieval pipeline overview describes that path and result selection.

The task-specific panel is mostly generated and model-labeled, with no human reference, and was reused during development; training-seed variation is unmeasured. A reranker cannot recover a passage missing from its candidates, and several relevant passages may repeat one fact. These results do not establish unique-evidence coverage or downstream agent success.

License

Apache-2.0. The package includes upstream attribution and a modification notice.

Configuration

Architecture
ModernBertModel
Context length (tokens)
7,999
Layers
22
Hidden size
768
Feed-forward size
1,152
Attention heads
12
Vocabulary size
50,368
Model type
modernbert

Identity and Version

Repository
Daecore/ettin-150m-memory-reranker-ft-v1
Publisher
Daecore
Task
Text ranking
Modality
Other
Library
Not stated by the source
Parameters
Not stated by the source
Languages
en
Revision
bf518ed9faf69d7f8df180f48e41290230c6882c
First published
2026-09-07
Last updated
2026-09-29

Files and Weights

25 files, 309.1 MB in total. The weights are 2 files totalling 4.5 MB in onnx.

Weights2 files · 4.5 MB
Configuration13 files · 1.7 MB
Tokenizer2 files · 3.6 MB
Documentation5 files · 30.5 KB
Other2 files · 299.3 MB
Repository1 file · 1.6 KB
Every file
FileTypeSizeSHA-256
model.onnxWeights2.2 MB 7df4a3b3cd89
model.vulkan.onnxWeights2.2 MB cf27725a1598
config.jsonConfiguration2.0 KB —
evaluation/figures.pyConfiguration4.1 KB —
evaluation/metrics.pyConfiguration11.1 KB —
evaluation/reranker-summary.jsonConfiguration5.9 KB —
evaluation/reranker.jsonConfiguration1.1 MB —
evaluation/serving-qualification.jsonConfiguration4.7 KB —
evaluation/serving-summary.jsonConfiguration3.2 KB —
evaluation/serving.jsonConfiguration500.1 KB —
evaluation/svg_figures.pyConfiguration21.5 KB —
publication-manifest.jsonConfiguration5.8 KB —
serving.jsonConfiguration704 B —
serving.vulkan.jsonConfiguration946 B —
vulkan-derivation.jsonConfiguration972 B —
LICENSEDocumentation11.4 KB —
MODIFICATIONS.mdDocumentation2.2 KB —
NOTICEDocumentation499 B —
README.mdDocumentation7.6 KB —
evaluation/README.mdDocumentation8.8 KB —
figures/ettin-comparison.svgOther15.1 KB —
model.onnx.dataOther299.3 MB 78ddab681c2f
.gitattributesRepository1.6 KB —
tokenizer.jsonTokenizer3.6 MB —
tokenizer_config.jsonTokenizer488 B —

License and Download

License
apache-2.0
Access
Open weights, no gate
Download size
4.5 MB
Download from Daecore

Released by Daecore through its official repository on Hugging Face. Read the license.

Built From

  • Derived from cross-encoder/ettin-reranker-150m-v1
  • Quantized from cross-encoder/ettin-reranker-150m-v1

Memory Requirements

PrecisionWeights in memory
As published4.5 MB

Weights only, from the published parameter count; the key-value cache and runtime add to this.

Questions About ettin-150m-memory-reranker-ft-v1

Can I use ettin-150m-memory-reranker-ft-v1 commercially?

Yes. ettin-150m-memory-reranker-ft-v1 is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.

What is ettin-150m-memory-reranker-ft-v1's context length?

7,999 tokens, from the maximum position embeddings in its published configuration.

Similar Models

This model was converted to GGUF format from madebyaris/rerank-indonesia using llama.cpp via the ggml.ai's GGUF-my-repo space. Refer to the original model card for more details on the model. Install llama.cpp through brew (works on Mac and Linux) Invoke the llama.cpp server or the CLI. Note: You can also use this checkpoint directly through the usage steps listed in the Llama.cpp repo as well. Step 2: Move into the llama.cpp folder and build it with LLAMACURL=1 flag along with other hardware-specific flags (for ex: LLAMACUDA=1 for Nvidia GPUs on Linux).

Open weights apache-2.0 sentence-transformers

本仓库提供由 Qwen/Qwen3-Reranker-0.6B 转换的 RKNN 模型。 - Model ID:RKNNAI/RK182X-EMBEDDING-Qwen3-Reranker-0.6B - 模型显示名称:RK182X-EMBEDDING-Qwen3-Reranker-0.6B - 源模型:Qwen/Qwen3-Reranker-0.6B - 模型类型:EMBEDDING ModelScope 完整下载: Hugging Face 完整下载: ModelScope 指定配置下载: Hugging Face 指定配置下载: - 使用配套 RKNN Runtime 和驱动;运行前用 rknn-smi -v 检查设备端版本。 - 源模型许可证:Apache License 2.0,正文见 LICENSE,归属与转换修改说明见 NOTICE。 - 同时遵守 RKNN Toolkit、RKNN Runtime 相关许可;本包不包含运行库。

Open weights apache-2.0

Model · Text ranking

CLM-v0.1-8B-gguf

EvoAwaken Workshop

This repository contains the state and action projection heads only from CLM scores candidate actions against a state; it does not generate text. A separate, frozen Qwen3-8B encoder is required to turn text into embeddings. The source checkpoint is CLMv0.1-8B.pt (SHA-256 b2b4a8c9c2d39263eff78a351eb909a342ce9b3bf21a3f07c1d1bf15f1c4eda5). The converter preserves the F32 weight and bias bytes. It stores the reference scoring scale min(exp(logitscale), 100) = 100 in the GGUF. The GGUF does not contain the Qwen3-8B encoder, tokenizer, or original.pt file. The verified encoder file is SHA-256 5e416a2020fe63e76ea13c8979be35fc6070aaf3578f7876400c55c2f5c3eb30. Use rust-model-inference at or after…

Open weights apache-2.0

Model · Text ranking

kev-9B-LoRA-ranker

Gogogo

Why the disagreement is the feature, not the bug: kev downgrades high-frequency auto-recovering alerts (the #1 source of alert fatigue) and escalates orchestration-core outages that static rules treat as routine. - None-injection (p=0.1): teaches the head to abstain, not everything deserves a label We ran the obvious next experiment: fine-tune it on its own production data (5-fold grouped CV, 4-arm temperature calibration). Result: 0 gain over the deployed version — and we did not deploy it, per preset criteria defined before the experiment. That's the discipline this model is proud of: judge the upgrade on pre-registered criteria, not vibes. Training receipts and the arbitration table are…

Open weights apache-2.0 peft

This repository is under construction. No selected, validated model has been released yet. This model was created by Thea Tollersrud and Per Egil Kummervold in the NB-ASR project. The planned model recognizes equivalent Bokmål–Nynorsk text while detecting changed numbers, pronouns, entities, and participant roles. Meaning-preserving differences and reorderings are accepted. Training starts from Qwen/Qwen3-Reranker-0.6B and uses revision 619e36b85e4943f23cd85b66edcde331995e4872. Validation is automatic, without manual review. Accuracy will be conditional on the supplied positive pairs and the automatic corruption rules. See trainingstatus.json for the latest recorded job status. A complete…

Open weights apache-2.0

This is Horizon-Labs/multilingual-reranker-small in a smaller ONNX file, for running on a CPU. Same model, same tokenizer, same scores to within a small margin. The file is about a third smaller than the original quantized one. We use it in Sno Station to rerank memories for coding agents. The token embeddings, the attention projections and the first MLP projection are stored in 8 bits. The second MLP projection stays in float. Its inputs carry a few very large values, and 8 bits move the scores too much there. Weights are unsigned 8-bit, per channel. Signed weights overflow on AVX2 CPUs without VNNI and flatten every score. quantize.py rebuilds the file from the original onnx/model.onnx at…

Open weights apache-2.0 8,192 tokens transformers.js