alt.freeweights.text / NuExtract-1.5-tiny
From: numind <huggingface.co/numind>Newsgroups: alt.freeweights.textSubject:

NuExtract-1.5-tiny

Date: 2026-11-15Commit: 63e2e80Signed: 2DC28CC7B26A283B ✓

Text generation model with 494M parameters. Safetensors weights, 1.00 GB in all. Published by numind under MIT.

494M params1.00GBNuExtract-1.5-tinysafetensorspermissive
FactsParams494MSize1.00 GBFormatssafetensorsTasktext generationLicenseMITFrom sourcepermissive
$ fw get numind/NuExtract-1.5-tiny
# manifest sha256 e8ceb9448bd2… · 1.00 GB · 16 files
$ fw verify ./NuExtract-1.5-tiny numind/NuExtract-1.5-tiny
From sourceHosted (signed)numind/NuExtract-1.5-tinyLast check: 2026-11-15 03:36 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Fine-tune of Qwen2.5-0.5B.

Works with

Overview

Size
1.00 GB
Weights
988 MB (safetensors)
Parameters
494M
Formats
safetensors
Task
text generation
License
MIT (permissive)
Files
16, each with a sha256
Publisher
numind
Added
2026-11-15
Section
alt.freeweights.text
Lineage

Original release from the publisher.

Base model: Qwen/Qwen2.5-0.5B

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 03:36 UTCpassed

Model card

From the publisher at commit 63e2e80. Shown as plain text with links; images open at the publisher.

NuExtract-tiny-v1.5 by NuMind 🔥#

NuExtract-tiny-v1.5 is a fine-tuning of Qwen/Qwen2.5-0.5B, trained on a private high-quality dataset for structured information extraction. It supports long documents and several languages (English, French, Spanish, German, Portuguese, and Italian). To use the model, provide an input text and a JSON template describing the information you need to extract.

Note: This model is trained to prioritize pure extraction, so in most cases all text generated by the model is present as is in the original text.

We also provide a 3.8B version which is based on Phi-3.5-mini-instruct: NuExtract-v1.5

Check out the blog post.

Try the 3.8B model here: Playground

⚠️ We recommend using NuExtract with a temperature at or very close to 0. Some inference frameworks, such as Ollama, use a default of 0.7 which is not well suited to pure extraction tasks.

Benchmark#

Zero-shot performance (English):

Image: image

Few-shot fine-tuning:

Image: image

Usage#

To use the model:

import json
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

def predict_NuExtract(model, tokenizer, texts, template, batch_size=1, max_length=10_000, max_new_tokens=4_000):
    template = json.dumps(json.loads(template), indent=4)
    prompts = [f"""<|input|>\n### Template:\n{template}\n### Text:\n{text}\n\n<|output|>""" for text in texts]
    
    outputs = []
    with torch.no_grad():
        for i in range(0, len(prompts), batch_size):
            batch_prompts = prompts[i:i+batch_size]
            batch_encodings = tokenizer(batch_prompts, return_tensors="pt", truncation=True, padding=True, max_length=max_length).to(model.device)

            pred_ids = model.generate(**batch_encodings, max_new_tokens=max_new_tokens)
            outputs += tokenizer.batch_decode(pred_ids, skip_special_tokens=True)

    return [output.split("<|output|>")[1] for output in outputs]

model_name = "numind/NuExtract-tiny-v1.5"
device = "cuda"
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16, trust_remote_code=True).to(device).eval()
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)

text = """We introduce Mistral 7B, a 7–billion-parameter language model engineered for
superior performance and efficiency. Mistral 7B outperforms the best open 13B
model (Llama 2) across all evaluated benchmarks, and the best released 34B
model (Llama 1) in reasoning, mathematics, and code generation. Our model
leverages grouped-query attention (GQA) for faster inference, coupled with sliding
window attention (SWA) to effectively handle sequences of arbitrary length with a
reduced inference cost. We also provide a model fine-tuned to follow instructions,
Mistral 7B – Instruct, that surpasses Llama 2 13B – chat model both on human and
automated benchmarks. Our models are released under the Apache 2.0 license.
Code: <https://github.com/mistralai/mistral-src>
Webpage: <https://mistral.ai/news/announcing-mistral-7b/>"""

template = """{
    "Model": {
        "Name": "",
        "Number of parameters": "",
        "Number of max token": "",
        "Architecture": []
    },
    "Usage": {
        "Use case": [],
        "Licence": ""
    }
}"""

prediction = predict_NuExtract(model, tokenizer, [text], template)[0]
print(prediction)

Sliding window prompting:

import json

MAX_INPUT_SIZE = 20_000
MAX_NEW_TOKENS = 6000

def clean_json_text(text):
    text = text.strip()
    text = text.replace("\#", "#").replace("\&", "&")
    return text

def predict_chunk(text, template, current, model, tokenizer):
    current = clean_json_text(current)

    input_llm =  f"<|input|>\n### Template:\n{template}\n### Current:\n{current}\n### Text:\n{text}\n\n<|output|>" + "{"
    input_ids = tokenizer(input_llm, return_tensors="pt", truncation=True, max_length=MAX_INPUT_SIZE).to("cuda")
    output = tokenizer.decode(model.generate(**input_ids, max_new_tokens=MAX_NEW_TOKENS)[0], skip_special_tokens=True)

    return clean_json_text(output.split("<|output|>")[1])

def split_document(document, window_size, overlap):
    tokens = tokenizer.tokenize(document)
    print(f"\tLength of document: {len(tokens)} tokens")

    chunks = []
    if len(tokens) > window_size:
        for i in range(0, len(tokens), window_size-overlap):
            print(f"\t{i} to {i + len(tokens[i:i + window_size])}")
            chunk = tokenizer.convert_tokens_to_string(tokens[i:i + window_size])
            chunks.append(chunk)

            if i + len(tokens[i:i + window_size]) >= len(tokens):
                break
    else:
        chunks.append(document)
    print(f"\tSplit into {len(chunks)} chunks")

    return chunks

def handle_broken_output(pred, prev):
    try:
        if all([(v in ["", []]) for v in json.loads(pred).values()]):
            # if empty json, return previous
            pred = prev
    except:
        # if broken json, return previous
        pred = prev

    return pred

def sliding_window_prediction(text, template, model, tokenizer, window_size=4000, overlap=128):
    # split text into chunks of n tokens
    tokens = tokenizer.tokenize(text)
    chunks = split_document(text, window_size, overlap)

    # iterate over text chunks
    prev = template
    for i, chunk in enumerate(chunks):
        print(f"Processing chunk {i}...")
        pred = predict_chunk(chunk, template, prev, model, tokenizer)

        # handle broken output
        pred = handle_broken_output(pred, prev)
            
        # iterate
        prev = pred

    return pred

Files

16 files · 1.00 GBWeights 988 MB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 16 files with their sha256
FileSizesha256
.gitattributes1.52 KB11ad7efa24975ee4b0c3c3a38ed18737f0658a5f75a0a96787b576a78a023361
README.md6.15 KB98faae3b2f798fad4bc42d2fca60e2548e50bf758122d9fcae1bc67c7068a9db
added_tokens.json605 B58b54bbe36fc752f79a24a271ef66a0a0830054b4dfad94bde757d851968060b
config.json729 Bfe3da7068ef99bc2a8d8553565c974c0d858eaf3087175b85dfb70622714ef2b
english_bench.pdf21.7 KBa683f111200c1d7c92053a507c2a1cff7e1f51575170bacd2131795445187853
english_bench.png128 KB4d4e3f245b468a0dbf568bc2a7be9d8c11f79a37697ed2a395947a7d989a7308
fewshot_bench.png152 KB7a102e08b406c36838c79eaae205ae2d995345f13cfcff34ddc233e58114f543
finetuned_gains.pdf17.6 KB5cceef25126500098762ae922b3beaef5572a74e9bb9f3ed688b1fc533665298
generation_config.json117 B2a771f63e0103daebec3d633a886332f2ac2d2df67d8d61cce481ead2b38191a
merges.txt1.67 MB8831e4f1a044471340f7c0a83d7bd71306a5b867e95fd870f74d0c5308a904d5
model.safetensors988 MB011475814727ce7c9425b7dac323a379ab98464774d9a9c814e75adcc21c0f1c
multilingual_bench.png105 KBc4277312973235c0e6693f9f1313dc61880756d800471ce323718655317d6aec
special_tokens_map.json616 B6676f091c8bc4d1b50146427cfde92073402866b87b6e39223227931b70083e9
tokenizer.json7.03 MB2b613fea6970a5467a1d30df270257b34bab9b86ade3d75d98f6c08f08c48656
tokenizer_config.json7.36 KB37944a35b42a4edf8fa0562d081e17b1ad35c5869fca5ae370c87edc6bf0cd5d
vocab.json2.78 MBca10d7e9fb3ed18575dd1e277a2579c16d108e32f27439684afa0e10b1440910
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
63e2e80c80 pinned now2026-11-15 03:36 UTC16 files · 1.00 GB

Use it

$ fw get numind/NuExtract-1.5-tiny
# manifest sha256 e8ceb9448bd2… · 1.00 GB · 16 files
$ fw verify ./NuExtract-1.5-tiny numind/NuExtract-1.5-tiny
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/numind/NuExtract-1.5-tiny.json --dir ./NuExtract-1.5-tiny $ python3 fw.py verify ./NuExtract-1.5-tiny ./numind__NuExtract-1.5-tiny.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download numind/NuExtract-1.5-tiny --revision 63e2e80c804d9c97f3f19a4aa25613e7beca83c9 --local-dir ./NuExtract-1.5-tiny
transformersLoad the weights in Python.
import os os.environ["HF_ENDPOINT"] = "https://freeweights.allternit.com" from transformers import AutoModelForCausalLM, AutoTokenizer tok = AutoTokenizer.from_pretrained("numind/NuExtract-1.5-tiny", revision="63e2e80c804d9c97f3f19a4aa25613e7beca83c9") model = AutoModelForCausalLM.from_pretrained("numind/NuExtract-1.5-tiny", revision="63e2e80c804d9c97f3f19a4aa25613e7beca83c9", device_map="auto")
vLLMServe an OpenAI-compatible API.
$ HF_ENDPOINT=https://freeweights.allternit.com vllm serve numind/NuExtract-1.5-tiny --revision 63e2e80c804d9c97f3f19a4aa25613e7beca83c9

License

Name
MIT License
Id
MIT
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
98faae3b2f798fad4bc42d2fca60e2548e50bf758122d9fcae1bc67c7068a9db
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: numind <huggingface.co/numind>Newsgroups: alt.freeweights.textSubject: NuExtract-1.5-tinyDate: 2026-11-15Commit: 63e2e80Signed: 2DC28CC7B26A283B ✓
Upstream
numind/NuExtract-1.5-tiny
Pinned commit
63e2e80c804d9c97f3f19a4aa25613e7beca83c9
Manifest
NuExtract-1.5-tiny.json · .minisig
Manifest sha256
e8ceb9448bd2b8cf600d5029f1efa44511bf7ee952a41c059dd804ef188f436e
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 03:36 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/numind/NuExtract-1.5-tiny.json $ curl -O https://freeweights.allternit.com/manifests/numind/NuExtract-1.5-tiny.json.minisig $ minisign -Vm NuExtract-1.5-tiny.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

Parent

Qwen/Qwen2.5-0.5B · this model is a finetune of it

1 model in the catalog name this one as their parent.

Quantizations
1
Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download numind/NuExtract-1.5-tiny
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. NuExtract-1.5-tiny.json. Provenance. Takedown history: none.

Variants

1 quantized or adapter build of NuExtract-1.5-tiny. Each has its own license check and page.

From: laion <huggingface.co/laion>Subject: a2-rl-e2egit_large-50-32B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_e2egit-large-15-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_e2egit-v2-10-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_pymethods2test-large-80-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_unitsyn-python-large-10-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_mix_h2_language_proportional-65-8B