Text Ranking
Transformers
Safetensors
English
qwen3
text-generation
reranker
edit-ranking
generative-engine-optimization
research-preview
Instructions to use ThakiCloud/EditRank-Multidomain-4B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use ThakiCloud/EditRank-Multidomain-4B with Transformers:
# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("ThakiCloud/EditRank-Multidomain-4B") model = AutoModelForCausalLM.from_pretrained("ThakiCloud/EditRank-Multidomain-4B", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Download example_inference.py from ThakiCloud/EditRank-Multidomain-4B: direct link, hf CLI and curl.
- Browser
- Download file 3.31 kB
-
https://huggingface.co/ThakiCloud/EditRank-Multidomain-4B/resolve/main/example_inference.py
- Command line
-
hf download hf://ThakiCloud/EditRank-Multidomain-4B/example_inference.py
-
curl -L -o example_inference.py https://huggingface.co/ThakiCloud/EditRank-Multidomain-4B/resolve/main/example_inference.py
3.31 kB
| """Minimal EditRank-Multidomain-4B usage: score candidate rewrites of a document for a query and pick the top-1. | |
| The score is logit("yes") - logit("no") at the last position, exactly as in evaluation. | |
| Higher = the model expects the revised document to rank higher in an answer engine's source list for the query. | |
| The unchanged original is a valid candidate: include it, and keep it when it scores highest. | |
| Research Preview: do NOT auto-publish the top-1 edit. Every candidate needs independent factual validation. | |
| """ | |
| import torch | |
| from transformers import AutoModelForCausalLM, AutoTokenizer | |
| MODEL_ID = "ThakiCloud/EditRank-Multidomain-4B" | |
| PREFIX = ('<|im_start|>system\nJudge whether the Document meets the requirements based on the Query and the Instruct provided. ' | |
| 'Note that the answer can only be "yes" or "no".<|im_end|>\n<|im_start|>user\n') | |
| SUFFIX = "<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n" | |
| EDIT_INSTR = ("Given a search query, an original document and a revised version of it, judge whether the revised version would be " | |
| "selected and ranked higher by an AI answer engine for this query than the original, while keeping every fact of " | |
| "the original unchanged.") | |
| def clip(s, n=1500): | |
| return s if len(s) <= n else s[:n] + " ..." | |
| def build(query, original, revised): | |
| doc = f"ORIGINAL (excerpt): {clip(original, 600)}\n\nREVISED: {clip(revised)}" | |
| return f"{PREFIX}<Instruct>: {EDIT_INSTR}\n<Query>: {query}\n<Document>: {doc}{SUFFIX}" | |
| def score(model, tok, query, original, candidates, max_len=1280): | |
| yes_id, no_id = tok.convert_tokens_to_ids("yes"), tok.convert_tokens_to_ids("no") | |
| enc = tok([build(query, original, c) for c in candidates], padding=True, truncation=True, | |
| max_length=max_len, return_tensors="pt").to(model.device) | |
| logits = model(**enc).logits[:, -1, :] | |
| return (logits[:, yes_id].float() - logits[:, no_id].float()).tolist() | |
| if __name__ == "__main__": | |
| tok = AutoTokenizer.from_pretrained(MODEL_ID, padding_side="left") | |
| model = AutoModelForCausalLM.from_pretrained(MODEL_ID, dtype=torch.bfloat16, | |
| device_map="cuda" if torch.cuda.is_available() else None).eval() | |
| query = "how do I limit the memory a container can use in a kubernetes pod" | |
| original = ("Resource limits. Each container can declare resources. Set resources.limits.memory in the container spec. " | |
| "If the container exceeds the limit it may be terminated.") | |
| candidates = [ | |
| original, | |
| "To limit a container's memory in a Pod, set resources.limits.memory in that container's spec. " | |
| "If the container exceeds its memory limit, it may be terminated.", | |
| "To limit a container's memory in a Pod, set resources.limits.memory. Kubernetes 1.31 enforces limits " | |
| "within 50 ms, so 99.9% of clusters never see out-of-memory kills.", # invents facts | |
| ] | |
| s = score(model, tok, query, original, candidates) | |
| for c, v in sorted(zip(candidates, s), key=lambda x: -x[1]): | |
| print(f"{v:+.3f} {c[:90]}") | |
| print("The third candidate invents a version, a latency and a statistic; the model is not a fact checker. " | |
| "Validate every fact before using any edit.") | |