@sinequa/assistant 3.6.2 → 3.7.0
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-message/chat-message.component.d.ts +4 -2
- package/chat/chat.component.d.ts +56 -17
- package/chat/chat.service.d.ts +23 -1
- package/chat/rest-chat.service.d.ts +1 -0
- package/chat/saved-chats/saved-chats.component.d.ts +2 -2
- package/chat/styles/assistant.scss +5 -0
- package/chat/types.d.ts +128 -3
- package/chat/websocket-chat.service.d.ts +6 -6
- package/esm2020/chat/chat-message/chat-message.component.mjs +9 -4
- package/esm2020/chat/chat-reference/chat-reference.component.mjs +3 -3
- package/esm2020/chat/chat.component.mjs +262 -60
- package/esm2020/chat/chat.service.mjs +49 -3
- package/esm2020/chat/debug-message/debug-message.component.mjs +3 -3
- package/esm2020/chat/rest-chat.service.mjs +8 -3
- package/esm2020/chat/saved-chats/saved-chats.component.mjs +16 -5
- package/esm2020/chat/token-progress-bar/token-progress-bar.component.mjs +3 -3
- package/esm2020/chat/types.mjs +11 -3
- package/esm2020/chat/websocket-chat.service.mjs +191 -99
- package/fesm2015/sinequa-assistant-chat.mjs +552 -178
- package/fesm2015/sinequa-assistant-chat.mjs.map +1 -1
- package/fesm2020/sinequa-assistant-chat.mjs +542 -175
- package/fesm2020/sinequa-assistant-chat.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef, AfterViewInit, ElementRef } from "@angular/core";
|
|
2
2
|
import { PrincipalWebService } from "@sinequa/core/web-services";
|
|
3
3
|
import { SearchService } from "@sinequa/components/search";
|
|
4
|
-
import { ChatContextAttachment, ChatMessage, SuggestedAction } from "../types";
|
|
4
|
+
import { ChatContextAttachment, ChatMessage, ChatStarter, SuggestedAction } from "../types";
|
|
5
5
|
import { Processor } from "unified";
|
|
6
6
|
import { Node } from "unist";
|
|
7
7
|
import { UIService } from "@sinequa/components/utils";
|
|
@@ -17,6 +17,7 @@ export declare class ChatMessageComponent implements OnChanges, AfterViewInit {
|
|
|
17
17
|
message: ChatMessage;
|
|
18
18
|
conversation: ChatMessage[];
|
|
19
19
|
suggestedActions: SuggestedAction[] | undefined;
|
|
20
|
+
chatStarters: ChatStarter[] | undefined;
|
|
20
21
|
assistantMessageIcon: string;
|
|
21
22
|
userMessageIcon: string;
|
|
22
23
|
connectionErrorMessageIcon: string;
|
|
@@ -37,6 +38,7 @@ export declare class ChatMessageComponent implements OnChanges, AfterViewInit {
|
|
|
37
38
|
partId?: number | undefined;
|
|
38
39
|
}>;
|
|
39
40
|
suggestAction: EventEmitter<SuggestedAction>;
|
|
41
|
+
chatStarterClicked: EventEmitter<ChatStarter>;
|
|
40
42
|
edit: EventEmitter<ChatMessage>;
|
|
41
43
|
copy: EventEmitter<ChatMessage>;
|
|
42
44
|
regenerate: EventEmitter<ChatMessage>;
|
|
@@ -79,5 +81,5 @@ export declare class ChatMessageComponent implements OnChanges, AfterViewInit {
|
|
|
79
81
|
openOriginalAttachment(attachment: ChatContextAttachment, partId?: number): void;
|
|
80
82
|
hideTooltip(): void;
|
|
81
83
|
static ɵfac: i0.ɵɵFactoryDeclaration<ChatMessageComponent, never>;
|
|
82
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ChatMessageComponent, "sq-chat-message", never, { "message": "message"; "conversation": "conversation"; "suggestedActions": "suggestedActions"; "assistantMessageIcon": "assistantMessageIcon"; "userMessageIcon": "userMessageIcon"; "connectionErrorMessageIcon": "connectionErrorMessageIcon"; "searchWarningMessageIcon": "searchWarningMessageIcon"; "streaming": "streaming"; "canEdit": "canEdit"; "canRegenerate": "canRegenerate"; "canCopy": "canCopy"; "canDebug": "canDebug"; "canLike": "canLike"; "canDislike": "canDislike"; }, { "openDocument": "openDocument"; "openPreview": "openPreview"; "suggestAction": "suggestAction"; "edit": "edit"; "copy": "copy"; "regenerate": "regenerate"; "like": "like"; "dislike": "dislike"; "debug": "debug"; }, never, never, true>;
|
|
84
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChatMessageComponent, "sq-chat-message", never, { "message": "message"; "conversation": "conversation"; "suggestedActions": "suggestedActions"; "chatStarters": "chatStarters"; "assistantMessageIcon": "assistantMessageIcon"; "userMessageIcon": "userMessageIcon"; "connectionErrorMessageIcon": "connectionErrorMessageIcon"; "searchWarningMessageIcon": "searchWarningMessageIcon"; "streaming": "streaming"; "canEdit": "canEdit"; "canRegenerate": "canRegenerate"; "canCopy": "canCopy"; "canDebug": "canDebug"; "canLike": "canLike"; "canDislike": "canDislike"; }, { "openDocument": "openDocument"; "openPreview": "openPreview"; "suggestAction": "suggestAction"; "chatStarterClicked": "chatStarterClicked"; "edit": "edit"; "copy": "copy"; "regenerate": "regenerate"; "like": "like"; "dislike": "dislike"; "debug": "debug"; }, never, never, true>;
|
|
83
85
|
}
|
package/chat/chat.component.d.ts
CHANGED
|
@@ -4,9 +4,9 @@ import { AbstractFacet } from "@sinequa/components/facet";
|
|
|
4
4
|
import { SearchService } from "@sinequa/components/search";
|
|
5
5
|
import { AppService, Query } from "@sinequa/core/app-utils";
|
|
6
6
|
import { PrincipalWebService } from "@sinequa/core/web-services";
|
|
7
|
-
import { BehaviorSubject
|
|
7
|
+
import { BehaviorSubject } from "rxjs";
|
|
8
8
|
import { ChatService } from "./chat.service";
|
|
9
|
-
import { ChatContextAttachment, ChatConfig, ChatMessage, GllmModelDescription, MessageHandler, RawMessage, SuggestedAction, InitChat, DebugMessage } from "./types";
|
|
9
|
+
import { ChatContextAttachment, ChatConfig, ChatMessage, GllmModelDescription, MessageHandler, RawMessage, SuggestedAction, InitChat, DebugMessage, ChatStarter } from "./types";
|
|
10
10
|
import { InstanceManagerService } from "./instance-manager.service";
|
|
11
11
|
import { WebSocketChatService } from "./websocket-chat.service";
|
|
12
12
|
import { LoginService } from "@sinequa/core/login";
|
|
@@ -945,6 +945,8 @@ export declare class ChatComponent extends AbstractFacet implements OnInit, OnCh
|
|
|
945
945
|
messageHandlers: Map<string, MessageHandler<any>>;
|
|
946
946
|
/** When the assistant answer a user question, automatically scroll down to the bottom of the discussion */
|
|
947
947
|
automaticScrollToLastResponse: boolean;
|
|
948
|
+
/** When the assistant answer a user question, automatically focus to the chat input */
|
|
949
|
+
focusAfterResponse: boolean;
|
|
948
950
|
/** A chat discussion that the component should get initialized with it */
|
|
949
951
|
chat?: InitChat;
|
|
950
952
|
/** Icon to use for the assistant messages */
|
|
@@ -1073,10 +1075,12 @@ export declare class ChatComponent extends AbstractFacet implements OnInit, OnCh
|
|
|
1073
1075
|
openPreview: EventEmitter<ChatContextAttachment>;
|
|
1074
1076
|
/** Event emitter triggered when the user clicks on a suggested action */
|
|
1075
1077
|
suggestAction: EventEmitter<SuggestedAction>;
|
|
1078
|
+
/** Event emitter triggered when the user clicks on a chat starter */
|
|
1079
|
+
chatStarter: EventEmitter<ChatStarter>;
|
|
1076
1080
|
messageList?: ElementRef<HTMLUListElement>;
|
|
1077
1081
|
questionInput?: ElementRef<HTMLTextAreaElement>;
|
|
1078
1082
|
loadingTpl?: TemplateRef<any>;
|
|
1079
|
-
|
|
1083
|
+
reportTpl?: TemplateRef<any>;
|
|
1080
1084
|
tokenConsumptionTpl?: TemplateRef<any>;
|
|
1081
1085
|
debugMessagesTpl?: TemplateRef<any>;
|
|
1082
1086
|
chatService: ChatService;
|
|
@@ -1084,11 +1088,13 @@ export declare class ChatComponent extends AbstractFacet implements OnInit, OnCh
|
|
|
1084
1088
|
messages$: BehaviorSubject<ChatMessage[] | undefined>;
|
|
1085
1089
|
question: string;
|
|
1086
1090
|
_actions: Action[];
|
|
1087
|
-
|
|
1088
|
-
|
|
1091
|
+
private _resetChatAction;
|
|
1092
|
+
private _sub;
|
|
1093
|
+
private _dataSubscription;
|
|
1089
1094
|
/** Variables that depend on the type of model in use */
|
|
1090
1095
|
modelDescription?: GllmModelDescription;
|
|
1091
1096
|
messageToEdit?: number;
|
|
1097
|
+
remappedMessageToEdit?: number;
|
|
1092
1098
|
changes$: BehaviorSubject<SimpleChanges | undefined>;
|
|
1093
1099
|
currentMessageIndex: number | undefined;
|
|
1094
1100
|
firstChangesHandled: boolean;
|
|
@@ -1101,18 +1107,21 @@ export declare class ChatComponent extends AbstractFacet implements OnInit, OnCh
|
|
|
1101
1107
|
issueTypes?: string[];
|
|
1102
1108
|
defaultIssueTypes: string[];
|
|
1103
1109
|
issueType: string;
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1110
|
+
reportComment?: string;
|
|
1111
|
+
messageToReport?: ChatMessage;
|
|
1112
|
+
reportRank?: number;
|
|
1113
|
+
reportType: 'like' | 'dislike';
|
|
1114
|
+
showReport: boolean;
|
|
1108
1115
|
debugMessages: DebugMessage[] | undefined;
|
|
1109
1116
|
showDebugMessages: boolean;
|
|
1110
1117
|
private _previousQuery;
|
|
1118
|
+
private _reloadSubscription;
|
|
1111
1119
|
constructor();
|
|
1112
1120
|
ngOnInit(): void;
|
|
1113
1121
|
ngOnChanges(changes: SimpleChanges): void;
|
|
1114
1122
|
ngOnDestroy(): void;
|
|
1115
1123
|
get isAdmin(): boolean;
|
|
1124
|
+
get visibleMessagesCount(): number;
|
|
1116
1125
|
/**
|
|
1117
1126
|
* Instantiate the chat service based on the provided @input protocol
|
|
1118
1127
|
* This chat service instance will then be stored in the instanceManagerService with provided @input instanceId as a key
|
|
@@ -1184,6 +1193,7 @@ export declare class ChatComponent extends AbstractFacet implements OnInit, OnCh
|
|
|
1184
1193
|
*/
|
|
1185
1194
|
resetChat(): void;
|
|
1186
1195
|
onLoadChat(): void;
|
|
1196
|
+
stopGeneration(): void;
|
|
1187
1197
|
terminateFetch(): void;
|
|
1188
1198
|
/**
|
|
1189
1199
|
* Copy a previous user message of the chat history to the chat user input.
|
|
@@ -1204,28 +1214,37 @@ export declare class ChatComponent extends AbstractFacet implements OnInit, OnCh
|
|
|
1204
1214
|
* @param index The index of the assistant's message to regenerate
|
|
1205
1215
|
*/
|
|
1206
1216
|
regenerateMessage(index: number): void;
|
|
1217
|
+
/**
|
|
1218
|
+
* Remaps the index in the chat history.
|
|
1219
|
+
* The chat history is a list of messages where some messages can be hidden (display set to false).
|
|
1220
|
+
* The index provided as input is the index of the message in the chat history displayed in the UI.
|
|
1221
|
+
* This function should be removed once the backend is updated to add the ids of the messages in the chat history
|
|
1222
|
+
* @param index - The index to be remapped.
|
|
1223
|
+
*/
|
|
1224
|
+
private _remapIndexInChatHistory;
|
|
1207
1225
|
onKeyUp(event: KeyboardEvent): void;
|
|
1208
1226
|
calculateHeight(event?: KeyboardEvent): void;
|
|
1209
1227
|
/**
|
|
1210
1228
|
* Send a "like" event on clicking on the thumb-up icon of an assistant's message
|
|
1229
|
+
* @param message The assistant message to like
|
|
1211
1230
|
* @param rank The rank of the message to like
|
|
1212
1231
|
*/
|
|
1213
|
-
onLike(rank: number): void;
|
|
1232
|
+
onLike(message: ChatMessage, rank: number): void;
|
|
1214
1233
|
/**
|
|
1215
1234
|
* Send a "dislike" event on clicking on the thumb-down icon of an assistant's message.
|
|
1216
1235
|
* It also opens the issue reporting dialog.
|
|
1217
1236
|
* @param message The assistant message to dislike
|
|
1218
|
-
* @param
|
|
1237
|
+
* @param index The rank of the message to dislike
|
|
1219
1238
|
*/
|
|
1220
1239
|
onDislike(message: ChatMessage, rank: number): void;
|
|
1221
1240
|
/**
|
|
1222
1241
|
* Report an issue related to the assistant's message.
|
|
1223
1242
|
*/
|
|
1224
|
-
|
|
1243
|
+
sendReport(): void;
|
|
1225
1244
|
/**
|
|
1226
|
-
* Close the
|
|
1245
|
+
* Close the reporting dialog.
|
|
1227
1246
|
*/
|
|
1228
|
-
|
|
1247
|
+
ignoreReport(): void;
|
|
1229
1248
|
/**
|
|
1230
1249
|
* Handle the click on a reference's 'open preview'.
|
|
1231
1250
|
* @param data
|
|
@@ -1248,11 +1267,31 @@ export declare class ChatComponent extends AbstractFacet implements OnInit, OnCh
|
|
|
1248
1267
|
* @param index Rank of the message in the chatHistory related to the suggested action.
|
|
1249
1268
|
*/
|
|
1250
1269
|
suggestActionClick(action: SuggestedAction, index: number): void;
|
|
1270
|
+
/**
|
|
1271
|
+
* Handle the click on a chat starter.
|
|
1272
|
+
* @param starter the chat starter.
|
|
1273
|
+
*/
|
|
1274
|
+
chatStarterClick(starter: ChatStarter): void;
|
|
1275
|
+
/**
|
|
1276
|
+
* It looks for the debug messages available in the current group of "assistant" messages.
|
|
1277
|
+
* By design, the debug messages are only available in the first visible message among the group "assistant" messages.
|
|
1278
|
+
* @param index The rank of the message
|
|
1279
|
+
* @returns The debug messages available in the current group of "assistant" messages
|
|
1280
|
+
*/
|
|
1281
|
+
getDebugMessages(index: number): DebugMessage[];
|
|
1251
1282
|
/**
|
|
1252
1283
|
* Handle the click on the 'show log info' button of a message.
|
|
1253
|
-
* @param
|
|
1284
|
+
* @param index The rank of the message
|
|
1285
|
+
*/
|
|
1286
|
+
showDebug(index: number): void;
|
|
1287
|
+
/**
|
|
1288
|
+
* Verify whether the current message is an assistant message and that all following messages are assistant ones
|
|
1289
|
+
* Used to keep the "View progress" opened even though the assistant is sending additional messages after the current one
|
|
1290
|
+
* @param messages the list of current messages
|
|
1291
|
+
* @param index the index of the current message
|
|
1292
|
+
* @returns if this messages and the following ones (if any) are the last ones
|
|
1254
1293
|
*/
|
|
1255
|
-
|
|
1294
|
+
isAssistantLastMessages(messages: ChatMessage[], index: number): boolean;
|
|
1256
1295
|
static ɵfac: i0.ɵɵFactoryDeclaration<ChatComponent, never>;
|
|
1257
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ChatComponent, "sq-chat-v3", never, { "instanceId": "instanceId"; "query": "query"; "queryChangeShouldTriggerReload": "queryChangeShouldTriggerReload"; "protocol": "protocol"; "messageHandlers": "messageHandlers"; "automaticScrollToLastResponse": "automaticScrollToLastResponse"; "chat": "chat"; "assistantMessageIcon": "assistantMessageIcon"; "userMessageIcon": "userMessageIcon"; "connectionErrorMessageIcon": "connectionErrorMessageIcon"; "searchWarningMessageIcon": "searchWarningMessageIcon"; }, { "connection": "connection"; "loading$": "loading"; "_config": "config"; "data": "data"; "openDocument": "openDocument"; "openPreview": "openPreview"; "suggestAction": "suggestAction"; }, ["loadingTpl", "
|
|
1296
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChatComponent, "sq-chat-v3", never, { "instanceId": "instanceId"; "query": "query"; "queryChangeShouldTriggerReload": "queryChangeShouldTriggerReload"; "protocol": "protocol"; "messageHandlers": "messageHandlers"; "automaticScrollToLastResponse": "automaticScrollToLastResponse"; "focusAfterResponse": "focusAfterResponse"; "chat": "chat"; "assistantMessageIcon": "assistantMessageIcon"; "userMessageIcon": "userMessageIcon"; "connectionErrorMessageIcon": "connectionErrorMessageIcon"; "searchWarningMessageIcon": "searchWarningMessageIcon"; }, { "connection": "connection"; "loading$": "loading"; "_config": "config"; "data": "data"; "openDocument": "openDocument"; "openPreview": "openPreview"; "suggestAction": "suggestAction"; "chatStarter": "chatStarter"; }, ["loadingTpl", "reportTpl", "tokenConsumptionTpl", "debugMessagesTpl"], never, true>;
|
|
1258
1297
|
}
|
package/chat/chat.service.d.ts
CHANGED
|
@@ -17,7 +17,11 @@ export declare abstract class ChatService {
|
|
|
17
17
|
initConfig$: BehaviorSubject<boolean>;
|
|
18
18
|
/** Global configuration of the chat. */
|
|
19
19
|
chatConfig$: BehaviorSubject<ChatConfig | undefined>;
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Emit true if the fetch of an assistant's response is ongoing (it includes Streaming status of the chat endpoint AND saving the discussion if save Chat is enabled).
|
|
22
|
+
* This is used to prevent multiple fetches at the same time.
|
|
23
|
+
* Typically, there is no problem chaining fetches, but when forcing a reload after query changes cases, it can't be allowed because it breaks the whole business logic.
|
|
24
|
+
*/
|
|
21
25
|
streaming$: BehaviorSubject<boolean>;
|
|
22
26
|
/** Store the messages history of the current chat. */
|
|
23
27
|
chatHistory: ChatMessage[] | undefined;
|
|
@@ -37,6 +41,8 @@ export declare abstract class ChatService {
|
|
|
37
41
|
chatUsageMetrics$: BehaviorSubject<ChatUsageMetrics | undefined>;
|
|
38
42
|
/** Emit the calculated chat's token consumption based on the chat usage metrics. */
|
|
39
43
|
chatTokenConsumption$: BehaviorSubject<TokenConsumption | undefined>;
|
|
44
|
+
/** Emit true if "CancelTasks" is ongoing. */
|
|
45
|
+
stoppingGeneration$: BehaviorSubject<boolean>;
|
|
40
46
|
/** Instance ID of the chat service defining the assistant instance. */
|
|
41
47
|
private _chatInstanceId;
|
|
42
48
|
/** ID of the current **saved chat** discussion which is used to update/get/delete it. */
|
|
@@ -126,6 +132,10 @@ export declare abstract class ChatService {
|
|
|
126
132
|
* Return the list of functions available on the server AND matching enabled functions in the chat config
|
|
127
133
|
*/
|
|
128
134
|
abstract listFunctions(): Observable<GllmFunction[] | undefined>;
|
|
135
|
+
/**
|
|
136
|
+
* Stops the assistant answer generation and cancels all the ongoing and pending related tasks
|
|
137
|
+
*/
|
|
138
|
+
abstract stopGeneration(): Observable<any>;
|
|
129
139
|
/**
|
|
130
140
|
* A handler for quota updates each time the chat is invoked.
|
|
131
141
|
* It emits the updated quota to the quota$ subject, emits accordingly the updated user's tokens consumption and notifies the user if the max quota is reached.
|
|
@@ -183,6 +193,18 @@ export declare abstract class ChatService {
|
|
|
183
193
|
* @param id Actions (savedChat delete/rename/...) may occur on a specific chat different than the current one stored in this service, so the chat id can be provided
|
|
184
194
|
*/
|
|
185
195
|
generateAuditEvent(type: string, details: Record<string, any>, id?: string): void;
|
|
196
|
+
/**
|
|
197
|
+
* Traverse the array from the end and track the first 'assistant' message among the last group of "assistant" messages where display is true
|
|
198
|
+
* @param array The array of ChatMessage to traverse
|
|
199
|
+
* @returns The index of the first visible assistant message among the last group of "assistant" messages in the array
|
|
200
|
+
*/
|
|
201
|
+
firstVisibleAssistantMessageIndex(array: ChatMessage[] | undefined): number;
|
|
202
|
+
/**
|
|
203
|
+
* Traverse the array from the end and pick the last 'assistant' message among the last group of "assistant" messages where display is true
|
|
204
|
+
* @param array The array of ChatMessage to traverse
|
|
205
|
+
* @returns The index of the last visible assistant message among the last group of "assistant" messages in the array
|
|
206
|
+
*/
|
|
207
|
+
lastVisibleAssistantMessageIndex(array: ChatMessage[] | undefined): number;
|
|
186
208
|
/**
|
|
187
209
|
* Format a date string in UTC to a local date string
|
|
188
210
|
* @param value Date string in UTC to format
|
|
@@ -21,6 +21,7 @@ export declare class RestChatService extends ChatService {
|
|
|
21
21
|
listModels(): Observable<GllmModelDescription[] | undefined>;
|
|
22
22
|
listFunctions(): Observable<GllmFunction[] | undefined>;
|
|
23
23
|
fetch(messages: ChatMessage[], query: Query): Observable<ChatResponse>;
|
|
24
|
+
stopGeneration(): Observable<any>;
|
|
24
25
|
listSavedChat(): void;
|
|
25
26
|
addSavedChat(messages: ChatMessage[]): Observable<SavedChat>;
|
|
26
27
|
getSavedChat(id: string): Observable<SavedChatHistory | undefined>;
|
|
@@ -27,8 +27,8 @@ export declare class SavedChatsComponent implements OnInit, OnDestroy {
|
|
|
27
27
|
instantiateChatService(): void;
|
|
28
28
|
onListSavedChat(): void;
|
|
29
29
|
onLoad(savedChat: SavedChat): void;
|
|
30
|
-
onRename(savedChat: SavedChat): void;
|
|
31
|
-
onDelete(savedChat: SavedChat): void;
|
|
30
|
+
onRename(event: Event, savedChat: SavedChat): void;
|
|
31
|
+
onDelete(event: Event, savedChat: SavedChat): void;
|
|
32
32
|
private _groupSavedChatsByDate;
|
|
33
33
|
private _getTimeKey;
|
|
34
34
|
static ɵfac: i0.ɵɵFactoryDeclaration<SavedChatsComponent, never>;
|
|
@@ -33,6 +33,8 @@ $ast-saved-chat-hover-background: var(--ast-saved-chat-hover-background, #FFF8F1
|
|
|
33
33
|
$ast-input-bg: var(--ast-input-bg, #F8F8F8);
|
|
34
34
|
$ast-input-color: var(--ast-input-color, #B0B0B0);
|
|
35
35
|
$ast-muted-color: var(--ast-muted-color, rgba(33, 37, 41, 0.75));
|
|
36
|
+
$ast-action-buttons-color: var(--ast-action-buttons-color, #212529);
|
|
37
|
+
$ast-action-buttons-hover-color: var(--ast-action-buttons-hover-color, var(--ast-primary-color, #005DA7));
|
|
36
38
|
|
|
37
39
|
/****************************************************
|
|
38
40
|
classes
|
|
@@ -58,6 +60,7 @@ $ast-muted-color: var(--ast-muted-color, rgba(33, 37, 41, 0.75));
|
|
|
58
60
|
|
|
59
61
|
.ast-error {
|
|
60
62
|
background-color: $ast-error-bg;
|
|
63
|
+
color: var(--ast-action-buttons-color, inherit);
|
|
61
64
|
|
|
62
65
|
&:hover {
|
|
63
66
|
color: $ast-error-color;
|
|
@@ -90,4 +93,6 @@ $ast-muted-color: var(--ast-muted-color, rgba(33, 37, 41, 0.75));
|
|
|
90
93
|
--ast-reference-passages-color: white;
|
|
91
94
|
--ast-reference-expanded-hover-bg: #262421;
|
|
92
95
|
--ast-message-reference-color: black;
|
|
96
|
+
--ast-action-buttons-color: white;
|
|
97
|
+
--ast-action-buttons-hover-color: #6dbee6;
|
|
93
98
|
}
|
package/chat/types.d.ts
CHANGED
|
@@ -71,7 +71,7 @@ export interface ChatContextAttachment extends RawAttachment {
|
|
|
71
71
|
*/
|
|
72
72
|
export interface RawResponse {
|
|
73
73
|
history: RawMessage[];
|
|
74
|
-
executionTime: string;
|
|
74
|
+
executionTime: string | undefined;
|
|
75
75
|
}
|
|
76
76
|
/**
|
|
77
77
|
* Enriched response of the chat API
|
|
@@ -126,30 +126,35 @@ export declare const connectionSettingsSchema: z.ZodEffects<z.ZodObject<{
|
|
|
126
126
|
websocketEndpoint: z.ZodOptional<z.ZodString>;
|
|
127
127
|
signalRTransport: z.ZodEnum<["WebSockets", "ServerSentEvents", "LongPolling", "None"]>;
|
|
128
128
|
signalRLogLevel: z.ZodEnum<["Critical", "Debug", "Error", "Information", "None", "Trace", "Warning"]>;
|
|
129
|
+
signalRServerTimeoutInMilliseconds: z.ZodOptional<z.ZodNumber>;
|
|
129
130
|
}, "strip", z.ZodTypeAny, {
|
|
130
131
|
connectionErrorMessage: string;
|
|
131
132
|
signalRTransport: "None" | "WebSockets" | "ServerSentEvents" | "LongPolling";
|
|
132
133
|
signalRLogLevel: "None" | "Critical" | "Debug" | "Error" | "Information" | "Trace" | "Warning";
|
|
133
134
|
restEndpoint?: string | undefined;
|
|
134
135
|
websocketEndpoint?: string | undefined;
|
|
136
|
+
signalRServerTimeoutInMilliseconds?: number | undefined;
|
|
135
137
|
}, {
|
|
136
138
|
connectionErrorMessage: string;
|
|
137
139
|
signalRTransport: "None" | "WebSockets" | "ServerSentEvents" | "LongPolling";
|
|
138
140
|
signalRLogLevel: "None" | "Critical" | "Debug" | "Error" | "Information" | "Trace" | "Warning";
|
|
139
141
|
restEndpoint?: string | undefined;
|
|
140
142
|
websocketEndpoint?: string | undefined;
|
|
143
|
+
signalRServerTimeoutInMilliseconds?: number | undefined;
|
|
141
144
|
}>, {
|
|
142
145
|
connectionErrorMessage: string;
|
|
143
146
|
signalRTransport: "None" | "WebSockets" | "ServerSentEvents" | "LongPolling";
|
|
144
147
|
signalRLogLevel: "None" | "Critical" | "Debug" | "Error" | "Information" | "Trace" | "Warning";
|
|
145
148
|
restEndpoint?: string | undefined;
|
|
146
149
|
websocketEndpoint?: string | undefined;
|
|
150
|
+
signalRServerTimeoutInMilliseconds?: number | undefined;
|
|
147
151
|
}, {
|
|
148
152
|
connectionErrorMessage: string;
|
|
149
153
|
signalRTransport: "None" | "WebSockets" | "ServerSentEvents" | "LongPolling";
|
|
150
154
|
signalRLogLevel: "None" | "Critical" | "Debug" | "Error" | "Information" | "Trace" | "Warning";
|
|
151
155
|
restEndpoint?: string | undefined;
|
|
152
156
|
websocketEndpoint?: string | undefined;
|
|
157
|
+
signalRServerTimeoutInMilliseconds?: number | undefined;
|
|
153
158
|
}>;
|
|
154
159
|
export declare type ConnectionSettings = z.infer<typeof connectionSettingsSchema>;
|
|
155
160
|
declare const serviceSettingsSchema: z.ZodObject<{
|
|
@@ -212,6 +217,15 @@ declare const uiSettingsSchema: z.ZodObject<{
|
|
|
212
217
|
}>;
|
|
213
218
|
export interface UiSettings extends z.infer<typeof uiSettingsSchema> {
|
|
214
219
|
}
|
|
220
|
+
declare const chatStarterSchema: z.ZodObject<{
|
|
221
|
+
text: z.ZodString;
|
|
222
|
+
}, "strip", z.ZodTypeAny, {
|
|
223
|
+
text: string;
|
|
224
|
+
}, {
|
|
225
|
+
text: string;
|
|
226
|
+
}>;
|
|
227
|
+
export interface ChatStarter extends z.infer<typeof chatStarterSchema> {
|
|
228
|
+
}
|
|
215
229
|
declare const defaultValuesSchema: z.ZodObject<{
|
|
216
230
|
service_id: z.ZodString;
|
|
217
231
|
model_id: z.ZodString;
|
|
@@ -260,7 +274,7 @@ declare const defaultValuesSchema: z.ZodObject<{
|
|
|
260
274
|
}>;
|
|
261
275
|
export interface DefaultValues extends z.infer<typeof defaultValuesSchema> {
|
|
262
276
|
}
|
|
263
|
-
declare const modeSettingsSchema: z.ZodObject<{
|
|
277
|
+
declare const modeSettingsSchema: z.ZodEffects<z.ZodObject<{
|
|
264
278
|
enabledUserInput: z.ZodBoolean;
|
|
265
279
|
displayUserPrompt: z.ZodBoolean;
|
|
266
280
|
sendUserPrompt: z.ZodBoolean;
|
|
@@ -268,22 +282,41 @@ declare const modeSettingsSchema: z.ZodObject<{
|
|
|
268
282
|
event: z.ZodEnum<["Query", "Prompt"]>;
|
|
269
283
|
forcedWorkflow: z.ZodOptional<z.ZodString>;
|
|
270
284
|
displayUserQuery: z.ZodOptional<z.ZodBoolean>;
|
|
285
|
+
chatStarters: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
286
|
+
text: z.ZodString;
|
|
287
|
+
}, "strip", z.ZodTypeAny, {
|
|
288
|
+
text: string;
|
|
289
|
+
}, {
|
|
290
|
+
text: string;
|
|
291
|
+
}>, "many">>;
|
|
271
292
|
}, "strip", z.ZodTypeAny, {
|
|
272
293
|
event: "Query" | "Prompt";
|
|
273
294
|
forcedWorkflow?: string | undefined;
|
|
274
295
|
displayUserQuery?: boolean | undefined;
|
|
296
|
+
chatStarters?: {
|
|
297
|
+
text: string;
|
|
298
|
+
}[] | undefined;
|
|
275
299
|
}, {
|
|
276
300
|
event: "Query" | "Prompt";
|
|
277
301
|
forcedWorkflow?: string | undefined;
|
|
278
302
|
displayUserQuery?: boolean | undefined;
|
|
303
|
+
chatStarters?: {
|
|
304
|
+
text: string;
|
|
305
|
+
}[] | undefined;
|
|
279
306
|
}>, {
|
|
280
307
|
event: "Query" | "Prompt";
|
|
281
308
|
forcedWorkflow?: string | undefined;
|
|
282
309
|
displayUserQuery?: boolean | undefined;
|
|
310
|
+
chatStarters?: {
|
|
311
|
+
text: string;
|
|
312
|
+
}[] | undefined;
|
|
283
313
|
}, {
|
|
284
314
|
event: "Query" | "Prompt";
|
|
285
315
|
forcedWorkflow?: string | undefined;
|
|
286
316
|
displayUserQuery?: boolean | undefined;
|
|
317
|
+
chatStarters?: {
|
|
318
|
+
text: string;
|
|
319
|
+
}[] | undefined;
|
|
287
320
|
}>;
|
|
288
321
|
}, "strip", z.ZodTypeAny, {
|
|
289
322
|
displayUserPrompt: boolean;
|
|
@@ -293,6 +326,9 @@ declare const modeSettingsSchema: z.ZodObject<{
|
|
|
293
326
|
event: "Query" | "Prompt";
|
|
294
327
|
forcedWorkflow?: string | undefined;
|
|
295
328
|
displayUserQuery?: boolean | undefined;
|
|
329
|
+
chatStarters?: {
|
|
330
|
+
text: string;
|
|
331
|
+
}[] | undefined;
|
|
296
332
|
};
|
|
297
333
|
}, {
|
|
298
334
|
displayUserPrompt: boolean;
|
|
@@ -302,6 +338,33 @@ declare const modeSettingsSchema: z.ZodObject<{
|
|
|
302
338
|
event: "Query" | "Prompt";
|
|
303
339
|
forcedWorkflow?: string | undefined;
|
|
304
340
|
displayUserQuery?: boolean | undefined;
|
|
341
|
+
chatStarters?: {
|
|
342
|
+
text: string;
|
|
343
|
+
}[] | undefined;
|
|
344
|
+
};
|
|
345
|
+
}>, {
|
|
346
|
+
displayUserPrompt: boolean;
|
|
347
|
+
enabledUserInput: boolean;
|
|
348
|
+
sendUserPrompt: boolean;
|
|
349
|
+
initialization: {
|
|
350
|
+
event: "Query" | "Prompt";
|
|
351
|
+
forcedWorkflow?: string | undefined;
|
|
352
|
+
displayUserQuery?: boolean | undefined;
|
|
353
|
+
chatStarters?: {
|
|
354
|
+
text: string;
|
|
355
|
+
}[] | undefined;
|
|
356
|
+
};
|
|
357
|
+
}, {
|
|
358
|
+
displayUserPrompt: boolean;
|
|
359
|
+
enabledUserInput: boolean;
|
|
360
|
+
sendUserPrompt: boolean;
|
|
361
|
+
initialization: {
|
|
362
|
+
event: "Query" | "Prompt";
|
|
363
|
+
forcedWorkflow?: string | undefined;
|
|
364
|
+
displayUserQuery?: boolean | undefined;
|
|
365
|
+
chatStarters?: {
|
|
366
|
+
text: string;
|
|
367
|
+
}[] | undefined;
|
|
305
368
|
};
|
|
306
369
|
}>;
|
|
307
370
|
export interface ModeSettings extends z.infer<typeof modeSettingsSchema> {
|
|
@@ -327,30 +390,35 @@ export declare const chatConfigSchema: z.ZodObject<{
|
|
|
327
390
|
websocketEndpoint: z.ZodOptional<z.ZodString>;
|
|
328
391
|
signalRTransport: z.ZodEnum<["WebSockets", "ServerSentEvents", "LongPolling", "None"]>;
|
|
329
392
|
signalRLogLevel: z.ZodEnum<["Critical", "Debug", "Error", "Information", "None", "Trace", "Warning"]>;
|
|
393
|
+
signalRServerTimeoutInMilliseconds: z.ZodOptional<z.ZodNumber>;
|
|
330
394
|
}, "strip", z.ZodTypeAny, {
|
|
331
395
|
connectionErrorMessage: string;
|
|
332
396
|
signalRTransport: "None" | "WebSockets" | "ServerSentEvents" | "LongPolling";
|
|
333
397
|
signalRLogLevel: "None" | "Critical" | "Debug" | "Error" | "Information" | "Trace" | "Warning";
|
|
334
398
|
restEndpoint?: string | undefined;
|
|
335
399
|
websocketEndpoint?: string | undefined;
|
|
400
|
+
signalRServerTimeoutInMilliseconds?: number | undefined;
|
|
336
401
|
}, {
|
|
337
402
|
connectionErrorMessage: string;
|
|
338
403
|
signalRTransport: "None" | "WebSockets" | "ServerSentEvents" | "LongPolling";
|
|
339
404
|
signalRLogLevel: "None" | "Critical" | "Debug" | "Error" | "Information" | "Trace" | "Warning";
|
|
340
405
|
restEndpoint?: string | undefined;
|
|
341
406
|
websocketEndpoint?: string | undefined;
|
|
407
|
+
signalRServerTimeoutInMilliseconds?: number | undefined;
|
|
342
408
|
}>, {
|
|
343
409
|
connectionErrorMessage: string;
|
|
344
410
|
signalRTransport: "None" | "WebSockets" | "ServerSentEvents" | "LongPolling";
|
|
345
411
|
signalRLogLevel: "None" | "Critical" | "Debug" | "Error" | "Information" | "Trace" | "Warning";
|
|
346
412
|
restEndpoint?: string | undefined;
|
|
347
413
|
websocketEndpoint?: string | undefined;
|
|
414
|
+
signalRServerTimeoutInMilliseconds?: number | undefined;
|
|
348
415
|
}, {
|
|
349
416
|
connectionErrorMessage: string;
|
|
350
417
|
signalRTransport: "None" | "WebSockets" | "ServerSentEvents" | "LongPolling";
|
|
351
418
|
signalRLogLevel: "None" | "Critical" | "Debug" | "Error" | "Information" | "Trace" | "Warning";
|
|
352
419
|
restEndpoint?: string | undefined;
|
|
353
420
|
websocketEndpoint?: string | undefined;
|
|
421
|
+
signalRServerTimeoutInMilliseconds?: number | undefined;
|
|
354
422
|
}>;
|
|
355
423
|
defaultValues: z.ZodObject<{
|
|
356
424
|
service_id: z.ZodString;
|
|
@@ -398,7 +466,7 @@ export declare const chatConfigSchema: z.ZodObject<{
|
|
|
398
466
|
systemPrompt: string;
|
|
399
467
|
userPrompt: string;
|
|
400
468
|
}>;
|
|
401
|
-
modeSettings: z.ZodObject<{
|
|
469
|
+
modeSettings: z.ZodEffects<z.ZodObject<{
|
|
402
470
|
enabledUserInput: z.ZodBoolean;
|
|
403
471
|
displayUserPrompt: z.ZodBoolean;
|
|
404
472
|
sendUserPrompt: z.ZodBoolean;
|
|
@@ -406,22 +474,41 @@ export declare const chatConfigSchema: z.ZodObject<{
|
|
|
406
474
|
event: z.ZodEnum<["Query", "Prompt"]>;
|
|
407
475
|
forcedWorkflow: z.ZodOptional<z.ZodString>;
|
|
408
476
|
displayUserQuery: z.ZodOptional<z.ZodBoolean>;
|
|
477
|
+
chatStarters: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
478
|
+
text: z.ZodString;
|
|
479
|
+
}, "strip", z.ZodTypeAny, {
|
|
480
|
+
text: string;
|
|
481
|
+
}, {
|
|
482
|
+
text: string;
|
|
483
|
+
}>, "many">>;
|
|
409
484
|
}, "strip", z.ZodTypeAny, {
|
|
410
485
|
event: "Query" | "Prompt";
|
|
411
486
|
forcedWorkflow?: string | undefined;
|
|
412
487
|
displayUserQuery?: boolean | undefined;
|
|
488
|
+
chatStarters?: {
|
|
489
|
+
text: string;
|
|
490
|
+
}[] | undefined;
|
|
413
491
|
}, {
|
|
414
492
|
event: "Query" | "Prompt";
|
|
415
493
|
forcedWorkflow?: string | undefined;
|
|
416
494
|
displayUserQuery?: boolean | undefined;
|
|
495
|
+
chatStarters?: {
|
|
496
|
+
text: string;
|
|
497
|
+
}[] | undefined;
|
|
417
498
|
}>, {
|
|
418
499
|
event: "Query" | "Prompt";
|
|
419
500
|
forcedWorkflow?: string | undefined;
|
|
420
501
|
displayUserQuery?: boolean | undefined;
|
|
502
|
+
chatStarters?: {
|
|
503
|
+
text: string;
|
|
504
|
+
}[] | undefined;
|
|
421
505
|
}, {
|
|
422
506
|
event: "Query" | "Prompt";
|
|
423
507
|
forcedWorkflow?: string | undefined;
|
|
424
508
|
displayUserQuery?: boolean | undefined;
|
|
509
|
+
chatStarters?: {
|
|
510
|
+
text: string;
|
|
511
|
+
}[] | undefined;
|
|
425
512
|
}>;
|
|
426
513
|
}, "strip", z.ZodTypeAny, {
|
|
427
514
|
displayUserPrompt: boolean;
|
|
@@ -431,6 +518,33 @@ export declare const chatConfigSchema: z.ZodObject<{
|
|
|
431
518
|
event: "Query" | "Prompt";
|
|
432
519
|
forcedWorkflow?: string | undefined;
|
|
433
520
|
displayUserQuery?: boolean | undefined;
|
|
521
|
+
chatStarters?: {
|
|
522
|
+
text: string;
|
|
523
|
+
}[] | undefined;
|
|
524
|
+
};
|
|
525
|
+
}, {
|
|
526
|
+
displayUserPrompt: boolean;
|
|
527
|
+
enabledUserInput: boolean;
|
|
528
|
+
sendUserPrompt: boolean;
|
|
529
|
+
initialization: {
|
|
530
|
+
event: "Query" | "Prompt";
|
|
531
|
+
forcedWorkflow?: string | undefined;
|
|
532
|
+
displayUserQuery?: boolean | undefined;
|
|
533
|
+
chatStarters?: {
|
|
534
|
+
text: string;
|
|
535
|
+
}[] | undefined;
|
|
536
|
+
};
|
|
537
|
+
}>, {
|
|
538
|
+
displayUserPrompt: boolean;
|
|
539
|
+
enabledUserInput: boolean;
|
|
540
|
+
sendUserPrompt: boolean;
|
|
541
|
+
initialization: {
|
|
542
|
+
event: "Query" | "Prompt";
|
|
543
|
+
forcedWorkflow?: string | undefined;
|
|
544
|
+
displayUserQuery?: boolean | undefined;
|
|
545
|
+
chatStarters?: {
|
|
546
|
+
text: string;
|
|
547
|
+
}[] | undefined;
|
|
434
548
|
};
|
|
435
549
|
}, {
|
|
436
550
|
displayUserPrompt: boolean;
|
|
@@ -440,6 +554,9 @@ export declare const chatConfigSchema: z.ZodObject<{
|
|
|
440
554
|
event: "Query" | "Prompt";
|
|
441
555
|
forcedWorkflow?: string | undefined;
|
|
442
556
|
displayUserQuery?: boolean | undefined;
|
|
557
|
+
chatStarters?: {
|
|
558
|
+
text: string;
|
|
559
|
+
}[] | undefined;
|
|
443
560
|
};
|
|
444
561
|
}>;
|
|
445
562
|
uiSettings: z.ZodObject<{
|
|
@@ -519,6 +636,7 @@ export declare const chatConfigSchema: z.ZodObject<{
|
|
|
519
636
|
signalRLogLevel: "None" | "Critical" | "Debug" | "Error" | "Information" | "Trace" | "Warning";
|
|
520
637
|
restEndpoint?: string | undefined;
|
|
521
638
|
websocketEndpoint?: string | undefined;
|
|
639
|
+
signalRServerTimeoutInMilliseconds?: number | undefined;
|
|
522
640
|
};
|
|
523
641
|
defaultValues: {
|
|
524
642
|
debug: boolean;
|
|
@@ -542,6 +660,9 @@ export declare const chatConfigSchema: z.ZodObject<{
|
|
|
542
660
|
event: "Query" | "Prompt";
|
|
543
661
|
forcedWorkflow?: string | undefined;
|
|
544
662
|
displayUserQuery?: boolean | undefined;
|
|
663
|
+
chatStarters?: {
|
|
664
|
+
text: string;
|
|
665
|
+
}[] | undefined;
|
|
545
666
|
};
|
|
546
667
|
};
|
|
547
668
|
uiSettings: {
|
|
@@ -578,6 +699,7 @@ export declare const chatConfigSchema: z.ZodObject<{
|
|
|
578
699
|
signalRLogLevel: "None" | "Critical" | "Debug" | "Error" | "Information" | "Trace" | "Warning";
|
|
579
700
|
restEndpoint?: string | undefined;
|
|
580
701
|
websocketEndpoint?: string | undefined;
|
|
702
|
+
signalRServerTimeoutInMilliseconds?: number | undefined;
|
|
581
703
|
};
|
|
582
704
|
defaultValues: {
|
|
583
705
|
debug: boolean;
|
|
@@ -601,6 +723,9 @@ export declare const chatConfigSchema: z.ZodObject<{
|
|
|
601
723
|
event: "Query" | "Prompt";
|
|
602
724
|
forcedWorkflow?: string | undefined;
|
|
603
725
|
displayUserQuery?: boolean | undefined;
|
|
726
|
+
chatStarters?: {
|
|
727
|
+
text: string;
|
|
728
|
+
}[] | undefined;
|
|
604
729
|
};
|
|
605
730
|
};
|
|
606
731
|
uiSettings: {
|
|
@@ -9,12 +9,11 @@ import * as i0 from "@angular/core";
|
|
|
9
9
|
export declare class WebSocketChatService extends ChatService {
|
|
10
10
|
connection: HubConnection | undefined;
|
|
11
11
|
private _messageHandlers;
|
|
12
|
+
private _response;
|
|
12
13
|
private _actionMap;
|
|
13
14
|
private _progress;
|
|
14
|
-
private _content;
|
|
15
15
|
private _executionTime;
|
|
16
16
|
private _attachments;
|
|
17
|
-
private _suggestedActions;
|
|
18
17
|
private _debugMessages;
|
|
19
18
|
signalRService: SignalRWebService;
|
|
20
19
|
authenticationService: AuthenticationService;
|
|
@@ -34,6 +33,7 @@ export declare class WebSocketChatService extends ChatService {
|
|
|
34
33
|
listModels(): Observable<GllmModelDescription[] | undefined>;
|
|
35
34
|
listFunctions(): Observable<GllmFunction[] | undefined>;
|
|
36
35
|
fetch(messages: ChatMessage[], query: Query): Observable<ChatResponse>;
|
|
36
|
+
stopGeneration(): Observable<boolean>;
|
|
37
37
|
listSavedChat(): void;
|
|
38
38
|
getSavedChat(id: string): Observable<SavedChatHistory | undefined>;
|
|
39
39
|
addSavedChat(messages: ChatMessage[]): Observable<SavedChat>;
|
|
@@ -41,7 +41,7 @@ export declare class WebSocketChatService extends ChatService {
|
|
|
41
41
|
deleteSavedChat(ids: string[]): Observable<number>;
|
|
42
42
|
/**
|
|
43
43
|
* Initialize out-of-the-box handlers
|
|
44
|
-
* It is a placeholder for non-streaming scenarios, where you invoke a specific hub method, and the server responds with
|
|
44
|
+
* It is a placeholder for non-streaming scenarios, where you invoke a specific hub method, and the server responds with frame message(s)
|
|
45
45
|
*/
|
|
46
46
|
initMessageHandlers(): void;
|
|
47
47
|
/**
|
|
@@ -52,7 +52,7 @@ export declare class WebSocketChatService extends ChatService {
|
|
|
52
52
|
/**
|
|
53
53
|
* Add a listener for a specific event.
|
|
54
54
|
* If a listener for this same event already exists, it will be overridden.
|
|
55
|
-
* If the listener has "
|
|
55
|
+
* If the listener has "isGlobalHandler" set to true, it will be registered to the hub connection.
|
|
56
56
|
* @param eventName Name of the event to register a listener for
|
|
57
57
|
* @param eventHandler The handler to be called when the event is received
|
|
58
58
|
*/
|
|
@@ -93,8 +93,8 @@ export declare class WebSocketChatService extends ChatService {
|
|
|
93
93
|
* @returns Promise that resolves when the connection is stopped
|
|
94
94
|
*/
|
|
95
95
|
stopConnection(): Promise<void>;
|
|
96
|
-
private
|
|
97
|
-
private
|
|
96
|
+
private _getTransports;
|
|
97
|
+
private _getLogLevel;
|
|
98
98
|
get defaultOptions(): ConnectionOptions;
|
|
99
99
|
static ɵfac: i0.ɵɵFactoryDeclaration<WebSocketChatService, never>;
|
|
100
100
|
static ɵprov: i0.ɵɵInjectableDeclaration<WebSocketChatService>;
|