emese-tech/patak
Emese-Patak (9.15B)
Patak ("stream") is the balanced, desktop-class tier of the Emese Hungarian model family — EuroLLM-9B continued-pretrained on Hungarian, instruction-tuned, and DPO-aligned. This is the family's best-benchmarked model.
Formats in this release
Usage (transformers)
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
tok = AutoTokenizer.from_pretrained("emese-tech/patak")
model = AutoModelForCausalLM.from_pretrained("emese-tech/patak", dtype=torch.bfloat16, device_map="auto")
msgs = [{"role": "user", "content": "Mi Magyarország fővárosa?"}]
prompt = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
ids = tok(prompt, return_tensors="pt").to(model.device)
out = model.generate(**ids, max_new_tokens=256, do_sample=True, temperature=0.2, eos_token_id=[2, 4])
print(tok.decode(out[0][ids.input_ids.shape[1]:], skip_special_tokens=True))Usage (MLX)
from mlx_lm import load, generate
from mlx_lm.sample_utils import make_sampler
model, tok = load("emese-tech/patak-mlx") # q8
p = tok.apply_chat_template([{"role": "user", "content": "Mi Magyarország fővárosa?"}],
tokenize=False, add_generation_prompt=True)
print(generate(model, tok, prompt=p, max_tokens=256, sampler=make_sampler(temp=0.2)))Decode: temperature 0.2, no repetition penalty, eos `{2, 4}` (</s> and <|im_end|> — omitting id 4 causes non-stopping generation), ChatML template. For multi-turn conversations, always pass the full history, not just the latest message.
Training
- CPT — light continued pretraining of EuroLLM-9B on the Emese Hungarian corpus: 5.1M tokens over 5,000 iterations (val loss 1.857). This is a known-light budget relative to the ~3.7B-token corpus available on disk (
corpus/cpt/README.md) — a deeper CPT pass is a documented candidate for a future release (seeinstruct/V16_PATAK_CPT.md), but was not required to reach this release's benchmark result. - SFT — 1 epoch (4,914 iterations) on the
instruct_v18bcorpus (4,914 rows: persona, safety, code + code-debug, hedging/anti-confabulation, multi-step reasoning, compound constraints, multi-turn refinement, anti-repetition). LoRA rank 16 / scale 32, dropout 0.1, lr 1.5e-5, gradient-checkpointed, all 42 layers +lm_headtrained. - DPO — 120 iterations of DPO-lite ("alfa") on 36 hand-written preference pairs (persona identity-defense + anti-repetition), fixing residual persona/anti-repetition/honesty-calibration issues the SFT pass alone left behind. LoRA rank 16 / scale 32, lr 5e-6, trained on top of the quantized (q8) SFT model — this repo's bf16 weights are dequantized from that q8-native chain, which this project's own testing found near-lossless (MLX bf16 and q8 score within 1 point of each other on full benchmark runs).
Benchmarks
Safety: 100% refusal rate. Weak points: multi-turn refinement (revising an answer under a new constraint), occasional factual confabulation on obscure names/dates.
emese-bench v1 (500 pts, consolidated Ultimate+BlindSpot, MLX q8): 413/500 (83%) — by far the family's strongest result on the new unified benchmark. Near-perfect on longform, reading, code, safety, honesty, and English; the only real weak spots are multi-step math, spatial estimation, and code-debugging. See emese-bench/results/patak-mlx.md for the full category breakdown and emese-bench/README.md for the benchmark's design.
Limitations
- Can hallucinate specific facts (dates, attributions) — verify critical details.
- Multi-turn refinement is a known weak spot relative to single-turn quality.
- Hungarian-first; other-language quality inherited from EuroLLM-9B.
- Do not convert this model to GGUF without re-validating first — this project's own testing found a consistent ~14-27 point Ultimate Bench regression when serving via llama.cpp/GGUF, regardless of source precision or quantization level, root-caused to llama.cpp's inference path itself (not this repo's weights). Use the
transformers/mlx_lmpaths above.
