@trainly/react 1.4.1 → 1.4.3
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.
- package/dist/TrainlyProvider.js +40 -56
- package/dist/components/TrainlyChat.d.ts +2 -1
- package/dist/components/TrainlyChat.js +48 -11
- package/dist/types.d.ts +7 -1
- package/package.json +1 -1
package/dist/TrainlyProvider.js
CHANGED
|
@@ -246,7 +246,7 @@ export function TrainlyProvider(_a) {
|
|
|
246
246
|
}
|
|
247
247
|
});
|
|
248
248
|
}); };
|
|
249
|
-
var ask = function (question) { return __awaiter(_this, void 0, void 0, function () {
|
|
249
|
+
var ask = function (question, options) { return __awaiter(_this, void 0, void 0, function () {
|
|
250
250
|
var response, err_3, errorMessage, newToken, response, refreshError_1, error_3;
|
|
251
251
|
return __generator(this, function (_a) {
|
|
252
252
|
switch (_a.label) {
|
|
@@ -254,10 +254,10 @@ export function TrainlyProvider(_a) {
|
|
|
254
254
|
_a.trys.push([0, 2, 10, 11]);
|
|
255
255
|
setIsLoading(true);
|
|
256
256
|
setError(null);
|
|
257
|
-
return [4 /*yield*/, client.ask(question)];
|
|
257
|
+
return [4 /*yield*/, client.ask(question, options || {})];
|
|
258
258
|
case 1:
|
|
259
259
|
response = _a.sent();
|
|
260
|
-
return [2 /*return*/, response
|
|
260
|
+
return [2 /*return*/, response];
|
|
261
261
|
case 2:
|
|
262
262
|
err_3 = _a.sent();
|
|
263
263
|
errorMessage = err_3 instanceof Error ? err_3.message : String(err_3);
|
|
@@ -277,11 +277,11 @@ export function TrainlyProvider(_a) {
|
|
|
277
277
|
return [4 /*yield*/, client.connectWithOAuthToken(newToken)];
|
|
278
278
|
case 5:
|
|
279
279
|
_a.sent();
|
|
280
|
-
return [4 /*yield*/, client.ask(question)];
|
|
280
|
+
return [4 /*yield*/, client.ask(question, options || {})];
|
|
281
281
|
case 6:
|
|
282
282
|
response = _a.sent();
|
|
283
283
|
console.log("✅ Query succeeded after token refresh");
|
|
284
|
-
return [2 /*return*/, response
|
|
284
|
+
return [2 /*return*/, response];
|
|
285
285
|
case 7: return [3 /*break*/, 9];
|
|
286
286
|
case 8:
|
|
287
287
|
refreshError_1 = _a.sent();
|
|
@@ -302,39 +302,23 @@ export function TrainlyProvider(_a) {
|
|
|
302
302
|
}
|
|
303
303
|
});
|
|
304
304
|
}); };
|
|
305
|
+
// Legacy wrapper for backward compatibility (deprecated - use ask() with options instead)
|
|
305
306
|
var askWithCitations = function (question) { return __awaiter(_this, void 0, void 0, function () {
|
|
306
|
-
var response
|
|
307
|
+
var response;
|
|
307
308
|
return __generator(this, function (_a) {
|
|
308
309
|
switch (_a.label) {
|
|
309
|
-
case 0:
|
|
310
|
-
_a.trys.push([0, 2, 3, 4]);
|
|
311
|
-
setIsLoading(true);
|
|
312
|
-
setError(null);
|
|
313
|
-
return [4 /*yield*/, client.ask(question, { includeCitations: true })];
|
|
310
|
+
case 0: return [4 /*yield*/, ask(question, { includeCitations: true })];
|
|
314
311
|
case 1:
|
|
315
312
|
response = _a.sent();
|
|
316
313
|
return [2 /*return*/, {
|
|
317
314
|
answer: response.answer,
|
|
318
315
|
citations: response.citations || [],
|
|
319
316
|
}];
|
|
320
|
-
case 2:
|
|
321
|
-
err_4 = _a.sent();
|
|
322
|
-
error_4 = {
|
|
323
|
-
code: "QUERY_FAILED",
|
|
324
|
-
message: "Failed to get answer with citations",
|
|
325
|
-
details: err_4,
|
|
326
|
-
};
|
|
327
|
-
setError(error_4);
|
|
328
|
-
throw error_4;
|
|
329
|
-
case 3:
|
|
330
|
-
setIsLoading(false);
|
|
331
|
-
return [7 /*endfinally*/];
|
|
332
|
-
case 4: return [2 /*return*/];
|
|
333
317
|
}
|
|
334
318
|
});
|
|
335
319
|
}); };
|
|
336
320
|
var upload = function (file, scopeValues) { return __awaiter(_this, void 0, void 0, function () {
|
|
337
|
-
var result,
|
|
321
|
+
var result, err_4, errorMessage, newToken, result, refreshError_2, error_4;
|
|
338
322
|
return __generator(this, function (_a) {
|
|
339
323
|
switch (_a.label) {
|
|
340
324
|
case 0:
|
|
@@ -346,8 +330,8 @@ export function TrainlyProvider(_a) {
|
|
|
346
330
|
result = _a.sent();
|
|
347
331
|
return [2 /*return*/, result];
|
|
348
332
|
case 2:
|
|
349
|
-
|
|
350
|
-
errorMessage =
|
|
333
|
+
err_4 = _a.sent();
|
|
334
|
+
errorMessage = err_4 instanceof Error ? err_4.message : String(err_4);
|
|
351
335
|
if (!(getToken &&
|
|
352
336
|
appId &&
|
|
353
337
|
(errorMessage.includes("401") ||
|
|
@@ -375,13 +359,13 @@ export function TrainlyProvider(_a) {
|
|
|
375
359
|
console.error("❌ Token refresh failed:", refreshError_2);
|
|
376
360
|
return [3 /*break*/, 9];
|
|
377
361
|
case 9:
|
|
378
|
-
|
|
362
|
+
error_4 = {
|
|
379
363
|
code: "UPLOAD_FAILED",
|
|
380
364
|
message: "Failed to upload file",
|
|
381
|
-
details:
|
|
365
|
+
details: err_4,
|
|
382
366
|
};
|
|
383
|
-
setError(
|
|
384
|
-
throw
|
|
367
|
+
setError(error_4);
|
|
368
|
+
throw error_4;
|
|
385
369
|
case 10:
|
|
386
370
|
setIsLoading(false);
|
|
387
371
|
return [7 /*endfinally*/];
|
|
@@ -390,7 +374,7 @@ export function TrainlyProvider(_a) {
|
|
|
390
374
|
});
|
|
391
375
|
}); };
|
|
392
376
|
var bulkUploadFiles = function (files, scopeValues) { return __awaiter(_this, void 0, void 0, function () {
|
|
393
|
-
var result,
|
|
377
|
+
var result, err_5, errorMessage, newToken, result, refreshError_3, error_5;
|
|
394
378
|
return __generator(this, function (_a) {
|
|
395
379
|
switch (_a.label) {
|
|
396
380
|
case 0:
|
|
@@ -402,8 +386,8 @@ export function TrainlyProvider(_a) {
|
|
|
402
386
|
result = _a.sent();
|
|
403
387
|
return [2 /*return*/, result];
|
|
404
388
|
case 2:
|
|
405
|
-
|
|
406
|
-
errorMessage =
|
|
389
|
+
err_5 = _a.sent();
|
|
390
|
+
errorMessage = err_5 instanceof Error ? err_5.message : String(err_5);
|
|
407
391
|
if (!(getToken &&
|
|
408
392
|
appId &&
|
|
409
393
|
(errorMessage.includes("401") ||
|
|
@@ -431,13 +415,13 @@ export function TrainlyProvider(_a) {
|
|
|
431
415
|
console.error("❌ Token refresh failed during bulk upload:", refreshError_3);
|
|
432
416
|
return [3 /*break*/, 9];
|
|
433
417
|
case 9:
|
|
434
|
-
|
|
418
|
+
error_5 = {
|
|
435
419
|
code: "BULK_UPLOAD_FAILED",
|
|
436
420
|
message: "Failed to upload files",
|
|
437
|
-
details:
|
|
421
|
+
details: err_5,
|
|
438
422
|
};
|
|
439
|
-
setError(
|
|
440
|
-
throw
|
|
423
|
+
setError(error_5);
|
|
424
|
+
throw error_5;
|
|
441
425
|
case 10:
|
|
442
426
|
setIsLoading(false);
|
|
443
427
|
return [7 /*endfinally*/];
|
|
@@ -446,7 +430,7 @@ export function TrainlyProvider(_a) {
|
|
|
446
430
|
});
|
|
447
431
|
}); };
|
|
448
432
|
var listFiles = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
449
|
-
var result,
|
|
433
|
+
var result, err_6, errorMessage, newToken, result, refreshError_4, error_6;
|
|
450
434
|
return __generator(this, function (_a) {
|
|
451
435
|
switch (_a.label) {
|
|
452
436
|
case 0:
|
|
@@ -458,8 +442,8 @@ export function TrainlyProvider(_a) {
|
|
|
458
442
|
result = _a.sent();
|
|
459
443
|
return [2 /*return*/, result];
|
|
460
444
|
case 2:
|
|
461
|
-
|
|
462
|
-
errorMessage =
|
|
445
|
+
err_6 = _a.sent();
|
|
446
|
+
errorMessage = err_6 instanceof Error ? err_6.message : String(err_6);
|
|
463
447
|
if (!(getToken &&
|
|
464
448
|
appId &&
|
|
465
449
|
(errorMessage.includes("401") ||
|
|
@@ -487,13 +471,13 @@ export function TrainlyProvider(_a) {
|
|
|
487
471
|
console.error("❌ Token refresh failed:", refreshError_4);
|
|
488
472
|
return [3 /*break*/, 9];
|
|
489
473
|
case 9:
|
|
490
|
-
|
|
474
|
+
error_6 = {
|
|
491
475
|
code: "LIST_FILES_FAILED",
|
|
492
476
|
message: "Failed to list files",
|
|
493
|
-
details:
|
|
477
|
+
details: err_6,
|
|
494
478
|
};
|
|
495
|
-
setError(
|
|
496
|
-
throw
|
|
479
|
+
setError(error_6);
|
|
480
|
+
throw error_6;
|
|
497
481
|
case 10:
|
|
498
482
|
setIsLoading(false);
|
|
499
483
|
return [7 /*endfinally*/];
|
|
@@ -502,7 +486,7 @@ export function TrainlyProvider(_a) {
|
|
|
502
486
|
});
|
|
503
487
|
}); };
|
|
504
488
|
var deleteFile = function (fileId) { return __awaiter(_this, void 0, void 0, function () {
|
|
505
|
-
var result,
|
|
489
|
+
var result, err_7, errorMessage, newToken, result, refreshError_5, error_7;
|
|
506
490
|
return __generator(this, function (_a) {
|
|
507
491
|
switch (_a.label) {
|
|
508
492
|
case 0:
|
|
@@ -514,8 +498,8 @@ export function TrainlyProvider(_a) {
|
|
|
514
498
|
result = _a.sent();
|
|
515
499
|
return [2 /*return*/, result];
|
|
516
500
|
case 2:
|
|
517
|
-
|
|
518
|
-
errorMessage =
|
|
501
|
+
err_7 = _a.sent();
|
|
502
|
+
errorMessage = err_7 instanceof Error ? err_7.message : String(err_7);
|
|
519
503
|
if (!(getToken &&
|
|
520
504
|
appId &&
|
|
521
505
|
(errorMessage.includes("401") ||
|
|
@@ -543,13 +527,13 @@ export function TrainlyProvider(_a) {
|
|
|
543
527
|
console.error("❌ Token refresh failed:", refreshError_5);
|
|
544
528
|
return [3 /*break*/, 9];
|
|
545
529
|
case 9:
|
|
546
|
-
|
|
530
|
+
error_7 = {
|
|
547
531
|
code: "DELETE_FILE_FAILED",
|
|
548
532
|
message: "Failed to delete file",
|
|
549
|
-
details:
|
|
533
|
+
details: err_7,
|
|
550
534
|
};
|
|
551
|
-
setError(
|
|
552
|
-
throw
|
|
535
|
+
setError(error_7);
|
|
536
|
+
throw error_7;
|
|
553
537
|
case 10:
|
|
554
538
|
setIsLoading(false);
|
|
555
539
|
return [7 /*endfinally*/];
|
|
@@ -558,7 +542,7 @@ export function TrainlyProvider(_a) {
|
|
|
558
542
|
});
|
|
559
543
|
}); };
|
|
560
544
|
var sendMessage = function (content) { return __awaiter(_this, void 0, void 0, function () {
|
|
561
|
-
var userMessage, response, assistantMessage_1,
|
|
545
|
+
var userMessage, response, assistantMessage_1, err_8;
|
|
562
546
|
return __generator(this, function (_a) {
|
|
563
547
|
switch (_a.label) {
|
|
564
548
|
case 0:
|
|
@@ -585,9 +569,9 @@ export function TrainlyProvider(_a) {
|
|
|
585
569
|
setMessages(function (prev) { return __spreadArray(__spreadArray([], prev, true), [assistantMessage_1], false); });
|
|
586
570
|
return [3 /*break*/, 4];
|
|
587
571
|
case 3:
|
|
588
|
-
|
|
572
|
+
err_8 = _a.sent();
|
|
589
573
|
// Error is already set by askWithCitations
|
|
590
|
-
console.error("Failed to send message:",
|
|
574
|
+
console.error("Failed to send message:", err_8);
|
|
591
575
|
return [3 /*break*/, 4];
|
|
592
576
|
case 4: return [2 /*return*/];
|
|
593
577
|
}
|
|
@@ -598,7 +582,7 @@ export function TrainlyProvider(_a) {
|
|
|
598
582
|
var clearMessages = function () { return setMessages([]); };
|
|
599
583
|
var value = {
|
|
600
584
|
ask: ask,
|
|
601
|
-
askWithCitations: askWithCitations,
|
|
585
|
+
askWithCitations: askWithCitations, // Deprecated - kept for backward compatibility
|
|
602
586
|
upload: upload,
|
|
603
587
|
bulkUploadFiles: bulkUploadFiles, // NEW: Bulk file upload method
|
|
604
588
|
listFiles: listFiles, // NEW: File management methods
|
|
@@ -5,10 +5,11 @@ export interface TrainlyChatProps {
|
|
|
5
5
|
showCitations?: boolean;
|
|
6
6
|
enableFileUpload?: boolean;
|
|
7
7
|
theme?: "light" | "dark" | "auto";
|
|
8
|
+
scopeFilters?: Record<string, string | number | boolean>;
|
|
8
9
|
onMessage?: (message: {
|
|
9
10
|
role: "user" | "assistant";
|
|
10
11
|
content: string;
|
|
11
12
|
}) => void;
|
|
12
13
|
onError?: (error: string) => void;
|
|
13
14
|
}
|
|
14
|
-
export declare function TrainlyChat({ height, className, placeholder, showCitations, enableFileUpload, theme, onMessage, onError, }: TrainlyChatProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export declare function TrainlyChat({ height, className, placeholder, showCitations, enableFileUpload, theme, scopeFilters, onMessage, onError, }: TrainlyChatProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -35,14 +35,26 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
35
35
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
39
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
40
|
+
if (ar || !(i in from)) {
|
|
41
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
42
|
+
ar[i] = from[i];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
46
|
+
};
|
|
38
47
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
39
48
|
import * as React from "react";
|
|
40
49
|
import { useTrainly } from "../useTrainly";
|
|
41
50
|
export function TrainlyChat(_a) {
|
|
42
51
|
var _this = this;
|
|
43
|
-
var _b = _a.height, height = _b === void 0 ? "400px" : _b, _c = _a.className, className = _c === void 0 ? "" : _c, _d = _a.placeholder, placeholder = _d === void 0 ? "Ask me anything..." : _d, _e = _a.showCitations, showCitations = _e === void 0 ? true : _e, _f = _a.enableFileUpload, enableFileUpload = _f === void 0 ? true : _f, _g = _a.theme, theme = _g === void 0 ? "auto" : _g, onMessage = _a.onMessage, onError = _a.onError;
|
|
44
|
-
var
|
|
45
|
-
var
|
|
52
|
+
var _b = _a.height, height = _b === void 0 ? "400px" : _b, _c = _a.className, className = _c === void 0 ? "" : _c, _d = _a.placeholder, placeholder = _d === void 0 ? "Ask me anything..." : _d, _e = _a.showCitations, showCitations = _e === void 0 ? true : _e, _f = _a.enableFileUpload, enableFileUpload = _f === void 0 ? true : _f, _g = _a.theme, theme = _g === void 0 ? "auto" : _g, scopeFilters = _a.scopeFilters, onMessage = _a.onMessage, onError = _a.onError;
|
|
53
|
+
var ask = useTrainly().ask;
|
|
54
|
+
var _h = React.useState(""), input = _h[0], setInput = _h[1];
|
|
55
|
+
var _j = React.useState([]), messages = _j[0], setMessages = _j[1];
|
|
56
|
+
var _k = React.useState(false), isLoading = _k[0], setIsLoading = _k[1];
|
|
57
|
+
var _l = React.useState(null), error = _l[0], setError = _l[1];
|
|
46
58
|
var messagesEndRef = React.useRef(null);
|
|
47
59
|
var fileInputRef = React.useRef(null);
|
|
48
60
|
// Auto-scroll to bottom
|
|
@@ -56,8 +68,9 @@ export function TrainlyChat(_a) {
|
|
|
56
68
|
onError(error.message);
|
|
57
69
|
}
|
|
58
70
|
}, [error, onError]);
|
|
71
|
+
var clearError = function () { return setError(null); };
|
|
59
72
|
var handleSubmit = function (e) { return __awaiter(_this, void 0, void 0, function () {
|
|
60
|
-
var messageContent, err_1;
|
|
73
|
+
var messageContent, userMessage, response, assistantMessage_1, err_1, errorMsg;
|
|
61
74
|
return __generator(this, function (_a) {
|
|
62
75
|
switch (_a.label) {
|
|
63
76
|
case 0:
|
|
@@ -66,19 +79,43 @@ export function TrainlyChat(_a) {
|
|
|
66
79
|
return [2 /*return*/];
|
|
67
80
|
messageContent = input.trim();
|
|
68
81
|
setInput("");
|
|
82
|
+
setError(null);
|
|
83
|
+
userMessage = {
|
|
84
|
+
id: Date.now().toString(),
|
|
85
|
+
role: "user",
|
|
86
|
+
content: messageContent,
|
|
87
|
+
};
|
|
88
|
+
setMessages(function (prev) { return __spreadArray(__spreadArray([], prev, true), [userMessage], false); });
|
|
89
|
+
onMessage === null || onMessage === void 0 ? void 0 : onMessage(userMessage);
|
|
90
|
+
setIsLoading(true);
|
|
69
91
|
_a.label = 1;
|
|
70
92
|
case 1:
|
|
71
|
-
_a.trys.push([1, 3, ,
|
|
72
|
-
return [4 /*yield*/,
|
|
93
|
+
_a.trys.push([1, 3, 4, 5]);
|
|
94
|
+
return [4 /*yield*/, ask(messageContent, {
|
|
95
|
+
includeCitations: showCitations,
|
|
96
|
+
scope_filters: scopeFilters,
|
|
97
|
+
})];
|
|
73
98
|
case 2:
|
|
74
|
-
_a.sent();
|
|
75
|
-
|
|
76
|
-
|
|
99
|
+
response = _a.sent();
|
|
100
|
+
assistantMessage_1 = {
|
|
101
|
+
id: (Date.now() + 1).toString(),
|
|
102
|
+
role: "assistant",
|
|
103
|
+
content: response.answer,
|
|
104
|
+
citations: response.citations,
|
|
105
|
+
};
|
|
106
|
+
setMessages(function (prev) { return __spreadArray(__spreadArray([], prev, true), [assistantMessage_1], false); });
|
|
107
|
+
onMessage === null || onMessage === void 0 ? void 0 : onMessage(assistantMessage_1);
|
|
108
|
+
return [3 /*break*/, 5];
|
|
77
109
|
case 3:
|
|
78
110
|
err_1 = _a.sent();
|
|
111
|
+
errorMsg = err_1 instanceof Error ? err_1.message : "Failed to send message";
|
|
112
|
+
setError({ message: errorMsg });
|
|
79
113
|
console.error("Failed to send message:", err_1);
|
|
80
|
-
return [3 /*break*/,
|
|
81
|
-
case 4:
|
|
114
|
+
return [3 /*break*/, 5];
|
|
115
|
+
case 4:
|
|
116
|
+
setIsLoading(false);
|
|
117
|
+
return [7 /*endfinally*/];
|
|
118
|
+
case 5: return [2 /*return*/];
|
|
82
119
|
}
|
|
83
120
|
});
|
|
84
121
|
}); };
|
package/dist/types.d.ts
CHANGED
|
@@ -88,7 +88,13 @@ export interface TrainlyFileManagerProps {
|
|
|
88
88
|
maxFileSize?: number;
|
|
89
89
|
}
|
|
90
90
|
export interface TrainlyContextValue {
|
|
91
|
-
ask: (question: string
|
|
91
|
+
ask: (question: string, options?: {
|
|
92
|
+
includeCitations?: boolean;
|
|
93
|
+
scope_filters?: Record<string, string | number | boolean>;
|
|
94
|
+
}) => Promise<{
|
|
95
|
+
answer: string;
|
|
96
|
+
citations?: Citation[];
|
|
97
|
+
}>;
|
|
92
98
|
askWithCitations: (question: string) => Promise<{
|
|
93
99
|
answer: string;
|
|
94
100
|
citations: Citation[];
|