- Min of meer werkende chat client new stule

This commit is contained in:
Josako
2025-07-20 11:36:00 +02:00
parent b60600e9f6
commit ccb844c15c
24 changed files with 735 additions and 3230 deletions

View File

@@ -88,16 +88,16 @@ export default {
}
console.log('Connecting to progress stream for task:', this.taskId);
// Construct the SSE URL
const baseUrl = window.location.origin;
const sseUrl = `${baseUrl}${this.apiPrefix}/api/progress/${this.taskId}`;
const sseUrl = `${baseUrl}${this.apiPrefix}/api/task_progress/${this.taskId}`;
console.log('SSE URL:', sseUrl);
try {
this.eventSource = new EventSource(sseUrl);
this.eventSource.onopen = () => {
console.log('Progress stream connected');
this.connecting = false;
@@ -112,19 +112,6 @@ export default {
this.handleError(event);
};
// Listen for specific event types
this.eventSource.addEventListener('progress', (event) => {
this.handleProgressUpdate(event);
});
this.eventSource.addEventListener('complete', (event) => {
this.handleSpecialistComplete(event);
});
this.eventSource.addEventListener('error', (event) => {
this.handleSpecialistError(event);
});
} catch (error) {
console.error('Failed to create EventSource:', error);
this.error = 'Kan geen verbinding maken met de voortgangsstream.';
@@ -145,18 +132,39 @@ export default {
const data = JSON.parse(event.data);
console.log('Progress update:', data);
// Check voor processing_type om te bepalen welke handler te gebruiken
if (data.processing_type === 'EveAI Specialist Complete') {
console.log('Detected specialist complete via processing_type');
this.handleSpecialistComplete(event);
return;
}
// Check voor andere completion statuses en errors
if (data.processing_type === 'EveAI Specialist Error')
{
console.log('Detected specialist error via processing_type or status');
this.handleSpecialistError(event);
return;
}
// Voeg bericht toe aan progressLines
if (data.message) {
this.progressLines.push(data.message);
// Auto-scroll to bottom if expanded
if (this.isExpanded) {
this.$nextTick(() => {
const container = this.$refs.progressContainer;
if (container) {
container.scrollTop = container.scrollHeight;
}
});
}
} else if (data.data && data.data.message) {
this.progressLines.push(data.data.message);
} else if (data.processing_type) {
// Gebruik processing_type als message wanneer er geen andere message is
this.progressLines.push(`${data.processing_type}...`);
}
// Auto-scroll to bottom if expanded
if (this.isExpanded) {
this.$nextTick(() => {
const container = this.$refs.progressContainer;
if (container) {
container.scrollTop = container.scrollHeight;
}
});
}
} catch (error) {
console.error('Error parsing progress data:', error);
@@ -165,7 +173,7 @@ export default {
handleSpecialistComplete(event) {
console.log('Specialist complete event:', event);
try {
const data = JSON.parse(event.data);
console.log('Specialist complete data:', data);
@@ -174,27 +182,42 @@ export default {
this.connecting = false;
this.disconnectEventSource();
// Emit the complete event to parent
if (data.result && data.result.answer) {
this.$emit('specialist-complete', {
answer: data.result.answer,
form_request: data.result.form_request,
result: data.result,
interactionId: data.interaction_id,
taskId: this.taskId
});
} else {
console.error('Missing result.answer in specialist complete data:', data);
// Verschillende manieren om de result data te verkrijgen
let resultData = null;
let answer = null;
let formRequest = null;
let interactionId = null;
resultData = data.data.result
console.log('Result data:', resultData);
if (resultData) {
// Standaard format
answer = resultData.answer;
formRequest = resultData.form_request;
interactionId = data.data.interaction_id;
}
this.$emit('specialist-complete', {
answer: answer,
form_request: formRequest,
result: resultData,
interactionId: interactionId,
taskId: this.taskId
})
} catch (error) {
console.error('Error parsing specialist complete data:', error);
this.handleSpecialistError({ data: JSON.stringify({ Error: 'Failed to parse completion data' }) });
this.handleSpecialistError({
data: JSON.stringify({
Error: 'Failed to parse completion data',
processing_type: 'EveAI Specialist Error'
})
});
}
},
handleSpecialistError(event) {
console.log('Specialist error event:', event);
try {
const data = JSON.parse(event.data);
console.log('Specialist error data:', data);
@@ -208,15 +231,23 @@ export default {
const errorMessage = "We could not process your request. Please try again later.";
this.error = errorMessage;
// Extract error details from various possible locations
const originalError =
data.Error ||
data.error ||
data.message ||
data.data?.error ||
data.data?.Error ||
data.data?.message ||
'Unknown error';
// Log the actual error for debug purposes
if (data.Error) {
console.error('Specialist Error:', data.Error);
}
console.error('Specialist Error:', originalError);
// Emit error event to parent
this.$emit('specialist-error', {
message: errorMessage,
originalError: data.Error,
originalError: originalError,
taskId: this.taskId
});
} catch (error) {
@@ -226,6 +257,13 @@ export default {
this.hasError = true;
this.connecting = false;
this.disconnectEventSource();
// Emit generic error
this.$emit('specialist-error', {
message: 'Er is een onbekende fout opgetreden.',
originalError: 'Failed to parse error data',
taskId: this.taskId
});
}
},
@@ -236,13 +274,22 @@ export default {
// Try to parse error data
try {
const errorData = JSON.parse(event.data);
if (errorData && errorData.message) {
this.error = errorData.message;
if (event.data) {
const errorData = JSON.parse(event.data);
if (errorData && errorData.message) {
this.error = errorData.message;
}
}
} catch (err) {
// Keep generic error message if parsing fails
}
// Emit error to parent
this.$emit('specialist-error', {
message: this.error,
originalError: 'SSE Connection Error',
taskId: this.taskId
});
},
toggleExpand() {