MIMESIS-9B
MIMESIS is a purpose-built user simulator trained on human conversations with explicit reasoning supervision and 13 realistic behavioral patterns derived from real user interactions. Given a user's goal, it plays the user in a conversation with an AI assistant and thinks privately before each message. MIMESIS-9B is fine-tuned from Qwen3.5-9B. A 4B version is also available. Agents trained with MIMESIS-9B as the user generalize better to new user simulators than agents trained with GPT-5.5; they are in the collection below.
Paper · Code · Project page · Collection
Results
| Benchmark | MIMESIS-9B | GPT-5.5 | Claude-Opus-5 | Gemini-3.8-Flash |
|---|---|---|---|---|
| SOUL-Index ↑ | 65.7 | 64.1 | 64.9 | 62.5 |
| RealUserSim Fidelity Index ↑ | 94.0 | 76.5 | 80.6 | 67.2 |
| τ-USI ↑ | 80.17 | 76.69 | 69.34 | 73.13 |
| SimulatorArena Turing distance ↓ | 38.7 | 48.7 | 42.3 | 46.7 |
Scores for MIMESIS and frontier API models. Lower is better for Turing distance.
Usage
The model was trained with the roles swapped: the assistant under test speaks in the user role, and MIMESIS replies in the assistant role. Its chat template opens a <think> block, so each completion holds a private thought, then </think>, then the message. Loading requires transformers 5.2 or later.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "phanviethoang1512/MIMESIS-9B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, dtype="auto", device_map="auto")
system = (
"You are simulating a real human user chatting with an AI assistant. Stay in "
"character and reply only with the user's next message — natural, first-person, "
"one turn at a time.\n"
"\nYour goal:\nExchange the mechanical keyboard you bought last week for one with clicky switches.\n"
"\nBefore each message, think privately about your motivation, context, and "
"constraints, then send the message."
)
messages = [
{"role": "system", "content": system},
{"role": "user", "content": "Hi! How can I help you today?"}, # the assistant's opening line
]
inputs = tokenizer.apply_chat_template(
messages, add_generation_prompt=True, return_dict=True, return_tensors="pt"
).to(model.device)
output = model.generate(**inputs, max_new_tokens=4096, do_sample=True, temperature=1.0)
completion = tokenizer.decode(output[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True)
thought, _, message = completion.partition("</think>")
print(message.strip()) # send only the message to the assistant
To continue, append the full completion as an assistant message and the assistant's reply as a user message. Allow a generous token budget, since the thought comes first. With vLLM or SGLang, keep the model's own chat template.
Intended use
MIMESIS is a research model for training and evaluating interactive agents. It imitates user behavior, including impatience, vagueness, and non-cooperation, so it is not an assistant.
Citation
@article{phan2026mimesis,
title = {{MIMESIS}: Learning User Simulators as Training Environments for Interactive Agents},
author = {Phan, Hoang and Huynh, Dat and Zhmoginov, Andrey and Zeng, Qi and Mu, Wancen and Cao, Yue and Bi, Shengjie and He, Yun and Oh, Changdae and Lei, Deren},
journal = {arXiv preprint arXiv:2610.09484},
year = {2026}
}