@memberjunction/ng-conversations 2.130.0 → 2.131.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +10 -12
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +85 -94
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.d.ts.map +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.js +2 -3
- package/dist/lib/components/message/conversation-message-rating.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +0 -8
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +11 -31
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/services/agent-state.service.d.ts +0 -2
- package/dist/lib/services/agent-state.service.d.ts.map +1 -1
- package/dist/lib/services/agent-state.service.js +3 -20
- package/dist/lib/services/agent-state.service.js.map +1 -1
- package/dist/lib/services/conversation-streaming.service.d.ts +14 -10
- package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-streaming.service.js +24 -40
- package/dist/lib/services/conversation-streaming.service.js.map +1 -1
- package/package.json +17 -17
|
@@ -9,13 +9,13 @@ import { ActiveTasksService } from '../../services/active-tasks.service';
|
|
|
9
9
|
import { MentionAutocompleteService } from '../../services/mention-autocomplete.service';
|
|
10
10
|
import { ArtifactPermissionService } from '../../services/artifact-permission.service';
|
|
11
11
|
import { ConversationAttachmentService } from '../../services/conversation-attachment.service';
|
|
12
|
-
import { ConversationStreamingService } from '../../services/conversation-streaming.service';
|
|
13
12
|
import { MessageAttachment } from '../message/message-item.component';
|
|
14
13
|
import { LazyArtifactInfo } from '../../models/lazy-artifact-info';
|
|
15
14
|
import { RatingJSON } from '../../models/conversation-complete-query.model';
|
|
16
15
|
import { PendingAttachment } from '../mention/mention-editor.component';
|
|
17
16
|
import { DialogService } from '@progress/kendo-angular-dialog';
|
|
18
17
|
import { Subject } from 'rxjs';
|
|
18
|
+
import { ConversationStreamingService } from '../../services/conversation-streaming.service';
|
|
19
19
|
import * as i0 from "@angular/core";
|
|
20
20
|
export declare class ConversationChatAreaComponent implements OnInit, OnDestroy, AfterViewChecked {
|
|
21
21
|
conversationData: ConversationDataService;
|
|
@@ -79,7 +79,7 @@ export declare class ConversationChatAreaComponent implements OnInit, OnDestroy,
|
|
|
79
79
|
messages: ConversationDetailEntity[];
|
|
80
80
|
showScrollToBottomIcon: boolean;
|
|
81
81
|
private scrollToBottom;
|
|
82
|
-
private
|
|
82
|
+
private lastLoadedConversationId;
|
|
83
83
|
private currentlyLoadingConversationId;
|
|
84
84
|
isProcessing: boolean;
|
|
85
85
|
private intentCheckMessage;
|
|
@@ -130,6 +130,7 @@ export declare class ConversationChatAreaComponent implements OnInit, OnDestroy,
|
|
|
130
130
|
* Passed to message-input component to reconnect PubSub updates
|
|
131
131
|
*/
|
|
132
132
|
inProgressMessageIds: string[];
|
|
133
|
+
private destroy$;
|
|
133
134
|
private messageInputMetadataCache;
|
|
134
135
|
readonly emptyArtifactsMap: Map<string, LazyArtifactInfo[]>;
|
|
135
136
|
readonly emptyAgentRunsMap: Map<string, AIAgentRunEntityExtended>;
|
|
@@ -139,7 +140,6 @@ export declare class ConversationChatAreaComponent implements OnInit, OnDestroy,
|
|
|
139
140
|
artifactId: string;
|
|
140
141
|
versionNumber: number;
|
|
141
142
|
}>;
|
|
142
|
-
private destroy$;
|
|
143
143
|
private isInitialized;
|
|
144
144
|
private isResizing;
|
|
145
145
|
private startX;
|
|
@@ -240,15 +240,6 @@ export declare class ConversationChatAreaComponent implements OnInit, OnDestroy,
|
|
|
240
240
|
conversationDetailId: string;
|
|
241
241
|
agentId?: string;
|
|
242
242
|
}): Promise<void>;
|
|
243
|
-
/**
|
|
244
|
-
* Handle message completion from PubSub streaming service.
|
|
245
|
-
* This is the primary completion handler that replaces timer-based polling.
|
|
246
|
-
* Called when the streaming service receives a completion event from the backend.
|
|
247
|
-
*
|
|
248
|
-
* @param message The message entity that completed
|
|
249
|
-
* @param agentRunId The agent run ID from the completion event
|
|
250
|
-
*/
|
|
251
|
-
private handleMessageCompletion;
|
|
252
243
|
/**
|
|
253
244
|
* Handle agent run update event from progress updates
|
|
254
245
|
* This is called on EVERY progress update with the full, live agent run object
|
|
@@ -264,6 +255,13 @@ export declare class ConversationChatAreaComponent implements OnInit, OnDestroy,
|
|
|
264
255
|
* Called when completion is detected to discover newly delegated agent messages
|
|
265
256
|
*/
|
|
266
257
|
private reloadMessagesForActiveConversation;
|
|
258
|
+
/**
|
|
259
|
+
* Handle message completion triggered by PubSub completion event
|
|
260
|
+
* Reloads message, agent run, and artifacts, then updates UI
|
|
261
|
+
* @param message The message that completed
|
|
262
|
+
* @param agentRunId The ID of the agent run that completed
|
|
263
|
+
*/
|
|
264
|
+
private handleMessageCompletion;
|
|
267
265
|
onAgentResponse(event: {
|
|
268
266
|
message: ConversationDetailEntity;
|
|
269
267
|
agentResult: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-chat-area.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/conversation/conversation-chat-area.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAkD,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC/K,OAAO,EAAE,QAAQ,EAA+B,YAAY,EAAe,MAAM,sBAAsB,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3I,OAAO,EAAyB,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAE/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,6BAA6B,EAAE,MAAM,gDAAgD,CAAC;AAC/F,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"conversation-chat-area.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/conversation/conversation-chat-area.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -497,7 +497,7 @@ export class ConversationChatAreaComponent {
|
|
|
497
497
|
messages = [];
|
|
498
498
|
showScrollToBottomIcon = false;
|
|
499
499
|
scrollToBottom = false;
|
|
500
|
-
|
|
500
|
+
lastLoadedConversationId = null; // Track which conversation's peripheral data was loaded
|
|
501
501
|
currentlyLoadingConversationId = null; // Track which conversation is currently being loaded
|
|
502
502
|
isProcessing = false;
|
|
503
503
|
intentCheckMessage = null; // Temporary message shown during intent checking
|
|
@@ -559,6 +559,8 @@ export class ConversationChatAreaComponent {
|
|
|
559
559
|
* Passed to message-input component to reconnect PubSub updates
|
|
560
560
|
*/
|
|
561
561
|
inProgressMessageIds = [];
|
|
562
|
+
// Subject for cleanup on destroy
|
|
563
|
+
destroy$ = new Subject();
|
|
562
564
|
// Cache of message-input metadata for rendering multiple instances
|
|
563
565
|
// Prevents destruction/recreation when switching conversations for performance
|
|
564
566
|
messageInputMetadataCache = new Map();
|
|
@@ -570,8 +572,6 @@ export class ConversationChatAreaComponent {
|
|
|
570
572
|
isLoadingPeripheralData = false;
|
|
571
573
|
// Subject to trigger artifact viewer refresh when new version is created
|
|
572
574
|
artifactViewerRefresh$ = new Subject();
|
|
573
|
-
// Subject for component destruction cleanup
|
|
574
|
-
destroy$ = new Subject();
|
|
575
575
|
// Track initialization state to prevent loading messages before agents are ready
|
|
576
576
|
isInitialized = false;
|
|
577
577
|
// Resize state
|
|
@@ -620,18 +620,6 @@ export class ConversationChatAreaComponent {
|
|
|
620
620
|
await this.initializeAttachmentSupport();
|
|
621
621
|
// Load saved artifact pane width
|
|
622
622
|
this.loadArtifactPaneWidth();
|
|
623
|
-
// Subscribe to completion events from streaming service (PubSub-based, replaces polling)
|
|
624
|
-
// This handles real-time completion notifications without timer-based polling
|
|
625
|
-
this.streamingService.completionEvents$
|
|
626
|
-
.pipe(takeUntil(this.destroy$))
|
|
627
|
-
.subscribe(async (event) => {
|
|
628
|
-
// Only handle if it's for a message in our current conversation
|
|
629
|
-
const message = this.messages.find(m => m.ID === event.conversationDetailId);
|
|
630
|
-
if (message) {
|
|
631
|
-
LogStatusEx({ message: `🎉 Received completion event for message ${event.conversationDetailId}`, verboseOnly: true });
|
|
632
|
-
await this.handleMessageCompletion(message, event.agentRunId);
|
|
633
|
-
}
|
|
634
|
-
});
|
|
635
623
|
// Mark as initialized so setter can trigger conversation changes
|
|
636
624
|
this.isInitialized = true;
|
|
637
625
|
// Initial load if there's already an active conversation
|
|
@@ -643,6 +631,16 @@ export class ConversationChatAreaComponent {
|
|
|
643
631
|
window.addEventListener('mouseup', this.onResizeEnd.bind(this));
|
|
644
632
|
window.addEventListener('touchmove', this.onResizeTouchMove.bind(this));
|
|
645
633
|
window.addEventListener('touchend', this.onResizeTouchEnd.bind(this));
|
|
634
|
+
// Subscribe to completion events from PubSub
|
|
635
|
+
this.streamingService.completionEvents$
|
|
636
|
+
.pipe(takeUntil(this.destroy$))
|
|
637
|
+
.subscribe(async (event) => {
|
|
638
|
+
// Find the message in our current conversation
|
|
639
|
+
const message = this.messages.find(m => m.ID === event.conversationDetailId);
|
|
640
|
+
if (message) {
|
|
641
|
+
await this.handleMessageCompletion(message, event.agentRunId);
|
|
642
|
+
}
|
|
643
|
+
});
|
|
646
644
|
}
|
|
647
645
|
/**
|
|
648
646
|
* Initializes attachment support by checking if the conversation manager agent (Sage)
|
|
@@ -723,11 +721,11 @@ export class ConversationChatAreaComponent {
|
|
|
723
721
|
}
|
|
724
722
|
}
|
|
725
723
|
ngOnDestroy() {
|
|
726
|
-
// Complete the destroy$ Subject to clean up subscriptions
|
|
727
|
-
this.destroy$.next();
|
|
728
|
-
this.destroy$.complete();
|
|
729
724
|
// Stop polling when component is destroyed
|
|
730
725
|
this.agentStateService.stopPolling();
|
|
726
|
+
// Complete destroy subject to cleanup subscriptions
|
|
727
|
+
this.destroy$.next();
|
|
728
|
+
this.destroy$.complete();
|
|
731
729
|
// Remove resize listeners
|
|
732
730
|
window.removeEventListener('mousemove', this.onResizeMove.bind(this));
|
|
733
731
|
window.removeEventListener('mouseup', this.onResizeEnd.bind(this));
|
|
@@ -868,23 +866,17 @@ export class ConversationChatAreaComponent {
|
|
|
868
866
|
.map(m => m.ID)];
|
|
869
867
|
if (this.inProgressMessageIds.length > 0) {
|
|
870
868
|
LogStatusEx({ message: `🔌 Detected ${this.inProgressMessageIds.length} in-progress messages for reconnection`, verboseOnly: true });
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
this.streamingService.clearRecentCompletion(message.ID);
|
|
883
|
-
})
|
|
884
|
-
.catch(error => {
|
|
885
|
-
console.error(`Failed to handle missed completion for message ${message.ID}:`, error);
|
|
886
|
-
});
|
|
887
|
-
}
|
|
869
|
+
}
|
|
870
|
+
// Check for missed completions (user navigated away, agent completed, user returned)
|
|
871
|
+
// The streaming service stores recent completions so we can handle them
|
|
872
|
+
for (const message of messages) {
|
|
873
|
+
if (message.Status === 'In-Progress' && message.ID) {
|
|
874
|
+
const recentCompletion = this.streamingService.getRecentCompletion(message.ID);
|
|
875
|
+
if (recentCompletion) {
|
|
876
|
+
// This message completed while we were away - handle it
|
|
877
|
+
LogStatusEx({ message: `📥 Found missed completion for message ${message.ID}, handling...`, verboseOnly: true });
|
|
878
|
+
this.handleMessageCompletion(message, recentCompletion.agentRunId);
|
|
879
|
+
this.streamingService.clearRecentCompletion(message.ID);
|
|
888
880
|
}
|
|
889
881
|
}
|
|
890
882
|
}
|
|
@@ -926,12 +918,12 @@ export class ConversationChatAreaComponent {
|
|
|
926
918
|
async loadPeripheralData(conversationId) {
|
|
927
919
|
const timestamp = new Date().toISOString();
|
|
928
920
|
// Skip if we've already processed peripheral data for this conversation
|
|
929
|
-
if (this.
|
|
921
|
+
if (this.lastLoadedConversationId === conversationId) {
|
|
930
922
|
LogStatusEx({ message: `[${timestamp}] ⏭️ Skipping peripheral data processing - already processed for conversation ${conversationId}`, verboseOnly: true });
|
|
931
923
|
return;
|
|
932
924
|
}
|
|
933
925
|
// Mark this conversation as processed to prevent duplicate processing
|
|
934
|
-
this.
|
|
926
|
+
this.lastLoadedConversationId = conversationId;
|
|
935
927
|
LogStatusEx({ message: `[${timestamp}] 📊 Processing peripheral data for conversation ${conversationId} from cache`, verboseOnly: true });
|
|
936
928
|
try {
|
|
937
929
|
// Get cached data - should always be present by the time we get here
|
|
@@ -995,9 +987,10 @@ export class ConversationChatAreaComponent {
|
|
|
995
987
|
this.systemArtifactsByDetailId.set(row.ID, systemArtifactList);
|
|
996
988
|
}
|
|
997
989
|
}
|
|
998
|
-
// Build ratings map
|
|
999
|
-
|
|
1000
|
-
|
|
990
|
+
// Build ratings map
|
|
991
|
+
if (parsed.ratings.length > 0) {
|
|
992
|
+
this.ratingsByDetailId.set(row.ID, parsed.ratings);
|
|
993
|
+
}
|
|
1001
994
|
}
|
|
1002
995
|
// Load attachments for all messages in this conversation
|
|
1003
996
|
// Uses the ConversationAttachmentService to batch-load all attachments
|
|
@@ -1031,8 +1024,8 @@ export class ConversationChatAreaComponent {
|
|
|
1031
1024
|
}
|
|
1032
1025
|
catch (error) {
|
|
1033
1026
|
console.error('Failed to process peripheral data:', error);
|
|
1034
|
-
//
|
|
1035
|
-
this.
|
|
1027
|
+
// Don't set lastLoadedConversationId on error so we can retry
|
|
1028
|
+
this.lastLoadedConversationId = null;
|
|
1036
1029
|
}
|
|
1037
1030
|
}
|
|
1038
1031
|
/**
|
|
@@ -1138,57 +1131,6 @@ export class ConversationChatAreaComponent {
|
|
|
1138
1131
|
this.cdr.detectChanges();
|
|
1139
1132
|
}
|
|
1140
1133
|
}
|
|
1141
|
-
/**
|
|
1142
|
-
* Handle message completion from PubSub streaming service.
|
|
1143
|
-
* This is the primary completion handler that replaces timer-based polling.
|
|
1144
|
-
* Called when the streaming service receives a completion event from the backend.
|
|
1145
|
-
*
|
|
1146
|
-
* @param message The message entity that completed
|
|
1147
|
-
* @param agentRunId The agent run ID from the completion event
|
|
1148
|
-
*/
|
|
1149
|
-
async handleMessageCompletion(message, agentRunId) {
|
|
1150
|
-
try {
|
|
1151
|
-
LogStatusEx({ message: `🔄 Handling completion for message ${message.ID}`, verboseOnly: true });
|
|
1152
|
-
// 1. Reload message from database to get final content
|
|
1153
|
-
await message.Load(message.ID);
|
|
1154
|
-
// 2. Reload agent run to get final status/timestamps
|
|
1155
|
-
const agentRun = this.agentRunsByDetailId.get(message.ID);
|
|
1156
|
-
if (agentRun?.ID) {
|
|
1157
|
-
await agentRun.Load(agentRun.ID);
|
|
1158
|
-
}
|
|
1159
|
-
// 3. Reload artifacts for this completed message
|
|
1160
|
-
await this.reloadArtifactsForMessage(message.ID);
|
|
1161
|
-
// 4. Reload messages to discover newly delegated agent messages
|
|
1162
|
-
// When Sage delegates to Marketing Agent, a new message is created
|
|
1163
|
-
await this.reloadMessagesForActiveConversation();
|
|
1164
|
-
// 5. Update inProgressMessageIds to track any new delegated agents
|
|
1165
|
-
this.inProgressMessageIds = [...this.messages
|
|
1166
|
-
.filter(m => m.Status === 'In-Progress')
|
|
1167
|
-
.map(m => m.ID)];
|
|
1168
|
-
// 6. Auto-open artifact panel if message has artifacts and no artifact is currently shown
|
|
1169
|
-
if (this.artifactsByDetailId.has(message.ID) && !this.showArtifactPanel) {
|
|
1170
|
-
const artifactList = this.artifactsByDetailId.get(message.ID);
|
|
1171
|
-
if (artifactList && artifactList.length > 0) {
|
|
1172
|
-
// Show the LAST (most recent) artifact
|
|
1173
|
-
this.selectedArtifactId = artifactList[artifactList.length - 1].artifactId;
|
|
1174
|
-
this.showArtifactPanel = true;
|
|
1175
|
-
await this.loadArtifactPermissions(this.selectedArtifactId);
|
|
1176
|
-
}
|
|
1177
|
-
}
|
|
1178
|
-
// 7. Remove task from ActiveTasksService (clears spinner in conversation list)
|
|
1179
|
-
const task = this.activeTasks.getByConversationDetailId(message.ID);
|
|
1180
|
-
if (task) {
|
|
1181
|
-
this.activeTasks.remove(task.id);
|
|
1182
|
-
}
|
|
1183
|
-
// 8. Trigger re-render with updated data
|
|
1184
|
-
this.messages = [...this.messages];
|
|
1185
|
-
this.cdr.detectChanges();
|
|
1186
|
-
LogStatusEx({ message: `✅ Completion handled for message ${message.ID}`, verboseOnly: true });
|
|
1187
|
-
}
|
|
1188
|
-
catch (error) {
|
|
1189
|
-
console.error(`Failed to handle completion for message ${message.ID}:`, error);
|
|
1190
|
-
}
|
|
1191
|
-
}
|
|
1192
1134
|
/**
|
|
1193
1135
|
* Handle agent run update event from progress updates
|
|
1194
1136
|
* This is called on EVERY progress update with the full, live agent run object
|
|
@@ -1258,6 +1200,56 @@ export class ConversationChatAreaComponent {
|
|
|
1258
1200
|
console.error('Failed to reload messages for active conversation:', error);
|
|
1259
1201
|
}
|
|
1260
1202
|
}
|
|
1203
|
+
/**
|
|
1204
|
+
* Handle message completion triggered by PubSub completion event
|
|
1205
|
+
* Reloads message, agent run, and artifacts, then updates UI
|
|
1206
|
+
* @param message The message that completed
|
|
1207
|
+
* @param agentRunId The ID of the agent run that completed
|
|
1208
|
+
*/
|
|
1209
|
+
async handleMessageCompletion(message, _agentRunId) {
|
|
1210
|
+
try {
|
|
1211
|
+
LogStatusEx({ message: `🎉 Handling completion for message ${message.ID}`, verboseOnly: true });
|
|
1212
|
+
// Reload message from database to get final content and status
|
|
1213
|
+
await message.Load(message.ID);
|
|
1214
|
+
// Reload agent run to get final status, timestamps, and cost
|
|
1215
|
+
const agentRun = this.agentRunsByDetailId.get(message.ID);
|
|
1216
|
+
if (agentRun?.ID) {
|
|
1217
|
+
await agentRun.Load(agentRun.ID);
|
|
1218
|
+
}
|
|
1219
|
+
// Reload artifacts for this completed message
|
|
1220
|
+
await this.reloadArtifactsForMessage(message.ID);
|
|
1221
|
+
// Reload messages to pick up newly delegated agent messages
|
|
1222
|
+
// When Sage delegates to Marketing Agent, a new message is created
|
|
1223
|
+
await this.reloadMessagesForActiveConversation();
|
|
1224
|
+
// Update inProgressMessageIds to include new delegated agents
|
|
1225
|
+
// This triggers callback registration via the setter in message-input
|
|
1226
|
+
this.inProgressMessageIds = [...this.messages
|
|
1227
|
+
.filter(m => m.Status === 'In-Progress')
|
|
1228
|
+
.map(m => m.ID)];
|
|
1229
|
+
// Auto-open artifact panel if this message has artifacts and no artifact is currently shown
|
|
1230
|
+
if (this.artifactsByDetailId.has(message.ID) && !this.showArtifactPanel) {
|
|
1231
|
+
const artifactList = this.artifactsByDetailId.get(message.ID);
|
|
1232
|
+
if (artifactList && artifactList.length > 0) {
|
|
1233
|
+
// Show the LAST (most recent) artifact
|
|
1234
|
+
this.selectedArtifactId = artifactList[artifactList.length - 1].artifactId;
|
|
1235
|
+
this.showArtifactPanel = true;
|
|
1236
|
+
await this.loadArtifactPermissions(this.selectedArtifactId);
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1239
|
+
// Remove task from ActiveTasksService (clears spinner in conversation list)
|
|
1240
|
+
const task = this.activeTasks.getByConversationDetailId(message.ID);
|
|
1241
|
+
if (task) {
|
|
1242
|
+
this.activeTasks.remove(task.id);
|
|
1243
|
+
}
|
|
1244
|
+
// Force re-render with updated agent run and artifacts
|
|
1245
|
+
this.messages = [...this.messages];
|
|
1246
|
+
this.cdr.detectChanges();
|
|
1247
|
+
LogStatusEx({ message: `✅ Completion handled for message ${message.ID}`, verboseOnly: true });
|
|
1248
|
+
}
|
|
1249
|
+
catch (error) {
|
|
1250
|
+
console.error(`Error handling message completion for ${message.ID}:`, error);
|
|
1251
|
+
}
|
|
1252
|
+
}
|
|
1261
1253
|
async onAgentResponse(event) {
|
|
1262
1254
|
// Add the agent's response message to the conversation
|
|
1263
1255
|
this.messages = [...this.messages, event.message];
|
|
@@ -1295,7 +1287,6 @@ export class ConversationChatAreaComponent {
|
|
|
1295
1287
|
*/
|
|
1296
1288
|
invalidateConversationCache(conversationId) {
|
|
1297
1289
|
this.conversationDataCache.delete(conversationId);
|
|
1298
|
-
this.loadedPeripheralConversationIds.delete(conversationId);
|
|
1299
1290
|
LogStatusEx({ message: `🗑️ Invalidated cache for conversation ${conversationId}`, verboseOnly: true });
|
|
1300
1291
|
}
|
|
1301
1292
|
/**
|