@finos/legend-lego 2.0.188 → 2.0.189

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 (44) hide show
  1. package/lib/index.css +2 -2
  2. package/lib/index.css.map +1 -1
  3. package/lib/legend-ai/LegendAITypes.d.ts +196 -0
  4. package/lib/legend-ai/LegendAITypes.d.ts.map +1 -0
  5. package/lib/legend-ai/LegendAITypes.js +281 -0
  6. package/lib/legend-ai/LegendAITypes.js.map +1 -0
  7. package/lib/legend-ai/LegendAI_LegendApplicationPlugin_Extension.d.ts +127 -0
  8. package/lib/legend-ai/LegendAI_LegendApplicationPlugin_Extension.d.ts.map +1 -0
  9. package/lib/legend-ai/LegendAI_LegendApplicationPlugin_Extension.js +63 -0
  10. package/lib/legend-ai/LegendAI_LegendApplicationPlugin_Extension.js.map +1 -0
  11. package/lib/legend-ai/__test-utils__/LegendAITestUtils.d.ts +29 -0
  12. package/lib/legend-ai/__test-utils__/LegendAITestUtils.d.ts.map +1 -0
  13. package/lib/legend-ai/__test-utils__/LegendAITestUtils.js +98 -0
  14. package/lib/legend-ai/__test-utils__/LegendAITestUtils.js.map +1 -0
  15. package/lib/legend-ai/components/LegendAIChat.d.ts +23 -0
  16. package/lib/legend-ai/components/LegendAIChat.d.ts.map +1 -0
  17. package/lib/legend-ai/components/LegendAIChat.js +179 -0
  18. package/lib/legend-ai/components/LegendAIChat.js.map +1 -0
  19. package/lib/legend-ai/components/LegendAIErrorBoundary.d.ts +31 -0
  20. package/lib/legend-ai/components/LegendAIErrorBoundary.d.ts.map +1 -0
  21. package/lib/legend-ai/components/LegendAIErrorBoundary.js +35 -0
  22. package/lib/legend-ai/components/LegendAIErrorBoundary.js.map +1 -0
  23. package/lib/legend-ai/components/LegendAIResultGrid.d.ts +20 -0
  24. package/lib/legend-ai/components/LegendAIResultGrid.d.ts.map +1 -0
  25. package/lib/legend-ai/components/LegendAIResultGrid.js +90 -0
  26. package/lib/legend-ai/components/LegendAIResultGrid.js.map +1 -0
  27. package/lib/legend-ai/index.d.ts +22 -0
  28. package/lib/legend-ai/index.d.ts.map +1 -0
  29. package/lib/legend-ai/index.js +22 -0
  30. package/lib/legend-ai/index.js.map +1 -0
  31. package/lib/legend-ai/stores/LegendAIChatState.d.ts +46 -0
  32. package/lib/legend-ai/stores/LegendAIChatState.d.ts.map +1 -0
  33. package/lib/legend-ai/stores/LegendAIChatState.js +559 -0
  34. package/lib/legend-ai/stores/LegendAIChatState.js.map +1 -0
  35. package/package.json +5 -1
  36. package/src/legend-ai/LegendAITypes.ts +386 -0
  37. package/src/legend-ai/LegendAI_LegendApplicationPlugin_Extension.ts +208 -0
  38. package/src/legend-ai/__test-utils__/LegendAITestUtils.ts +139 -0
  39. package/src/legend-ai/components/LegendAIChat.tsx +502 -0
  40. package/src/legend-ai/components/LegendAIErrorBoundary.tsx +42 -0
  41. package/src/legend-ai/components/LegendAIResultGrid.tsx +132 -0
  42. package/src/legend-ai/index.ts +46 -0
  43. package/src/legend-ai/stores/LegendAIChatState.ts +1004 -0
  44. package/tsconfig.json +8 -0
@@ -0,0 +1,559 @@
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 { useState, useRef, useCallback, useEffect } from 'react';
17
+ import { assertErrorThrown, noop, uuid } from '@finos/legend-shared';
18
+ import { LegendAIQuestionIntent, LegendAIThinkingStepStatus, LegendAIMessageRole, TDSServiceSourceType, buildColumnDefsFromNames, } from '../LegendAITypes.js';
19
+ import { LegendAIJudgeVerdict, } from '../LegendAI_LegendApplicationPlugin_Extension.js';
20
+ const MAX_ERROR_MESSAGE_LENGTH = 500;
21
+ const MAX_THINKING_ERROR_PREVIEW_LENGTH = 200;
22
+ const DEFAULT_MAX_JUDGE_ATTEMPTS = 5;
23
+ const SUGGESTED_QUERIES_DELIMITER = '---SUGGESTED_QUERIES---';
24
+ function deduplicateColumns(columns) {
25
+ const seen = new Map();
26
+ return columns.map((col) => {
27
+ const count = seen.get(col) ?? 0;
28
+ seen.set(col, count + 1);
29
+ return count === 0 ? col : `${col}_${count + 1}`;
30
+ });
31
+ }
32
+ function createMessagePair(text) {
33
+ return [
34
+ { id: uuid(), role: LegendAIMessageRole.USER, text },
35
+ {
36
+ id: uuid(),
37
+ role: LegendAIMessageRole.ASSISTANT,
38
+ thinkingSteps: [],
39
+ sql: null,
40
+ textAnswer: null,
41
+ gridData: null,
42
+ error: null,
43
+ sqlGenTime: null,
44
+ execTime: null,
45
+ thinkingDuration: null,
46
+ isProcessing: true,
47
+ isExecuting: false,
48
+ suggestedQueries: [],
49
+ },
50
+ ];
51
+ }
52
+ export function updateLastAssistant(setMessages, updater) {
53
+ setMessages((prev) => {
54
+ const newMsgs = [...prev];
55
+ const lastIdx = newMsgs.length - 1;
56
+ const last = newMsgs[lastIdx];
57
+ if (last?.role === LegendAIMessageRole.ASSISTANT) {
58
+ newMsgs[lastIdx] = { ...last, ...updater(last) };
59
+ }
60
+ return newMsgs;
61
+ });
62
+ }
63
+ export function addThinkingStep(setMessages, label) {
64
+ updateLastAssistant(setMessages, (msg) => ({
65
+ thinkingSteps: [
66
+ ...msg.thinkingSteps.map((s) => s.status === LegendAIThinkingStepStatus.ACTIVE
67
+ ? { ...s, status: LegendAIThinkingStepStatus.DONE }
68
+ : s),
69
+ { label, status: LegendAIThinkingStepStatus.ACTIVE },
70
+ ],
71
+ }));
72
+ }
73
+ export function completeThinkingSteps(setMessages) {
74
+ updateLastAssistant(setMessages, (msg) => ({
75
+ thinkingSteps: msg.thinkingSteps.map((s) => s.status === LegendAIThinkingStepStatus.ACTIVE
76
+ ? { ...s, status: LegendAIThinkingStepStatus.DONE }
77
+ : s),
78
+ }));
79
+ }
80
+ export function finishWithThinkingError(setMessages, errorMsg, startTime) {
81
+ updateLastAssistant(setMessages, (msg) => ({
82
+ thinkingSteps: msg.thinkingSteps.map((s) => s.status === LegendAIThinkingStepStatus.ACTIVE
83
+ ? { ...s, status: LegendAIThinkingStepStatus.ERROR }
84
+ : s),
85
+ error: errorMsg.slice(0, MAX_ERROR_MESSAGE_LENGTH),
86
+ isProcessing: false,
87
+ thinkingDuration: ((Date.now() - startTime) / 1000).toFixed(1),
88
+ }));
89
+ }
90
+ export function buildConversationHistory(messages) {
91
+ const history = [];
92
+ let i = 0;
93
+ while (i < messages.length - 1) {
94
+ const userMsg = messages[i];
95
+ const asstMsg = messages[i + 1];
96
+ if (userMsg?.role === LegendAIMessageRole.USER &&
97
+ asstMsg?.role === LegendAIMessageRole.ASSISTANT) {
98
+ if (asstMsg.sql) {
99
+ history.push({
100
+ question: userMsg.text,
101
+ sql: asstMsg.sql,
102
+ intent: LegendAIQuestionIntent.DATA_QUERY,
103
+ });
104
+ }
105
+ else if (asstMsg.textAnswer) {
106
+ history.push({
107
+ question: userMsg.text,
108
+ sql: asstMsg.textAnswer,
109
+ intent: LegendAIQuestionIntent.METADATA,
110
+ });
111
+ }
112
+ i += 2;
113
+ }
114
+ else {
115
+ i += 1;
116
+ }
117
+ }
118
+ return history;
119
+ }
120
+ function formatServiceParams(services) {
121
+ return services.flatMap((s) => s.parameters.length > 0 ? [`${s.title}: ${s.parameters.join(', ')}`] : []);
122
+ }
123
+ export function buildGenerationFailureMessage(failure, suggestion, services) {
124
+ const parts = [failure];
125
+ if (suggestion) {
126
+ parts.push(`\nTry instead: "${suggestion}"`);
127
+ }
128
+ const svcNames = services.map((s) => s.title);
129
+ if (svcNames.length > 0) {
130
+ parts.push(`\nAvailable services: ${svcNames.join(', ')}`);
131
+ }
132
+ const allParams = formatServiceParams(services);
133
+ if (allParams.length > 0) {
134
+ parts.push(`\nService parameters: ${allParams.join('; ')}`);
135
+ }
136
+ return parts.join('');
137
+ }
138
+ export function buildExecutionErrorMessage(errStr, services) {
139
+ const errParts = [];
140
+ const errLower = errStr.toLowerCase();
141
+ const missingParamMatch = /missing required parameter values?\s*\[(?<params>[^\]]+)\]/i.exec(errStr);
142
+ if (missingParamMatch) {
143
+ const paramNames = missingParamMatch.groups?.params ?? '';
144
+ const paramList = paramNames.split(',').map((p) => p.trim());
145
+ const hint = paramList
146
+ .map((p) => `a specific ${p.replaceAll(/(?<lower>[a-z])(?<upper>[A-Z])/g, '$<lower> $<upper>').toLowerCase()}`)
147
+ .join(' and ');
148
+ errParts.push(`This service requires a value for: ${paramNames}`, `\nTry rephrasing your question to include ${hint}.`);
149
+ const svcParams = formatServiceParams(services);
150
+ if (svcParams.length > 0) {
151
+ errParts.push(`\nService parameters:\n${svcParams.join('\n')}`);
152
+ }
153
+ return errParts.join('');
154
+ }
155
+ errParts.push(errStr.slice(0, MAX_ERROR_MESSAGE_LENGTH));
156
+ if (errLower.includes('column') &&
157
+ (errLower.includes('not found') ||
158
+ errLower.includes('does not exist') ||
159
+ errLower.includes('unknown'))) {
160
+ const svcCols = services.map((s) => `${s.title}: ${s.columns.map((c) => c.name).join(', ')}`);
161
+ errParts.push(`\nAvailable columns:\n${svcCols.join('\n')}`);
162
+ }
163
+ if (errLower.includes('parameter') || errLower.includes('argument')) {
164
+ const svcParams = formatServiceParams(services);
165
+ if (svcParams.length > 0) {
166
+ errParts.push(`\nRequired parameters:\n${svcParams.join('\n')}`);
167
+ }
168
+ }
169
+ return errParts.join('');
170
+ }
171
+ function parseSuggestedQueries(rawAnswer) {
172
+ const delimIndex = rawAnswer.indexOf(SUGGESTED_QUERIES_DELIMITER);
173
+ if (delimIndex === -1) {
174
+ return { answer: rawAnswer.trim(), suggestedQueries: [] };
175
+ }
176
+ const answer = rawAnswer.slice(0, delimIndex).trim();
177
+ const suggestionsBlock = rawAnswer.slice(delimIndex + SUGGESTED_QUERIES_DELIMITER.length);
178
+ const suggestedQueries = suggestionsBlock
179
+ .split('\n')
180
+ .map((line) => line.replace(/^\d+[.)]\s*/, '').trim())
181
+ .filter((line) => line.length > 0)
182
+ .slice(0, 3);
183
+ return { answer, suggestedQueries };
184
+ }
185
+ export async function handleMetadataQuestion(question, metadata, context, startTime, hasQueryableServices) {
186
+ const { config, plugin, history, setMessages } = context;
187
+ addThinkingStep(setMessages, 'Answering from product metadata...');
188
+ const metadataPromptText = plugin.buildMetadataPrompt(question, metadata, history);
189
+ const rawAnswer = await plugin.callLLM(metadataPromptText, config);
190
+ const { answer, suggestedQueries: parsedSuggestions } = parseSuggestedQueries(rawAnswer);
191
+ const suggestedQueries = hasQueryableServices === false && !config.orchestratorUrl
192
+ ? []
193
+ : parsedSuggestions;
194
+ completeThinkingSteps(setMessages);
195
+ updateLastAssistant(setMessages, () => ({
196
+ textAnswer: answer,
197
+ suggestedQueries,
198
+ isProcessing: false,
199
+ thinkingDuration: ((Date.now() - startTime) / 1000).toFixed(1),
200
+ }));
201
+ }
202
+ export async function generateAndJudgeSql(question, services, coordinates, context, startTime) {
203
+ const { config, plugin, history, setMessages } = context;
204
+ addThinkingStep(setMessages, 'Building context from service schemas...');
205
+ const prompt = plugin.buildGeneratorPrompt(question, services, coordinates, history);
206
+ addThinkingStep(setMessages, 'Generating SQL query...');
207
+ const answerText = await plugin.callLLM(prompt, config);
208
+ const { sql: generatedSql, failure, suggestion, } = plugin.extractSqlFromResponse(answerText);
209
+ if (failure) {
210
+ addThinkingStep(setMessages, `Generation failed: ${failure}`);
211
+ finishWithThinkingError(setMessages, buildGenerationFailureMessage(failure, suggestion, services), startTime);
212
+ return null;
213
+ }
214
+ if (!generatedSql) {
215
+ addThinkingStep(setMessages, 'Could not extract SQL from response');
216
+ finishWithThinkingError(setMessages, 'Could not extract SQL from LLM response.\nTry rephrasing your question or ask about a specific service.', startTime);
217
+ return null;
218
+ }
219
+ const maxAttempts = config.maxJudgeAttempts ?? DEFAULT_MAX_JUDGE_ATTEMPTS;
220
+ let currentSql = generatedSql;
221
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
222
+ addThinkingStep(setMessages, `Verifying query correctness (${attempt}/${maxAttempts})...`);
223
+ const judgePrompt = plugin.buildJudgePrompt(currentSql, question, services, coordinates, history);
224
+ const judgeAnswer = await plugin.callLLM(judgePrompt, config);
225
+ const judgeResult = plugin.extractJudgeResult(judgeAnswer);
226
+ if (judgeResult.verdict === LegendAIJudgeVerdict.PASS) {
227
+ completeThinkingSteps(setMessages);
228
+ return currentSql;
229
+ }
230
+ const previousSql = currentSql;
231
+ const correctedSql = judgeResult.correctedSql?.trim();
232
+ if (correctedSql !== undefined &&
233
+ (correctedSql.toLowerCase().startsWith('select') ||
234
+ correctedSql.toLowerCase().startsWith('with') ||
235
+ correctedSql.toLowerCase().startsWith('('))) {
236
+ addThinkingStep(setMessages, `Query corrected (attempt ${attempt})`);
237
+ currentSql = correctedSql;
238
+ }
239
+ if (currentSql === previousSql || attempt === maxAttempts) {
240
+ addThinkingStep(setMessages, 'Max verification attempts reached, using best query');
241
+ return currentSql;
242
+ }
243
+ }
244
+ return null;
245
+ }
246
+ function reportExecutionResult(rawResult, setMessages, execStartTime, startTime) {
247
+ const columns = deduplicateColumns(rawResult.columns);
248
+ const rows = rawResult.rows;
249
+ completeThinkingSteps(setMessages);
250
+ addThinkingStep(setMessages, `Retrieved ${rows.length} row${rows.length === 1 ? '' : 's'}`);
251
+ completeThinkingSteps(setMessages);
252
+ updateLastAssistant(setMessages, () => ({
253
+ gridData: { columnDefs: buildColumnDefsFromNames(columns), rowData: rows },
254
+ execTime: ((Date.now() - execStartTime) / 1000).toFixed(2),
255
+ isProcessing: false,
256
+ isExecuting: false,
257
+ thinkingDuration: ((Date.now() - startTime) / 1000).toFixed(1),
258
+ }));
259
+ return { columns, rows };
260
+ }
261
+ export async function executeSqlAndReport(sql, services, config, plugin, setMessages, startTime, dataProductCoordinates) {
262
+ const execStartTime = Date.now();
263
+ try {
264
+ const isAccessPoint = services.some((s) => s.sourceType === TDSServiceSourceType.ACCESS_POINT);
265
+ const rawResult = isAccessPoint && dataProductCoordinates
266
+ ? await plugin.executeLakehouseSql(sql, dataProductCoordinates, config)
267
+ : await plugin.executeSql(sql, config);
268
+ return reportExecutionResult(rawResult, setMessages, execStartTime, startTime);
269
+ }
270
+ catch (executeError) {
271
+ assertErrorThrown(executeError);
272
+ addThinkingStep(setMessages, `Execution failed: ${executeError.message.slice(0, MAX_THINKING_ERROR_PREVIEW_LENGTH)}`);
273
+ finishWithThinkingError(setMessages, buildExecutionErrorMessage(executeError.message, services), startTime);
274
+ updateLastAssistant(setMessages, () => ({
275
+ execTime: ((Date.now() - execStartTime) / 1000).toFixed(2),
276
+ isExecuting: false,
277
+ }));
278
+ return undefined;
279
+ }
280
+ }
281
+ export async function executePureQueryAndReport(pureQuery, pureExecutionContext, dataProductCoordinates, config, plugin, setMessages, startTime) {
282
+ const execStartTime = Date.now();
283
+ try {
284
+ addThinkingStep(setMessages, 'Executing Pure query...');
285
+ const rawResult = await plugin.executePureQuery(pureQuery, pureExecutionContext, dataProductCoordinates, config);
286
+ return reportExecutionResult(rawResult, setMessages, execStartTime, startTime);
287
+ }
288
+ catch (executeError) {
289
+ assertErrorThrown(executeError);
290
+ addThinkingStep(setMessages, `Execution failed: ${executeError.message.slice(0, MAX_THINKING_ERROR_PREVIEW_LENGTH)}`);
291
+ completeThinkingSteps(setMessages);
292
+ updateLastAssistant(setMessages, () => ({
293
+ execTime: ((Date.now() - execStartTime) / 1000).toFixed(2),
294
+ isExecuting: false,
295
+ isProcessing: false,
296
+ error: `Execution failed: ${executeError.message.slice(0, MAX_ERROR_MESSAGE_LENGTH)}`,
297
+ thinkingDuration: ((Date.now() - startTime) / 1000).toFixed(1),
298
+ }));
299
+ return { columns: [], rows: [] };
300
+ }
301
+ }
302
+ export async function processQuestionViaOrchestrator(question, dataProductCoordinates, _metadata, context, pureExecutionContext) {
303
+ const { config, plugin, setMessages } = context;
304
+ const startTime = Date.now();
305
+ try {
306
+ addThinkingStep(setMessages, 'Resolving entities for your query...');
307
+ const resolvedEntities = await plugin.resolveEntitiesForQuery(question, dataProductCoordinates, config);
308
+ addThinkingStep(setMessages, `Found root entity: ${resolvedEntities.rootEntity.split('::').pop() ?? resolvedEntities.rootEntity}`);
309
+ if (resolvedEntities.relatedEntities.length > 0) {
310
+ addThinkingStep(setMessages, `Found ${resolvedEntities.relatedEntities.length} related entities`);
311
+ }
312
+ addThinkingStep(setMessages, 'Generating Legend query via orchestrator...');
313
+ const orchestratorResponse = await plugin.generateQueryViaOrchestrator({
314
+ user_question: question,
315
+ semantic_search_resolution_details: {
316
+ data_product_coordinates: dataProductCoordinates,
317
+ root_entity: resolvedEntities.rootEntity,
318
+ related_entities: resolvedEntities.relatedEntities,
319
+ },
320
+ }, config);
321
+ const queryGenTime = ((Date.now() - startTime) / 1000).toFixed(2);
322
+ completeThinkingSteps(setMessages);
323
+ updateLastAssistant(setMessages, () => ({
324
+ sql: orchestratorResponse.legend_query,
325
+ sqlGenTime: queryGenTime,
326
+ isExecuting: true,
327
+ isProcessing: true,
328
+ }));
329
+ if (!pureExecutionContext) {
330
+ updateLastAssistant(setMessages, () => ({
331
+ isProcessing: false,
332
+ isExecuting: false,
333
+ error: 'No execution context available — cannot execute query via engine.',
334
+ thinkingDuration: ((Date.now() - startTime) / 1000).toFixed(1),
335
+ }));
336
+ return;
337
+ }
338
+ await executePureQueryAndReport(orchestratorResponse.legend_query, pureExecutionContext, dataProductCoordinates, config, plugin, setMessages, startTime);
339
+ }
340
+ catch (error) {
341
+ assertErrorThrown(error);
342
+ addThinkingStep(setMessages, `Error: ${error.message.slice(0, MAX_THINKING_ERROR_PREVIEW_LENGTH)}`);
343
+ finishWithThinkingError(setMessages, error.message, startTime);
344
+ }
345
+ }
346
+ async function processDataQuery(question, services, coordinates, metadata, context, startTime, orchestratorOptions) {
347
+ const { config, plugin, setMessages } = context;
348
+ const dataProductCoordinates = orchestratorOptions?.dataProductCoordinates;
349
+ const pureExecutionContext = orchestratorOptions?.pureExecutionContext;
350
+ if (services.length === 0) {
351
+ if (config.orchestratorUrl && dataProductCoordinates) {
352
+ completeThinkingSteps(setMessages);
353
+ await processQuestionViaOrchestrator(question, dataProductCoordinates, metadata, context, pureExecutionContext);
354
+ return;
355
+ }
356
+ finishWithThinkingError(setMessages, 'No TDS services available for querying', startTime);
357
+ return;
358
+ }
359
+ addThinkingStep(setMessages, 'Found relevant services to query');
360
+ const judgedSql = await generateAndJudgeSql(question, services, coordinates, context, startTime);
361
+ if (!judgedSql) {
362
+ if (config.orchestratorUrl && dataProductCoordinates) {
363
+ addThinkingStep(setMessages, 'SQL generation could not handle this query, trying Legend AI orchestrator...');
364
+ updateLastAssistant(setMessages, () => ({
365
+ error: null,
366
+ isProcessing: true,
367
+ }));
368
+ await processQuestionViaOrchestrator(question, dataProductCoordinates, metadata, context, pureExecutionContext);
369
+ return;
370
+ }
371
+ return;
372
+ }
373
+ const sqlGenTimeValue = ((Date.now() - startTime) / 1000).toFixed(2);
374
+ completeThinkingSteps(setMessages);
375
+ updateLastAssistant(setMessages, () => ({
376
+ sql: judgedSql,
377
+ sqlGenTime: sqlGenTimeValue,
378
+ isExecuting: true,
379
+ }));
380
+ const sqlResult = await executeSqlAndReport(judgedSql, services, config, plugin, setMessages, startTime, dataProductCoordinates);
381
+ if (sqlResult?.rows.length === 0 &&
382
+ config.orchestratorUrl &&
383
+ dataProductCoordinates) {
384
+ addThinkingStep(setMessages, 'SQL query returned no results, trying Legend AI orchestrator...');
385
+ updateLastAssistant(setMessages, () => ({
386
+ gridData: null,
387
+ error: null,
388
+ isProcessing: true,
389
+ isExecuting: false,
390
+ }));
391
+ await processQuestionViaOrchestrator(question, dataProductCoordinates, metadata, context, pureExecutionContext);
392
+ }
393
+ }
394
+ export async function processQuestion(question, services, coordinates, metadata, context, dataProductCoordinates, pureExecutionContext) {
395
+ const { config, plugin, setMessages } = context;
396
+ const startTime = Date.now();
397
+ try {
398
+ addThinkingStep(setMessages, 'Analyzing your question...');
399
+ const serviceNames = services.map((s) => s.title);
400
+ const intent = await plugin.classifyQuestionIntent(question, services.length > 0, config, serviceNames);
401
+ if (intent === LegendAIQuestionIntent.METADATA) {
402
+ await handleMetadataQuestion(question, metadata, context, startTime, services.length > 0);
403
+ return;
404
+ }
405
+ if (intent === LegendAIQuestionIntent.ORCHESTRATOR) {
406
+ if (config.orchestratorUrl && dataProductCoordinates) {
407
+ completeThinkingSteps(setMessages);
408
+ await processQuestionViaOrchestrator(question, dataProductCoordinates, metadata, context, pureExecutionContext);
409
+ return;
410
+ }
411
+ addThinkingStep(setMessages, 'Orchestrator not available, trying SQL generation...');
412
+ }
413
+ await processDataQuery(question, services, coordinates, metadata, context, startTime, dataProductCoordinates
414
+ ? {
415
+ dataProductCoordinates,
416
+ ...(pureExecutionContext === undefined
417
+ ? {}
418
+ : { pureExecutionContext }),
419
+ }
420
+ : undefined);
421
+ }
422
+ catch (error) {
423
+ assertErrorThrown(error);
424
+ addThinkingStep(setMessages, `Error: ${error.message.slice(0, MAX_THINKING_ERROR_PREVIEW_LENGTH)}`);
425
+ finishWithThinkingError(setMessages, error.message, startTime);
426
+ }
427
+ }
428
+ export async function processQuestionWithIntent(question, intent, services, coordinates, metadata, context, orchestratorOptions) {
429
+ const { config, setMessages } = context;
430
+ const dataProductCoordinates = orchestratorOptions?.dataProductCoordinates;
431
+ const pureExecutionContext = orchestratorOptions?.pureExecutionContext;
432
+ if (intent === LegendAIQuestionIntent.METADATA) {
433
+ const startTime = Date.now();
434
+ await handleMetadataQuestion(question, metadata, context, startTime, services.length > 0);
435
+ return;
436
+ }
437
+ if (intent === LegendAIQuestionIntent.ORCHESTRATOR) {
438
+ if (config.orchestratorUrl && dataProductCoordinates) {
439
+ await processQuestionViaOrchestrator(question, dataProductCoordinates, metadata, context, pureExecutionContext);
440
+ return;
441
+ }
442
+ }
443
+ const startTime = Date.now();
444
+ try {
445
+ addThinkingStep(setMessages, 'Preparing data query...');
446
+ await processDataQuery(question, services, coordinates, metadata, context, startTime, orchestratorOptions);
447
+ }
448
+ catch (error) {
449
+ assertErrorThrown(error);
450
+ addThinkingStep(setMessages, `Error: ${error.message.slice(0, MAX_THINKING_ERROR_PREVIEW_LENGTH)}`);
451
+ finishWithThinkingError(setMessages, error.message, startTime);
452
+ }
453
+ }
454
+ export const useLegendAIChatState = (services, coordinates, config, metadata, plugin, dataProductCoordinates, pureExecutionContext) => {
455
+ const [questionText, setQuestionText] = useState('');
456
+ const [isSending, setIsSending] = useState(false);
457
+ const [messages, setMessages] = useState([]);
458
+ const [expandedThinking, setExpandedThinking] = useState(new Set());
459
+ const conversationRef = useRef(null);
460
+ const sendTimeoutRef = useRef(undefined);
461
+ useEffect(() => {
462
+ const el = conversationRef.current;
463
+ if (el && messages.length > 0) {
464
+ el.scrollTop = el.scrollHeight;
465
+ }
466
+ }, [messages]);
467
+ useEffect(() => {
468
+ return () => {
469
+ if (sendTimeoutRef.current !== undefined) {
470
+ clearTimeout(sendTimeoutRef.current);
471
+ }
472
+ };
473
+ }, []);
474
+ const toggleThinking = useCallback((index) => {
475
+ setExpandedThinking((prev) => {
476
+ const next = new Set(prev);
477
+ if (next.has(index)) {
478
+ next.delete(index);
479
+ }
480
+ else {
481
+ next.add(index);
482
+ }
483
+ return next;
484
+ });
485
+ }, []);
486
+ const clearChat = useCallback(() => {
487
+ setMessages([]);
488
+ setExpandedThinking(new Set());
489
+ setQuestionText('');
490
+ setIsSending(false);
491
+ if (sendTimeoutRef.current !== undefined) {
492
+ clearTimeout(sendTimeoutRef.current);
493
+ sendTimeoutRef.current = undefined;
494
+ }
495
+ }, []);
496
+ const dispatchQuestion = useCallback((text, process) => {
497
+ const trimmed = text.trim();
498
+ if (!trimmed || isSending) {
499
+ return;
500
+ }
501
+ const history = buildConversationHistory(messages);
502
+ setIsSending(true);
503
+ setQuestionText('');
504
+ setMessages((prev) => [...prev, ...createMessagePair(trimmed)]);
505
+ if (sendTimeoutRef.current !== undefined) {
506
+ clearTimeout(sendTimeoutRef.current);
507
+ sendTimeoutRef.current = undefined;
508
+ }
509
+ sendTimeoutRef.current = setTimeout(() => {
510
+ process(trimmed, history)
511
+ .catch(noop())
512
+ .finally(() => {
513
+ setIsSending(false);
514
+ sendTimeoutRef.current = undefined;
515
+ });
516
+ }, 0);
517
+ }, [isSending, messages]);
518
+ const askQuestion = useCallback(() => dispatchQuestion(questionText, (trimmed, history) => processQuestion(trimmed, services, coordinates, metadata, { config, plugin, history, setMessages }, dataProductCoordinates, pureExecutionContext)), [
519
+ questionText,
520
+ dispatchQuestion,
521
+ services,
522
+ coordinates,
523
+ config,
524
+ metadata,
525
+ plugin,
526
+ dataProductCoordinates,
527
+ pureExecutionContext,
528
+ ]);
529
+ const askQuestionWithIntent = useCallback((text, intent) => dispatchQuestion(text, (trimmed, history) => processQuestionWithIntent(trimmed, intent, services, coordinates, metadata, { config, plugin, history, setMessages }, dataProductCoordinates
530
+ ? {
531
+ dataProductCoordinates,
532
+ ...(pureExecutionContext === undefined
533
+ ? {}
534
+ : { pureExecutionContext }),
535
+ }
536
+ : undefined)), [
537
+ dispatchQuestion,
538
+ services,
539
+ coordinates,
540
+ config,
541
+ metadata,
542
+ plugin,
543
+ dataProductCoordinates,
544
+ pureExecutionContext,
545
+ ]);
546
+ return {
547
+ questionText,
548
+ setQuestionText,
549
+ isSending,
550
+ messages,
551
+ askQuestion,
552
+ askQuestionWithIntent,
553
+ clearChat,
554
+ expandedThinking,
555
+ toggleThinking,
556
+ conversationRef,
557
+ };
558
+ };
559
+ //# sourceMappingURL=LegendAIChatState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LegendAIChatState.js","sourceRoot":"","sources":["../../../src/legend-ai/stores/LegendAIChatState.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos/legend-lego",
3
- "version": "2.0.188",
3
+ "version": "2.0.189",
4
4
  "description": "Legend code editor support",
5
5
  "keywords": [
6
6
  "legend",
@@ -26,6 +26,8 @@
26
26
  "./code-editor/test/MockedMonacoEditor.js": "./lib/code-editor/__test-utils__/MockedMonacoEditor.js",
27
27
  "./data-grid": "./lib/data-grid/index.js",
28
28
  "./graph-editor": "./lib/graph-editor/index.js",
29
+ "./legend-ai": "./lib/legend-ai/index.js",
30
+ "./legend-ai/test": "./lib/legend-ai/__test-utils__/LegendAITestUtils.js",
29
31
  "./model-documentation": "./lib/model-documentation/index.js",
30
32
  "./lib/index.css": "./lib/index.css"
31
33
  },
@@ -69,6 +71,8 @@
69
71
  "devDependencies": {
70
72
  "@finos/legend-dev-utils": "2.2.6",
71
73
  "@jest/globals": "29.7.0",
74
+ "@testing-library/dom": "10.4.0",
75
+ "@testing-library/react": "16.2.0",
72
76
  "cross-env": "7.0.3",
73
77
  "eslint": "9.22.0",
74
78
  "jest": "29.7.0",