@finos/legend-lego 2.0.197 → 2.0.198

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/lib/index.css +2 -2
  2. package/lib/index.css.map +1 -1
  3. package/lib/legend-ai/LegendAIDocEnrichment.d.ts +60 -0
  4. package/lib/legend-ai/LegendAIDocEnrichment.d.ts.map +1 -0
  5. package/lib/legend-ai/LegendAIDocEnrichment.js +429 -0
  6. package/lib/legend-ai/LegendAIDocEnrichment.js.map +1 -0
  7. package/lib/legend-ai/LegendAITypes.d.ts +127 -1
  8. package/lib/legend-ai/LegendAITypes.d.ts.map +1 -1
  9. package/lib/legend-ai/LegendAITypes.js +111 -2
  10. package/lib/legend-ai/LegendAITypes.js.map +1 -1
  11. package/lib/legend-ai/LegendAI_LegendApplicationPlugin_Extension.d.ts +14 -1
  12. package/lib/legend-ai/LegendAI_LegendApplicationPlugin_Extension.d.ts.map +1 -1
  13. package/lib/legend-ai/LegendAI_LegendApplicationPlugin_Extension.js.map +1 -1
  14. package/lib/legend-ai/__test-utils__/LegendAITestUtils.d.ts +2 -1
  15. package/lib/legend-ai/__test-utils__/LegendAITestUtils.d.ts.map +1 -1
  16. package/lib/legend-ai/__test-utils__/LegendAITestUtils.js +37 -2
  17. package/lib/legend-ai/__test-utils__/LegendAITestUtils.js.map +1 -1
  18. package/lib/legend-ai/components/LegendAIAnalysisPanel.d.ts.map +1 -1
  19. package/lib/legend-ai/components/LegendAIAnalysisPanel.js +11 -12
  20. package/lib/legend-ai/components/LegendAIAnalysisPanel.js.map +1 -1
  21. package/lib/legend-ai/components/LegendAIAnalysisUtils.d.ts +7 -0
  22. package/lib/legend-ai/components/LegendAIAnalysisUtils.d.ts.map +1 -1
  23. package/lib/legend-ai/components/LegendAIAnalysisUtils.js +106 -41
  24. package/lib/legend-ai/components/LegendAIAnalysisUtils.js.map +1 -1
  25. package/lib/legend-ai/components/LegendAIChat.d.ts +1 -5
  26. package/lib/legend-ai/components/LegendAIChat.d.ts.map +1 -1
  27. package/lib/legend-ai/components/LegendAIChat.js +168 -109
  28. package/lib/legend-ai/components/LegendAIChat.js.map +1 -1
  29. package/lib/legend-ai/components/LegendAIChatHelpers.d.ts +21 -0
  30. package/lib/legend-ai/components/LegendAIChatHelpers.d.ts.map +1 -0
  31. package/lib/legend-ai/components/LegendAIChatHelpers.js +85 -0
  32. package/lib/legend-ai/components/LegendAIChatHelpers.js.map +1 -0
  33. package/lib/legend-ai/components/LegendAIChatInput.d.ts +21 -0
  34. package/lib/legend-ai/components/LegendAIChatInput.d.ts.map +1 -0
  35. package/lib/legend-ai/components/LegendAIChatInput.js +78 -0
  36. package/lib/legend-ai/components/LegendAIChatInput.js.map +1 -0
  37. package/lib/legend-ai/components/LegendAIScopeSelector.d.ts +25 -0
  38. package/lib/legend-ai/components/LegendAIScopeSelector.d.ts.map +1 -0
  39. package/lib/legend-ai/components/LegendAIScopeSelector.js +85 -0
  40. package/lib/legend-ai/components/LegendAIScopeSelector.js.map +1 -0
  41. package/lib/legend-ai/index.d.ts +8 -3
  42. package/lib/legend-ai/index.d.ts.map +1 -1
  43. package/lib/legend-ai/index.js +8 -3
  44. package/lib/legend-ai/index.js.map +1 -1
  45. package/lib/legend-ai/stores/LegendAIChatProcessors.d.ts +105 -0
  46. package/lib/legend-ai/stores/LegendAIChatProcessors.d.ts.map +1 -0
  47. package/lib/legend-ai/stores/LegendAIChatProcessors.js +1482 -0
  48. package/lib/legend-ai/stores/LegendAIChatProcessors.js.map +1 -0
  49. package/lib/legend-ai/stores/LegendAIChatState.d.ts +2 -35
  50. package/lib/legend-ai/stores/LegendAIChatState.d.ts.map +1 -1
  51. package/lib/legend-ai/stores/LegendAIChatState.js +114 -949
  52. package/lib/legend-ai/stores/LegendAIChatState.js.map +1 -1
  53. package/package.json +5 -5
  54. package/src/legend-ai/LegendAIDocEnrichment.ts +572 -0
  55. package/src/legend-ai/LegendAITypes.ts +213 -5
  56. package/src/legend-ai/LegendAI_LegendApplicationPlugin_Extension.ts +25 -0
  57. package/src/legend-ai/__test-utils__/LegendAITestUtils.ts +55 -1
  58. package/src/legend-ai/components/LegendAIAnalysisPanel.tsx +14 -34
  59. package/src/legend-ai/components/LegendAIAnalysisUtils.ts +157 -47
  60. package/src/legend-ai/components/LegendAIChat.tsx +389 -206
  61. package/src/legend-ai/components/LegendAIChatHelpers.ts +117 -0
  62. package/src/legend-ai/components/LegendAIChatInput.tsx +209 -0
  63. package/src/legend-ai/components/LegendAIScopeSelector.tsx +199 -0
  64. package/src/legend-ai/index.ts +31 -4
  65. package/src/legend-ai/stores/LegendAIChatProcessors.ts +2563 -0
  66. package/src/legend-ai/stores/LegendAIChatState.ts +161 -1697
  67. package/tsconfig.json +5 -0
@@ -14,104 +14,101 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
16
  */
17
- import { useMemo, useCallback, useState, useRef, useEffect, useLayoutEffect, } from 'react';
18
- import { SendIcon, LoadingIcon, SparkleStarsIcon, CodeIcon, TableIcon, CopyIcon, RefreshIcon, CheckIcon, TimesIcon, CaretDownIcon, CaretRightIcon, DotIcon, MarkdownTextViewer, } from '@finos/legend-art';
17
+ import { useMemo, useCallback, useState, useRef, useEffect } from 'react';
18
+ import { SparkleStarsIcon, CodeIcon, TableIcon, CopyIcon, CheckIcon, TimesIcon, MinusIcon, PlusIcon, CaretDownIcon, CaretRightIcon, DotIcon, LoadingIcon, LikeIcon, DislikeIcon, ExternalLinkIcon, MarkdownTextViewer, } from '@finos/legend-art';
19
19
  import { noop } from '@finos/legend-shared';
20
- import { PRIMITIVE_TYPE } from '@finos/legend-graph';
21
- import { LegendAIThinkingStepStatus, LegendAIMessageRole, LegendAIQuestionIntent, } from '../LegendAITypes.js';
20
+ import { LegendAIMessageFeedbackRating, LegendAIThinkingStepStatus, LegendAIMessageRole, LegendAIErrorType, classifyQuestionIntentFast, } from '../LegendAITypes.js';
22
21
  import { useLegendAIChatState } from '../stores/LegendAIChatState.js';
23
22
  import { LegendAIResultGrid } from './LegendAIResultGrid.js';
23
+ import { LegendAIAnalysisPanel } from './LegendAIAnalysisPanel.js';
24
+ import { LegendAIChatInput } from './LegendAIChatInput.js';
25
+ import { buildSuggestedQueries } from './LegendAIChatHelpers.js';
24
26
  export const LEGEND_AI_ANCHOR_ID = 'legend-ai-anchor';
25
27
  const COPY_FEEDBACK_DURATION_MS = 2000;
26
- const MAX_SUGGESTED_QUERIES = 8;
27
- const STRING_TYPES = new Set([PRIMITIVE_TYPE.STRING]);
28
- const NUMERIC_TYPES = new Set([
29
- PRIMITIVE_TYPE.NUMBER,
30
- PRIMITIVE_TYPE.INTEGER,
31
- PRIMITIVE_TYPE.FLOAT,
32
- PRIMITIVE_TYPE.DECIMAL,
33
- ]);
34
- const DATE_TYPES = new Set([
35
- PRIMITIVE_TYPE.DATE,
36
- PRIMITIVE_TYPE.STRICTDATE,
37
- PRIMITIVE_TYPE.DATETIME,
38
- ]);
39
- export function isStringColumn(c) {
40
- return STRING_TYPES.has(c.type ?? '') && !c.name.toLowerCase().includes('id');
41
- }
42
- export function isNumericColumn(c) {
43
- return NUMERIC_TYPES.has(c.type ?? '');
44
- }
45
- export function isDateColumn(c) {
46
- return (DATE_TYPES.has(c.type ?? '') ||
47
- c.name.toLowerCase().includes('date') ||
48
- c.name.toLowerCase().includes('time'));
49
- }
50
- function buildDataInsightSuggestions(primary, stringCol, numericCol, dateCol) {
51
- const result = [];
52
- if (stringCol && numericCol) {
53
- result.push(`What are the top ${stringCol.name} values by total ${numericCol.name} in ${primary.title}?`);
28
+ const METADATA_CONTEXT_HEADING = '### Metadata context';
29
+ const QUERY_ANALYSIS_HEADING = '### Query analysis';
30
+ function toUserFacingThinkingLabel(label) {
31
+ const normalized = label.toLowerCase();
32
+ if (normalized.includes('analyzing your question') ||
33
+ normalized.includes('intent is ambiguous')) {
34
+ return 'Understanding your request';
54
35
  }
55
- else if (stringCol) {
56
- result.push(`What are the distinct ${stringCol.name} values in ${primary.title}?`);
36
+ if (normalized.includes('building metadata context') ||
37
+ normalized.includes('answering from product metadata')) {
38
+ return 'Checking product capabilities and services';
57
39
  }
58
- if (dateCol && stringCol) {
59
- result.push(`Show ${primary.title} records from the last month grouped by ${stringCol.name}`);
40
+ if (normalized.includes('found relevant services') ||
41
+ normalized.includes('selecting best service') ||
42
+ normalized.includes('building context from service schemas') ||
43
+ normalized.includes('preparing data query') ||
44
+ normalized.includes('generating sql query') ||
45
+ normalized.includes('verifying query correctness') ||
46
+ normalized.includes('query corrected') ||
47
+ normalized.includes('max verification attempts reached') ||
48
+ normalized.includes('judge approved a non-sql draft')) {
49
+ return 'Trying a data query when helpful';
60
50
  }
61
- if (numericCol && !stringCol) {
62
- result.push(`What is the total ${numericCol.name} in ${primary.title}?`);
51
+ if (normalized.includes('retrieved ') ||
52
+ normalized.includes('executing') ||
53
+ normalized.includes('analyzing results') ||
54
+ normalized.includes('verifying answer coverage')) {
55
+ return 'Summarizing what matters for your question';
63
56
  }
64
- return result;
65
- }
66
- function buildMultiServiceSuggestion(services) {
67
- if (services.length < 2) {
68
- return [];
57
+ if (normalized.includes('error')) {
58
+ return 'Hit an issue while preparing the answer';
69
59
  }
70
- const svcA = services[0];
71
- const svcB = services[1];
72
- if (!svcA || !svcB) {
73
- return [];
74
- }
75
- const result = [`Show the latest 10 records from ${svcB.title}`];
76
- const colNamesA = new Set(svcA.columns.map((c) => c.name.toLowerCase()));
77
- const sharedCol = svcB.columns.find((c) => colNamesA.has(c.name.toLowerCase()));
78
- if (sharedCol) {
79
- result.push(`Compare ${svcA.title} and ${svcB.title} by ${sharedCol.name}, show 10 rows`);
60
+ return label;
61
+ }
62
+ function formatThinkingSteps(thinkingSteps) {
63
+ const formatted = [];
64
+ for (const step of thinkingSteps) {
65
+ const userLabel = toUserFacingThinkingLabel(step.label);
66
+ const last = formatted[formatted.length - 1];
67
+ if (last?.label === userLabel) {
68
+ formatted[formatted.length - 1] = {
69
+ ...last,
70
+ status: step.status,
71
+ };
72
+ }
73
+ else {
74
+ formatted.push({
75
+ ...step,
76
+ label: userLabel,
77
+ });
78
+ }
80
79
  }
81
- return result;
80
+ return formatted;
82
81
  }
83
- export function buildSuggestedQueries(services, metadata) {
84
- const suggestions = [
85
- `What data does ${metadata.name} offer and how can I use it?`,
86
- ];
87
- if (services.length === 0) {
88
- return [
89
- ...suggestions,
90
- 'What access points are available?',
91
- 'Describe the data model and key entities',
92
- ];
82
+ function splitCombinedAnswer(textAnswer) {
83
+ if (!textAnswer) {
84
+ return { metadataContext: null, queryAnalysis: null };
93
85
  }
94
- const primary = services[0];
95
- if (!primary) {
96
- return [
97
- ...suggestions,
98
- 'What access points are available and what columns do they have?',
99
- ];
86
+ const metadataIndex = textAnswer.indexOf(METADATA_CONTEXT_HEADING);
87
+ if (metadataIndex < 0) {
88
+ return { metadataContext: null, queryAnalysis: textAnswer };
100
89
  }
101
- const stringCol = primary.columns.find(isStringColumn);
102
- const numericCol = primary.columns.find(isNumericColumn);
103
- const dateCol = primary.columns.find(isDateColumn);
104
- const multiSvcSuggestions = buildMultiServiceSuggestion(services);
105
- const primaryRecordsSuggestion = dateCol
106
- ? `Show the 10 most recent records from ${primary.title} by ${dateCol.name}`
107
- : `Show 10 records from ${primary.title}`;
108
- return [
109
- ...suggestions,
110
- primaryRecordsSuggestion,
111
- ...buildDataInsightSuggestions(primary, stringCol, numericCol, dateCol),
112
- ...multiSvcSuggestions,
113
- ].slice(0, MAX_SUGGESTED_QUERIES);
90
+ const metadataStart = metadataIndex + METADATA_CONTEXT_HEADING.length;
91
+ const queryIndex = textAnswer.indexOf(QUERY_ANALYSIS_HEADING, metadataStart);
92
+ const metadataContext = queryIndex >= 0
93
+ ? textAnswer.slice(metadataStart, queryIndex).trim()
94
+ : textAnswer.slice(metadataStart).trim();
95
+ const queryAnalysis = queryIndex >= 0
96
+ ? textAnswer.slice(queryIndex + QUERY_ANALYSIS_HEADING.length).trim() ||
97
+ null
98
+ : null;
99
+ return {
100
+ metadataContext: metadataContext.length > 0 ? metadataContext : null,
101
+ queryAnalysis,
102
+ };
114
103
  }
104
+ const AISummaryRenderer = ({ value }) => (_jsx(MarkdownTextViewer, { value: { value }, className: "legend-ai__text-answer-md" }));
105
+ const DEFAULT_SCOPES = [
106
+ {
107
+ id: 'legend-ai-mcp',
108
+ label: 'Legend AI MCP',
109
+ description: 'Model Context Protocol via Marketplace /mcp proxy',
110
+ },
111
+ ];
115
112
  export function renderStepStatusIcon(status) {
116
113
  if (status === LegendAIThinkingStepStatus.ACTIVE) {
117
114
  return _jsx(LoadingIcon, { isLoading: true });
@@ -119,7 +116,8 @@ export function renderStepStatusIcon(status) {
119
116
  return status === LegendAIThinkingStepStatus.DONE ? (_jsx(CheckIcon, {})) : (_jsx(TimesIcon, {}));
120
117
  }
121
118
  const AssistantMessageView = (props) => {
122
- const { msg, isThinkingVisible, onToggleThinking, onSuggestedQueryClick, onFallbackAction, } = props;
119
+ const { msg, questionText, isThinkingVisible, onToggleThinking, onMessageFeedback, selectedFeedbackRating, feedbackSubmitting, onSuggestedQueryClick, onFallbackAction, enghubDocUrl, enthubRequestAccessUrl, } = props;
120
+ const hasPermissionAccessLinks = enghubDocUrl !== undefined || enthubRequestAccessUrl !== undefined;
123
121
  const [sqlCopied, setSqlCopied] = useState(false);
124
122
  const copyTimerRef = useRef(undefined);
125
123
  useEffect(() => () => {
@@ -129,7 +127,7 @@ const AssistantMessageView = (props) => {
129
127
  }, []);
130
128
  const handleCopySql = useCallback(() => {
131
129
  if (msg.sql) {
132
- navigator.clipboard.writeText(msg.sql).catch(noop());
130
+ navigator.clipboard.writeText(msg.sql).catch(noop);
133
131
  setSqlCopied(true);
134
132
  if (copyTimerRef.current !== undefined) {
135
133
  clearTimeout(copyTimerRef.current);
@@ -140,44 +138,105 @@ const AssistantMessageView = (props) => {
140
138
  }, COPY_FEEDBACK_DURATION_MS);
141
139
  }
142
140
  }, [msg.sql]);
143
- return (_jsxs("div", { className: "legend-ai__msg legend-ai__msg--assistant", children: [_jsx("div", { className: "legend-ai__msg-avatar", children: _jsx(SparkleStarsIcon, {}) }), _jsxs("div", { className: "legend-ai__msg-content", children: [msg.thinkingSteps.length > 0 && (_jsxs("div", { className: "legend-ai__thinking", children: [!msg.isProcessing && (_jsxs("button", { type: "button", className: "legend-ai__thinking-toggle", onClick: onToggleThinking, children: [_jsx("span", { className: "legend-ai__thinking-toggle-icon", children: isThinkingVisible ? _jsx(CaretDownIcon, {}) : _jsx(CaretRightIcon, {}) }), "Thought for ", msg.thinkingDuration ?? '...', "s"] })), isThinkingVisible && (_jsx("div", { className: "legend-ai__thinking-steps", children: msg.thinkingSteps.map((step) => (_jsxs("div", { className: `legend-ai__thinking-step legend-ai__thinking-step--${step.status}`, children: [_jsx("span", { className: "legend-ai__thinking-step-icon", children: renderStepStatusIcon(step.status) }), _jsx("span", { children: step.label })] }, step.id))) }))] })), msg.sql && (_jsxs("div", { className: "legend-ai__sql-block", children: [_jsxs("div", { className: "legend-ai__sql-block-header", children: [_jsx("span", { className: "legend-ai__sql-block-header-icon", children: _jsx(CodeIcon, {}) }), _jsx("span", { children: "Generated SQL" }), msg.sqlGenTime && (_jsxs("span", { className: "legend-ai__sql-block-time", children: [msg.sqlGenTime, "s"] })), _jsx("button", { type: "button", className: "legend-ai__sql-copy-btn", title: "Copy SQL", "aria-label": "Copy SQL", onClick: handleCopySql, children: sqlCopied ? (_jsx("span", { className: "legend-ai__sql-copy-btn--copied", children: _jsx(CheckIcon, {}) })) : (_jsx(CopyIcon, {})) })] }), _jsx("div", { className: "legend-ai__sql-scroll", children: _jsx("pre", { className: "legend-ai__sql-display", children: msg.sql }) })] })), msg.isExecuting && (_jsxs("div", { className: "legend-ai__executing", children: [_jsx(LoadingIcon, { isLoading: true }), _jsx("span", { children: "Executing query..." })] })), msg.error && _jsx("div", { className: "legend-ai__exec-error", children: msg.error }), msg.gridData && (_jsxs("div", { className: "legend-ai__results-block", children: [_jsxs("div", { className: "legend-ai__results-header", children: [_jsx("span", { className: "legend-ai__results-header-icon", children: _jsx(TableIcon, {}) }), _jsx("span", { children: "Results" }), _jsxs("span", { className: "legend-ai__results-meta", children: [msg.gridData.rowData.length, " row", msg.gridData.rowData.length === 1 ? '' : 's', msg.execTime ? (_jsxs(_Fragment, { children: [' ', _jsx(DotIcon, { className: "legend-ai__results-meta-dot" }), ' ', msg.execTime, "s"] })) : ('')] })] }), _jsx(LegendAIResultGrid, { data: msg.gridData })] })), msg.textAnswer && (_jsx("div", { className: "legend-ai__text-answer", children: _jsx(MarkdownTextViewer, { value: { value: msg.textAnswer }, className: "legend-ai__text-answer-md" }) })), !msg.isProcessing &&
141
+ const canShowFeedback = !msg.isProcessing &&
142
+ (msg.textAnswer !== null || msg.gridData !== null || msg.error !== null);
143
+ const visibleThinkingSteps = formatThinkingSteps(msg.thinkingSteps);
144
+ const { metadataContext, queryAnalysis } = splitCombinedAnswer(msg.textAnswer);
145
+ const analysisSummary = (() => {
146
+ if (msg.gridData === null) {
147
+ return null;
148
+ }
149
+ return queryAnalysis ?? (metadataContext === null ? msg.textAnswer : null);
150
+ })();
151
+ const plainAnswer = msg.gridData === null ? (metadataContext ?? msg.textAnswer) : null;
152
+ const submitFeedback = useCallback((rating) => {
153
+ const result = onMessageFeedback?.({
154
+ messageId: msg.id,
155
+ rating,
156
+ question: questionText,
157
+ ...(msg.textAnswer === null ? {} : { answer: msg.textAnswer }),
158
+ ...(msg.sql === null ? {} : { sql: msg.sql }),
159
+ ...(msg.gridData === null
160
+ ? {}
161
+ : { rowCount: msg.gridData.rowData.length }),
162
+ });
163
+ if (result instanceof Promise) {
164
+ result.catch(noop);
165
+ }
166
+ }, [msg, onMessageFeedback, questionText]);
167
+ return (_jsxs("div", { className: "legend-ai__msg legend-ai__msg--assistant", children: [_jsx("div", { className: "legend-ai__msg-avatar", children: _jsx(SparkleStarsIcon, {}) }), _jsxs("div", { className: "legend-ai__msg-content", children: [visibleThinkingSteps.length > 0 && (_jsxs("div", { className: "legend-ai__thinking", children: [!msg.isProcessing && (_jsxs("button", { type: "button", className: "legend-ai__thinking-toggle", onClick: onToggleThinking, children: [_jsx("span", { className: "legend-ai__thinking-toggle-icon", children: isThinkingVisible ? _jsx(CaretDownIcon, {}) : _jsx(CaretRightIcon, {}) }), "Thought for ", msg.thinkingDuration ?? '...', "s"] })), isThinkingVisible && (_jsx("div", { className: "legend-ai__thinking-steps", children: visibleThinkingSteps.map((step) => (_jsxs("div", { className: `legend-ai__thinking-step legend-ai__thinking-step--${step.status}`, children: [_jsx("span", { className: "legend-ai__thinking-step-icon", children: renderStepStatusIcon(step.status) }), _jsx("span", { children: step.label })] }, step.id))) }))] })), metadataContext && msg.gridData && (_jsx("div", { className: "legend-ai__inline-answer", children: _jsx(MarkdownTextViewer, { value: { value: metadataContext }, className: "legend-ai__text-answer-md" }) })), msg.sql && (_jsxs("div", { className: "legend-ai__sql-block", children: [_jsxs("div", { className: "legend-ai__sql-block-header", children: [_jsx("span", { className: "legend-ai__sql-block-header-icon", children: _jsx(CodeIcon, {}) }), _jsx("span", { children: "Generated SQL" }), msg.sqlGenTime && (_jsxs("span", { className: "legend-ai__sql-block-time", children: [msg.sqlGenTime, "s"] })), _jsx("button", { type: "button", className: "legend-ai__sql-copy-btn", title: "Copy SQL", "aria-label": "Copy SQL", onClick: handleCopySql, children: sqlCopied ? (_jsx("span", { className: "legend-ai__sql-copy-btn--copied", children: _jsx(CheckIcon, {}) })) : (_jsx(CopyIcon, {})) })] }), _jsx("div", { className: "legend-ai__sql-scroll", children: _jsx("pre", { className: "legend-ai__sql-display", children: msg.sql }) })] })), msg.isExecuting && (_jsxs("div", { className: "legend-ai__executing", children: [_jsx(LoadingIcon, { isLoading: true }), _jsx("span", { children: "Executing query..." })] })), msg.error && (_jsxs("div", { className: "legend-ai__exec-error", children: [msg.error, msg.errorType === LegendAIErrorType.PERMISSION &&
168
+ hasPermissionAccessLinks && (_jsxs("div", { className: "legend-ai__permission-error-action", children: [_jsx("span", { className: "legend-ai__permission-error-note", children: "Need access?" }), _jsxs("div", { className: "legend-ai__permission-error-btns", children: [enghubDocUrl && (_jsxs("a", { className: "legend-ai__permission-error-btn", href: enghubDocUrl, target: "_blank", rel: "noopener noreferrer", children: [_jsx(ExternalLinkIcon, {}), _jsx("span", { children: "View Documentation" })] })), enthubRequestAccessUrl && (_jsxs("a", { className: "legend-ai__permission-error-btn legend-ai__permission-error-btn--primary", href: enthubRequestAccessUrl, target: "_blank", rel: "noopener noreferrer", children: [_jsx(ExternalLinkIcon, {}), _jsx("span", { children: "Request Access" })] }))] })] }))] })), msg.gridData && (_jsxs("div", { className: "legend-ai__results-block", children: [_jsxs("div", { className: "legend-ai__results-header", children: [_jsx("span", { className: "legend-ai__results-header-icon", children: _jsx(TableIcon, {}) }), _jsx("span", { children: "Results" }), _jsxs("span", { className: "legend-ai__results-meta", children: [msg.gridData.rowData.length, " row", msg.gridData.rowData.length === 1 ? '' : 's', msg.execTime ? (_jsxs(_Fragment, { children: [' ', _jsx(DotIcon, { className: "legend-ai__results-meta-dot" }), ' ', msg.execTime, "s"] })) : ('')] })] }), _jsx(LegendAIResultGrid, { data: msg.gridData })] })), plainAnswer && (_jsx("div", { className: "legend-ai__inline-answer", children: _jsx(MarkdownTextViewer, { value: { value: plainAnswer }, className: "legend-ai__text-answer-md" }) })), analysisSummary && msg.gridData && (_jsx(LegendAIAnalysisPanel, { gridData: msg.gridData, summary: analysisSummary, SummaryRenderer: AISummaryRenderer })), msg.isProcessing && !msg.isExecuting && msg.gridData && (_jsxs("div", { className: "legend-ai__analyzing", children: [_jsx(LoadingIcon, { isLoading: true }), _jsx("span", { children: "Analyzing results..." })] })), !msg.isProcessing &&
144
169
  msg.suggestedQueries.length > 0 &&
145
170
  onSuggestedQueryClick && (_jsxs("div", { className: "legend-ai__follow-up-suggestions", children: [_jsx("span", { className: "legend-ai__follow-up-label", children: "Try a data query:" }), msg.suggestedQueries.map((q) => (_jsx("button", { type: "button", className: "legend-ai__follow-up-btn", onClick: () => onSuggestedQueryClick(q), children: q }, q)))] })), msg.fallbackAction && !msg.isProcessing && onFallbackAction && (_jsxs("button", { type: "button", className: "legend-ai__fallback-action-btn", onClick: () => {
146
171
  if (msg.fallbackAction?.actionId) {
147
172
  onFallbackAction(msg.id);
148
173
  }
149
- }, children: [_jsx(SparkleStarsIcon, {}), _jsx("span", { children: msg.fallbackAction.label })] }))] })] }));
174
+ }, children: [_jsx(SparkleStarsIcon, {}), _jsx("span", { children: msg.fallbackAction.label })] })), canShowFeedback && (_jsxs("div", { className: "legend-ai__message-feedback", children: [_jsx("span", { className: "legend-ai__message-feedback-label", children: "Did this answer your question?" }), _jsxs("div", { className: "legend-ai__message-feedback-actions", children: [_jsx("button", { type: "button", className: `legend-ai__message-feedback-btn${selectedFeedbackRating ===
175
+ LegendAIMessageFeedbackRating.THUMBS_UP
176
+ ? 'legend-ai__message-feedback-btn--selected'
177
+ : ''}`, title: "Thumbs up", "aria-label": "Thumbs up", onClick: () => submitFeedback(LegendAIMessageFeedbackRating.THUMBS_UP), disabled: feedbackSubmitting, children: _jsx(LikeIcon, {}) }), _jsx("button", { type: "button", className: `legend-ai__message-feedback-btn${selectedFeedbackRating ===
178
+ LegendAIMessageFeedbackRating.THUMBS_DOWN
179
+ ? 'legend-ai__message-feedback-btn--selected'
180
+ : ''}`, title: "Thumbs down", "aria-label": "Thumbs down", onClick: () => submitFeedback(LegendAIMessageFeedbackRating.THUMBS_DOWN), disabled: feedbackSubmitting, children: _jsx(DislikeIcon, {}) })] })] }))] })] }));
150
181
  };
151
182
  export const LegendAIChat = (props) => {
152
- const { services, coordinates, config, metadata, title, plugin, dataProductCoordinates, pureExecutionContext, } = props;
183
+ const { services, coordinates, config, metadata, title, plugin, dataProductCoordinates, pureExecutionContext, availableScopes, onMessageFeedback, onClose, onMinimize, } = props;
153
184
  const state = useLegendAIChatState(services, coordinates, config, metadata, plugin, dataProductCoordinates, pureExecutionContext);
154
185
  const suggestedQueries = useMemo(() => buildSuggestedQueries(services, metadata), [services, metadata]);
186
+ const hasServices = services.length > 0;
187
+ const inferSuggestedQueryIntent = useCallback((query) => classifyQuestionIntentFast(query, hasServices).intent, [hasServices]);
155
188
  const hasMessages = state.messages.length > 0;
156
- const textareaRef = useRef(null);
157
- useLayoutEffect(() => {
158
- const el = textareaRef.current;
159
- if (el) {
160
- el.style.height = 'auto';
161
- el.style.height = `${el.scrollHeight}px`;
189
+ const scopes = availableScopes ?? DEFAULT_SCOPES;
190
+ const [feedbackByMessageId, setFeedbackByMessageId] = useState(new Map());
191
+ const [pendingFeedbackByMessageId, setPendingFeedbackByMessageId] = useState(new Set());
192
+ const handleMessageFeedback = useCallback(async (feedback) => {
193
+ setFeedbackByMessageId((prev) => {
194
+ const next = new Map(prev);
195
+ next.set(feedback.messageId, feedback.rating);
196
+ return next;
197
+ });
198
+ if (!onMessageFeedback) {
199
+ return;
200
+ }
201
+ setPendingFeedbackByMessageId((prev) => {
202
+ const next = new Set(prev);
203
+ next.add(feedback.messageId);
204
+ return next;
205
+ });
206
+ try {
207
+ await onMessageFeedback(feedback);
208
+ }
209
+ catch {
210
+ setFeedbackByMessageId((prev) => {
211
+ const next = new Map(prev);
212
+ next.delete(feedback.messageId);
213
+ return next;
214
+ });
215
+ }
216
+ finally {
217
+ setPendingFeedbackByMessageId((prev) => {
218
+ const next = new Set(prev);
219
+ next.delete(feedback.messageId);
220
+ return next;
221
+ });
162
222
  }
163
- }, [state.questionText]);
164
- return (_jsxs("div", { className: "legend-ai", id: LEGEND_AI_ANCHOR_ID, children: [_jsxs("div", { className: "legend-ai__header", children: [_jsx("div", { className: "legend-ai__header-icon", children: _jsx(SparkleStarsIcon, {}) }), _jsx("div", { className: "legend-ai__title", children: title ?? 'Legend AI' }), hasMessages && (_jsxs("button", { type: "button", className: "legend-ai__clear-btn", title: "Clear chat", "aria-label": "Clear chat", onClick: () => state.clearChat(), children: [_jsx(RefreshIcon, {}), _jsx("span", { children: "Clear" })] }))] }), _jsxs("div", { className: "legend-ai__conversation", ref: state.conversationRef, children: [!hasMessages && (_jsxs("div", { className: "legend-ai__empty-state", children: [_jsx("div", { className: "legend-ai__empty-icon", children: _jsx(SparkleStarsIcon, {}) }), _jsx("div", { className: "legend-ai__empty-text", children: "Ask a question about your data" }), _jsx("div", { className: "legend-ai__suggestions", children: _jsx("div", { className: "legend-ai__suggestions-grid", children: suggestedQueries.map((q) => (_jsxs("button", { type: "button", className: "legend-ai__suggestion-card", onClick: () => {
165
- state.setQuestionText(q);
166
- }, children: [_jsx("span", { className: "legend-ai__suggestion-card-icon", children: _jsx(SparkleStarsIcon, {}) }), _jsx("span", { className: "legend-ai__suggestion-card-text", children: q })] }, q))) }) })] })), state.messages.map((msg, msgIndex) => {
223
+ }, [onMessageFeedback]);
224
+ return (_jsxs("div", { className: "legend-ai", id: LEGEND_AI_ANCHOR_ID, children: [_jsxs("div", { className: "legend-ai__header", children: [_jsx("div", { className: "legend-ai__header-icon", children: _jsx(SparkleStarsIcon, {}) }), _jsx("div", { className: "legend-ai__title", children: title ?? 'Legend AI' }), _jsxs("div", { className: "legend-ai__header-actions", children: [_jsx("button", { type: "button", className: "legend-ai__header-action", title: "New chat", "aria-label": "New chat", onClick: () => state.clearChat(), children: _jsx(PlusIcon, {}) }), onMinimize && (_jsx("button", { type: "button", className: "legend-ai__header-action", title: "Minimize", "aria-label": "Minimize", onClick: onMinimize, children: _jsx(MinusIcon, {}) })), onClose && (_jsx("button", { type: "button", className: "legend-ai__header-action", title: "Close", "aria-label": "Close", onClick: onClose, children: _jsx(TimesIcon, {}) }))] })] }), _jsxs("div", { className: "legend-ai__conversation", ref: state.conversationRef, children: [!hasMessages && (_jsxs("div", { className: "legend-ai__empty-state", children: [_jsx("div", { className: "legend-ai__empty-icon", children: _jsx(SparkleStarsIcon, {}) }), _jsx("div", { className: "legend-ai__empty-text", children: "Ask a question about your data" }), _jsx("div", { className: "legend-ai__suggestions", children: suggestedQueries.map((q) => (_jsx("button", { type: "button", className: "legend-ai__suggestion-chip", onClick: () => {
225
+ state.askQuestionWithIntent(q, inferSuggestedQueryIntent(q));
226
+ }, children: q }, q))) })] })), state.messages.map((msg, msgIndex) => {
167
227
  if (msg.role === LegendAIMessageRole.USER) {
168
228
  return (_jsx("div", { className: "legend-ai__msg legend-ai__msg--user", children: _jsx("div", { className: "legend-ai__msg-bubble", children: msg.text }) }, msg.id));
169
229
  }
170
230
  const isThinkingVisible = msg.isProcessing || state.expandedThinking.has(msgIndex);
171
- return (_jsx(AssistantMessageView, { msg: msg, isThinkingVisible: isThinkingVisible, onToggleThinking: () => state.toggleThinking(msgIndex), onFallbackAction: (messageId) => state.runFallbackAction(messageId), onSuggestedQueryClick: (q) => state.askQuestionWithIntent(q, services.length > 0
172
- ? LegendAIQuestionIntent.DATA_QUERY
173
- : LegendAIQuestionIntent.ORCHESTRATOR) }, msg.id));
174
- })] }), _jsx("div", { className: "legend-ai__input-area", children: _jsxs("div", { className: "legend-ai__question-wrapper", children: [_jsx("textarea", { ref: textareaRef, className: "legend-ai__question", placeholder: "Ask anything about the data...", rows: 1, spellCheck: false, value: state.questionText, onChange: (e) => state.setQuestionText(e.target.value), onKeyDown: (e) => {
175
- if (e.key === 'Enter' && !e.shiftKey) {
176
- e.preventDefault();
177
- if (!state.isSending && state.questionText.trim()) {
178
- state.askQuestion();
179
- }
180
- }
181
- } }), _jsx("button", { type: "button", title: "Send", "aria-label": "Send", className: "legend-ai__send-btn", disabled: state.isSending || !state.questionText.trim(), onClick: () => state.askQuestion(), children: state.isSending ? _jsx(LoadingIcon, { isLoading: true }) : _jsx(SendIcon, {}) })] }) })] }));
231
+ const previousMessage = msgIndex > 0 ? state.messages[msgIndex - 1] : null;
232
+ const questionText = previousMessage?.role === LegendAIMessageRole.USER
233
+ ? previousMessage.text
234
+ : '';
235
+ return (_jsx(AssistantMessageView, { msg: msg, questionText: questionText, isThinkingVisible: isThinkingVisible, onToggleThinking: () => state.toggleThinking(msgIndex), onMessageFeedback: handleMessageFeedback, selectedFeedbackRating: feedbackByMessageId.get(msg.id), feedbackSubmitting: pendingFeedbackByMessageId.has(msg.id), ...(config.enghubDocUrl === undefined
236
+ ? {}
237
+ : { enghubDocUrl: config.enghubDocUrl }), ...(config.enthubRequestAccessUrl === undefined
238
+ ? {}
239
+ : { enthubRequestAccessUrl: config.enthubRequestAccessUrl }), onFallbackAction: (messageId) => state.runFallbackAction(messageId), onSuggestedQueryClick: (q) => state.askQuestionWithIntent(q, inferSuggestedQueryIntent(q)) }, msg.id));
240
+ })] }), _jsx(LegendAIChatInput, { state: state, scopes: scopes })] }));
182
241
  };
183
242
  //# sourceMappingURL=LegendAIChat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LegendAIChat.js","sourceRoot":"","sources":["../../../src/legend-ai/components/LegendAIChat.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LegendAIChat.js","sourceRoot":"","sources":["../../../src/legend-ai/components/LegendAIChat.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Copyright (c) 2026-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import type { LegendAIProductMetadata, TDSServiceSchema, TDSColumnSchema } from '../LegendAITypes.js';
17
+ export declare function isStringColumn(c: TDSColumnSchema): boolean;
18
+ export declare function isNumericColumn(c: TDSColumnSchema): boolean;
19
+ export declare function isDateColumn(c: TDSColumnSchema): boolean;
20
+ export declare function buildSuggestedQueries(services: TDSServiceSchema[], metadata: LegendAIProductMetadata): string[];
21
+ //# sourceMappingURL=LegendAIChatHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LegendAIChatHelpers.d.ts","sourceRoot":"","sources":["../../../src/legend-ai/components/LegendAIChatHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAmB7B,wBAAgB,cAAc,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAE1D;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAE3D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAMxD;AA2BD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,QAAQ,EAAE,uBAAuB,GAChC,MAAM,EAAE,CAgCV"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Copyright (c) 2026-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { PRIMITIVE_TYPE } from '@finos/legend-graph';
17
+ const MAX_SUGGESTED_QUERIES = 8;
18
+ const STRING_TYPES = new Set([PRIMITIVE_TYPE.STRING]);
19
+ const NUMERIC_TYPES = new Set([
20
+ PRIMITIVE_TYPE.NUMBER,
21
+ PRIMITIVE_TYPE.INTEGER,
22
+ PRIMITIVE_TYPE.FLOAT,
23
+ PRIMITIVE_TYPE.DECIMAL,
24
+ ]);
25
+ const DATE_TYPES = new Set([
26
+ PRIMITIVE_TYPE.DATE,
27
+ PRIMITIVE_TYPE.STRICTDATE,
28
+ PRIMITIVE_TYPE.DATETIME,
29
+ ]);
30
+ export function isStringColumn(c) {
31
+ return STRING_TYPES.has(c.type ?? '') && !c.name.toLowerCase().includes('id');
32
+ }
33
+ export function isNumericColumn(c) {
34
+ return NUMERIC_TYPES.has(c.type ?? '');
35
+ }
36
+ export function isDateColumn(c) {
37
+ return (DATE_TYPES.has(c.type ?? '') ||
38
+ c.name.toLowerCase().includes('date') ||
39
+ c.name.toLowerCase().includes('time'));
40
+ }
41
+ function buildDataInsightSuggestions(primary, stringCol, numericCol) {
42
+ const result = [];
43
+ if (stringCol) {
44
+ result.push(`Show the distinct ${stringCol.name} values from ${primary.title}`);
45
+ }
46
+ if (numericCol && !stringCol) {
47
+ result.push(`What is the total ${numericCol.name} in ${primary.title}?`);
48
+ }
49
+ return result;
50
+ }
51
+ function buildMultiServiceSuggestion(services) {
52
+ if (services.length < 2) {
53
+ return [];
54
+ }
55
+ return [`Show 10 records from ${services[1]?.title}`];
56
+ }
57
+ export function buildSuggestedQueries(services, metadata) {
58
+ const suggestions = [
59
+ `What data does ${metadata.name} offer and how can I use it?`,
60
+ ];
61
+ if (services.length === 0) {
62
+ return [
63
+ ...suggestions,
64
+ 'What access points are available?',
65
+ 'Describe the data model and key entities',
66
+ ];
67
+ }
68
+ const primary = services[0];
69
+ if (!primary) {
70
+ return [
71
+ ...suggestions,
72
+ 'What access points are available and what columns do they have?',
73
+ ];
74
+ }
75
+ const stringCol = primary.columns.find(isStringColumn);
76
+ const numericCol = primary.columns.find(isNumericColumn);
77
+ const multiSvcSuggestions = buildMultiServiceSuggestion(services);
78
+ return [
79
+ ...suggestions,
80
+ `Show 10 records from ${primary.title}`,
81
+ ...buildDataInsightSuggestions(primary, stringCol, numericCol),
82
+ ...multiSvcSuggestions,
83
+ ].slice(0, MAX_SUGGESTED_QUERIES);
84
+ }
85
+ //# sourceMappingURL=LegendAIChatHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LegendAIChatHelpers.js","sourceRoot":"","sources":["../../../src/legend-ai/components/LegendAIChatHelpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Copyright (c) 2026-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import type { LegendAIChatState, LegendAIScopeItem } from '../LegendAITypes.js';
17
+ export declare const LegendAIChatInput: (props: {
18
+ state: LegendAIChatState;
19
+ scopes: LegendAIScopeItem[];
20
+ }) => React.ReactNode;
21
+ //# sourceMappingURL=LegendAIChatInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LegendAIChatInput.d.ts","sourceRoot":"","sources":["../../../src/legend-ai/components/LegendAIChatInput.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAWH,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAKhF,eAAO,MAAM,iBAAiB,GAAI,OAAO;IACvC,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B,KAAG,KAAK,CAAC,SA+KT,CAAC"}