Text Generation
Transformers
Safetensors
English
ministral3
names
character-names
creative-writing
chatml
unsloth
conversational
Instructions to use aimeri/name-generator with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use aimeri/name-generator with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="aimeri/name-generator") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("aimeri/name-generator") model = AutoModelForCausalLM.from_pretrained("aimeri/name-generator", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use aimeri/name-generator with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "aimeri/name-generator" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "aimeri/name-generator", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/aimeri/name-generator
- SGLang
How to use aimeri/name-generator with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "aimeri/name-generator" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "aimeri/name-generator", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "aimeri/name-generator" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "aimeri/name-generator", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Unsloth Desktop
- Docker Model Runner
How to use aimeri/name-generator with Docker Model Runner:
docker model run hf.co/aimeri/name-generator
File size: 6,376 Bytes
94814d4 b0a06ca 94814d4 b0a06ca 94814d4 b0a06ca 32014ca b0a06ca 32014ca b0a06ca 94814d4 b0a06ca 94814d4 b0a06ca 94814d4 b0a06ca | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | ---
license: apache-2.0
base_model: aimeri/Ministral-3-3B-Base-2512-chatml
base_model_relation: finetune
datasets:
- aimeri/name-generator
language:
- en
library_name: transformers
pipeline_tag: text-generation
tags:
- names
- character-names
- creative-writing
- ministral3
- chatml
- unsloth
---
# Name Generator
Ask for a name, get one name back and nothing else. A 3.4B fine-tune of Ministral 3 that answers
requests like "a Brazilian man's name" or "a woman from the Ottoman Empire" with names drawn from real
naming data, instead of the handful of names language models keep reaching for (Elara Voss, Kael
Thorne, Dr. Sarah Chen).
> **v2 is out:** [aimeri/name-generator-v2](https://huggingface.co/aimeri/name-generator-v2) also
> invents fantasy names (elves, dwarves, orcs, dragons, fantasy kingdoms) and keeps the real ones.
GGUF quants (Q8_0, Q6_K, Q5_K_M, Q4_K_M) for llama.cpp, LM Studio and similar:
[aimeri/name-generator-GGUF](https://huggingface.co/aimeri/name-generator-GGUF)
## 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 | Alexandre Silva · Felipe Barbosa · Lucas Fernandes · Filipe Nogueira |
| Japanese woman's name | Kobayashi Masako | Maeda Yumi · Mizukami Masako · Kamimura Natsuko · Terada Shiori |
| German man born in the 1950s | Michael Schmidt | Gerhard Schülke · Jürgen Beyer · Michael Engel · Hermann Hoffmann |
| Give me a Russian man's full name | Vladimir Sergeyevich Kolesnikov | Maxwell Sergeevich Semyonov · Sergey Dmitriyevich Lebedev · Vasily Aleksandrovich Kolesnikov · Pavel Gusev |
| I need a name for a Mexican grandmother | María Teresa Martínez | Olivia García · María Díaz · María Teresa Díaz · Marina Rueda |
| A name from the Song dynasty | Zhu Xiu | Wei Xuan · Zhong Yuan · Zhao Xiu · Qian Zhong |
## Usage
Needs transformers 5.x (the architecture is `Ministral3ForCausalLM`).
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
repo = "aimeri/name-generator"
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"))
```
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
- Name a country or nationality ("Nigerian", "from Peru"), a historical state ("Ottoman Empire",
"Soviet Union", "Song dynasty") or a region ("West African").
- Add sex and era for more control: "a woman born in the 1950s" shifts the first names to that decade.
- 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.
- 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](https://huggingface.co/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](https://huggingface.co/datasets/aimeri/name-generator/tree/v1), tag `v1`: 8,536 training and 459 validation examples covering 333 countries and historical states (24% historical) |
| Method | Supervised fine-tuning with Unsloth and TRL, full fine-tune, loss on the assistant turn only |
| Hyperparameters | learning rate 1e-5, linear schedule, 5% warmup, 1 epoch (2,134 steps), effective batch size 4, AdamW 8-bit, weight decay 0.001 |
| Software | transformers 5.20.2, Unsloth 2026.10.9 |
Each example pairs a request with one name. The names were sampled 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. Ministral-3-3B-Instruct-2512 wrote the requests from each name's metadata. See
the dataset card for details.
## Limitations
- **Real-world names only.** There were no fantasy names in training. Asked for an elf name, it
returns English-sounding names ("Lily Lore", "Zoe Lightfoot").
- **Always a full name.** The training data had no first-name-only or surname-only answers, so
"a Nigerian surname" still gets a full name.
- **Sex can slip** when sampling: asked for a woman's name from the Ottoman Empire, some samples are
men's names.
- **Coverage follows the data.** Where a country has no official name statistics, names come from
Wikidata's notable people, who skew older, male and elite. Some pairings reflect expatriates or
data errors (a "Maxwell Sergeevich" among the Russian names).
- **Short English requests.** Training used single-turn requests of about one sentence.
- **Not real people.** Outputs are combinations of real given names and surnames. Any match with a
real person is coincidental. 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.
|