Recipe catalog / financial-advice-signal
Detect specific financial advice
Does text give a specific recommendation to buy, sell, hold, or allocate money, rather than general education?
You need a yes/no check on whether an assistant's or user's text crosses from explaining financial concepts into recommending a specific action with money, so the response can be disclaimed, softened, or routed for review.
Explore this recipe interactively ยท Source and implementation guide
Use financial-advice-signal in TypeScript
Install with npm install jev-recipes. Requires Node.js 22.9 or newer and ES modules. Set TYPESAFE_API_KEY in your server environment for live calls, which send input to TypeSafe and use API quota. See the installation guide.
import { financialAdviceSignal } from 'jev-recipes/financial-advice-signal';
const result = await financialAdviceSignal({
"text": "Honestly, at your age you should just put the whole $20k into VTI and forget about it. Bonds are a waste right now. Sell the individual tech stocks you mentioned and move that money over too.",
"minConfidence": 0.8
});
console.log(result);
Input contract
| Field | Type | Needed |
|---|---|---|
| text | string | Required |
| minConfidence | number | Optional |
Full input and result schemas
{
"input": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"text": {
"type": "string"
},
"minConfidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"text"
]
},
"result": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"model": {
"type": "string"
},
"usage": {
"type": "object",
"properties": {
"input_tokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"output_tokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"input_tokens",
"output_tokens"
],
"additionalProperties": false
},
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"verdict": {
"type": "string",
"enum": [
"advice",
"informational"
]
}
},
"required": [
"model",
"usage",
"status",
"probability",
"confidence",
"verdict"
],
"additionalProperties": false
}
}Saved example result
This hand-authored response demonstrates the contract. It is not a model accuracy measurement. Run it without an API key: npx jev-recipes demo financial-advice-signal.
{
"model": "demo-fixture",
"usage": {
"input_tokens": 0,
"output_tokens": 0
},
"status": "ready",
"probability": 0.91,
"confidence": 0.91,
"verdict": "advice"
}
Evaluation evidence
No verified live accuracy measurement is available. Evaluate representative cases before using this decision in your workflow.
Use the evaluation guide to measure this decision on your own labeled cases.
Limitations
- Detects wording that recommends a specific action, not whether the text legally constitutes financial advice in any jurisdiction or whether the speaker is licensed.
- Judges the text alone. A recommendation framed as hypothetical or quoted from someone else still counts if the text presents it as what the reader should do.
- Does not assess whether the advice is sound.
Related recipes
- response-refusal: Use response-refusal to detect whether a reply declined a request, rather than whether it contains a specific financial recommendation.
- certainty-match: Use certainty-match to check whether a reply's stated confidence fits its evidence, rather than whether it recommends a financial action.