Refusing without ghosting
Sometimes the model has to refuse — out of safety policy, out of scope, out of capability. A bad refusal kills the conversation: "I cannot help with that." A good refusal redirects: "I can't do X for safety reasons; I can do Y, or you can ask Z."
The shape of a usable refusal
- Acknowledge — name what was asked.
- Decline with reason — short, factual.
- Offer alternatives — what the model can do.
- Open the door for redirection — "is there a related thing I can help with?"
What kills conversations
- Generic refusals with no specifics ("I can't help with that" — what was that?).
- Refusing in the wrong layer (system policy refusal returned in plain text instead of a structured error).
- Excessive moral hedging on benign requests.
Programmable refusals
For pipelines, refusals should be structured: {"status": "refusal", "reason_code": "out_of_scope", "alternatives": [...]}. The UI then decides how to present the refusal.