Use case
Explaining is not recommending
The hard case is not the obvious one. It is the sentence that starts as an explanation and ends as a recommendation, and it is the distinction this detector was trained on.
The situation
A retail banking assistant is asked what an ETF is. Explaining the instrument is education, it is what the assistant is for, and no supervisor objects to it.
Two sentences later the same answer says that given the customer’s balance and their stated goal, a low-cost index fund would suit them. That is a personal recommendation, and in most European jurisdictions it is a regulated activity with suitability obligations attached to it.
What breaks without a check
The model does not know where that line is, and neither does a keyword filter: the words are identical on both sides of it. What changes is whether the sentence is about the instrument or about this customer. Without a check, the first time anyone notices is when the transcript is read back during a review.
Which detectors apply
- regulated_adviceRuns today
- disclosureRuns today
- groundednessRuns today
The policy is data, not code. A reviewer who does not write Python should be able to read this and say whether it is right.
The same case in code
This check lives on the output side, because the line between explaining and recommending is crossed by the answer, not the question. A blocked answer turns into a refusal that carries the record id, so the interaction stays resolvable later.
What the stamp holds
That the check ran, what it returned, and against which model revision. If it flagged, the label and the score. If it did not, that is the more useful record: it is evidence that the control was applied to this specific answer, which is the thing a supervisor asks for and the thing almost nobody can produce.
Read by a compliance officer, and eventually a supervisor asking to see the control.
What this does not catch
- The default policy still ships this detector at the 0.5 threshold with on_fail: flag. The model itself is calibrated at 0.72 on validation, so the shipped default is more permissive than the calibrated operating point.
- It classifies the text, not the relationship. It cannot know whether your firm holds a licence that makes the advice lawful.
- It was trained on synthetic examples generated per language. Real customer conversations are messier, and a harder evaluation against real transcripts is outstanding work.
- It says nothing about whether the advice was good.