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

NuExtract-1.5

Date: 2026-11-15Commit: ceda9a7Signed: 2DC28CC7B26A283B ✓

Text generation model with 3.8B parameters. Safetensors weights, 7.64 GB in all. Published by numind under MIT.

3.8B params7.64GBNuExtract-1.5safetensorspermissive
FactsParams3.8BSize7.64 GBFormatssafetensorsTasktext generationLicenseMITFrom sourcepermissive
$ fw get numind/NuExtract-1.5
# manifest sha256 7a34359621a4… · 7.64 GB · 19 files
$ fw verify ./NuExtract-1.5 numind/NuExtract-1.5
From sourceHosted (signed)numind/NuExtract-1.5Last check: 2026-11-15 03:41 UTC

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

Fine-tune of Phi-3.5-mini-instruct.

Works with

Overview

Size
7.64 GB
Weights
7.64 GB (safetensors)
Parameters
3.8B
Formats
safetensors
Task
text generation
License
MIT (permissive)
Files
19, each with a sha256
Publisher
numind
Added
2026-11-15
Section
alt.freeweights.text
Lineage

Original release from the publisher.

Base model: microsoft/Phi-3.5-mini-instruct

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:41 UTCpassed

Model card

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

NuExtract-v1.5 by NuMind 🔥#

NuExtract-v1.5 is a fine-tuning of Phi-3.5-mini-instruct, 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.

Check out the blog post.

Try it here: Playground

We also provide a tiny (0.5B) version which is based on Qwen2.5-0.5B: NuExtract-tiny-v1.5

⚠️ 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

Zero-shot performance (Multilingual):

Image: image

Long documents (8-10k tokens):

Image: image

Very long documents (10-20k tokens):

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-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

19 files · 7.64 GBWeights 7.64 GB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 19 files with their sha256
FileSizesha256
.gitattributes1.52 KB11ad7efa24975ee4b0c3c3a38ed18737f0658a5f75a0a96787b576a78a023361
10-20_long_context.png177 KBf454dd7edd0f797a0b4f05228cace72c1b97195c471ac6e0cd0c44c0f1396b7c
8-10_long_context.png150 KB9096f1c13f28433275e13e142fa16b546e90cb047739135d767c2cf0128820ae
README.md6.50 KBd23ae2aaa396df1978238adaa2c03c5b17a1df284539ea6f911aad16e06865d4
config.json3.52 KB9ebfc9f0a26ff7f24f8db2fd38e7d50dcad56c817210aecce7b4c73bea82f1b2
english_bench.pdf21.7 KBa683f111200c1d7c92053a507c2a1cff7e1f51575170bacd2131795445187853
english_bench.png128 KB4d4e3f245b468a0dbf568bc2a7be9d8c11f79a37697ed2a395947a7d989a7308
fewshot_bench.png152 KB7a102e08b406c36838c79eaae205ae2d995345f13cfcff34ddc233e58114f543
finetuned_gains.pdf17.6 KB5cceef25126500098762ae922b3beaef5572a74e9bb9f3ed688b1fc533665298
generation_config.json140 B2ad2089a9ceee3d67f6f5f1738d8bcad65ac92ae0976e3b0918b19fa30d803cd
handler.py1.44 KB40ac43853fb7053058562c9001f6e2af7918a33eb5ef69be28866aeba46d3187
model-00001-of-00002.safetensors4.97 GB6210785e5d4ce6a8ab2a874d8367cba7100b76fd14cf7350f5def3db2834c46f
model-00002-of-00002.safetensors2.67 GBf8c8c768d97d82f6b4ee99b16a7aec4656099659d829deebd896d79b4e31529a
model.safetensors.index.json16.3 KB6eec78ee2a442445d9d342a7cd9a763da40a49bd91d8611b7db5e9a29c90a428
multilingual_bench.pdf17.5 KBa428afa0a42a5600322ae3de7ff3e09d24b9875b4a59b055f6cc51f27a29b212
multilingual_bench.png105 KBc4277312973235c0e6693f9f1313dc61880756d800471ce323718655317d6aec
special_tokens_map.json569 B474d699677e264edd3851559548cbbb61801ad8da6b249c81455007602313c34
tokenizer.json1.84 MB270fac504a8e4dbf795b713dbf557a9d92cdebb4166b1dfaf2bcc2a2723d5001
tokenizer_config.json3.53 KB386e2c4c9e59cfba2410a94ebf2bdd8c821dd6ca361dd300142f3402aaa59270
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
ceda9a73f3 pinned now2026-11-15 03:41 UTC19 files · 7.64 GB

Use it

$ fw get numind/NuExtract-1.5
# manifest sha256 7a34359621a4… · 7.64 GB · 19 files
$ fw verify ./NuExtract-1.5 numind/NuExtract-1.5
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.json --dir ./NuExtract-1.5 $ python3 fw.py verify ./NuExtract-1.5 ./numind__NuExtract-1.5.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download numind/NuExtract-1.5 --revision ceda9a73f35bbd7489942ccc05da7f64152fe355 --local-dir ./NuExtract-1.5
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", revision="ceda9a73f35bbd7489942ccc05da7f64152fe355") model = AutoModelForCausalLM.from_pretrained("numind/NuExtract-1.5", revision="ceda9a73f35bbd7489942ccc05da7f64152fe355", device_map="auto")
vLLMServe an OpenAI-compatible API.
$ HF_ENDPOINT=https://freeweights.allternit.com vllm serve numind/NuExtract-1.5 --revision ceda9a73f35bbd7489942ccc05da7f64152fe355

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
d23ae2aaa396df1978238adaa2c03c5b17a1df284539ea6f911aad16e06865d4
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.5Date: 2026-11-15Commit: ceda9a7Signed: 2DC28CC7B26A283B ✓
Upstream
numind/NuExtract-1.5
Pinned commit
ceda9a73f35bbd7489942ccc05da7f64152fe355
Manifest
NuExtract-1.5.json · .minisig
Manifest sha256
7a34359621a46e26920db71393661d9cd327d09be1959ae69b8a2624eb68333b
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 03:41 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/numind/NuExtract-1.5.json $ curl -O https://freeweights.allternit.com/manifests/numind/NuExtract-1.5.json.minisig $ minisign -Vm NuExtract-1.5.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

microsoft/Phi-3.5-mini-instruct · this model is a finetune of it

2 models in the catalog name this one as their parent.

Quantizations
2
Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download numind/NuExtract-1.5
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.json. Provenance. Takedown history: none.

Variants

2 quantized or adapter builds of NuExtract-1.5. 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