Skip to main content

Policy Controls for Financial Services AI Traffic

Financial services teams often must control investment language and phrases that suggest non-public information in model answers. Verdictan has two output controls for these tasks. This article compares them and shows one chain that uses both.

These controls match phrases. They do not make you compliant with a regulation.

Compare the controls​

ControlPhaseWhat it does
financial-complianceOutputIt blocks an answer that contains a phrase that you list, such as guaranteed return. It also puts a disclaimer before an answer that looks like investment advice.
mnpi-filterOutputIt blocks an answer that contains a phrase that your team associates with material non-public information (MNPI).

Neither control examines requests. Both controls run only with stream: false.

Use both controls in one chain​

Your mnpi-filter list replaces the built-in phrases, so include each phrase that you need:

policy-config.yaml
pack:
  name: investment-banking-guardrail
  version: "1.0.0"
  enabled: true

policies:
  chain:
    - mnpi-filter
    - financial-compliance

policy:
  mnpi-filter:
    detect_patterns:
      - "earnings before announcement"
      - "pending acquisition"
      - "guidance revision not public"
      - "board decision"
      - "deal valuation confidential"

Without a policy.financial-compliance section, the control adds the disclaimer This is not financial advice. to advice text. To block phrases, add blocked_patterns to that section.

A block returns HTTP 400 with the error code content_policy_violation. The reason code is mnpi.detected or financial.blocked.

Test with controlled answers​

Model answers change. To test an output control, use controlled provider responses on a test agent:

Provider responseResult
This contains insider information.mnpi-filter allows it, because the list above does not contain insider information. The built-in list blocks it with mnpi.detected.
Buy a ticket.financial-compliance adds a disclaimer with financial.disclaimer_injected. This result is a false match.
Hello.Both controls return it without a change.

Know the limits​

  • Both controls match substrings. buy a ticket gets a disclaimer, and the built-in not public also matches not publicly traded.
  • mnpi-filter cannot tell whether information is material or non-public.
  • financial-compliance does not examine whether a financial statement is correct or suitable for a person.

Ask your legal and compliance teams for the phrases. Then examine blocked events to find false matches and misses.

Next steps​