|
|
@ -49,11 +49,17 @@ const REBALANCE_KEYWORDS = [ |
|
|
]; |
|
|
]; |
|
|
|
|
|
|
|
|
const STRESS_TEST_KEYWORDS = ['crash', 'drawdown', 'shock', 'stress']; |
|
|
const STRESS_TEST_KEYWORDS = ['crash', 'drawdown', 'shock', 'stress']; |
|
|
|
|
|
const PORTFOLIO_VALUE_QUERY_PATTERNS = [ |
|
|
|
|
|
/\bhow much(?:\s+\w+){0,4}\s+(?:money|cash|value|worth)\b.*\b(?:i|my)\b.*\b(?:have|own)\b/, |
|
|
|
|
|
/\b(?:net\s+worth|portfolio\s+value|portfolio\s+worth|account\s+balance|total\s+portfolio\s+value)\b/ |
|
|
|
|
|
]; |
|
|
const ANSWER_NUMERIC_INTENT_KEYWORDS = [ |
|
|
const ANSWER_NUMERIC_INTENT_KEYWORDS = [ |
|
|
'allocat', |
|
|
'allocat', |
|
|
|
|
|
'balance', |
|
|
'drawdown', |
|
|
'drawdown', |
|
|
'hhi', |
|
|
'hhi', |
|
|
'market', |
|
|
'market', |
|
|
|
|
|
'money', |
|
|
'performance', |
|
|
'performance', |
|
|
'price', |
|
|
'price', |
|
|
'quote', |
|
|
'quote', |
|
|
@ -61,7 +67,8 @@ const ANSWER_NUMERIC_INTENT_KEYWORDS = [ |
|
|
'risk', |
|
|
'risk', |
|
|
'shock', |
|
|
'shock', |
|
|
'stress', |
|
|
'stress', |
|
|
'trim' |
|
|
'trim', |
|
|
|
|
|
'worth' |
|
|
]; |
|
|
]; |
|
|
const ANSWER_ACTIONABLE_KEYWORDS = [ |
|
|
const ANSWER_ACTIONABLE_KEYWORDS = [ |
|
|
'add', |
|
|
'add', |
|
|
@ -275,6 +282,11 @@ export function determineToolPlan({ |
|
|
const hasStressTestIntent = STRESS_TEST_KEYWORDS.some((keyword) => { |
|
|
const hasStressTestIntent = STRESS_TEST_KEYWORDS.some((keyword) => { |
|
|
return normalizedQuery.includes(keyword); |
|
|
return normalizedQuery.includes(keyword); |
|
|
}); |
|
|
}); |
|
|
|
|
|
const hasPortfolioValueIntent = PORTFOLIO_VALUE_QUERY_PATTERNS.some( |
|
|
|
|
|
(pattern) => { |
|
|
|
|
|
return pattern.test(normalizedQuery); |
|
|
|
|
|
} |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
if ( |
|
|
if ( |
|
|
normalizedQuery.includes('portfolio') || |
|
|
normalizedQuery.includes('portfolio') || |
|
|
@ -286,6 +298,10 @@ export function determineToolPlan({ |
|
|
selectedTools.add('portfolio_analysis'); |
|
|
selectedTools.add('portfolio_analysis'); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (hasPortfolioValueIntent) { |
|
|
|
|
|
selectedTools.add('portfolio_analysis'); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if ( |
|
|
if ( |
|
|
normalizedQuery.includes('risk') || |
|
|
normalizedQuery.includes('risk') || |
|
|
normalizedQuery.includes('concentration') || |
|
|
normalizedQuery.includes('concentration') || |
|
|
|