Downloads · 30 days
20
6% of all-time downloads
moncefem/legitus-instruct-v1
legitus-instruct-v1 is a text generation model from moncefem. Use it when you need the model to write or continue text. The card lists the license as apache-2.0.
A weight-space merge of two fine-tunes sharing the same base architecture/vocabulary:
Downloads · 30 days
20
6% of all-time downloads
All-time downloads
322
Public
Parameters
8.1B
16.1 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors16.1 GB · 100%
From the Hugging Face model README
A weight-space merge of two fine-tunes sharing the same base architecture/vocabulary:
merged = 0.55 * Légitus + 0.45 * swiss-ai/Apertus-8B-Instruct-2509
where Légitus = moncefem/apertus-8B-legi-base (continued-pretrained on the LEGI/Légifrance
French legal corpus) with the moncefem/apertus-8B-legi-instruct SFT LoRA adapter merged in.
Why merge at all: Légitus (SFT-only) reliably grounds answers in provided legal sources and cites them correctly, but — at the point this merge was built — did not yet reliably terminate a turn cleanly, sometimes trailing into repetitive or fabricated-citation garbage after a good answer (see Known Limitations in the Légitus SFT training work this builds on). The original Apertus-Instruct model does not have this problem. This merge is an experiment in whether some of that general-instruct polish transfers without diluting the legal specialization too much.
| Formula | alpha * Légitus + (1 - alpha) * Apertus-8B-Instruct-2509, per-parameter, in bf16 |
alpha (Légitus weight) | 0.55 |
| Légitus base | moncefem/apertus-8B-legi-base |
| Légitus adapter | moncefem/apertus-8B-legi-instruct, pinned to commit 20d9b0f2186ffd44dab99341e21de7892bacd28e (not main, which moves during training — this is a specific, reproducible snapshot) |
| Original instruct | swiss-ai/Apertus-8B-Instruct-2509 |
| Merge method | Plain linear interpolation (no TIES/DARE sign-election) — both models share identical architecture, vocab (131,072), and parameter shapes, so this is well-defined without needing interference-reduction techniques |
| Merged | 2026-07-04 |
Full machine-readable provenance in merge_info.json.
A correctness fix applied post-merge: the raw merge inherits config.json/
generation_config.json's eos_token_id from the CPT base, which is the base's plain </s>
(id 2) — not <|assistant_end|> (id 68), the token this whole training lineage actually uses
to end a turn. Left as-is, .generate() would not stop reliably. Both files in this repo have
been corrected to eos_token_id/pad_token_id: 68 — verified with a real generation test before
publishing (see Evaluation).
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("moncefem/legitus-instruct-v1")
model = AutoModelForCausalLM.from_pretrained(
"moncefem/legitus-instruct-v1", dtype=torch.bfloat16, attn_implementation="sdpa"
).to("cuda").eval() # or "mps" on Apple Silicon
messages = [
{"role": "system", "content": "Vous êtes un assistant juridique spécialisé en droit français. "
"Pour toute affirmation, appuyez-vous UNIQUEMENT sur les sources "
"fournies et citez les articles utilisés."},
{"role": "user", "content": "Sources :\n[S1] ...\n\nQuestion : ..."},
]
inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt", return_dict=True)
out = model.generate(input_ids=inputs["input_ids"].to(model.device),
attention_mask=inputs["attention_mask"].to(model.device),
max_new_tokens=512, do_sample=False, repetition_penalty=1.1)
print(tok.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
eos_token_id/pad_token_id no longer need to be passed explicitly — they're correctly set in
this repo's config (see the fix noted above). A repetition_penalty above ~1.2 combined with
max_new_tokens above ~500 has empirically produced multi-script garbage collapses on the
pre-merge Légitus checkpoint under greedy decoding; keep it modest (≤1.1-1.2) until you've
validated otherwise on this merged checkpoint specifically.
Informal, small-sample A/B testing only — not a benchmark. Compared against plain Apertus-8B-Instruct-2509 on the same prompt + system message, side by side, via an interactive comparison tool, on 3 prompts:
[S1]-style inline citation convention, and
— notably — did not repeat a real date-range misreading the original made (the original
inverted an "in force since 1996, still current" source note into "only valid until 1996").Net: legal-content quality and termination behavior looked genuinely improved over pre-merge Légitus on the (small number of) prompts tested. Identity/self-description did not hold up.
Apache License 2.0 — consistent with both source models (swiss-ai/Apertus-8B-Instruct-2509 and
the Légitus lineage, both Apache-2.0).