@sinequa/assistant 3.9.2 → 3.9.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/chat/chat.component.d.ts +35 -38
- package/chat/chat.service.d.ts +190 -84
- package/chat/debug-message/debug-message-details/debug-message-details.component.d.ts +19 -0
- package/chat/debug-message/debug-message.component.d.ts +9 -12
- package/chat/debug-message/debug-message.service.d.ts +15 -0
- package/chat/documents-upload/document-list/document-list.component.d.ts +1 -0
- package/chat/public-api.d.ts +0 -2
- package/chat/saved-chats/i18n/en.json +1 -1
- package/chat/saved-chats/i18n/fr.json +1 -1
- package/chat/saved-chats/saved-chats.component.d.ts +1 -0
- package/chat/saved-chats/saved-chats.service.d.ts +27 -0
- package/chat/services/assistant-configuration.service.d.ts +34 -0
- package/chat/services/assistant-metadata.service.d.ts +18 -0
- package/chat/services/assistant-tokens-tracking.service.d.ts +23 -0
- package/chat/services/assistant-ws-frames.service.d.ts +50 -0
- package/chat/services/signalR-connection.service.d.ts +25 -0
- package/chat/types.d.ts +12 -3
- package/chat/utils/utils.service.d.ts +67 -0
- package/esm2022/chat/chat.component.mjs +198 -227
- package/esm2022/chat/chat.service.mjs +450 -267
- package/esm2022/chat/debug-message/debug-message-details/debug-message-details.component.mjs +43 -0
- package/esm2022/chat/debug-message/debug-message.component.mjs +27 -30
- package/esm2022/chat/debug-message/debug-message.service.mjs +52 -0
- package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +6 -5
- package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +4 -2
- package/esm2022/chat/public-api.mjs +1 -3
- package/esm2022/chat/saved-chats/saved-chats.component.mjs +11 -10
- package/esm2022/chat/saved-chats/saved-chats.service.mjs +165 -0
- package/esm2022/chat/services/assistant-configuration.service.mjs +171 -0
- package/esm2022/chat/services/assistant-metadata.service.mjs +67 -0
- package/esm2022/chat/services/assistant-tokens-tracking.service.mjs +57 -0
- package/esm2022/chat/services/assistant-ws-frames.service.mjs +392 -0
- package/esm2022/chat/services/signalR-connection.service.mjs +109 -0
- package/esm2022/chat/types.mjs +1 -1
- package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +2 -3
- package/esm2022/chat/utils/utils.service.mjs +170 -0
- package/fesm2022/sinequa-assistant-chat.mjs +2020 -1648
- package/fesm2022/sinequa-assistant-chat.mjs.map +1 -1
- package/package.json +1 -1
- package/chat/rest-chat.service.d.ts +0 -31
- package/chat/websocket-chat.service.d.ts +0 -102
- package/esm2022/chat/rest-chat.service.mjs +0 -300
- package/esm2022/chat/websocket-chat.service.mjs +0 -659
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { throwError, from } from 'rxjs';
|
|
3
|
+
import { catchError, map, tap } from 'rxjs/operators';
|
|
4
|
+
import { get } from '@sinequa/atomic';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class AssistantMetadataService {
|
|
7
|
+
init(context) {
|
|
8
|
+
if (this.context) {
|
|
9
|
+
console.warn('AssistantMetadataService already initialized.');
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
this.context = context;
|
|
13
|
+
}
|
|
14
|
+
ensureInitialized() {
|
|
15
|
+
if (!this.context) {
|
|
16
|
+
throw new Error('AssistantMetadataService not initialized. Call init() first.');
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
listModels() {
|
|
20
|
+
this.ensureInitialized();
|
|
21
|
+
const context = this.context;
|
|
22
|
+
const assistantConfig = context.getAssistantConfigValue();
|
|
23
|
+
const data = {
|
|
24
|
+
action: "listmodels",
|
|
25
|
+
debug: assistantConfig.defaultValues.debug.toString()
|
|
26
|
+
};
|
|
27
|
+
const searchParams = new URLSearchParams(Object.entries(data).reduce((acc, [key, value]) => {
|
|
28
|
+
acc[key] = typeof value === 'string' ? value : JSON.stringify(value);
|
|
29
|
+
return acc;
|
|
30
|
+
}, {}));
|
|
31
|
+
return from(get(`plugin/${context.getRestUrl()}`, searchParams))
|
|
32
|
+
.pipe(map(res => res?.models), tap(models => context.setModels(models?.filter(model => !!model.enable))), catchError((error) => {
|
|
33
|
+
console.error('Error invoking listmodels:', error);
|
|
34
|
+
return throwError(() => error);
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
listFunctions() {
|
|
38
|
+
this.ensureInitialized();
|
|
39
|
+
const context = this.context;
|
|
40
|
+
const assistantConfig = context.getAssistantConfigValue();
|
|
41
|
+
const data = {
|
|
42
|
+
action: "listfunctions",
|
|
43
|
+
debug: assistantConfig.defaultValues.debug.toString()
|
|
44
|
+
};
|
|
45
|
+
const searchParams = new URLSearchParams(Object.entries(data).reduce((acc, [key, value]) => {
|
|
46
|
+
acc[key] = typeof value === 'string' ? value : JSON.stringify(value);
|
|
47
|
+
return acc;
|
|
48
|
+
}, {}));
|
|
49
|
+
return from(get(`plugin/${context.getRestUrl()}`, searchParams))
|
|
50
|
+
.pipe(map(res => res?.functions), tap((functions) => {
|
|
51
|
+
const enabledConfigFunctions = assistantConfig.defaultValues.functions;
|
|
52
|
+
context.setFunctions(functions?.filter(func => func.enabled && !!enabledConfigFunctions.find(fn => fn.name === func.functionName)));
|
|
53
|
+
}), catchError((error) => {
|
|
54
|
+
console.error('Error invoking listfunctions:', error);
|
|
55
|
+
return throwError(() => error);
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantMetadataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
59
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantMetadataService, providedIn: 'root' }); }
|
|
60
|
+
}
|
|
61
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantMetadataService, decorators: [{
|
|
62
|
+
type: Injectable,
|
|
63
|
+
args: [{
|
|
64
|
+
providedIn: 'root'
|
|
65
|
+
}]
|
|
66
|
+
}] });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaXN0YW50LW1ldGFkYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9zZXJ2aWNlcy9hc3Npc3RhbnQtbWV0YWRhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFjdEMsTUFBTSxPQUFPLHdCQUF3QjtJQUc1QixJQUFJLENBQUMsT0FBMEM7UUFDcEQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1lBQzlELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztRQUNsRixDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBUSxDQUFDO1FBQzlCLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBRTFELE1BQU0sSUFBSSxHQUFHO1lBQ1gsTUFBTSxFQUFFLFlBQVk7WUFDcEIsS0FBSyxFQUFFLGVBQWdCLENBQUMsYUFBYSxDQUFDLEtB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QVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7K0dBckVVLHdCQUF3QjttSEFBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzRGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGdldCB9IGZyb20gJ0BzaW5lcXVhL2F0b21pYyc7XG5cbmltcG9ydCB7IENoYXRDb25maWcsIEdsbG1Nb2RlbERlc2NyaXB0aW9uLCBHbGxtRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXNzaXN0YW50TWV0YWRhdGFPcGVyYXRpb25Db250ZXh0IHtcbiAgZ2V0UmVzdFVybDogKCkgPT4gc3RyaW5nO1xuICBnZXRBc3Npc3RhbnRDb25maWdWYWx1ZTogKCkgPT4gQ2hhdENvbmZpZyB8IHVuZGVmaW5lZDtcbiAgc2V0TW9kZWxzOiAobW9kZWxzOiBHbGxtTW9kZWxEZXNjcmlwdGlvbltdIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuICBzZXRGdW5jdGlvbnM6IChmdW5jdGlvbnM6IEdsbG1GdW5jdGlvbltdIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2Uge1xuICBwcml2YXRlIGNvbnRleHQ6IEFzc2lzdGFudE1ldGFkYXRhT3BlcmF0aW9uQ29udGV4dCB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgaW5pdChjb250ZXh0OiBBc3Npc3RhbnRNZXRhZGF0YU9wZXJhdGlvbkNvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0Fzc2lzdGFudE1ldGFkYXRhU2VydmljZSBhbHJlYWR5IGluaXRpYWxpemVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVJbml0aWFsaXplZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2Ugbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBmaXJzdC4nKTtcbiAgICB9XG4gIH1cblxuICBsaXN0TW9kZWxzKCk6IE9ic2VydmFibGU8R2xsbU1vZGVsRGVzY3JpcHRpb25bXSB8IHVuZGVmaW5lZD4ge1xuICAgIHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0ITtcbiAgICBjb25zdCBhc3Npc3RhbnRDb25maWcgPSBjb250ZXh0LmdldEFzc2lzdGFudENvbmZpZ1ZhbHVlKCk7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImxpc3Rtb2RlbHNcIixcbiAgICAgIGRlYnVnOiBhc3Npc3RhbnRDb25maWchLmRlZmF1bHRWYWx1ZXMuZGVidWcudG9TdHJpbmcoKVxuICAgIH07XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhPYmplY3QuZW50cmllcyhkYXRhKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBhY2Nba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPikpO1xuXG4gICAgcmV0dXJuIGZyb20oZ2V0PHsgbW9kZWxzOiBHbGxtTW9kZWxEZXNjcmlwdGlvbltdIHwgdW5kZWZpbmVkIH0+KGBwbHVnaW4vJHtjb250ZXh0LmdldFJlc3RVcmwoKX1gLCBzZWFyY2hQYXJhbXMpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzPy5tb2RlbHMpLFxuICAgICAgICB0YXAobW9kZWxzID0+IGNvbnRleHQuc2V0TW9kZWxzKG1vZGVscz8uZmlsdGVyKG1vZGVsID0+ICEhbW9kZWwuZW5hYmxlKSkpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGludm9raW5nIGxpc3Rtb2RlbHM6JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBsaXN0RnVuY3Rpb25zKCk6IE9ic2VydmFibGU8R2xsbUZ1bmN0aW9uW10gfCB1bmRlZmluZWQ+IHtcbiAgICB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dCE7XG4gICAgY29uc3QgYXNzaXN0YW50Q29uZmlnID0gY29udGV4dC5nZXRBc3Npc3RhbnRDb25maWdWYWx1ZSgpO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFjdGlvbjogXCJsaXN0ZnVuY3Rpb25zXCIsXG4gICAgICBkZWJ1ZzogYXNzaXN0YW50Q29uZmlnIS5kZWZhdWx0VmFsdWVzLmRlYnVnLnRvU3RyaW5nKClcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhPYmplY3QuZW50cmllcyhkYXRhKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBhY2Nba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPikpO1xuXG4gICAgcmV0dXJuIGZyb20oZ2V0PHsgZnVuY3Rpb25zOiBHbGxtRnVuY3Rpb25bXSB8IHVuZGVmaW5lZCB9PihgcGx1Z2luLyR7Y29udGV4dC5nZXRSZXN0VXJsKCl9YCwgc2VhcmNoUGFyYW1zKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHJlcz8uZnVuY3Rpb25zKSxcbiAgICAgICAgdGFwKChmdW5jdGlvbnM6IEdsbG1GdW5jdGlvbltdIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbmFibGVkQ29uZmlnRnVuY3Rpb25zID0gYXNzaXN0YW50Q29uZmlnIS5kZWZhdWx0VmFsdWVzLmZ1bmN0aW9ucztcbiAgICAgICAgICAgIGNvbnRleHQuc2V0RnVuY3Rpb25zKGZ1bmN0aW9ucz8uZmlsdGVyKGZ1bmMgPT4gZnVuYy5lbmFibGVkICYmICEhZW5hYmxlZENvbmZpZ0Z1bmN0aW9ucy5maW5kKGZuID0+IGZuLm5hbWUgPT09IGZ1bmMuZnVuY3Rpb25OYW1lKSkpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbnZva2luZyBsaXN0ZnVuY3Rpb25zOicsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Injectable, inject } from '@angular/core';
|
|
2
|
+
import { AssistantUtils } from '../utils/utils.service';
|
|
3
|
+
import { NotificationsService } from './notification.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class AssistantTokensTrackingService {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.assistantUtils = inject(AssistantUtils);
|
|
8
|
+
this.notificationsService = inject(NotificationsService);
|
|
9
|
+
}
|
|
10
|
+
init(context) {
|
|
11
|
+
if (this.context) {
|
|
12
|
+
console.warn('AssistantTokensTrackingService already initialized.');
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
this.context = context;
|
|
16
|
+
}
|
|
17
|
+
ensureInitialized() {
|
|
18
|
+
if (!this.context) {
|
|
19
|
+
throw new Error('AssistantTokensTrackingService not initialized. Call init() first.');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
updateQuota(quota, propagateError = false) {
|
|
23
|
+
this.ensureInitialized();
|
|
24
|
+
const context = this.context;
|
|
25
|
+
context.setQuota(quota);
|
|
26
|
+
const nextResetDate = this.assistantUtils.formatDateTime(quota.nextResetUTC + "+00:00");
|
|
27
|
+
const consumptionPercentage = Math.round((quota.tokenCount * 100 / quota.periodTokens) * 100) / 100;
|
|
28
|
+
context.setUserTokenConsumption({ percentage: consumptionPercentage, nextResetDate });
|
|
29
|
+
if (quota.maxQuotaReached) {
|
|
30
|
+
context.generateAuditEvent('ast-quota.exceeded', {});
|
|
31
|
+
const msg = `Sorry, you have exceeded the allowed quota. Please retry starting from ${nextResetDate}.`;
|
|
32
|
+
this.notificationsService.error(msg);
|
|
33
|
+
if (propagateError)
|
|
34
|
+
throw new Error(msg);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
updateChatUsageMetrics(chatUsageMetrics) {
|
|
38
|
+
this.ensureInitialized();
|
|
39
|
+
const context = this.context;
|
|
40
|
+
const assistantConfig = context.getAssistantConfigValue();
|
|
41
|
+
context.setChatUsageMetrics(chatUsageMetrics);
|
|
42
|
+
const currentModel = context.getModel(assistantConfig.defaultValues.service_id, assistantConfig.defaultValues.model_id);
|
|
43
|
+
if (currentModel) {
|
|
44
|
+
const consumptionPercentage = Math.round((chatUsageMetrics.totalTokenCount * 100 / (currentModel.contextWindowSize - currentModel.maxGenerationSize)) * 100) / 100;
|
|
45
|
+
context.setChatTokenConsumption({ percentage: consumptionPercentage });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantTokensTrackingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
49
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantTokensTrackingService, providedIn: 'root' }); }
|
|
50
|
+
}
|
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantTokensTrackingService, decorators: [{
|
|
52
|
+
type: Injectable,
|
|
53
|
+
args: [{
|
|
54
|
+
providedIn: 'root'
|
|
55
|
+
}]
|
|
56
|
+
}], ctorParameters: () => [] });
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaXN0YW50LXRva2Vucy10cmFja2luZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvc2VydmljZXMvYXNzaXN0YW50LXRva2Vucy10cmFja2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBVW5ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFlOUQsTUFBTSxPQUFPLDhCQUE4QjtJQUt6QztRQUhRLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLHlCQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRTdDLENBQUM7SUFFVCxJQUFJLENBQUMsT0FBZ0Q7UUFDMUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQ3BFLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztRQUN4RixDQUFDO0lBQ0gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUFZLEVBQUUsY0FBYyxHQUFHLEtBQUs7UUFDckQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQztRQUU5QixPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDeEYsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwRyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUV0RixJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckQsTUFBTSxHQUFHLEdBQUcsMEVBQTBFLGFBQWEsR0FBRyxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxjQUFjO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxnQkFBa0M7UUFDOUQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQztRQUM5QixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUUxRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5QyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWdCLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxlQUFnQixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUxSCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDbkssT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQzsrR0FsRFUsOEJBQThCO21IQUE5Qiw4QkFBOEIsY0FGN0IsTUFBTTs7NEZBRVAsOEJBQThCO2tCQUgxQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBDaGF0Q29uZmlnLFxuICBDaGF0VXNhZ2VNZXRyaWNzLFxuICBHbGxtTW9kZWxEZXNjcmlwdGlvbixcbiAgUXVvdGEsXG4gIFRva2VuQ29uc3VtcHRpb24sXG4gIFVzZXJUb2tlbkNvbnN1bXB0aW9uXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEFzc2lzdGFudFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gJy4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2lzdGFudFRva2Vuc1RyYWNraW5nT3BlcmF0aW9uQ29udGV4dCB7XG4gIGdldEFzc2lzdGFudENvbmZpZ1ZhbHVlOiAoKSA9PiBDaGF0Q29uZmlnIHwgdW5kZWZpbmVkO1xuICBzZXRRdW90YTogKHF1b3RhOiBRdW90YSB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbiAgc2V0VXNlclRva2VuQ29uc3VtcHRpb246IChjb25zdW1wdGlvbjogVXNlclRva2VuQ29uc3VtcHRpb24gfCB1bmRlZmluZWQpID0+IHZvaWQ7XG4gIHNldENoYXRVc2FnZU1ldHJpY3M6IChtZXRyaWNzOiBDaGF0VXNhZ2VNZXRyaWNzIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuICBzZXRDaGF0VG9rZW5Db25zdW1wdGlvbjogKGNvbnN1bXB0aW9uOiBUb2tlbkNvbnN1bXB0aW9uIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuICBnZW5lcmF0ZUF1ZGl0RXZlbnQ6ICh0eXBlOiBzdHJpbmcsIGRldGFpbHM6IFJlY29yZDxzdHJpbmcsIGFueT4sIGlkPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRNb2RlbDogKHNlcnZpY2VJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcpID0+IEdsbG1Nb2RlbERlc2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2Uge1xuICBwcml2YXRlIGNvbnRleHQ6IEFzc2lzdGFudFRva2Vuc1RyYWNraW5nT3BlcmF0aW9uQ29udGV4dCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBhc3Npc3RhbnRVdGlscyA9IGluamVjdChBc3Npc3RhbnRVdGlscyk7XG4gIHByaXZhdGUgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgaW5pdChjb250ZXh0OiBBc3Npc3RhbnRUb2tlbnNUcmFja2luZ09wZXJhdGlvbkNvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0Fzc2lzdGFudFRva2Vuc1RyYWNraW5nU2VydmljZSBhbHJlYWR5IGluaXRpYWxpemVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVJbml0aWFsaXplZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2Ugbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBmaXJzdC4nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUXVvdGEocXVvdGE6IFF1b3RhLCBwcm9wYWdhdGVFcnJvciA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQhO1xuXG4gICAgY29udGV4dC5zZXRRdW90YShxdW90YSk7XG4gICAgY29uc3QgbmV4dFJlc2V0RGF0ZSA9IHRoaXMuYXNzaXN0YW50VXRpbHMuZm9ybWF0RGF0ZVRpbWUocXVvdGEubmV4dFJlc2V0VVRDICsgXCIrMDA6MDBcIik7XG4gICAgY29uc3QgY29uc3VtcHRpb25QZXJjZW50YWdlID0gTWF0aC5yb3VuZCgocXVvdGEudG9rZW5Db3VudCAqIDEwMCAvIHF1b3RhLnBlcmlvZFRva2VucykgKiAxMDApIC8gMTAwO1xuICAgIGNvbnRleHQuc2V0VXNlclRva2VuQ29uc3VtcHRpb24oeyBwZXJjZW50YWdlOiBjb25zdW1wdGlvblBlcmNlbnRhZ2UsIG5leHRSZXNldERhdGUgfSk7XG5cbiAgICBpZiAocXVvdGEubWF4UXVvdGFSZWFjaGVkKSB7XG4gICAgICBjb250ZXh0LmdlbmVyYXRlQXVkaXRFdmVudCgnYXN0LXF1b3RhLmV4Y2VlZGVkJywge30pO1xuICAgICAgY29uc3QgbXNnID0gYFNvcnJ5LCB5b3UgaGF2ZSBleGNlZWRlZCB0aGUgYWxsb3dlZCBxdW90YS4gUGxlYXNlIHJldHJ5IHN0YXJ0aW5nIGZyb20gJHtuZXh0UmVzZXREYXRlfS5gO1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcihtc2cpO1xuICAgICAgaWYgKHByb3BhZ2F0ZUVycm9yKSB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQ2hhdFVzYWdlTWV0cmljcyhjaGF0VXNhZ2VNZXRyaWNzOiBDaGF0VXNhZ2VNZXRyaWNzKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQhO1xuICAgIGNvbnN0IGFzc2lzdGFudENvbmZpZyA9IGNvbnRleHQuZ2V0QXNzaXN0YW50Q29uZmlnVmFsdWUoKTtcblxuICAgIGNvbnRleHQuc2V0Q2hhdFVzYWdlTWV0cmljcyhjaGF0VXNhZ2VNZXRyaWNzKTtcbiAgICBjb25zdCBjdXJyZW50TW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKGFzc2lzdGFudENvbmZpZyEuZGVmYXVsdFZhbHVlcy5zZXJ2aWNlX2lkLCBhc3Npc3RhbnRDb25maWchLmRlZmF1bHRWYWx1ZXMubW9kZWxfaWQpO1xuXG4gICAgaWYgKGN1cnJlbnRNb2RlbCkge1xuICAgICAgY29uc3QgY29uc3VtcHRpb25QZXJjZW50YWdlID0gTWF0aC5yb3VuZCgoY2hhdFVzYWdlTWV0cmljcy50b3RhbFRva2VuQ291bnQgKiAxMDAgLyAoY3VycmVudE1vZGVsLmNvbnRleHRXaW5kb3dTaXplIC0gY3VycmVudE1vZGVsLm1heEdlbmVyYXRpb25TaXplKSkgKiAxMDApIC8gMTAwO1xuICAgICAgY29udGV4dC5zZXRDaGF0VG9rZW5Db25zdW1wdGlvbih7IHBlcmNlbnRhZ2U6IGNvbnN1bXB0aW9uUGVyY2VudGFnZSB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|