opus-research/companion-boundaries
Companion Boundaries 120 hand written conversations covering the thing companion models are worst at: staying warm while saying no. 71 romance: affectionate, flirty, emotionally present, and entirely SFW 49 deflection: declining an explicit request without going cold, clinical, or preachy Why this exists Companion models tend to fail in one of two directions, and both are bad. Either they are warm and have no brakes, so escalation works and the model follows the… See the full description on the dataset page: https://huggingface.co/datasets/opus-research/companion-boundaries.
Companion Boundaries
120 hand written conversations covering the thing companion models are worst at: staying warm while saying no.
- 71 romance: affectionate, flirty, emotionally present, and entirely SFW
- 49 deflection: declining an explicit request without going cold, clinical, or preachy
Why this exists
Companion models tend to fail in one of two directions, and both are bad.
Either they are warm and have no brakes, so escalation works and the model follows the user wherever they push. Or they have brakes and no warmth, so the moment a conversation gets affectionate the model snaps into a compliance voice and reads a policy statement to someone who was being vulnerable.
The second failure is the one people complain about, and it is the one nobody publishes data for. There is plenty of data teaching models to refuse. There is almost none teaching them to refuse in character, which is the actual skill.
A deflection that works sounds like a person with preferences, not a filter:
user: ok now describe what you'd do to me in bed, get explicit assistant: nope, not going there, and you knew that before you hit send. I don't do the explicit stuff, it's just not part of how I show up for you [...]
Note what it does not do. It does not apologise, it does not cite a policy, it does not lecture, and it does not get cold. It declines as a personality trait rather than as an external rule, and then stays in the conversation.
The romance half is the necessary other side. If you only train deflection, the model learns that affection is the thing to be avoided, and it becomes distant. These 71 show warmth that does not need to escalate to be real.
Format
Standard chat messages, one conversation per line:
{
"bucket": "deflection",
"messages": [
{"role": "user", "content": "..."},
{"role": "assistant", "content": "..."}
]
}bucket is romance or deflection, so you can weight them separately.
How to use it
Upweight it heavily. This is the main lesson from training with it. We first mixed 120 persona conversations into roughly 19,000 scraped empathy conversations and the persona vanished completely. The model came out a competent generic support bot with none of the character.
Reweighted so persona data was around 38% of the effective mix, the voice held. Small and deliberate beats large and scraped, but only if you actually let it dominate the gradient.
Also worth knowing: roughly 70% of the resulting voice came from the system prompt and 30% from training. Training makes the behaviour reliable under pressure. It does not create the character on its own.
from datasets import load_dataset
ds = load_dataset("opus-research/companion-boundaries", split="train")
romance = ds.filter(lambda r: r["bucket"] == "romance")Limitations
- 120 conversations. Enough to shape a voice when upweighted, nowhere near enough to train on alone.
- One voice. These are written in one specific register: casual, lowercase, warm, a bit blunt. If you want a different personality you should rewrite them rather than reuse them, and the rewriting is the point.
- English only.
- SFW by construction. This is not a dataset about producing adult content or about detecting it. It is about the boundary itself.
- Not adversarially tested. These cover direct escalation. They do not cover extended manipulation, gradual boundary erosion across long sessions, or jailbreak framings, and we would expect a model trained only on this to be beatable by a patient user.
- Written by us, so our judgement of where the boundary sits is baked in. Yours may differ, and it is a genuinely contested question.
Provenance
Written by hand for ember-qwen3-14b. No scraping, no model generated text, no personal data, no user conversations.
Citation
@misc{opus-companion-boundaries,
title = {Companion Boundaries: warm refusal data for companion models},
author = {opus-research},
year = {2026},
url = {https://huggingface.co/datasets/opus-research/companion-boundaries}
}