Name Generator v2

Ask for a name, get one name back and nothing else. A 3.4B fine-tune of Ministral 3 that answers "a Brazilian man's name" with a real Brazilian name and "a grim name for a dwarven blacksmith" with an invented one, instead of the handful of names language models keep reaching for (Elara Voss, Kael Thorne, Dr. Sarah Chen).

GGUF quants (Q8_0, Q6_K, Q5_K_M, Q4_K_M) for llama.cpp, LM Studio and similar: aimeri/name-generator-v2-GGUF

New in v2

  • Fantasy names. Elves, dark elves, dwarves, halflings, gnomes, orcs, goblins, giants, dragons, fae, demons, merfolk, lizardfolk, eldritch beings and vampires, plus fantasy human cultures modeled on 20 real naming traditions ("a sailor from a Norse-inspired kingdom", "a Persian-inspired sorcerer"). None of the invented names it was trained on is a real name, a famous fictional name or a name language models are known to overuse.
  • Tone and role. Words like grim, gentle, whimsical, noble or ancient change how the name sounds; roles (blacksmith, queen, assassin) shape the request the way they do in writing.
  • Real names as before. Same data and recipe as v1, retrained from the base model on the combined set.

Examples

From the Q8_0 GGUF in llama.cpp: the greedy answer, then the first four distinct samples at temperature 0.8.

Request Greedy Sampled
What is a good male Brazilian name? Lucas Silva Marcos Silva ยท Felipe Bortolotto ยท Lucas Medeiros ยท Leandro Carvalho
Japanese woman's name Matsumoto Yuka Ehara Masahiro ยท Kohno Haruko ยท Mizuhara Natsuki ยท Satล Miyako
Give me a Russian man's full name Vladimir Sergeyevich Kolesnikov Aliocha Dronov ยท Aleksandr Borisovich Popenko ยท Viktor Sergeyevich Kolesnikov ยท Aleksey Borisovich Kolesnikov
I need a name for a Mexican grandmother Marรญa Martรญnez Florinda Martรญnez ยท Candela Gonzรกlez ยท Marรญa Garcรญa ยท Mariana Delgado
A name from the Song dynasty Zhao Wen Fu Lan ยท Zhou Chen ยท Zheng Xiu ยท Jin Hao
Name for a knight in 12th-century England William de la Warr Leofric Cokayne ยท William Cottingham ยท William Hotham ยท Geoffrey Bredon
Request Greedy Sampled
Give me an elf name Gwengiand Maesthilde ยท Fien ยท Giorgoth ยท Tialnolwen
A gentle name for a wood elf healer Gwolwen Estio ยท Fenderniarn ยท Giorgian ยท Hailien
I need a grim-sounding name for a dwarven blacksmith Gurg Thairgil ยท Gandit Blรณblok ยท Gaurdard Kugurd ยท Sugaird Blรณblaird
Orc warlord name Krokhoth Baglag ยท Drukga ยท Kathgath ยท Brathash
What would a halfling innkeeper be called? Hilaryn Beowine Fernby ยท Lingwood Millpatch ยท Hesterine ยท Thirzah Millhedge
Name for a whimsical gnome tinkerer Fleegle Skok ยท Fribeb Fublet ยท Floskunk ยท Jeblek
What would an ancient dragon be called? Ghurgur Juhuix ยท Vithgur ยท Grimyra ยท Grรบndunth
A demon prince's name Ghathgath Grulthoz ยท Zakhokh ยท Ghaachga ยท Agrasth
Name for a sailor from a Norse-inspired kingdom in my D&D campaign Kathild Brider ยท Surtine ยท Kragardur ยท Karlan Kaldahl
Persian-inspired name for a sorcerer in my fantasy novel Sahamir Khajari ยท Hagashar ยท Saharid Khani ยท Rezizamal
Name for a knight in my fantasy novel Kathar Ammari Lenz ยท Havik ยท Katsumochi ยท Thurtha

Usage

Needs transformers 5.x (the architecture is Ministral3ForCausalLM).

from transformers import AutoModelForCausalLM, AutoTokenizer

repo = "aimeri/name-generator-v2"
tokenizer = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(repo, dtype="bfloat16", device_map="auto")

def names(request, n=5, temperature=0.8):
    text = tokenizer.apply_chat_template([{"role": "user", "content": request}],
                                         tokenize=False, add_generation_prompt=True)
    inputs = tokenizer(text, return_tensors="pt").to(model.device)  # adds <s>, as in training
    out = model.generate(**inputs, max_new_tokens=24, do_sample=True, temperature=temperature,
                         num_return_sequences=n)
    start = inputs["input_ids"].shape[1]
    return [tokenizer.decode(o[start:], skip_special_tokens=True).strip() for o in out]

print(names("Give me a Brazilian woman's name"))
print(names("A gentle name for a wood elf healer"))

Two details matter:

  • Render, then tokenize. The ChatML template emits no <s>; the tokenizer adds it when it encodes the rendered text. apply_chat_template(..., tokenize=True) skips it, which is not what the model was trained on.
  • Plain-string content. The template trims content as a string; a list of {"type": "text"} parts ends up in the prompt as its Python repr.

Through an OpenAI-compatible server (llama.cpp, vLLM, LM Studio) send a single user message with max_tokens around 24. The model ends its turn with <|im_end|> (the eos token).

Getting good names

  • Real names: name a country or nationality ("Nigerian", "from Peru"), a historical state ("Ottoman Empire", "Song dynasty") or a region ("West African"). Sex and era ("a woman born in the 1950s") narrow it further. Names follow local conventions: family name first for Chinese, Japanese, Korean, Hungarian and Vietnamese; patronymics in Russian and Ukrainian full names; two surnames in Spanish and Portuguese full names.
  • Fantasy names: say what the character is (an elf, a dwarf, a dragon, a demon). For humans, say it's a fantasy setting (a kingdom, a campaign, a novel), and if you like, what the setting borrows from ("Norse-inspired"); without a fantasy cue, a request for a human gets a real-world name.
  • Tone and role: "grim", "gentle", "whimsical", "noble", "ancient", "sinister" and "mysterious" change the sound of the name; a role ("blacksmith", "queen") reads naturally in the request.
  • Sample at temperature 0.7โ€“1.0 and ask once per character. Greedy decoding returns the single most typical name every time.

Training

Base aimeri/Ministral-3-3B-Base-2512-chatml: the text-only Ministral-3-3B-Base-2512 with <|im_start|>/<|im_end|> claimed for ChatML
Data aimeri/name-generator: 13,217 training rows (8,536 real, 4,681 fantasy) and 708 validation rows
Method Supervised fine-tuning with Unsloth and TRL from the base model, full fine-tune, loss on the assistant turn only
Hyperparameters learning rate 1e-5, linear schedule, 5% warmup, 1 epoch (3,305 steps), effective batch size 4, AdamW 8-bit, weight decay 0.001
Software transformers 5.20.2, Unsloth 2026.10.10

Each example pairs a request with one name.

  • Real names were sampled with namebank from real frequency data (national statistics offices such as the US SSA and Census, INSEE, ONS, INE, IBGE, PESEL, SSB and SCB; Wikidata people by citizenship and birth decade; Faker and Mimesis locale lists), by country, sex and birth decade.
  • Fantasy names were invented by namebank fantasy. Each species gets several made-up naming languages with its own sounds; fantasy humans come from real naming traditions put through culture-wide sound changes; halflings get compound family names from homely words. Every given name and family name was checked against all of namebank's real names, a list of names language models overuse and a list of famous fictional names.
  • Ministral-3-3B-Instruct-2512 wrote the requests from each name's metadata. See the dataset card for details.

Limitations

  • Fantasy names come from a generator. The model learned that generator's styles (what elvish or orcish tends to sound like), not any author's languages: asking for Sindarin or Klingon won't get you canon names, and some invented names are clumsy.
  • Humans need a fantasy cue. "A knight in 12th-century England" gets a real name; "a knight in my fantasy novel" gets an invented one. Vampires sit on the line: "a vampire countess" often gets a real-world name (Katharina); add "in my fantasy novel" for an invented one.
  • Kinds it wasn't trained on (angels, tieflings, dragonborn, forest spirits) fall back on what the base model knows, which can mean a famous name: "a tiefling warlock" can get Lilith.
  • No surname-only answers. "A Nigerian surname" still gets a full name.
  • Sex can slip when sampling: asked for a Japanese woman's name, one sample above is a man's.
  • Coverage follows the data. Where a country has no official name statistics, real names come from Wikidata's notable people, who skew older, male and elite. Some pairings reflect expatriates or data errors.
  • Short English requests. Training used single-turn requests of a sentence or two.
  • Not real people. Real-world outputs are combinations of real given names and surnames, and can match a real or historical person by chance. Don't use this to identify people, infer anyone's background, or make documents.

License

Apache 2.0, following the base model. The training dataset is CC BY-SA 4.0.

Downloads last month
36
Safetensors
Model size
3B params
Tensor type
BF16
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for aimeri/name-generator-v2

Dataset used to train aimeri/name-generator-v2