@sinequa/assistant 3.1.1

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 (53) hide show
  1. package/chat/chat-message/chat-message.component.d.ts +157 -0
  2. package/chat/chat-reference/chat-reference.component.d.ts +118 -0
  3. package/chat/chat-settings-v3/chat-settings-v3.component.d.ts +41 -0
  4. package/chat/chat.component.d.ts +1112 -0
  5. package/chat/chat.service.d.ts +1046 -0
  6. package/chat/format-icon/format-icon.component.d.ts +10 -0
  7. package/chat/format-icon/icons.d.ts +5 -0
  8. package/chat/index.d.ts +5 -0
  9. package/chat/initials-avatar/initials-avatar.component.d.ts +35 -0
  10. package/chat/instance-manager.service.d.ts +28 -0
  11. package/chat/messages/de.d.ts +4 -0
  12. package/chat/messages/en.d.ts +4 -0
  13. package/chat/messages/fr.d.ts +4 -0
  14. package/chat/messages/index.d.ts +4 -0
  15. package/chat/public-api.d.ts +11 -0
  16. package/chat/rest-chat.service.d.ts +28 -0
  17. package/chat/saved-chats/saved-chats.component.d.ts +37 -0
  18. package/chat/styles/assistant.scss +61 -0
  19. package/chat/styles/references.scss +23 -0
  20. package/chat/types.d.ts +1241 -0
  21. package/chat/websocket-chat.service.d.ts +97 -0
  22. package/esm2020/chat/chat-message/chat-message.component.mjs +181 -0
  23. package/esm2020/chat/chat-reference/chat-reference.component.mjs +40 -0
  24. package/esm2020/chat/chat-settings-v3/chat-settings-v3.component.mjs +103 -0
  25. package/esm2020/chat/chat.component.mjs +369 -0
  26. package/esm2020/chat/chat.service.mjs +185 -0
  27. package/esm2020/chat/format-icon/format-icon.component.mjs +23 -0
  28. package/esm2020/chat/format-icon/icons.mjs +138 -0
  29. package/esm2020/chat/initials-avatar/initials-avatar.component.mjs +60 -0
  30. package/esm2020/chat/instance-manager.service.mjs +46 -0
  31. package/esm2020/chat/messages/de.mjs +4 -0
  32. package/esm2020/chat/messages/en.mjs +4 -0
  33. package/esm2020/chat/messages/fr.mjs +4 -0
  34. package/esm2020/chat/messages/index.mjs +9 -0
  35. package/esm2020/chat/public-api.mjs +12 -0
  36. package/esm2020/chat/rest-chat.service.mjs +164 -0
  37. package/esm2020/chat/saved-chats/saved-chats.component.mjs +132 -0
  38. package/esm2020/chat/sinequa-assistant-chat.mjs +5 -0
  39. package/esm2020/chat/types.mjs +85 -0
  40. package/esm2020/chat/websocket-chat.service.mjs +430 -0
  41. package/esm2020/public-api.mjs +3 -0
  42. package/esm2020/sinequa-assistant.mjs +5 -0
  43. package/fesm2015/sinequa-assistant-chat.mjs +1925 -0
  44. package/fesm2015/sinequa-assistant-chat.mjs.map +1 -0
  45. package/fesm2015/sinequa-assistant.mjs +9 -0
  46. package/fesm2015/sinequa-assistant.mjs.map +1 -0
  47. package/fesm2020/sinequa-assistant-chat.mjs +1911 -0
  48. package/fesm2020/sinequa-assistant-chat.mjs.map +1 -0
  49. package/fesm2020/sinequa-assistant.mjs +9 -0
  50. package/fesm2020/sinequa-assistant.mjs.map +1 -0
  51. package/index.d.ts +5 -0
  52. package/package.json +46 -0
  53. package/public-api.d.ts +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sinequa-assistant-chat.mjs","sources":["../../../projects/assistant/chat/instance-manager.service.ts","../../../projects/assistant/chat/chat-settings-v3/chat-settings-v3.component.ts","../../../projects/assistant/chat/chat-settings-v3/chat-settings-v3.component.html","../../../projects/assistant/chat/types.ts","../../../projects/assistant/chat/chat.service.ts","../../../projects/assistant/chat/websocket-chat.service.ts","../../../projects/assistant/chat/initials-avatar/initials-avatar.component.ts","../../../projects/assistant/chat/initials-avatar/initials-avatar.component.html","../../../projects/assistant/chat/format-icon/icons.ts","../../../projects/assistant/chat/format-icon/format-icon.component.ts","../../../projects/assistant/chat/format-icon/format-icon.component.html","../../../projects/assistant/chat/chat-reference/chat-reference.component.ts","../../../projects/assistant/chat/chat-reference/chat-reference.component.html","../../../projects/assistant/chat/chat-message/chat-message.component.ts","../../../projects/assistant/chat/chat-message/chat-message.component.html","../../../projects/assistant/chat/rest-chat.service.ts","../../../projects/assistant/chat/chat.component.ts","../../../projects/assistant/chat/chat.component.html","../../../projects/assistant/chat/saved-chats/saved-chats.component.ts","../../../projects/assistant/chat/saved-chats/saved-chats.component.html","../../../projects/assistant/chat/messages/en.ts","../../../projects/assistant/chat/messages/fr.ts","../../../projects/assistant/chat/messages/de.ts","../../../projects/assistant/chat/messages/index.ts","../../../projects/assistant/chat/sinequa-assistant-chat.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { ChatService } from './chat.service';\n\n/**\n * A service to create and manage instances of ChatService dynamically based on the provided component references and the implementation type (http or websocket)\n * All chat-related components should share the same instance of this InstanceManagerService, which in turn provides the appropriate instance of ChatService\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class InstanceManagerService {\n private _serviceInstances: Map<string, ChatService> = new Map();\n\n /**\n * Store the instance of ChatService in the map\n * @param key key differentiator between components used to store their corresponding ChatService instance\n * @param service The ChatService instance\n */\n storeInstance(key: string, service: ChatService): void {\n this._serviceInstances.set(key, service);\n }\n\n /**\n * @param key key differentiator between components based on which the corresponding ChatService instance is fetched\n * @returns The instance of the service corresponding to the instance of the component\n */\n getInstance(key: string): ChatService {\n if (!this.checkInstance(key)) {\n throw new Error(`No chat instance found for the given key : '${key}'`);\n }\n return this._serviceInstances.get(key)!;\n }\n\n /**\n *\n * @param key key differentiator between components based on which the check for an existent ChatService instance is performed\n * @returns True if a ChatService instance has been already instantiated for the given key. Otherwise, false.\n */\n checkInstance(key: string): boolean {\n return this._serviceInstances.has(key);\n }\n}\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, inject } from \"@angular/core\";\nimport { ChatService } from \"../chat.service\";\nimport { ChatConfig, GllmModelDescription } from \"../types\";\nimport { Subscription, filter, switchMap, tap } from \"rxjs\";\nimport { InstanceManagerService } from \"../instance-manager.service\";\nimport { PrincipalWebService } from \"@sinequa/core/web-services\";\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\nimport { LoginService } from \"@sinequa/core/login\";\n\n@Component({\n selector: 'sq-chat-settings-v3',\n templateUrl: './chat-settings-v3.component.html',\n styleUrls: [\"./chat-settings-v3.component.scss\"],\n standalone: true,\n imports: [CommonModule, FormsModule]\n})\nexport class ChatSettingsV3Component implements OnInit, OnDestroy {\n /** Define the key based on it, the appropriate chatService instance will be returned from instanceManagerService */\n @Input() instanceId: string;\n\n @Output(\"update\") _update = new EventEmitter();\n @Output(\"cancel\") _cancel = new EventEmitter();\n\n chatService: ChatService;\n config: ChatConfig;\n subscription = new Subscription();\n selectedModel: GllmModelDescription | undefined;\n isAdmin = false;\n\n public loginService = inject(LoginService);\n public instanceManagerService = inject(InstanceManagerService);\n public principalService = inject(PrincipalWebService);\n\n ngOnInit(): void {\n this.subscription.add(\n this.loginService.events.pipe(\n filter(e => e.type === 'login-complete'),\n tap(_ => this.instantiateChatService()),\n switchMap(() => this.chatService.initConfig$),\n filter(initConfig => !!initConfig)\n ).subscribe(_ => {\n this.isAdmin = this.principalService.principal!.isAdministrator;\n // Init config with a copy of the original chat config, so that it won't be modified by the user until he clicks on save\n this.config = JSON.parse(JSON.stringify(this.chatService.chatConfig$.value));\n this.selectedModel = this.chatService.getModel(this.config.serviceSettings.service_id, this.config.serviceSettings.model_id);\n this.updateFunctionsCheckboxes();\n })\n );\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n get hasPrompts(): boolean {\n return this.isAdmin\n || !!this.config.uiSettings.systemPrompt\n || !!this.config.uiSettings.userPrompt;\n }\n\n get hasAdvancedParameters(): boolean {\n return this.isAdmin\n || !!this.config.uiSettings.temperature\n || !!this.config.uiSettings.top_p\n || !!this.config.uiSettings.maxTokens;\n }\n\n get hasModel(): boolean {\n return this.isAdmin\n || !!this.config.uiSettings.servicesModels\n || !!this.config.uiSettings.functions\n || !!this.config.uiSettings.debug\n || !!this.config.uiSettings.temperature\n || !!this.config.uiSettings.top_p\n || !!this.config.uiSettings.maxTokens;\n }\n\n instantiateChatService(): void {\n this.chatService = this.instanceManagerService.getInstance(this.instanceId);\n }\n\n onChatModelChange(selectedModel: GllmModelDescription) {\n // Update properties based on the selected model\n this.config.serviceSettings.service_id = selectedModel.serviceId;\n this.config.serviceSettings.model_id = selectedModel.modelId;\n }\n\n toggleFunctionsSelection(name: string) {\n if (this.config.functions.includes(name)) {\n this.config.functions = this.config.functions.filter(item => item !== name);\n } else {\n this.config.functions.push(name);\n }\n }\n\n private updateFunctionsCheckboxes(): void {\n // Update the checkboxes based on config.functions\n (this.chatService.functions || []).forEach(item => {\n item['selected'] = this.config.functions.includes(item.functionName);\n });\n }\n\n /**\n * Save the new chat config in the chat service and the user preferences\n */\n save() {\n this.chatService.updateChatConfig(this.config);\n this._update.emit();\n }\n\n /**\n * Cancel the current changes\n */\n cancel() {\n this._cancel.emit();\n }\n}\n","<div class=\"sq-chat-settings\">\n <div class=\"settings-panel card-body small\" *ngIf=\"config\">\n\n <h5 *ngIf=\"hasModel\">Model</h5>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config.uiSettings.servicesModels\">\n <label for=\"gllmModel\" class=\"form-label\">Model</label>\n <select class=\"form-select\" id=\"gllmModel\" [(ngModel)]=\"selectedModel\" (ngModelChange)=\"onChatModelChange($event)\">\n <option *ngFor=\"let model of chatService.models\" [ngValue]=\"model\">{{model.displayName}}</option>\n </select>\n </div>\n \n <div class=\"mb-4\" *ngIf=\"isAdmin || config.uiSettings.functions\">\n <label for=\"gllmFunctions\" class=\"form-label\">Functions</label>\n <div id=\"gllmFunctions\" *ngFor=\"let func of chatService.functions\" class=\"multi-option form-check form-switch\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" [id]=\"func.functionName\" [(ngModel)]=\"func.selected\"\n (ngModelChange)=\"toggleFunctionsSelection(func.functionName)\">\n <label class=\"form-check-label\" [for]=\"func.functionName\" [title]=\"func.description\">{{ func.functionName }}</label>\n </div>\n </div>\n \n <div class=\"form-check form-switch mb-2\" *ngIf=\"isAdmin || config.uiSettings.debug\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"debug\" [(ngModel)]=\"config.debug\">\n <label class=\"form-check-label\" for=\"debug\">Debug</label>\n </div>\n \n <details *ngIf=\"hasAdvancedParameters\">\n <summary>Advanced parameters</summary>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config.uiSettings.temperature\">\n <label for=\"temperature\" class=\"form-label\">Temperature: {{config.serviceSettings.temperature}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"0\" max=\"2\" step=\"0.1\" id=\"temperature\"\n [(ngModel)]=\"config.serviceSettings.temperature\">\n </div>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config.uiSettings.top_p\">\n <label for=\"top-p\" class=\"form-label\">Top P: {{config.serviceSettings.top_p}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"0\" max=\"1\" step=\"0.05\" id=\"top-p\"\n [(ngModel)]=\"config.serviceSettings.top_p\">\n </div>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config.uiSettings.maxTokens\">\n <label for=\"max-tokens\" class=\"form-label\">Max generated tokens per answer:\n {{config.serviceSettings.maxTokens}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"1\" max=\"2048\" step=\"1\" id=\"max-tokens\"\n [(ngModel)]=\"config.serviceSettings.maxTokens\">\n </div>\n </details>\n \n <hr>\n \n <h5 *ngIf=\"hasPrompts\">Prompts</h5>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config.uiSettings.systemPrompt\">\n <label for=\"initialSystemPrompt\" class=\"form-label\">System prompt (hidden)</label>\n <textarea class=\"form-control\" id=\"initialSystemPrompt\" [(ngModel)]=\"config.uiSettings.systemPrompt\"></textarea>\n </div>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config.uiSettings.userPrompt\">\n <label for=\"initialUserPrompt\" class=\"form-label\">Initial user prompt</label>\n <textarea class=\"form-control\" id=\"initialUserPrompt\" [(ngModel)]=\"config.uiSettings.userPrompt\"></textarea>\n </div>\n \n </div>\n \n <div class=\"buttons-panel d-flex justify-content-end\">\n <button class=\"btn btn-light\" (click)=\"cancel()\">Cancel</button>\n <button class=\"btn btn-primary\" *ngIf=\"config\" (click)=\"save()\">Save</button>\n </div>\n \n</div>","import { z } from 'zod';\nimport { Record } from \"@sinequa/core/web-services\";\n\n/**\n * Individual message sent & returned by the ChatGPT API.\n * If this message is an attachment, we attach the minimal\n * information needed to reconstruct this attachment (RawAttachment)\n * as well as the reference id computed at the moment of sending\n * the attachment to the API.\n */\n// DONE\nexport interface RawMessage {\n role: string;\n content: string;\n additionalProperties: {\n [key: string]: any\n };\n}\n\n/**\n * A chat message that has been processed to include the markdown-formatted\n * content for display, as well as detailed attachment data, and optionally\n * a list of the references extracted from that message\n */\n// DONE\nexport interface ChatMessage extends RawMessage {\n additionalProperties: {\n display?: boolean;\n $progress?: ChatProgress[];\n $attachment?: ChatContextAttachment[];\n [key: string]: any;\n };\n}\n// DONE\nexport interface ChatProgress {\n title: string;\n content?: string;\n done?: boolean;\n time?: number;\n}\n\n// DONE\nexport interface RawAttachment {\n /** Type of the attachment */\n type: string;\n /** Record id from which this attachment is taken */\n recordId: string;\n /** Record from which this this attachment is taken */\n record: Record;\n}\n\n// DONE\nexport interface DocumentPart {\n partId: number;\n offset: number;\n length: number;\n text: string;\n}\n\n// DONE\nexport interface ChatContextAttachment extends RawAttachment {\n /** Type of the attachment */\n type: \"Context\";\n /** Rank of the attachment in the context message */\n contextId: number;\n /** Parts of the record that the assistant uses to answer */\n parts: DocumentPart[];\n /** The specific id of used the referenced part */\n $partId?: number;\n}\n\n/**\n * Raw response of the API\n */\n// DONE\nexport interface RawResponse {\n history: RawMessage[];\n executionTime: string;\n}\n\n/**\n * Enriched response of the API\n */\n// DONE\nexport interface ChatResponse extends RawResponse{\n history: ChatMessage[];\n}\n\n// DONE\nexport interface GllmModelDescription {\n provider: string;\n displayName: string;\n serviceId: string;\n modelId: string;\n size: number;\n enable: boolean;\n supportStreaming: boolean;\n supportFunctions: boolean;\n}\n\n// DONE\nexport interface GllmFunction {\n functionName: string;\n fullyQualifiedName: string;\n description: string;\n pluginName: string;\n parameters: GllmFunctionParameter[];\n}\n\n// DONE\nexport interface GllmFunctionParameter {\n description: string;\n isRequired: boolean;\n name: string;\n type: string;\n}\n\n/**\n * Minimal representation of a saved chat\n */\nexport interface SavedChat {\n id: string;\n title: string;\n modifiedUTC: string;\n}\n\n/**\n * Data structure saved to reconstruct a conversation\n */\nexport interface SavedChatHistory extends SavedChat{\n History: ChatMessage[];\n}\n\n// Define the Zod representation for the globalSettings object\nexport const globalSettingsSchema = z.object({\n restEndpoint: z.string().optional(),\n websocketEndpoint: z.string().optional(),\n signalRTransport: z.enum([\"WebSockets\", \"ServerSentEvents\", \"LongPolling\", \"None\"]),\n signalRLogLevel: z.enum([\"Critical\", \"Debug\", \"Error\", \"Information\", \"None\", \"Trace\", \"Warning\"])\n}).refine(data => (!!data.restEndpoint || !!data.websocketEndpoint), {\n message: \"Based on the provided input() protocol ('REST' or 'WEBSOCKET') to the Chat Component, either 'restEndpoint' or 'websocketEndpoint' property should be provided in the 'globalSettings' of the assistant instance.\",\n});\n// Define the GlobalSettings interface\nexport type GlobalSettings = z.infer<typeof globalSettingsSchema>;\n\n// Define the Zod representation for the serviceSettings object\nconst serviceSettingsSchema = z.object({\n service_id: z.string(),\n model_id: z.string(),\n temperature: z.number(),\n top_p: z.number(),\n maxTokens: z.number(),\n results_per_prompt: z.number(),\n presence_penalty: z.number(),\n frequency_penalty: z.number(),\n});\n// Define the ServiceSettings interface\nexport interface ServiceSettings extends z.infer<typeof serviceSettingsSchema> {}\n\n// Define the Zod representation for the TextChunksOptions interface\nconst textChunksOptionsSchema = z.object({\n extendMode: z.enum(['None', 'Sentence', 'Chars']).optional(),\n extendScope: z.number().optional(),\n});\n// Define the TextChunksOptions interface\nexport interface TextChunksOptions extends z.infer<typeof textChunksOptionsSchema> {}\n\n// Define the Zod representation for the contextOptions object\nconst contextOptionsSchema = z.object({\n docColumns: z.array(z.string()),\n textChunkFillGaps: z.number(),\n html: z.boolean(),\n topPassagesOptions: z.object({\n topPassages: z.number(),\n topPassagesMinScore: z.number(),\n textChunkOptions: textChunksOptionsSchema,\n }),\n matchingPassagesOptions: z.object({\n matchingPassagesPerDoc: z.number(),\n fromTopDocuments: z.number(),\n matchingPassagesMinScore: z.number(),\n textChunkOptions: textChunksOptionsSchema,\n }),\n relevantExtractsOptions: z.object({\n topRelevantExtractsPerDoc: z.number(),\n fromTopDocuments: z.number(),\n textChunkOptions: textChunksOptionsSchema,\n }),\n htmlOptions: z.object({\n images: z.boolean(),\n links: z.boolean(),\n tables: z.boolean(),\n extendTables: z.boolean(),\n }),\n});\n// Define the ContextOptions interface\nexport interface ContextOptions extends z.infer<typeof contextOptionsSchema> {}\n\n// Define the Zod representation for the contextSettings object\nconst contextSettingsSchema = z.object({\n app: z.string().optional(),\n query: z.object({}).optional(),\n contextOptions: contextOptionsSchema,\n});\n// Define the ContextSettings interface\nexport interface ContextSettings extends z.infer<typeof contextSettingsSchema> {}\n\n// Define the Zod representation for the uiSettings object\nconst uiSettingsSchema = z.object({\n display: z.boolean(),\n servicesModels: z.boolean(),\n functions: z.boolean(),\n temperature: z.boolean(),\n top_p: z.boolean(),\n maxTokens: z.boolean(),\n debug: z.boolean(),\n displaySystemPrompt: z.boolean(),\n systemPrompt: z.string(),\n displayUserPrompt: z.boolean(),\n userPrompt: z.string(),\n});\n// Define the UiSettings interface\nexport interface UiSettings extends z.infer<typeof uiSettingsSchema> {}\n\n// Define the Zod representation for the entire ChatConfig object\nexport const chatConfigSchema = z.object({\n globalSettings: globalSettingsSchema,\n serviceSettings: serviceSettingsSchema,\n contextSettings: contextSettingsSchema,\n uiSettings: uiSettingsSchema,\n functions: z.array(z.string()),\n debug: z.boolean(),\n saveChats: z.boolean()\n});\n// Define the UiSettings interface\nexport interface ChatConfig extends z.infer<typeof chatConfigSchema> {}\n\n// DONE\nexport interface ChatPayload {\n functions: string[];\n debug: boolean;\n serviceSettings: ServiceSettings;\n contextSettings: ContextSettings;\n history: ChatMessage[];\n instanceId?: string;\n savedChatId?: string;\n}\n// DONE\nexport type ActionMessage = {\n guid: string;\n displayName?: string\n displayValue?: string;\n executionTime?: number;\n}\n// DONE\nexport interface TextChunksOptions {\n extendMode?: 'None' | 'Sentence' | 'Chars';\n extendScope?: number;\n}\n// DONE\nexport interface Quota {\n lastRequest: string;\n promptTokenCount: number;\n completionTokenCount: number;\n periodTokens: number;\n resetHours: number;\n tokenCount: number;\n nextReset: string;\n lastResetUTC: string;\n nextResetUTC: string;\n maxQuotaReached: boolean;\n}\n\n/**\n * List of events data that can be emitted by the websocket chat endpoint\n */\n// DONE\nexport type QuotaEvent = { quota: Quota };\nexport type MessageEvent = string;\nexport type ContextMessageEvent = { content: string; metadata: ChatContextAttachment };\nexport type ErrorEvent = string;\nexport type ActionStartEvent = { guid: string; displayName: string };\nexport type ActionResultEvent = { guid: string; displayValue: string };\nexport type ActionStopEvent = { guid: string; executionTime: number };\nexport type HistoryEvent = { history: RawMessage[]; executionTime: string };\n\n/**\n * Data emitted by the http chat endpoint\n */\n// DONE\nexport type HttpChatResponse = {\n quota: Quota;\n debug: any;\n context: { content: string; additionalProperties: ChatContextAttachment }[];\n actions: ActionMessage[];\n history: RawMessage[];\n executionTime: string;\n}\n// DONE\nexport type MessageHandler<T> = {\n handler: (data: T) => void;\n isGlobalHandler: boolean;\n};\n","import { Injectable, inject } from \"@angular/core\";\nimport { SearchService } from \"@sinequa/components/search\";\nimport { UserPreferences } from \"@sinequa/components/user-settings\";\nimport { LoginService } from \"@sinequa/core/login\";\nimport { NotificationsService } from \"@sinequa/core/notification\";\nimport { AuditWebService, UserSettingsWebService } from \"@sinequa/core/web-services\";\nimport { BehaviorSubject, Observable } from \"rxjs\";\nimport { ChatConfig, ChatMessage, ChatResponse, GllmFunction, GllmModelDescription, SavedChat, SavedChatHistory, chatConfigSchema } from \"./types\";\nimport { AppService, Query } from \"@sinequa/core/app-utils\";\nimport { IntlService } from \"@sinequa/core/intl\";\nimport get from \"lodash/get\";\nimport { Utils } from \"@sinequa/core/base\";\n\n@Injectable()\nexport abstract class ChatService {\n /** Name of the assistant plugin OR websocket endpoint */\n REQUEST_URL: string;\n /** Emit true once the initialization of the chat process is done*/\n initProcess$ = new BehaviorSubject<boolean>(false);\n /** Emit true once the initialization of the chat config is done*/\n initConfig$ = new BehaviorSubject<boolean>(false);\n /** Global configuration of the chat */\n chatConfig$ = new BehaviorSubject<ChatConfig | undefined>(undefined);\n /** Streaming status of the chat endpoint */\n streaming$ = new BehaviorSubject<boolean>(false);\n /** Store the messages history of the current chat */\n chatHistory: ChatMessage[] | undefined;\n /** List of models available on the server */\n models: GllmModelDescription[] | undefined;\n /** List of functions available on the server */\n functions: GllmFunction[] | undefined;\n /** List of saved chats */\n savedChats$ = new BehaviorSubject<SavedChat[]>([]);\n /** Emit the saved chat to load */\n loadSavedChat$ = new BehaviorSubject<SavedChat | undefined>(undefined);\n /** Instance ID of the chat service defining the assistant instance */\n private _chatInstanceId: string;\n /** ID of the current chat discussion which is used to save/get/delete it */\n private _savedChatId: string;\n\n public searchService = inject(SearchService);\n public userSettingsService = inject(UserSettingsWebService);\n public notificationsService = inject(NotificationsService);\n public auditService = inject(AuditWebService);\n public prefs = inject(UserPreferences);\n public loginService = inject(LoginService);\n public appService = inject(AppService);\n public intlService = inject(IntlService);\n\n /**\n * Initialize the chat process\n */\n abstract init(): Observable<boolean>;\n\n /**\n * Initialize the REQUEST_URL\n */\n abstract getRequestsUrl(): void;\n\n get assistants(): any {\n if (!this.userSettingsService.userSettings)\n this.userSettingsService.userSettings = {};\n if (!this.userSettingsService.userSettings[\"assistants\"])\n this.userSettingsService.userSettings[\"assistants\"] = {};\n return this.userSettingsService.userSettings[\"assistants\"];\n }\n\n /**\n * Get the instance ID of the chat service\n * @returns The instance ID of the chat service\n */\n get chatInstanceId(): string {\n return this._chatInstanceId;\n }\n\n /**\n * Persist the instance ID of the chat service\n * @param instanceId The instance ID of the chat service\n */\n setChatInstanceId(instanceId: string) {\n this._chatInstanceId = instanceId;\n }\n\n /**\n * Get the ID of the current chat discussion which is used to save/get/delete it\n * @returns The ID of the current chat discussion\n */\n get savedChatId(): string {\n return this._savedChatId;\n }\n\n /**\n * Persist the ID of the current chat discussion which is used to save/get/delete it\n * @param savedChatId The ID of the current chat discussion which is used to save/get/delete it\n */\n setSavedChatId(savedChatId: string) {\n this._savedChatId = savedChatId;\n }\n\n /**\n * Initialize the chat config by merging the default config with the user preferences and the app config\n * override desc order: user preferences > app config > default config\n */\n initChatConfig() {\n const key = this.chatInstanceId;\n const userSettingsConfig = this.assistants[key] || {};\n const defaultChatConfig = this.appService.app?.data?.assistants?.[key];\n // Validate the object against the schema\n try {\n chatConfigSchema.parse(defaultChatConfig);\n // Merge configs with override desc order: user preferences > app config > default config\n const chatConfig = {\n ...defaultChatConfig,\n ...userSettingsConfig\n }\n // Update the chat config and store it in the user preferences\n this.updateChatConfig(chatConfig, false);\n this.initConfig$.next(true);\n } catch (error) {\n this.notificationsService.error(`Missing valid configuration for the assistant instance '${key}'`);\n throw new Error(`Missing valid configuration for the assistant instance '${key}' . \\n ${JSON.stringify(error.issues, null, 2)}`);\n }\n }\n\n /**\n * Update the chat config and store it in the user preferences\n * @param config The updated chat config\n * @param notify Whether to notify the user about the update\n * @param successCallback The callback to execute if the update is successful\n * @param errorCallback The callback to execute if the update fails\n */\n updateChatConfig(config: ChatConfig, notify = true, successCallback?: () => any, errorCallback?: () => any) {\n this.chatConfig$.next(config);\n const assistants = Object.assign({}, this.assistants);\n assistants[this.chatInstanceId] = config;\n this.userSettingsService.patch({ assistants }).subscribe(\n next => {\n if(notify) {\n successCallback ? successCallback() : this.notificationsService.success(`The configuration of the assistant instance '${this.chatInstanceId}' has been successfully updated`);\n }\n },\n error => {\n if(notify) {\n errorCallback ? errorCallback() : this.notificationsService.error(`The update of the assistant instance '${this.chatInstanceId}' configuration failed`);\n }\n console.error(\"Could not patch assistants!\", error);\n }\n );\n }\n\n /**\n * Calls the Fetch API to retrieve a new message given all previous messages\n */\n abstract fetch(messages: ChatMessage[], query?: Query): Observable<ChatResponse>\n\n /**\n * Return the list of models available on the server\n */\n abstract listModels(): Observable<GllmModelDescription[] | undefined>;\n\n /**\n * Return the list of functions available on the server\n */\n abstract listFunctions(): Observable<GllmFunction[] | undefined>;\n\n /**\n * Get the model description for the given (serviceId + modelId)\n * If a model is not found, an error message is returned\n * @param serviceId The serviceId of the model\n * @param modelId The modelId of the model\n * @returns The model description\n */\n getModel(serviceId: string, modelId: string): GllmModelDescription | undefined{\n let model = this.models?.find(m => m.serviceId === serviceId && m.modelId === modelId);\n // Handle obsolete config\n if(!model) {\n this.notificationsService.error(`FATAL ERROR : The model (serviceId = '${serviceId}', modelId = '${modelId}') is no longer available. Please contact an admin for further information.`);\n throw new Error(`FATAL ERROR : The model (serviceId = '${serviceId}', modelId = '${modelId}') is no longer available`);\n }\n return model;\n }\n\n /**\n * Fetch the list saved chats belonging to a specific instance of the assistant\n */\n abstract listSavedChat(): void;\n\n /**\n * Return the saved chat with the given id, if exists. Otherwise, return undefined\n * @param id The id of the saved chat\n */\n abstract getSavedChat(id: string): Observable<SavedChatHistory | undefined>;\n\n /**\n * Bulk delete of saved chats matching the given ids\n * @param ids List of ids of the saved chats to delete\n * @returns The number of deleted chats\n */\n abstract deleteSavedChat(ids: string[]): Observable<number>;\n\n // Todo: pending implementation\n notifyAudit(messagesHistory: ChatMessage[], model: string) {\n // let numberOfUserMessages = 0;\n // let numberOfAttachments = 0;\n // let numberOfAssistantMessages = 0;\n // for(let m of messagesHistory) {\n // if(m.$attachment) numberOfAttachments++;\n // else if(m.role === 'user') numberOfUserMessages++;\n // else if (m.role === 'assistant') numberOfAssistantMessages++;\n // }\n // this.auditService.notify({\n // type: 'Chat_Messages',\n // detail: {\n // // message: messagesHistory.map(m => m.role.toUpperCase() + ': '+ (m.$attachment? `attachment ${m.$attachment?.$record.title}` : m.content)).join('\\n\\n'),\n // message: messagesHistory.map(m => m.role.toUpperCase() + ': '+ m.content).join('\\n\\n'),\n // // numberOfUserMessages,\n // // numberOfAttachments,\n // // numberOfAssistantMessages,\n // model\n // }\n // });\n }\n\n /**\n * Format a date string in UTC to a local date string\n * @param value Date string in UTC to format\n * @returns A formatted local date string\n */\n protected formatDateTime(value: string): string {\n return this.intlService[\"formatTime\"](value, {day: \"numeric\", month: \"short\", year: \"numeric\"});\n }\n\n /**\n * Takes a text prompt that may contain placeholders for variables\n * and replaces these placeholders if it finds a match in the given\n * context object.\n */\n static formatPrompt(prompt: string, context: any) {\n return prompt.replace(\n /{{(.*?)}}/g,\n (match, expr) => get(context, expr) ?? match\n );\n }\n\n /**\n * @returns A Globally Unique Identifier\n */\n static generateGUID() {\n return Utils.guid();\n }\n\n}\n","import { Injectable, inject } from \"@angular/core\";\nimport { AuthenticationService } from \"@sinequa/core/login\";\nimport { ConnectionOptions, SignalRWebService } from \"@sinequa/core/web-services\";\nimport { HttpTransportType, HubConnection, LogLevel, MessageHeaders } from \"@microsoft/signalr\";\nimport { ActionMessage, ActionResultEvent, ActionStartEvent, ActionStopEvent, MessageEvent, ChatMessage, ChatPayload, ChatResponse, GllmFunction, GllmModelDescription, MessageHandler, HistoryEvent, ErrorEvent, QuotaEvent, ChatContextAttachment, ContextMessageEvent, SavedChatHistory } from \"./types\";\nimport { ChatService } from \"./chat.service\";\nimport { merge, fromEvent, Observable, Subject, catchError, filter, forkJoin, map, shareReplay, switchMap, tap, throwError, takeUntil } from \"rxjs\";\n\n@Injectable()\nexport class WebSocketChatService extends ChatService {\n\n public connection: HubConnection | undefined;\n public connectionBuilt$ = new Subject<void>(); // Emit when the connection is built\n public connectionStarted$ = new Subject<void>(); // Emit when the connection is started\n\n private messageHandlers: Map<string, MessageHandler<any>> = new Map();\n\n private actionMap = new Map<string, ActionMessage>();\n private content = \"\";\n private executionTime: string;\n private attachments: ChatContextAttachment[] = [];\n\n public signalRService = inject(SignalRWebService);\n public authenticationService = inject(AuthenticationService);\n\n constructor() {\n super();\n }\n\n /**\n * Initialize the chat process after the login is complete.\n * It includes building and starting a connection, executing parallel requests for models and functions, and handling errors during the process.\n *\n * @returns An Observable<boolean> indicating the success of the initialization process.\n */\n init(): Observable<boolean> {\n return this.loginService.events.pipe(\n filter((e) => e.type === 'login-complete'),\n tap(() => this.getRequestsUrl()),\n // Build the connection and handle the completion with the connectionBuilt$ subject\n switchMap(() => this.buildConnection()),\n tap(() => {\n this.initMessageHandlers();\n this.connectionBuilt$.next();\n }),\n // Start the connection and handle the completion with the connectionStarted$ subject\n switchMap(() => this.startConnection()),\n // Execute parallel requests for models and functions\n switchMap(() => {\n this.connectionStarted$.next();\n return forkJoin([\n this.listModels(),\n this.listFunctions()\n ])\n }),\n // Map the results of parallel requests to a boolean indicating success\n map(([models, functions]) => {\n this.initProcess$.next(true);\n return !!models && !!functions\n }),\n // Any errors during the process are caught, logged, and re-thrown to propagate the error further\n catchError((error) => {\n console.error('Error occurred:', error);\n return throwError(() => error);\n }),\n // Cache and replay the emitted value for subsequent subscribers\n shareReplay(1)\n );\n }\n\n /**\n * Define the assistant endpoint to use for the websocket requests\n * It can be overridden by the app config\n */\n getRequestsUrl() {\n if (this.chatConfig$.value!.globalSettings.websocketEndpoint) {\n this.REQUEST_URL = this.chatConfig$.value!.globalSettings.websocketEndpoint;\n } else {\n throw new Error(`The property 'websocketEndpoint' must be provided when attempting to use 'WebSocket' in assistant instance`);\n }\n }\n\n listModels(): Observable<GllmModelDescription[] | undefined> {\n const modelsSubject = new Subject<GllmModelDescription[] | undefined>();\n\n this.connection!.on('ListModels', (res) => {\n this.models = res.models?.filter(model => !!model.enable);\n modelsSubject.next(this.models);\n modelsSubject.complete()\n });\n\n // Send the request to get the list of models\n this.connection!.invoke('ListModels', { debug: this.chatConfig$.value!.debug })\n .catch(error => {\n console.error('Error invoking ListModels:', error);\n modelsSubject.complete()\n return Promise.resolve(); // Return a resolved promise to handle the error and prevent unhandled promise rejection\n })\n\n return modelsSubject.asObservable();\n }\n\n listFunctions(): Observable<GllmFunction[] | undefined> {\n const functionsSubject = new Subject<GllmFunction[] | undefined>();\n\n this.connection!.on('ListFunctions', (res) => {\n this.functions = res.functions;\n functionsSubject.next(this.functions);\n functionsSubject.complete()\n });\n\n // Send the request to get the list of functions\n this.connection!.invoke('ListFunctions', { debug: this.chatConfig$.value!.debug })\n .catch(error => {\n console.error('Error invoking ListFunctions:', error);\n functionsSubject.complete()\n return Promise.resolve(); // Return a resolved promise to handle the error and prevent unhandled promise rejection\n })\n\n return functionsSubject.asObservable();\n }\n\n fetch(messages: ChatMessage[], query = this.searchService.query): Observable<ChatResponse> {\n // Start streaming by invoking the Chat method\n this.streaming$.next(true);\n\n // Prepare the payload to send to the Chat method\n const data: ChatPayload = {\n history: messages,\n functions: this.chatConfig$.value!.functions,\n debug: this.chatConfig$.value!.debug,\n serviceSettings: this.chatConfig$.value!.serviceSettings,\n contextSettings: {\n ...this.chatConfig$.value!.contextSettings,\n app: this.appService.appName,\n query\n }\n }\n if (this.chatConfig$.value!.saveChats) {\n data.instanceId = this.chatInstanceId;\n data.savedChatId = this.savedChatId;\n }\n\n let response: ChatMessage = {role: \"assistant\", content: \"\", additionalProperties: {display: true}}; // here display: true is needed in order to be able to show the progress\n\n // Create a Subject to signal completion\n const completion$ = new Subject<void>();\n\n // Create observables for each non-global handler in the messageHandlers map (default and eventual custom ones) once it is triggered by the hub connection\n const observables = Array\n .from(this.messageHandlers.entries())\n .filter(([eventName, eventHandler]) => !eventHandler.isGlobalHandler)\n .map(([eventName, eventHandler]) => {\n return fromEvent<any>(this.connection!, eventName).pipe(\n map((event) => eventHandler.handler(event)) // Execute the corresponding handler\n );\n });\n\n // Then merge them into a single observable in order to simulate the streaming behavior\n const combined$ = merge(...observables).pipe(\n takeUntil(completion$) // Complete the observable when completion$ emits\n );\n\n // Invoke the Chat method\n this.connection!.invoke('Chat', data)\n .then(() => this.notifyAudit(this.chatHistory!, this.chatConfig$.value!.serviceSettings.service_id)) // When the server indicates it has successfully finished invoking the method, notify the audit service with the recent chat history\n .catch(error => {\n console.error('Error invoking Chat:', error);\n return Promise.resolve(); // Return a resolved promise to handle the error and prevent unhandled promise rejection\n })\n .finally(() => {\n this.streaming$.next(false); // Complete streaming regardless of success or error\n this.actionMap.clear(); // Clear the actionMap\n this.content = \"\"; // Clear the content\n this.attachments = []; // Clear the attachments\n this.executionTime = \"\"; // Clear the executionTime\n completion$.next(); // Emit a signal to complete the observables\n completion$.complete(); // Complete the subject\n });\n\n // Return the merged observables\n return combined$.pipe(\n map(() => {\n // Define $progress from the actionMap\n const actions = Array.from(this.actionMap.values());\n const $progress = actions.length > 0\n ? actions.map((a) => ({\n title: a.displayName ?? \"\",\n content: a.displayValue ?? \"\",\n done: a.executionTime !== undefined,\n time: a.executionTime,\n }))\n : undefined;\n\n // Define the attachment used in the context of the response message\n const $attachment = this.attachments;\n\n // As soon as the first content or $progress is defined, the assistant is considered as streaming\n if(!!this.content || $progress || $attachment.length > 0) {\n response = {...response, content: this.content, additionalProperties: {...response.additionalProperties, $progress, $attachment} };\n }\n\n // Return the result\n return { history: [...messages, response], executionTime: this.executionTime };\n })\n );\n }\n\n listSavedChat(): void {\n const data = {\n instanceId: this.chatInstanceId,\n debug: this.chatConfig$.value!.debug\n };\n\n this.connection!.on('SavedChatList', (res) => {\n this.savedChats$.next(res.savedChats); // emits the result to the savedChats$ subject\n });\n\n // Invoke the method SavedChatList\n this.connection!.invoke('SavedChatList', data)\n .catch(error => {\n console.error('Error invoking SavedChatList:', error);\n return Promise.resolve();\n });\n }\n\n getSavedChat(id: string): Observable<SavedChatHistory | undefined> {\n const savedChatSubject = new Subject<SavedChatHistory | undefined>();\n\n const data = {\n instanceId: this.chatInstanceId,\n savedChatId: id,\n debug: this.chatConfig$.value!.debug\n };\n\n this.connection!.on('SavedChatGet', (res) => {\n savedChatSubject.next(res.savedChat);\n savedChatSubject.complete()\n });\n\n // Invoke the method SavedChatGet\n this.connection!.invoke('SavedChatGet', data)\n .catch(error => {\n console.error('Error invoking SavedChatGet:', error);\n savedChatSubject.complete()\n return Promise.resolve();\n })\n\n return savedChatSubject.asObservable();\n }\n\n deleteSavedChat(ids: string[]): Observable<number> {\n const deleteSavedChatSubject = new Subject<number>();\n\n const data = {\n instanceId: this.chatInstanceId,\n SavedChatIds: ids,\n debug: this.chatConfig$.value!.debug\n };\n\n this.connection!.on('SavedChatDelete', (res) => {\n deleteSavedChatSubject.next(res.deleteCount);\n deleteSavedChatSubject.complete();\n });\n\n // Invoke the method SavedChatDelete\n this.connection!.invoke('SavedChatDelete', data)\n .catch(error => {\n console.error('Error invoking SavedChatDelete:', error);\n deleteSavedChatSubject.complete();\n return Promise.resolve();\n })\n\n return deleteSavedChatSubject.asObservable();\n }\n\n /**\n * Initialize out-of-the-box handlers\n * It is a placeholder for non-streaming scenarios, where you invoke a specific hub method, and the server responds with a single message or a result\n */\n initMessageHandlers() {\n this.addMessageHandler(\n \"Debug\",\n { handler: (debug: any) => console.log(debug),\n isGlobalHandler: true\n }\n );\n this.addMessageHandler(\n \"ActionStart\",\n { handler: (action: ActionStartEvent) => this.actionMap.set(action.guid, action),\n isGlobalHandler: false\n }\n );\n this.addMessageHandler(\n \"ActionResult\",\n {\n handler: (action: ActionResultEvent) => this.actionMap.set(action.guid, { ...this.actionMap.get(action.guid), ...action }),\n isGlobalHandler: false\n }\n );\n this.addMessageHandler(\n \"ActionStop\",\n {\n handler: (action: ActionStopEvent) => this.actionMap.set(action.guid, { ...this.actionMap.get(action.guid), ...action }),\n isGlobalHandler: false\n }\n );\n this.addMessageHandler(\n \"ContextMessage\",\n {\n handler: (message: ContextMessageEvent) => this.attachments.push(message.metadata),\n isGlobalHandler: false\n }\n );\n this.addMessageHandler(\n \"Message\",\n {\n handler: (message: MessageEvent) => this.content += message ?? \"\",\n isGlobalHandler: false\n }\n );\n this.addMessageHandler(\n \"History\",\n {\n handler: (history: HistoryEvent) => {\n this.chatHistory = history.history\n this.executionTime = history.executionTime;\n },\n isGlobalHandler: false\n }\n );\n this.addMessageHandler(\n \"Error\",\n {\n handler: (error: ErrorEvent) => {\n console.error(error);\n this.notificationsService.error(error);\n },\n isGlobalHandler: true\n }\n );\n this.addMessageHandler(\n \"Quota\",\n {\n handler: (message: QuotaEvent) => {\n if(message.quota.maxQuotaReached) {\n const msg = `Sorry, you have exceeded the allowed quota. Please retry starting from ${this.formatDateTime(message.quota.nextResetUTC)}.`;\n console.error(msg);\n this.notificationsService.error(msg);\n }\n },\n isGlobalHandler: true\n }\n );\n }\n\n /**\n * Override and register the entire messageHandlers map by merging the provided map with the default one\n * @param messageHandlers\n */\n overrideMessageHandlers<T>(messageHandlers: Map<string, MessageHandler<T>>) {\n // Clear the already registered global chat handlers before merging the new ones\n this.messageHandlers.forEach((eventHandler, eventName) => {\n if(eventHandler.isGlobalHandler) {\n this.unsubscribeMessageHandler(eventName);\n }\n });\n\n // Merge the new event handlers with the existing ones\n this.messageHandlers = new Map([...this.messageHandlers, ...messageHandlers]);\n\n // Register the global chat handlers among the merged map\n this.messageHandlers.forEach((eventHandler, eventName) => {\n if(eventHandler.isGlobalHandler) {\n this.registerMessageHandler(eventName, eventHandler);\n }\n });\n }\n\n /**\n * Add a listener for a specific event.\n * If a listener for this same event already exists, it will be overridden.\n * If the listener has \"isChatGlobalHandler\" set to true, it will be registered to the hub connection.\n * @param eventName Name of the event to register a listener for\n * @param eventHandler The handler to be called when the event is received\n */\n addMessageHandler<T>(eventName: string, eventHandler: MessageHandler<T>) {\n this.messageHandlers.set(eventName, eventHandler);\n if(eventHandler.isGlobalHandler) {\n this.registerMessageHandler(eventName, eventHandler);\n }\n }\n\n /**\n * Dynamically register a listener for a specific event.\n * If a listener for this event already exists, it will be overridden.\n * @param eventName Name of the event to register a listener for\n * @param eventHandler The handler to be called when the event is received\n */\n protected registerMessageHandler<T>(eventName: string, eventHandler: MessageHandler<T>) {\n if (!this.connection) {\n console.log(\"No connection found to register the listener\" + eventName);\n return;\n }\n\n this.connection.on(eventName, (data: T) => {\n eventHandler.handler(data);\n });\n }\n\n /**\n * Remove a listener for a specific event from the messageHandlers map and unsubscribe from receiving messages for this event from the SignalR hub.\n * @param eventName Name of the event to remove the listener for\n */\n removeMessageHandler(eventName: string) {\n this.messageHandlers.delete(eventName);\n this.unsubscribeMessageHandler(eventName);\n }\n\n /**\n * Unsubscribe from receiving messages for a specific event from the SignalR hub.\n * ALL its related listeners will be removed from hub connection\n * This is needed to prevent accumulating old listeners when overriding the entire messageHandlers map\n * @param eventName Name of the event\n */\n protected unsubscribeMessageHandler(eventName: string) {\n this.connection!.off(eventName);\n }\n\n /**\n * Build a connection to the signalR websocket and register default listeners to the methods defined in the server hub class\n * @param options The options for the connection. It overrides the default options\n * @param logLevel Define the log level displayed in the console\n * @returns Promise that resolves when the connection is built\n */\n buildConnection(options?: ConnectionOptions): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (!this.REQUEST_URL) {\n reject(new Error(\"No endpoint provided to connect the websocket to\"));\n return;\n }\n const logLevel = this.getLogLevel();\n this.connection = this.signalRService.buildConnection(this.REQUEST_URL, {...this.defaultOptions, ...options}, logLevel);\n resolve();\n });\n }\n\n /**\n * Start the connection\n * @returns Promise that resolves when the connection is started\n */\n startConnection(): Promise<void> {\n return this.signalRService.startConnection(this.connection);\n }\n\n /**\n * Stop the connection\n * @returns Promise that resolves when the connection is stopped\n */\n stopConnection(): Promise<void> {\n return this.signalRService.stopConnection(this.connection);\n }\n\n private getTransports(): HttpTransportType {\n switch (this.chatConfig$.value?.globalSettings.signalRTransport) {\n case \"WebSockets\":\n return HttpTransportType.WebSockets;\n case \"ServerSentEvents\":\n return HttpTransportType.ServerSentEvents;\n case \"LongPolling\":\n return HttpTransportType.LongPolling;\n default:\n return HttpTransportType.None;\n }\n }\n\n private getLogLevel(): LogLevel {\n switch (this.chatConfig$.value?.globalSettings.signalRLogLevel) {\n case \"Critical\":\n return LogLevel.Critical; // Log level for diagnostic messages that indicate a failure that will terminate the entire application.\n case \"Debug\":\n return LogLevel.Debug; // Log level for low severity diagnostic messages.\n case \"Error\":\n return LogLevel.Error; // Log level for diagnostic messages that indicate a failure in the current operation.\n case \"Information\":\n return LogLevel.Information; // Log level for informational diagnostic messages.\n case \"None\":\n return LogLevel.None; // The highest possible log level. Used when configuring logging to indicate that no log messages should be emitted.\n case \"Trace\":\n return LogLevel.Trace; // Log level for very low severity diagnostic messages.\n case \"Warning\":\n return LogLevel.Warning; // Log level for diagnostic messages that indicate a non-fatal problem.\n default:\n return LogLevel.None; // The highest possible log level. Used when configuring logging to indicate that no log messages should be emitted.\n }\n }\n\n get defaultOptions(): ConnectionOptions {\n let headers: MessageHeaders = {\n \"sinequa-force-camel-case\": \"true\",\n \"x-language\": this.intlService.currentLocale.name,\n \"ui-language\": this.intlService.currentLocale.name,\n };\n if (this.authenticationService.processedCredentials) {\n headers = {...headers, \"sinequa-csrf-token\": this.authenticationService.processedCredentials.data.csrfToken};\n };\n // For the first GET request sent by signalR to start a WebSocket protocol,\n // as far as we know, signalR only lets us tweak the request with this access token factory\n // so we pass along the Sinequa CSRF token to pass the CSRF check..\n return {\n transport: this.getTransports(),\n withCredentials: true,\n headers,\n accessTokenFactory: () => this.authenticationService.processedCredentials?.data?.csrfToken || \"\"\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport SafeColor from 'safecolor'\n\n@Component({\n selector: 'sq-initials-avatar',\n templateUrl: './initials-avatar.component.html',\n styleUrls: ['./initials-avatar.component.scss'],\n standalone: true,\n imports: [CommonModule]\n})\nexport class InitialsAvatarComponent {\n\n @Input() fullName: string = '';\n @Input() size: number = 1.5; // in rem\n\n /**\n * Gives initials of a name and a safe color background to use,\n * assuming text color will be white\n * @param fullName full name to evaluate intials for\n * @param split string to use has splitter for `fullName`\n * @returns an `object` containing initials and color\n */\n getInitialsAndColorFromFullName(fullName: string, split: string = ' '): { initials: string; color: string } {\n return { initials: this.getInitialsFromFullName(fullName, split), color: this.getColorFromName(fullName) };\n }\n\n /**\n * Gives initials of a name, ie:\n * ```\n * getInitialForFullName('John Snow') => 'JS'\n * getInitialForFullName('Geralt of Rivia', ' of ') => 'GR'\n * ```\n * @param fullName full name to evaluate intial for\n * @param split string to use has splitter\n * @returns string containg the first letter of splitted name\n */\n getInitialsFromFullName(fullName: string, split: string = ' '): string {\n if (!fullName) return '';\n\n const names = fullName.split(split);\n return names[0][0] + (names[1]?.[0] ?? '');\n }\n\n /**\n * Gets a random color using text as seed\n * @param text string to use for color generation\n * @returns string formatted like `rgb(xxx, xxx, xxx)`\n */\n getColorFromName(text: string): string {\n const safeColor = new SafeColor({\n color: [255, 255, 255],\n contrast: 4.5\n });\n\n return safeColor.random(text);\n }\n\n}\n","<span class=\"sq-initials-avatar\" *ngIf=\"getInitialsAndColorFromFullName(fullName) as meta\"\n [ngStyle]=\"{ 'background-color': meta.color }\" [style.height.rem]=\"size\" [style.width.rem]=\"size\"\n [style.line-height.rem]=\"size\" [style.font-size.rem]=\"size/2\">\n {{ meta.initials | uppercase }}\n</span>","export interface IconFormat {\n icon: string;\n color?: string;\n}\n\nexport const defaultFormatIcons: Record<string, IconFormat> = {\n \"extractslocations\": { icon: \"far fa-file-alt\" },\n \"matchlocations\": { icon: \"far fa-flag\" },\n \"geo\": { icon: \"fas fa-map-marker-alt\" },\n \"person\": { icon: \"fas fa-user\" },\n \"company\": { icon: \"fas fa-building\" },\n \"title\": { icon: \"fas fa-tag\" },\n \"modified\": { icon: \"far fa-calendar-alt\" },\n \"size\": { icon: \"fas fa-weight-hanging\" },\n \"treepath\": { icon: \"fas fa-folder-open\" },\n \"filename\": { icon: \"far fa-file-alt\" },\n \"authors\": { icon: \"fas fa-user-edit\" },\n \"accesslists\": { icon: \"fas fa-lock\" },\n \"doctype\": { icon: \"far fa-file\" },\n \"documentlanguages\": { icon: \"fas fa-globe-americas\" },\n \"globalrelevance\": { icon: \"far fa-star\" },\n \"indexationtime\": { icon: \"fas fa-search\" },\n \"concepts\": { icon: \"far fa-comment-dots\" },\n \"keywords\": { icon: \"fas fa-tags\" },\n \"matchingpartnames\": { icon: \"fas fa-align-left\" },\n \"msgfrom\": { icon: \"fas fa-envelope\" },\n \"msgto\": { icon: \"fas fa-envelope-open-text\" },\n\n \"file\": { icon: \"far fa-file\" },\n \"htm\": { icon: \"fas fa-globe-europe\", color: '#4545bf' },\n \"html\": { icon: \"fas fa-globe-europe\", color: '#4545bf' },\n \"xhtm\": { icon: \"fas fa-globe-europe\", color: '#4545bf' },\n \"xhtml\": { icon: \"fas fa-globe-europe\", color: '#4545bf' },\n \"mht\": { icon: \"fas fa-globe-europe\", color: '#4545bf' },\n \"doc\": { icon: \"far fa-file-word\", color: '#3f3fca' },\n \"docx\": { icon: \"far fa-file-word\", color: '#3f3fca' },\n \"docm\": { icon: \"far fa-file-word\", color: '#3f3fca' },\n \"dot\": { icon: \"far fa-file-word\", color: '#3f3fca' },\n \"dotx\": { icon: \"far fa-file-word\", color: '#3f3fca' },\n \"dotm\": { icon: \"far fa-file-word\", color: '#3f3fca' },\n \"rtf\": { icon: \"far fa-file-word\", color: '#3f3fca' },\n \"odt\": { icon: \"far fa-file-word\", color: 'grey' },\n \"ott\": { icon: \"far fa-file-word\", color: 'grey' },\n \"gdoc\": { icon: \"far fa-file-word\", color: 'blue' },\n \"xls\": { icon: \"far fa-file-excel\", color: 'green' },\n \"xlsx\": { icon: \"far fa-file-excel\", color: 'green' },\n \"xlt\": { icon: \"far fa-file-excel\", color: 'green' },\n \"xltx\": { icon: \"far fa-file-excel\", color: 'green' },\n \"xlsm\": { icon: \"far fa-file-excel\", color: 'green' },\n \"xltm\": { icon: \"far fa-file-excel\", color: 'green' },\n \"gsheet\": { icon: \"far fa-file-excel\", color: 'darkgreen' },\n \"ods\": { icon: \"far fa-file-excel\", color: 'lightgreen' },\n \"ots\": { icon: \"far fa-file-excel\", color: 'lightgreen' },\n \"ppt\": { icon: \"far fa-file-powerpoint\", color: '#e64b30' },\n \"pptx\": { icon: \"far fa-file-powerpoint\", color: '#e64b30' },\n \"pptm\": { icon: \"far fa-file-powerpoint\", color: '#e64b30' },\n \"pptm2\": { icon: \"far fa-file-powerpoint\", color: '#e64b30' },\n \"pps\": { icon: \"far fa-file-powerpoint\", color: '#e64b30' },\n \"ppsx\": { icon: \"far fa-file-powerpoint\", color: '#e64b30' },\n \"ppsm\": { icon: \"far fa-file-powerpoint\", color: '#e64b30' },\n \"pot\": { icon: \"far fa-file-powerpoint\", color: '#e64b30' },\n \"potx\": { icon: \"far fa-file-powerpoint\", color: '#e64b30' },\n \"potm\": { icon: \"far fa-file-powerpoint\", color: '#e64b30' },\n \"odp\": { icon: \"far fa-file-powerpoint\", color: 'red' },\n \"otp\": { icon: \"far fa-file-powerpoint\", color: 'red' },\n \"gslides\": { icon: \"far fa-file-powerpoint\", color: 'orange' },\n \"pdf\": { icon: \"far fa-file-pdf\", color: '#ec2e2e' },\n \"jpg\": { icon: \"far fa-file-image\", color: '#4545bf' },\n \"jpeg\": { icon: \"far fa-file-image\", color: '#4545bf' },\n \"bmp\": { icon: \"far fa-file-image\", color: '#4545bf' },\n \"tiff\": { icon: \"far fa-file-image\", color: '#4545bf' },\n \"tif\": { icon: \"far fa-file-image\", color: '#4545bf' },\n \"gif\": { icon: \"far fa-file-image\", color: '#4545bf' },\n \"png\": { icon: \"far fa-file-image\", color: '#4545bf' },\n \"mp4\": { icon: \"far fa-file-video\", color: '#4545bf' },\n \"flv\": { icon: \"far fa-file-video\", color: '#4545bf' },\n \"swf\": { icon: \"far fa-file-video\", color: '#4545bf' },\n \"mts\": { icon: \"far fa-file-video\", color: '#4545bf' },\n \"divx\": { icon: \"far fa-file-video\", color: '#4545bf' },\n \"wmv\": { icon: \"far fa-file-video\", color: '#4545bf' },\n \"avi\": { icon: \"far fa-file-video\", color: '#4545bf' },\n \"mov\": { icon: \"far fa-file-video\", color: '#4545bf' },\n \"mpg\": { icon: \"far fa-file-video\", color: '#4545bf' },\n \"mpeg\": { icon: \"far fa-file-video\", color: '#4545bf' },\n \"asf\": { icon: \"far fa-file-video\", color: '#4545bf' },\n \"rm\": { icon: \"far fa-file-video\", color: '#4545bf' },\n \"mp3\": { icon: \"far fa-file-audio\", color: 'lightblue' },\n \"wav\": { icon: \"far fa-file-audio\", color: 'lightblue' },\n \"ogg\": { icon: \"far fa-file-audio\", color: 'lightblue' },\n \"wma\": { icon: \"far fa-file-audio\", color: 'lightblue' },\n \"aac\": { icon: \"far fa-file-audio\", color: 'lightblue' },\n \"m3u\": { icon: \"far fa-file-audio\", color: 'lightblue' },\n \"txt\": { icon: \"far fa-file-alt\", color: '#202020' },\n \"text\": { icon: \"far fa-file-alt\", color: '#202020' },\n \"xml\": { icon: \"far fa-file-code\", color: '#4545bf' },\n \"cs\": { icon: \"far fa-file-code\", color: '#4545bf' },\n \"java\": { icon: \"far fa-file-code\", color: '#4545bf' },\n \"cpp\": { icon: \"far fa-file-code\", color: '#4545bf' },\n \"c\": { icon: \"far fa-file-code\", color: '#4545bf' },\n \"h\": { icon: \"far fa-file-code\", color: '#4545bf' },\n \"hpp\": { icon: \"far fa-file-code\", color: '#4545bf' },\n \"js\": { icon: \"far fa-file-code\", color: '#4545bf' },\n \"ts\": { icon: \"far fa-file-code\", color: '#4545bf' },\n \"zip\": { icon: \"far fa-file-archive\", color: 'yellow' },\n \"7zip\": { icon: \"far fa-file-archive\", color: 'yellow' },\n \"7z\": { icon: \"far fa-file-archive\", color: 'yellow' },\n \"rar\": { icon: \"far fa-file-archive\", color: 'yellow' },\n \"gz\": { icon: \"far fa-file-archive\", color: 'yellow' },\n \"notes\": { icon: \"fas fa-file-invoice\", color: 'orange' },\n \"quickr\": { icon: \"fas fa-file-invoice\", color: 'orange' },\n \"email\": { icon: \"far fa-envelope\", color: 'black' },\n \"mail\": { icon: \"far fa-envelope\", color: 'black' },\n \"msg\": { icon: \"far fa-envelope\", color: 'black' },\n \"mdb\": { icon: \"far fa-database\", color: 'purple' },\n \"odb\": { icon: \"far fa-database\", color: 'darkred' },\n \"otb\": { icon: \"far fa-database\", color: 'darkred' },\n \"xsn\": { icon: \"fas fa-file-excel\", color: 'purple' },\n \"gform\": { icon: \"fas fa-file-excel\", color: 'purple' },\n \"one\": { icon: \"far fa-book\", color: 'purple' },\n \"odf\": { icon: \"fas fa-file-medical-alt\", color: 'grey' },\n \"otf\": { icon: \"fas fa-file-medical-alt\", color: 'grey' },\n \"vsdx\": { icon: \"far fa-object-group\", color: 'purple' },\n \"vsx\": { icon: \"far fa-object-group\", color: 'purple' },\n \"vtx\": { icon: \"far fa-object-group\", color: 'purple' },\n \"vdx\": { icon: \"far fa-object-group\", color: 'purple' },\n \"vssx\": { icon: \"far fa-object-group\", color: 'purple' },\n \"vstx\": { icon: \"far fa-object-group\", color: 'purple' },\n \"vsdm\": { icon: \"far fa-object-group\", color: 'purple' },\n \"vssm\": { icon: \"far fa-object-group\", color: 'purple' },\n \"vstm\": { icon: \"far fa-object-group\", color: 'purple' },\n \"vdw\": { icon: \"far fa-object-group\", color: 'purple' },\n \"vsd\": { icon: \"far fa-object-group\", color: 'purple' },\n \"vss\": { icon: \"far fa-object-group\", color: 'purple' },\n \"vst\": { icon: \"far fa-object-group\", color: 'purple' },\n \"odg\": { icon: \"far fa-object-group\", color: 'orange' },\n \"otg\": { icon: \"far fa-object-group\", color: 'orange' },\n \"gdraw\": { icon: \"far fa-object-group\", color: 'red' },\n \"pub\": { icon: \"far fa-object-group\", color: 'darkgreen' },\n \"ldap\": { icon: \"far fa-users\", color: 'brown' },\n \"ad\": { icon: \"far fa-users\", color: 'brown' },\n \"mmp\": { icon: \"fas fa-file-medical\", color: 'grey' },\n \"mppx\": { icon: \"fas fa-file-medical\", color: 'grey' },\n}","import { Component, Input, OnChanges, ViewEncapsulation } from '@angular/core';\nimport { defaultFormatIcons } from './icons';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'sq-format-icon',\n templateUrl: './format-icon.component.html',\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [CommonModule]\n})\nexport class FormatIconComponent implements OnChanges {\n\n @Input() extension: string;\n\n private _formatIcons = defaultFormatIcons;\n \n icon: string;\n\n ngOnChanges() {\n const icon = this.extension ? this._formatIcons[this.extension] : undefined;\n this.icon = icon?.icon || this._formatIcons.file.icon;\n }\n\n}\n","<span *ngIf=\"icon\" class=\"{{icon}}\"></span>","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { UtilsModule } from '@sinequa/components/utils';\nimport { Record } from '@sinequa/core/web-services';\nimport { FormatIconComponent } from '../format-icon/format-icon.component';\nimport { ChatContextAttachment, DocumentPart } from '../types';\n\n@Component({\n selector: 'sq-chat-reference',\n templateUrl: './chat-reference.component.html',\n styleUrls: ['./chat-reference.component.scss'],\n standalone: true,\n imports: [CommonModule, UtilsModule, FormatIconComponent]\n})\nexport class ChatReferenceComponent {\n\n @Input() reference: string;\n @Input() attachment: ChatContextAttachment;\n @Input() partId?: number;\n\n @Output() openDocument = new EventEmitter<Record>();\n @Output() openPreview = new EventEmitter<ChatContextAttachment>();\n\n get parts(): DocumentPart[] {\n if (!this.attachment) return [];\n return this.attachment.parts.filter(part => (!this.partId || part.partId === this.partId) && !!part.text);\n }\n\n expandAttachment() {\n if (this.partId) return;\n this.attachment['$expanded'] = !this.attachment['$expanded'];\n }\n}\n","<div [class.reference-tooltip]=\"!!partId\">\n <div class=\"reference-data\" [class.expanded]=\"attachment['$expanded'] || !!partId\">\n <span class=\"reference me-1\">{{reference}}</span>\n <sq-format-icon [extension]=\"attachment.record.fileext\"></sq-format-icon>\n <a [id]=\"'attachment-'+attachment.recordId\" (click)=\"expandAttachment()\">\n {{attachment.record.title}}\n </a>\n <i class=\"fas fa-eye\" (click)=\"openPreview.emit(attachment)\" [sqTooltip]=\"!partId ? 'Preview document' : ''\"></i>\n <i class=\"fas fa-arrow-up-right-from-square\" *ngIf=\"attachment.record.url1 || attachment.record.originalUrl\"\n (click)=\"openDocument.emit(attachment.record)\" [sqTooltip]=\"!partId ? 'Open document' : ''\"></i>\n </div>\n <div class=\"reference-passages\" *ngIf=\"!!partId || (attachment['$expanded']) && parts.length\">\n <div class=\"reference-passage\" *ngFor=\"let part of parts\">\n <span class=\"reference me-1\">{{reference}}.{{part.partId}}</span>\n <span [innerHTML]=\"part.text\"></span>\n </div>\n </div>\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ChangeDetectorRef, AfterViewInit, ElementRef } from \"@angular/core\";\nimport { PrincipalWebService, Record } from \"@sinequa/core/web-services\";\nimport { SearchService } from \"@sinequa/components/search\";\nimport { ChatContextAttachment, ChatMessage } from \"../types\";\n\nimport { unified, Processor } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport { visit, CONTINUE, EXIT } from \"unist-util-visit\";\nimport { Text, Parent, Content } from \"mdast\";\nimport { Node } from \"unist\";\nimport { UIService, UtilsModule } from \"@sinequa/components/utils\";\nimport remarkGfm from \"remark-gfm\";\nimport { CommonModule } from \"@angular/common\";\nimport { CollapseModule } from \"@sinequa/components/collapse\";\nimport { RemarkModule } from \"ngx-remark\";\nimport { InitialsAvatarComponent } from \"../initials-avatar/initials-avatar.component\";\nimport { ChatReferenceComponent } from \"../chat-reference/chat-reference.component\";\n\ndeclare module Prism {\n function highlightAllUnder(el: HTMLElement): void;\n}\n\n@Component({\n selector: \"sq-chat-message\",\n templateUrl: \"./chat-message.component.html\",\n styleUrls: [\"./chat-message.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, UtilsModule, CollapseModule, RemarkModule,\n InitialsAvatarComponent, ChatReferenceComponent]\n})\nexport class ChatMessageComponent implements OnChanges, AfterViewInit {\n @Input() message: ChatMessage;\n @Input() conversation: ChatMessage[];\n @Input() assistantIcon: string;\n @Input() streaming: boolean;\n @Input() canEdit: boolean = false;\n @Input() canRegenerate: boolean = false;\n @Input() canCopy: boolean = false;\n @Output() referenceClicked = new EventEmitter<Record>();\n @Output() edit = new EventEmitter<ChatMessage>();\n @Output() regenerate = new EventEmitter<ChatMessage>();\n @Output() openPreview = new EventEmitter<ChatContextAttachment>();\n\n processor: Processor;\n\n references: string[] = [];\n referenceMap = new Map<string, ChatContextAttachment>();\n showReferences: boolean = true;\n collapseProgress: boolean;\n\n get name(): string {\n return !this.principalService.principal ? ''\n : this.principalService.principal['fullName'] as string || this.principalService.principal.name;\n }\n\n constructor(\n public searchService: SearchService,\n public ui: UIService,\n public principalService: PrincipalWebService,\n public cdr: ChangeDetectorRef,\n public el: ElementRef\n ) { }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.streaming) {\n this.collapseProgress = !this.streaming;\n }\n\n if (changes.message && this.message.role === \"assistant\") {\n this.references = [];\n this.referenceMap.clear();\n for (let m of this.conversation) {\n if (m.additionalProperties.$attachment) {\n for (const attachment of m.additionalProperties.$attachment) {\n this.referenceMap.set('' + attachment.contextId, { ...attachment, $partId: attachment.parts?.[0].partId });\n for (let i = 0; i < attachment.parts.length; i++) {\n const refId = `${attachment.contextId}.${attachment.parts[i].partId}`;\n this.referenceMap.set(refId, { ...attachment, $partId: attachment.parts[i].partId });\n }\n }\n }\n }\n\n this.processor = unified()\n .use(remarkParse)\n .use(remarkGfm)\n .use(() => this.referencePlugin);\n\n if (this.streaming) {\n this.processor = this.processor.use(() => this.placeholderPlugin);\n }\n }\n }\n\n ngAfterViewInit(): void {\n Prism?.highlightAllUnder?.(this.el.nativeElement);\n }\n\n openDocument(record: Record) {\n const url = record.url1 || record.originalUrl;\n if (url) {\n // Open the URL in a new tab\n window.open(url, '_blank');\n }\n this.referenceClicked.emit(record);\n }\n\n /**\n * This Unified plugin looks a text nodes and replaces any reference in the\n * form [1], [2.3], etc. with custom nodes of type \"chat-reference\".\n */\n referencePlugin = (tree: Node) => {\n\n const references = new Set<number>();\n\n // Visit all text nodes\n visit(tree, \"text\", (node: Text, index: number, parent: Parent) => {\n let text = node.value;\n\n text = this.reformatReferences(text);\n const matches = this.getReferenceMatches(text);\n\n // Quit if no references were found\n if (matches.length === 0) {\n return CONTINUE;\n }\n\n const nodes: (Content & { end: number })[] = [];\n\n for (let match of matches) {\n const refId = match[1].trim();\n const [ref] = refId.split(\".\");\n // We find a valid reference in the text\n if (!isNaN(+ref)) {\n references.add(+ref); // Add it to the set of used references\n\n // If needed, insert a text node before the reference\n const current = nodes.at(-1) ?? { end: 0 };\n if (match.index! > current.end) {\n nodes.push({ type: \"text\", value: text.substring(current.end, match.index!), end: match.index! });\n }\n\n // Add a custom reference node\n nodes.push({ type: \"chat-reference\", refId, end: match.index! + match[0].length } as any);\n }\n }\n\n // Quit if no references were found\n if (nodes.length === 0) {\n return CONTINUE;\n }\n\n if (nodes.at(-1)!.end < text.length) {\n nodes.push({ type: \"text\", value: text.substring(nodes.at(-1)!.end, text.length), end: text.length });\n }\n\n // Delete the current text node from the parent and replace it with the new nodes\n parent.children.splice(index, 1, ...nodes);\n\n return index + nodes.length; // Visit the next node after the inserted ones\n });\n\n if (references.size > 0) {\n this.references = Array.from(references.values())\n .sort((a, b) => a - b)\n .map(r => '' + r);\n this.cdr.detectChanges();\n }\n\n return tree;\n }\n\n placeholderPlugin = (tree: Node) => {\n\n visit(tree, \"text\", (node: Text, index: number, parent: Parent) => {\n parent.children.push({ type: \"streaming-placeholder\" } as any);\n return EXIT;\n }, true);\n\n return tree;\n }\n\n /**\n * Reformat [ids: 12.2, 42.5] to [12.2][42.5]\n */\n reformatReferences(content: string) {\n return content.replace(/\\[(?:ids?:?\\s*)?(?:documents?:?\\s*)?(\\s*(?:,?\\s*\\d+(?:\\.\\d+)?(?:\\.part)?\\s*)+)\\]/g,\n (str, match: string) => `[${match.replace(/\\.part/g, \"\").split(',').join(\"] [\")}]`\n );\n }\n\n /**\n * Match all references in a given message\n */\n getReferenceMatches(content: string) {\n return Array.from(content.matchAll(/\\[(\\s*\\d+(?:\\.\\d+)?\\s*)\\]/g));\n }\n\n copyToClipboard(text: string) {\n this.ui.copyToClipboard(text);\n }\n}\n","<!-- Message icon -->\n<span class=\"message-icon\" [title]=\"message.role\">\n <i [ngClass]=\"assistantIcon\" [style.--sq-size.px]=\"24\" *ngIf=\"message.role === 'assistant'\"></i>\n <sq-initials-avatar [fullName]=\"name\" *ngIf=\"message.role !== 'assistant'\"></sq-initials-avatar>\n</span>\n\n<!-- Message body -->\n<div class=\"flex-grow-1\" style=\"min-width: 0;\" [ngClass]=\"'message-'+message.role\">\n\n <div *ngIf=\"message.additionalProperties.$progress as progress\" class=\"small ms-3 mb-2\">\n <a href=\"#\" (click)=\"collapseProgress = !collapseProgress; false\" class=\"text-muted\">\n View progress\n <i class=\"fas fa-chevron-{{collapseProgress? 'right' : 'down'}}\"></i>\n </a>\n <sq-collapse [collapsed]=\"collapseProgress\">\n <ng-template>\n <ul class=\"list-unstyled\">\n <li *ngFor=\"let step of progress\" [title]=\"step.time ?? ''\">\n <i class=\"fas fa-fw fa-check text-success\" *ngIf=\"step.done\"></i>\n <i class=\"fas fa-fw fa-spin fa-circle-notch\" *ngIf=\"!step.done\"></i>\n <span class=\"ms-2 fw-bold\">{{step.title}}</span>\n <span *ngIf=\"step.content\">: {{step.content}}</span>\n </li>\n </ul>\n </ng-template>\n </sq-collapse>\n </div>\n\n <div class=\"message-content\" *ngIf=\"message.content\">\n\n <remark *ngIf=\"message.role === 'assistant'\" [markdown]=\"message.content\" [processor]=\"processor\">\n\n <ng-template remarkTemplate=\"chat-reference\" let-ref>\n\n <a *ngIf=\"referenceMap.get(ref.refId) as attachment; else staticRefTpl\"\n (click)=\"openDocument(attachment.record)\"\n class=\"reference\"\n [sqTooltip]=\"attachment\"\n [sqTooltipTemplate]=\"tooltipTpl\"\n [hoverableTooltip]=\"true\"\n >{{ref.refId}}</a>\n\n <ng-template #staticRefTpl>\n <span class=\"reference\">{{ref.refId}}</span>\n </ng-template>\n\n </ng-template>\n\n <ng-template remarkTemplate=\"streaming-placeholder\">\n <span class=\"placeholder-glow\" *ngIf=\"streaming\">\n <span class=\"placeholder ms-1\"></span>\n </span>\n </ng-template>\n\n <ng-template remarkTemplate=\"code\" let-node>\n <div class=\"card mb-2\">\n <div class=\"card-header d-flex justify-content-between align-items-center\">\n <span>{{node.lang}}</span>\n <button class=\"btn btn-light btn-sm\" (click)=\"copyToClipboard(node.value)\"><i class=\"far fa-fw fa-clipboard\"></i> Copy code</button>\n </div>\n <pre class=\"language-{{node.lang}} my-0 rounded-0 rounded-bottom\"><code class=\"language-{{node.lang}}\">{{node.value}}</code></pre>\n </div>\n </ng-template>\n\n </remark>\n\n <p *ngIf=\"message.role === 'user'\">{{message.content}}</p>\n\n <!-- List of reference, if any -->\n <div *ngIf=\"references?.length\" class=\"references\">\n <span class=\"references-title\">References</span> <i class=\"fas references-collapse\" [class.fa-chevron-down]=\"showReferences\" [class.fa-chevron-right]=\"!showReferences\" (click)=\"showReferences=!showReferences\"></i>\n <sq-collapse [collapsed]=\"!showReferences\">\n <ng-template>\n <ul>\n <ng-container *ngFor=\"let reference of references\">\n <li *ngIf=\"referenceMap.get(reference) as attachment\" class=\"text-truncate\">\n <sq-chat-reference [class.expanded]=\"attachment.$expanded\" [attachment]=\"attachment\" [reference]=\"reference\"\n (openPreview)=\"openPreview.emit($event)\" (openDocument)=\"openDocument($event)\"></sq-chat-reference>\n </li>\n </ng-container>\n </ul>\n </ng-template>\n </sq-collapse>\n </div>\n \n </div>\n\n <!-- Edit / Regenerate floating actions -->\n <div class=\"sq-chat-message-action\">\n <button class=\"btn btn-sm\" *ngIf=\"canEdit\" sqTooltip=\"Edit message\"\n (click)=\"edit.emit(message)\">\n <i class=\"fas fa-edit\"></i>\n </button>\n <button class=\"btn btn-sm\" *ngIf=\"canCopy\" sqTooltip=\"Copy to clipboard\"\n (click)=\"copyToClipboard(message.content)\">\n <i class=\"far fa-clipboard\"></i>\n </button>\n <button class=\"btn btn-sm\" *ngIf=\"canRegenerate\" sqTooltip=\"Regenerate message\"\n (click)=\"regenerate.emit(message)\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n\n <ng-template #tooltipTpl let-ref>\n <sq-chat-reference class=\"expanded\"\n [attachment]=\"ref\"\n [reference]=\"ref.contextId\"\n [partId]=\"ref.$partId\"\n (openPreview)=\"openPreview.emit($event)\"\n (openDocument)=\"openDocument($event)\">\n </sq-chat-reference>\n </ng-template>\n\n</div>\n","import { Injectable, inject } from '@angular/core';\nimport { ChatService } from './chat.service';\nimport { Observable, catchError, filter, finalize, forkJoin, map, shareReplay, switchMap, tap, throwError } from 'rxjs';\nimport { ActionMessage, ChatMessage, ChatPayload, ChatProgress, ChatResponse, GllmFunction, GllmModelDescription, HttpChatResponse, SavedChatHistory } from './types';\nimport { JsonMethodPluginService } from '@sinequa/core/web-services';\n\n@Injectable()\nexport class RestChatService extends ChatService {\n\n public jsonMethodWebService = inject(JsonMethodPluginService);\n\n constructor() {\n super();\n }\n\n /**\n * Initialize the chat process after the login is complete.\n * It listens for the 'login-complete' event, initializes necessary URL, and performs parallel requests for models, functions and quota data.\n * @returns An Observable<boolean> indicating the success of the initialization process.\n */\n init(): Observable<boolean> {\n return this.loginService.events.pipe(\n filter((e) => e.type === 'login-complete'),\n tap(() => this.getRequestsUrl()),\n // Execute parallel requests for models and functions\n switchMap(() =>\n forkJoin([\n this.listModels(),\n this.listFunctions()\n ])\n ),\n // Map the results of parallel requests to a boolean indicating success\n map(([models, functions]) => !!models && !!functions),\n // Any errors during the process are caught, logged, and re-thrown to propagate the error further\n catchError((error) => {\n console.error('Error occurred:', error);\n return throwError(() => error);\n }),\n // cache and replay the emitted value for subsequent subscribers, ensuring the initialization logic is only executed once even if there are multiple subscribers\n shareReplay(1)\n );\n }\n\n /**\n * Define the GLLM plugin to use for the http requests\n * It can be overridden by the app config\n */\n getRequestsUrl() {\n if (this.chatConfig$.value!.globalSettings.restEndpoint) {\n this.REQUEST_URL = this.chatConfig$.value!.globalSettings.restEndpoint;\n } else {\n throw new Error(`The property 'restEndpoint' must be provided when attempting to use 'REST' in assistant instance`);\n }\n }\n\n listModels(): Observable<GllmModelDescription[] | undefined> {\n const data = {\n action: \"listmodels\",\n debug: this.chatConfig$.value!.debug\n };\n return this.jsonMethodWebService.get(this.REQUEST_URL, data).pipe(\n map(res => res.models),\n tap(models => this.models = models?.filter(model => !!model.enable)),\n catchError((error) => {\n console.error('Error invoking listmodels:', error);\n return throwError(() => error);\n })\n );\n }\n\n listFunctions(): Observable<GllmFunction[] | undefined> {\n const data = {\n action: \"listfunctions\",\n debug: this.chatConfig$.value!.debug\n };\n return this.jsonMethodWebService.get(this.REQUEST_URL, data).pipe(\n map(res => res.functions),\n tap(functions => this.functions = functions),\n catchError((error) => {\n console.error('Error invoking listfunctions:', error);\n return throwError(() => error);\n })\n );\n }\n\n fetch(messages: ChatMessage[], query = this.searchService.query): Observable<ChatResponse> {\n // Start streaming by invoking the Chat method\n this.streaming$.next(true);\n\n // Prepare the payload to send to the Chat method\n const data: ChatPayload & {action: \"chat\"} = {\n action: \"chat\",\n history: messages,\n functions: this.chatConfig$.value!.functions,\n debug: this.chatConfig$.value!.debug,\n serviceSettings: this.chatConfig$.value!.serviceSettings,\n contextSettings: {\n ...this.chatConfig$.value!.contextSettings,\n app: this.appService.appName,\n query\n }\n }\n if (this.chatConfig$.value!.saveChats) {\n data.instanceId = this.chatInstanceId;\n data.savedChatId = this.savedChatId;\n }\n\n // Request the Chat endpoint\n return this.jsonMethodWebService.post(this.REQUEST_URL, data).pipe(\n tap((res: HttpChatResponse) => {\n if(res.quota.maxQuotaReached) {\n const msg = `Sorry, you have exceeded the allowed quota. Please retry starting from ${this.formatDateTime(res.quota.nextResetUTC)}.`;\n this.notificationsService.error(msg);\n throw new Error(msg);\n }\n }),\n map((res: HttpChatResponse) => {\n // Define $progress from the actions property of the response\n let $progress: ChatProgress[] | undefined;\n if( res.actions?.length > 0) {\n const actions: ActionMessage[] = Object.values(res.actions.reduce((acc, item) => {\n acc[item.guid] = { ...(acc[item.guid] || {}), ...item };\n return acc;\n }, {}));\n $progress = actions.map((a) => ({\n title: a.displayName ?? \"\",\n content: a.displayValue ?? \"\",\n done: a.executionTime !== undefined,\n time: a.executionTime,\n }))\n }\n // Define the response message\n const response = {...(res.history as Array<ChatMessage>).at(-1), additionalProperties: {display: true}} as ChatMessage;\n if($progress) {\n response.additionalProperties.$progress = $progress;\n }\n if(res.context) {\n response.additionalProperties.$attachment = res.context.map((ctx) => ctx.additionalProperties);\n }\n // Update the chat history with the history property of the res\n this.chatHistory = res.history;\n // Return the result\n return { history: [...messages, response], executionTime: res.executionTime };\n }),\n tap(() => this.notifyAudit(this.chatHistory!, this.chatConfig$.value!.serviceSettings.service_id)),\n finalize(() => this.streaming$.next(false))\n );\n }\n\n listSavedChat(): void {\n const data = {\n action: \"SavedChatList\",\n instanceId: this.chatInstanceId,\n debug: this.chatConfig$.value!.debug\n };\n this.jsonMethodWebService.get(this.REQUEST_URL, data).subscribe(\n res => this.savedChats$.next(res.savedChats),\n error => {\n console.error('Error occurred while calling the SavedChatList API:', error);\n this.notificationsService.error('Error occurred while calling the SavedChatList API');\n }\n );\n }\n\n getSavedChat(id: string): Observable<SavedChatHistory | undefined> {\n const data = {\n action: \"SavedChatGet\",\n instanceId: this.chatInstanceId,\n savedChatId: id,\n debug: this.chatConfig$.value!.debug\n };\n return this.jsonMethodWebService.get(this.REQUEST_URL, data).pipe(\n map(res => res.savedChat),\n catchError((error) => {\n console.error('Error occurred while calling the SavedChatGet API:', error);\n this.notificationsService.error('Error occurred while calling the SavedChatGet API');\n return throwError(() => error);\n })\n );\n }\n\n deleteSavedChat(ids: string[]): Observable<number> {\n const data = {\n action: \"SavedChatDelete\",\n instanceId: this.chatInstanceId,\n savedChatIds: ids,\n debug: this.chatConfig$.value!.debug\n };\n return this.jsonMethodWebService.post(this.REQUEST_URL, data).pipe(\n map(res => res.deletedCount),\n catchError((error) => {\n console.error('Error occurred while calling the SavedChatDelete API:', error);\n this.notificationsService.error('Error occurred while calling the SavedChatDelete API ');\n return throwError(() => error);\n })\n );\n }\n\n}\n","import { inject, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TemplateRef, ViewChild } from \"@angular/core\";\nimport { Action } from \"@sinequa/components/action\";\nimport { AbstractFacet } from \"@sinequa/components/facet\";\nimport { SearchService } from \"@sinequa/components/search\";\nimport { Query } from \"@sinequa/core/app-utils\";\nimport { PrincipalWebService, Record } from \"@sinequa/core/web-services\";\nimport { BehaviorSubject, Subscription, filter, finalize, fromEvent, map, merge, switchMap, tap } from \"rxjs\";\nimport { ChatService } from \"./chat.service\";\nimport { ChatContextAttachment, ChatConfig, ChatMessage, GllmModelDescription, MessageHandler, RawMessage } from \"./types\";\nimport { InstanceManagerService } from \"./instance-manager.service\";\nimport { WebSocketChatService } from \"./websocket-chat.service\";\nimport { ChatMessageComponent } from \"./chat-message/chat-message.component\";\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\nimport { LoginService } from \"@sinequa/core/login\";\nimport { RestChatService } from \"./rest-chat.service\";\n\nexport interface InitChat {\n messages: RawMessage[];\n}\n\n@Component({\n selector: 'sq-chat-v3', // mandatory since @sinequa/components already has the same tag-name \"sq-chat\"\n templateUrl: './chat.component.html',\n styleUrls: ['./chat.component.scss'],\n providers: [\n RestChatService,\n WebSocketChatService\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, FormsModule, ChatMessageComponent]\n})\nexport class ChatComponent extends AbstractFacet implements OnInit, OnChanges, OnDestroy {\n /** Define the key based on it, the chat service instance will be stored */\n @Input() instanceId: string;\n /** Define the query to use to fetch answers */\n @Input() query?: Query;\n /** Define the protocol to be used for this chat instance*/\n @Input() protocol: 'REST' | 'WEBSOCKET' = \"WEBSOCKET\";\n /** Map of listeners overriding default registered ones*/\n @Input() messageHandlers: Map<string, MessageHandler<any>> = new Map();\n /** When the assistant answer a user question, automatically scroll down to the bottom of the discussion */\n @Input() automaticScrollToLastResponse = false;\n @Input() chat?: InitChat;\n @Input() enableChat = true;\n @Input() showCredits = true;\n @Input() customAssistantIcon = '';\n @Output() data = new EventEmitter<ChatMessage[]>();\n @Output() referenceClicked = new EventEmitter<Record>();\n @Output() openPreview = new EventEmitter<ChatContextAttachment>();\n @Output(\"loading\") loading$ = new EventEmitter<boolean>(false);\n @Output() error = new EventEmitter<any>();\n @Output(\"config\") _config = new EventEmitter<ChatConfig>();\n\n @ViewChild('messageList') messageList?: ElementRef<HTMLUListElement>;\n @ViewChild('questionInput') questionInput?: ElementRef<HTMLInputElement>;\n\n @ContentChild('loadingTpl') loadingTpl?: TemplateRef<any>;\n\n chatService: ChatService;\n config: ChatConfig;\n messages$ = new BehaviorSubject<ChatMessage[] | undefined>(undefined);\n\n question = '';\n\n _actions: Action[] = [];\n\n sub = new Subscription();\n dataSubscription: Subscription | undefined;\n\n /** Variables that depend on the type of model in use */\n modelDescription?: GllmModelDescription;\n assistantIcon: string;\n privacyUrl: string;\n\n messageToEdit?: number;\n changes$ = new BehaviorSubject<SimpleChanges | undefined>(undefined);\n currentMessageIndex: number | undefined;\n handleFirstChanges = false;\n isAtBottom = true;\n initializationError = false;\n\n public loginService = inject(LoginService);\n public websocketService = inject(WebSocketChatService);\n public restService = inject(RestChatService);\n public instanceManagerService = inject(InstanceManagerService);\n public searchService = inject(SearchService);\n public principalService = inject(PrincipalWebService);\n public cdr = inject(ChangeDetectorRef);\n\n constructor() {\n super();\n\n this._actions.push(new Action({\n icon: 'fas fa-sync',\n title: 'Reset chat',\n action: () => this.loadDefaultChat()\n }));\n }\n\n ngOnInit(): void {\n this.sub.add(\n this.loginService.events.pipe(\n filter(e => e.type === 'login-complete'),\n tap(_ => this.instantiateChatService()),\n map(_ => this.chatService.initChatConfig()),\n switchMap(() => this.chatService.initConfig$),\n filter(initConfig => !!initConfig),\n switchMap(_ => this.chatService.init()),\n filter(success => !!success),\n tap(_ => this.onLoadChat()),\n switchMap(_ => this.chatService.chatConfig$),\n tap(config => {\n this.config = config!;\n this._config.emit(config);\n try {\n this.updateModelDescription();\n if(!this.handleFirstChanges) {\n this.handleChanges();\n this.addScrollListener();\n this.handleFirstChanges = true;\n }\n } catch (error) {\n this.initializationError = true\n throw error;\n }\n })\n ).subscribe()\n );\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.changes$.next(changes);\n if (this.config) {\n this.handleChanges();\n }\n }\n\n ngOnDestroy(): void {\n this.sub.unsubscribe();\n this.dataSubscription?.unsubscribe();\n }\n\n instantiateChatService(): void {\n switch (this.protocol) {\n case 'REST':\n this.chatService = this.restService;\n break;\n case 'WEBSOCKET':\n this.chatService = this.websocketService;\n break;\n default:\n throw new Error(`Could not found a ChatService implementation corresponding to the provided protocol: '${this.protocol}'`);\n }\n this.chatService.setChatInstanceId(this.instanceId);\n this.instanceManagerService.storeInstance(this.instanceId, this.chatService);\n }\n\n override get actions() { return this._actions; }\n\n private handleChanges() {\n const changes = this.changes$.value;\n if (changes?.messageHandlers && this.messageHandlers && this.chatService instanceof WebSocketChatService) {\n this.chatService.overrideMessageHandlers(this.messageHandlers);\n }\n if (!this.messages$.value || changes?.chat) {\n // Load the chat\n this.chat ? this.openChat(this.chat.messages) : this.loadDefaultChat();\n }\n }\n\n private addScrollListener() {\n this.sub.add(\n merge(this.loading$, this.messages$, this.chatService.streaming$, fromEvent(this.messageList!.nativeElement, 'scroll')).subscribe(() => {\n this.isAtBottom = this.toggleScrollButtonVisibility();\n this.cdr.detectChanges();\n })\n );\n }\n\n updateModelDescription() {\n this.modelDescription = this.chatService.getModel(this.config.serviceSettings.service_id, this.config.serviceSettings.model_id);\n this.assistantIcon = !!this.customAssistantIcon ? this.customAssistantIcon : 'sq-sinequa';\n switch(this.modelDescription?.provider) {\n case 'Google':\n this.privacyUrl = '';\n break;\n case 'AzureOpenAI':\n this.privacyUrl = 'https://learn.microsoft.com/en-us/legal/cognitive-services/openai/data-privacy';\n break;\n case 'OpenAI':\n this.privacyUrl = 'https://openai.com/enterprise-privacy';\n break;\n case 'Cohere':\n this.privacyUrl = 'https://cohere.com/security';\n break;\n }\n this.cdr.detectChanges();\n }\n\n submitQuestion() {\n if(this.question.trim() && this.messages$.value && this.chatService.chatHistory) {\n if (this.messageToEdit !== undefined) {\n // Update the messages in the UI\n this.messages$.next(this.messages$.value.slice(0, this.messageToEdit));\n // Update the raw messages in the chat history which is the clean version used to make the next request\n this.chatService.chatHistory = this.chatService.chatHistory.slice(0, this.messageToEdit);\n this.messageToEdit = undefined;\n }\n // Re-attach the $progress and $attachment of the last response to the last assistant's response in the chat history\n this.chatService.chatHistory.at(-1)!.additionalProperties.$progress = this.messages$.value.at(-1)!.additionalProperties.$progress;\n this.chatService.chatHistory.at(-1)!.additionalProperties.$attachment = this.messages$.value.at(-1)!.additionalProperties.$attachment;\n // Fetch the answer\n this.fetchAnswer(this.question.trim(), this.chatService.chatHistory!);\n // Clear the input value in the UI\n this.questionInput!.nativeElement.value = '';\n }\n }\n\n private fetchAnswer(question: string, conversation: ChatMessage[]) {\n const userMsg = {role: 'user', content: question, additionalProperties: {display: true}};\n const messages = [...conversation, userMsg];\n this.messages$.next(messages);\n this.fetch(messages);\n }\n\n /**\n * Given a list of messages, fetch the server for a continuation and updates\n * the list of messages accordingly.\n * @param messages\n */\n public fetch(messages: ChatMessage[]) {\n this.cdr.detectChanges();\n this.loading$.next(true);\n this.dataSubscription?.unsubscribe();\n this.dataSubscription = this.chatService.fetch(messages, this.query)\n .subscribe({\n next: res => this.updateData(res.history),\n error: err => {\n this.terminateFetch();\n console.error(err);\n this.error.emit(err);\n },\n complete: () => {\n this.terminateFetch();\n }\n });\n\n if(this.automaticScrollToLastResponse) {\n this.scrollDown();\n }\n }\n\n /**\n * Update the UI with the new messages\n * @param messages\n */\n updateData(messages: ChatMessage[]) {\n this.messages$.next(messages);\n this.data.emit(messages);\n this.loading$.next(false);\n this.question = '';\n if(this.automaticScrollToLastResponse) {\n this.scrollDown();\n }\n }\n\n private toggleScrollButtonVisibility(): boolean {\n if(this.messageList?.nativeElement) {\n return Math.round(this.messageList?.nativeElement.scrollHeight - this.messageList?.nativeElement.scrollTop - 1) <= this.messageList?.nativeElement.clientHeight;\n }\n return true;\n }\n\n scrollDown() {\n setTimeout(() => {\n if(this.messageList?.nativeElement) {\n this.messageList.nativeElement.scrollTop = this.messageList.nativeElement.scrollHeight;\n this.cdr.detectChanges();\n }\n }, 10);\n }\n\n newChat() {\n this.chatService.listSavedChat(); // Refresh the list of saved chats\n this.loadDefaultChat(); // Start a new chat\n }\n\n loadDefaultChat() {\n this.openChat([\n {role: 'system', content: this.config.uiSettings.systemPrompt, additionalProperties: {display: false}},\n {role: 'user', content: ChatService.formatPrompt(this.config.uiSettings.userPrompt, {principal: this.principalService.principal}), additionalProperties: {display: true}},\n ]);\n }\n\n openChat(messages: RawMessage[], chatId?: string) {\n if (!messages || !Array.isArray(messages)) {\n console.error('Error occurs while trying to load the chat discussion. Invalid messages received :', messages);\n return;\n }\n this.chatService.setSavedChatId(chatId || ChatService.generateGUID());\n this.resetChat();\n this.messages$.next(messages);\n this.chatService.chatHistory = messages;\n const lastMessage = messages.at(-1);\n if(lastMessage && lastMessage.role === 'user') {\n this.fetch(messages); // If the last message if from a user, an answer from the assistant is expected\n }\n else {\n this.updateData(messages); // If the last message if from the assistant, we can load the conversation right away\n this.terminateFetch();\n }\n }\n\n resetChat() {\n if(this.messages$.value) {\n this.messages$.next(undefined); // Reset chat\n }\n this.chatService.chatHistory = undefined; // Reset chat history\n this.question = '';\n this.terminateFetch();\n }\n\n onLoadChat() {\n this.loading$.next(true);\n this.sub.add(\n this.chatService.loadSavedChat$\n .pipe(\n filter(savedChat => !!savedChat),\n switchMap(savedChat => this.chatService.getSavedChat(savedChat!.id)),\n filter(savedChatHistory => !!savedChatHistory),\n tap(savedChatHistory => this.openChat(savedChatHistory!.History, savedChatHistory!.id)),\n finalize(() => this.chatService.listSavedChat()) // Refresh the list of saved chats\n ).subscribe()\n );\n }\n\n terminateFetch() {\n this.dataSubscription?.unsubscribe();\n this.dataSubscription = undefined;\n this.loading$.next(false);\n setTimeout(() => {\n this.questionInput?.nativeElement.focus();\n })\n this.cdr.detectChanges();\n }\n\n editMessage(index: number) {\n this.messageToEdit = index;\n this.question = this.chatService.chatHistory![index].content;\n this.questionInput?.nativeElement.focus();\n }\n\n regenerateMessage(index: number) {\n // Define the chat history based on which the assistant will generate a new answer\n const slicedMessages = this.chatService.chatHistory!.slice(0, index);\n // Accordingly update the messages in the UI\n this.messages$.next(slicedMessages);\n // Fetch the answer\n this.fetch(slicedMessages);\n }\n\n onKeyUp(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowUp':\n this.navigateMessage(-1);\n break;\n case 'ArrowDown':\n this.navigateMessage(1);\n break;\n case 'Enter':\n this.submitQuestion();\n break;\n default:\n break;\n }\n\n // Handle Shift + Enter\n if (event.shiftKey && event.key === 'Enter') {\n this.submitQuestion();\n }\n }\n\n private navigateMessage(direction: number): void {\n if (!this.chatService.chatHistory || this.chatService.chatHistory.length < 1) {\n return;\n }\n const userMessages = this.chatService.chatHistory.filter(m => m.role === 'user');\n\n if (userMessages.length < 1) {\n return;\n }\n\n this.currentMessageIndex = (this.currentMessageIndex ?? userMessages.length) + direction;\n\n if (this.currentMessageIndex < 0) {\n // If the user presses up arrow on the first message, stay at the first message\n this.currentMessageIndex = 0;\n } else if (this.currentMessageIndex >= userMessages.length) {\n // If the user presses down arrow on the last previous message, clear the input\n this.currentMessageIndex = undefined;\n this.question = '';\n return;\n }\n\n this.question = userMessages[this.currentMessageIndex].content;\n }\n}\n","\n<ng-container *ngIf=\"!initializationError\">\n <div *ngIf=\"messages$ | async as messages; else loadingTpl || loadingTplDefault\" class=\"h-100 d-flex flex-column\">\n\n <ul class=\"list-group list-group-flush overflow-auto pb-5\" #messageList>\n <ng-container *ngFor=\"let message of messages; let index = index; let last = last\">\n <!-- Regular messages -->\n <li class=\"list-group-item\" *ngIf=\"message.additionalProperties.display\"\n [class.opacity-50]=\"messageToEdit && messageToEdit < index + 1\">\n <sq-chat-message\n [class.sq-user-message]=\"message.role !== 'assistant'\"\n [message]=\"message\"\n [conversation]=\"messages\"\n [assistantIcon]=\"customAssistantIcon || assistantIcon\"\n [streaming]=\"last && (chatService.streaming$ | async)\"\n [canEdit]=\"(loading$ | async) === false && (chatService.streaming$ | async) === false && messageToEdit === undefined && message.role !== 'assistant'\"\n [canRegenerate]=\"(loading$ | async) === false && (chatService.streaming$ | async) === false && messageToEdit === undefined && message.role === 'assistant' && last\"\n [canCopy]=\"!(last && (chatService.streaming$ | async)) && messageToEdit === undefined && message.role === 'assistant'\"\n (edit)=\"editMessage(index)\" (regenerate)=\"regenerateMessage(index)\"\n (referenceClicked)=\"referenceClicked.emit($event)\"\n (openPreview)=\"openPreview.emit($event)\">\n </sq-chat-message>\n </li>\n </ng-container>\n\n <li class=\"list-group-item\" *ngIf=\"(loading$ | async) === true\">\n <ng-container *ngTemplateOutlet=\"loadingTpl || loadingTplDefault\"></ng-container>\n </li>\n </ul>\n\n <div class=\"user-input mt-auto\" *ngIf=\"enableChat\">\n <div class=\"py-2\">\n <ng-container *ngTemplateOutlet=\"inputTpl\"></ng-container>\n <div class=\"text-end small text-muted px-3\" *ngIf=\"showCredits\">\n powered by {{modelDescription?.displayName}} <ng-container *ngIf=\"privacyUrl\"> - <a [href]=\"privacyUrl\" target=\"_blank\">privacy notice</a></ng-container>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n\n<!-- NG TEMPLATES-->\n\n<ng-template #loadingTplDefault>\n <div class=\"spinner-grow text-success d-block mx-auto my-5\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n</ng-template>\n\n<ng-template #inputTpl>\n <div class=\"px-3 py-1\">\n <div class=\"ast-input-container\">\n <i class=\"fas fa-search\"></i>\n <input #questionInput\n type=\"text\" class=\"form-control\"\n placeholder=\"Ask something\" autofocus\n [(ngModel)]=\"question\"\n (keyup)=\"onKeyUp($event)\"\n [disabled]=\"(loading$ | async) || (chatService.streaming$ | async)\">\n <button\n *ngIf=\"!(chatService.streaming$ | async) && !(loading$ | async)\"\n type=\"button\"\n class=\"btn btn-light ms-2\"\n title=\"Send message\"\n (click)=\"submitQuestion()\">\n <i class=\"fas fa-paper-plane\"></i>\n </button>\n <!--<button\n *ngIf=\"(chatService.streaming$ | async)\"\n type=\"button\"\n class=\"btn btn-light ms-2\"\n title=\"Stop generating\"\n (click)=\"terminateFetch()\">\n <i class=\"fas fa-stop\"></i>\n </button>-->\n <button\n *ngIf=\"messageToEdit\"\n type=\"button\"\n class=\"btn btn-light ms-2\"\n title=\"Cancel edition\"\n (click)=\"messageToEdit = undefined; question = ''\">\n <i class=\"fas fa-undo-alt\"></i>\n </button>\n <div class=\"sq-floating-scroll\" *ngIf=\"!isAtBottom\">\n <button class=\"btn shadow\" (click)=\"scrollDown()\">\n <i class=\"fas fa-angle-double-down\"></i>\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, inject } from \"@angular/core\";\nimport { AuditWebService } from \"@sinequa/core/web-services\";\nimport { ChatService } from \"../chat.service\";\nimport { SavedChat } from \"../types\";\nimport { InstanceManagerService } from \"../instance-manager.service\";\nimport { Subscription, catchError, filter, switchMap, tap, throwError, BehaviorSubject } from \"rxjs\";\nimport { CommonModule } from \"@angular/common\";\nimport { LoginService } from \"@sinequa/core/login\";\nimport { ConfirmType, ModalButton, ModalModule, ModalResult, ModalService } from \"@sinequa/core/modal\";\nimport { NotificationsService } from \"@sinequa/core/notification\";\nimport { UtilsModule } from \"@sinequa/components/utils\";\nimport { format, parseISO, isToday, isYesterday, isThisWeek, isThisMonth, isThisQuarter, isThisYear, endOfYesterday, differenceInDays, differenceInMonths, differenceInYears } from 'date-fns';\n\n@Component({\n selector: 'sq-saved-chats-v3',\n templateUrl: 'saved-chats.component.html',\n styleUrls: ['saved-chats.component.scss'],\n standalone: true,\n imports: [CommonModule, ModalModule, UtilsModule]\n})\nexport class SavedChatsComponent implements OnInit, OnDestroy {\n /** Define the key based on it, the appropriate chatService instance will be returned from instanceManagerService */\n @Input() instanceId: string;\n\n @Output() load = new EventEmitter<SavedChat>();\n @Output() delete = new EventEmitter<SavedChat>();\n\n chatService: ChatService;\n subscription = new Subscription();\n groupedSavedChats$ = new BehaviorSubject<{ key: string; value: SavedChat[]}[]>([]);\n\n public loginService = inject(LoginService);\n public instanceManagerService = inject(InstanceManagerService);\n public auditService = inject(AuditWebService);\n public modalService = inject(ModalService);\n public notificationsService = inject(NotificationsService);\n\n ngOnInit(): void {\n this.subscription.add(\n this.loginService.events.pipe(\n filter(e => e.type === 'login-complete'),\n tap(_ => this.instantiateChatService()),\n switchMap(_ => this.chatService.initProcess$),\n filter(success => !!success),\n tap(_ => {\n this.onListSavedChat();\n this.chatService.listSavedChat();\n })\n ).subscribe()\n );\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n instantiateChatService(): void {\n this.chatService = this.instanceManagerService.getInstance(this.instanceId);\n }\n\n onListSavedChat() {\n this.subscription.add(\n this.chatService.savedChats$.subscribe(\n (savedChats: SavedChat[]) => this.groupedSavedChats$.next(this._groupSavedChatsByDate(savedChats))\n )\n );\n }\n\n onLoad(savedChat: SavedChat) {\n this.chatService.loadSavedChat$.next(savedChat);\n this.load.emit(savedChat);\n }\n\n onDelete(savedChat: SavedChat) {\n this.modalService\n .confirm({\n title: \"Delete saved discussion\",\n message: `You are about to delete the discussion \"${savedChat.title}\". Do you want to continue?`,\n buttons: [\n new ModalButton({result: ModalResult.Cancel}),\n new ModalButton({result: ModalResult.OK, text: \"Confirm\", primary: true})\n ],\n confirmType: ConfirmType.Warning\n }).then(res => {\n if(res === ModalResult.OK) {\n this.subscription.add(\n this.chatService.deleteSavedChat([savedChat.id])\n .pipe(\n tap(() => {\n this.notificationsService.success(`The saved discussion \"${savedChat.title}\" has been successfully deleted.`);\n this.delete.emit(savedChat);\n this.chatService.listSavedChat();\n }),\n catchError((error) => {\n console.error('Error occurred while deleting the saved chat:', error);\n this.notificationsService.error(`Error occurred while deleting the saved discussion \"${savedChat.title}\"`);\n return throwError(() => error);\n })\n ).subscribe()\n );\n }\n });\n }\n\n private _groupSavedChatsByDate(savedChats: SavedChat[]): { key: string; value: SavedChat[] }[] {\n const groupedSavedChats = new Map<string, SavedChat[]>();\n\n savedChats\n .sort((a, b) => parseISO(b.modifiedUTC).getTime() - parseISO(a.modifiedUTC).getTime())\n .forEach(savedChat => {\n const groupKey = this._getTimeKey(parseISO(savedChat.modifiedUTC));\n\n if (!groupedSavedChats.has(groupKey)) {\n groupedSavedChats.set(groupKey, []);\n }\n\n groupedSavedChats.get(groupKey)!.push(savedChat);\n });\n\n return Array.from(groupedSavedChats, ([key, value]) => ({ key, value }));;\n }\n\n private _getTimeKey(date: Date): string {\n if (isToday(date)) {\n return 'Today';\n } else if (isYesterday(date)) {\n return 'Yesterday';\n } else if (isThisWeek(date)) {\n return 'This week';\n } else if (differenceInDays(endOfYesterday(), date) <= 7) {\n return 'Last week';\n } else if (isThisMonth(date)) {\n return 'This month';\n } else if (differenceInMonths(endOfYesterday(), date) <= 1) {\n return 'Last month';\n } else if (isThisQuarter(date)) {\n return 'This quarter';\n } else if (differenceInMonths(endOfYesterday(), date) <= 3) {\n return 'Last quarter';\n } else if (isThisYear(date)) {\n return 'This year';\n } else if (differenceInYears(endOfYesterday(), date) === 1) {\n return 'Last year';\n } else {\n return format(date, 'yyyy');\n }\n }\n\n}\n","<div *ngFor=\"let group of (groupedSavedChats$ | async)\" class=\"saved-chats\">\n <div class=\"saved-chat-date\">{{group.key}}</div>\n <div *ngFor=\"let savedChat of group.value\" class=\"saved-chat p-2\">\n <span class=\"title me-1\" (click)=\"onLoad(savedChat)\">{{savedChat.title}}</span>\n <i class=\"saved-chat-actions fas fa-trash ms-1\" [sqTooltip]=\"'Delete'\" (click)=\"onDelete(savedChat)\"></i>\n </div>\n</div>\n","export default {\n \"assistant\": {}\n}\n","export default {\n \"assistant\": {}\n}\n","export default {\n \"assistant\": {}\n}\n","import { Utils } from '@sinequa/core/base';\nimport _enAssistant from './en';\nimport _frAssistant from './fr';\nimport _deAssistant from './de';\n\nconst enAssistant = Utils.merge({}, _enAssistant);\nconst frAssistant = Utils.merge({}, _frAssistant);\nconst deAssistant = Utils.merge({}, _deAssistant);\n\nexport { enAssistant, frAssistant, deAssistant };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i4"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ // We'd like to not have a primary entry point but ng-packagr requires one currently
2
+ const sinequaAssistantModule = undefined;
3
+
4
+ /**
5
+ * Generated bundle index. Do not edit.
6
+ */
7
+
8
+ export { sinequaAssistantModule };
9
+ //# sourceMappingURL=sinequa-assistant.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sinequa-assistant.mjs","sources":["../../../projects/assistant/public-api.ts","../../../projects/assistant/sinequa-assistant.ts"],"sourcesContent":["// We'd like to not have a primary entry point but ng-packagr requires one currently\nexport const sinequaAssistantModule = undefined;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;AACO,MAAM,sBAAsB,GAAG;;ACDtC;;AAEG;;;;"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@sinequa/assistant" />
5
+ export * from './public-api';
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@sinequa/assistant",
3
+ "version": "3.1.1",
4
+ "author": "Sinequa",
5
+ "peerDependencies": {
6
+ "@fortawesome/fontawesome-free": "^5.13.0",
7
+ "bootstrap": "^5.2.0",
8
+ "element-resize-detector": "^1.2.1",
9
+ "@angular-slider/ngx-slider": "^2.0.4",
10
+ "ngx-bootstrap": "^8.0.0",
11
+ "@popperjs/core": "^2.10.2",
12
+ "ngx-remark": "0.0.6-ng14",
13
+ "remark": "^14.0.3"
14
+ },
15
+ "module": "fesm2015/sinequa-assistant.mjs",
16
+ "es2020": "fesm2020/sinequa-assistant.mjs",
17
+ "esm2020": "esm2020/sinequa-assistant.mjs",
18
+ "fesm2020": "fesm2020/sinequa-assistant.mjs",
19
+ "fesm2015": "fesm2015/sinequa-assistant.mjs",
20
+ "typings": "index.d.ts",
21
+ "exports": {
22
+ "./package.json": {
23
+ "default": "./package.json"
24
+ },
25
+ ".": {
26
+ "types": "./index.d.ts",
27
+ "esm2020": "./esm2020/sinequa-assistant.mjs",
28
+ "es2020": "./fesm2020/sinequa-assistant.mjs",
29
+ "es2015": "./fesm2015/sinequa-assistant.mjs",
30
+ "node": "./fesm2015/sinequa-assistant.mjs",
31
+ "default": "./fesm2020/sinequa-assistant.mjs"
32
+ },
33
+ "./chat": {
34
+ "types": "./chat/index.d.ts",
35
+ "esm2020": "./esm2020/chat/sinequa-assistant-chat.mjs",
36
+ "es2020": "./fesm2020/sinequa-assistant-chat.mjs",
37
+ "es2015": "./fesm2015/sinequa-assistant-chat.mjs",
38
+ "node": "./fesm2015/sinequa-assistant-chat.mjs",
39
+ "default": "./fesm2020/sinequa-assistant-chat.mjs"
40
+ }
41
+ },
42
+ "sideEffects": false,
43
+ "dependencies": {
44
+ "tslib": "^2.3.0"
45
+ }
46
+ }
@@ -0,0 +1 @@
1
+ export declare const sinequaAssistantModule: undefined;