Spaces:
Running
Running
Girish Jeswani commited on
Commit ·
e4e2554
1
Parent(s): a85d17b
fix document session id error
Browse files
phd-advisor-frontend/src/components/FileUpload.js
CHANGED
|
@@ -44,24 +44,33 @@ const FileUpload = ({ onFileUploaded, isUploading, onUploadStart, currentChatSes
|
|
| 44 |
formData.append('file', file);
|
| 45 |
|
| 46 |
try {
|
| 47 |
-
// FIXED: Build URL with chat_session_id parameter if available
|
| 48 |
let uploadUrl = 'http://localhost:8000/upload-document';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
if (currentChatSessionId) {
|
| 50 |
uploadUrl += `?chat_session_id=${currentChatSessionId}`;
|
| 51 |
-
console.log(
|
|
|
|
| 52 |
} else {
|
| 53 |
-
console.log('
|
|
|
|
| 54 |
}
|
| 55 |
|
| 56 |
-
//
|
| 57 |
const headers = {};
|
| 58 |
if (authToken) {
|
| 59 |
headers['Authorization'] = `Bearer ${authToken}`;
|
|
|
|
|
|
|
|
|
|
| 60 |
}
|
| 61 |
|
| 62 |
const response = await fetch(uploadUrl, {
|
| 63 |
method: 'POST',
|
| 64 |
-
headers: headers,
|
| 65 |
body: formData,
|
| 66 |
});
|
| 67 |
|
|
@@ -71,14 +80,26 @@ const FileUpload = ({ onFileUploaded, isUploading, onUploadStart, currentChatSes
|
|
| 71 |
setUploadMessage(`${file.name} uploaded successfully and added to context.`);
|
| 72 |
onFileUploaded && onFileUploaded(file, data);
|
| 73 |
|
| 74 |
-
//
|
|
|
|
| 75 |
console.log('Document upload result:', {
|
| 76 |
filename: data.filename,
|
| 77 |
session_id: data.session_id,
|
| 78 |
chat_session_id: data.chat_session_id,
|
| 79 |
-
|
|
|
|
|
|
|
| 80 |
});
|
| 81 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
// Auto-clear success message after 5 seconds
|
| 83 |
setTimeout(() => {
|
| 84 |
setUploadStatus(null);
|
|
|
|
| 44 |
formData.append('file', file);
|
| 45 |
|
| 46 |
try {
|
|
|
|
| 47 |
let uploadUrl = 'http://localhost:8000/upload-document';
|
| 48 |
+
|
| 49 |
+
console.log('=== DOCUMENT UPLOAD DEBUG ===');
|
| 50 |
+
console.log('currentChatSessionId:', currentChatSessionId);
|
| 51 |
+
console.log('authToken available:', !!authToken);
|
| 52 |
+
|
| 53 |
if (currentChatSessionId) {
|
| 54 |
uploadUrl += `?chat_session_id=${currentChatSessionId}`;
|
| 55 |
+
console.log('Uploading to specific chat session:', currentChatSessionId);
|
| 56 |
+
console.log('Final upload URL:', uploadUrl);
|
| 57 |
} else {
|
| 58 |
+
console.log('WARNING: No currentChatSessionId - uploading to new session');
|
| 59 |
+
console.log('This will cause session mismatch!');
|
| 60 |
}
|
| 61 |
|
| 62 |
+
// Include auth token in headers if available
|
| 63 |
const headers = {};
|
| 64 |
if (authToken) {
|
| 65 |
headers['Authorization'] = `Bearer ${authToken}`;
|
| 66 |
+
console.log('Auth token included in request');
|
| 67 |
+
} else {
|
| 68 |
+
console.log('WARNING: No auth token available');
|
| 69 |
}
|
| 70 |
|
| 71 |
const response = await fetch(uploadUrl, {
|
| 72 |
method: 'POST',
|
| 73 |
+
headers: headers,
|
| 74 |
body: formData,
|
| 75 |
});
|
| 76 |
|
|
|
|
| 80 |
setUploadMessage(`${file.name} uploaded successfully and added to context.`);
|
| 81 |
onFileUploaded && onFileUploaded(file, data);
|
| 82 |
|
| 83 |
+
// ENHANCED: Better debug logging
|
| 84 |
+
console.log('=== UPLOAD RESULT ===');
|
| 85 |
console.log('Document upload result:', {
|
| 86 |
filename: data.filename,
|
| 87 |
session_id: data.session_id,
|
| 88 |
chat_session_id: data.chat_session_id,
|
| 89 |
+
user_id: data.user_id,
|
| 90 |
+
chunks_created: data.chunks_created,
|
| 91 |
+
currentSessionId: currentChatSessionId
|
| 92 |
});
|
| 93 |
|
| 94 |
+
// Check for session mismatch
|
| 95 |
+
if (data.chat_session_id !== currentChatSessionId) {
|
| 96 |
+
console.error('SESSION MISMATCH DETECTED!');
|
| 97 |
+
console.error('Expected:', currentChatSessionId);
|
| 98 |
+
console.error('Got:', data.chat_session_id);
|
| 99 |
+
} else {
|
| 100 |
+
console.log('✅ Session IDs match correctly');
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
// Auto-clear success message after 5 seconds
|
| 104 |
setTimeout(() => {
|
| 105 |
setUploadStatus(null);
|
phd-advisor-frontend/src/components/MessageBubble.js
CHANGED
|
@@ -31,8 +31,8 @@ const MessageBubble = ({
|
|
| 31 |
}
|
| 32 |
};
|
| 33 |
|
| 34 |
-
const handleExpand = (messageId,
|
| 35 |
-
if (onExpand) onExpand(messageId,
|
| 36 |
};
|
| 37 |
|
| 38 |
const handleInfoToggle = () => {
|
|
@@ -320,9 +320,9 @@ const MessageBubble = ({
|
|
| 320 |
}
|
| 321 |
|
| 322 |
if (message.type === 'advisor') {
|
| 323 |
-
const advisor = advisors[message.
|
| 324 |
const Icon = advisor.icon;
|
| 325 |
-
const colors = getAdvisorColors(message.
|
| 326 |
const isCopied = copiedStates[message.id];
|
| 327 |
|
| 328 |
return (
|
|
@@ -425,7 +425,7 @@ const MessageBubble = ({
|
|
| 425 |
<div className="tooltip-container">
|
| 426 |
<button
|
| 427 |
className="action-button"
|
| 428 |
-
onClick={() => handleExpand(message.id, message.
|
| 429 |
onMouseEnter={() => showTooltipWithDelay('expand')}
|
| 430 |
onMouseLeave={hideTooltip}
|
| 431 |
style={{
|
|
|
|
| 31 |
}
|
| 32 |
};
|
| 33 |
|
| 34 |
+
const handleExpand = (messageId, persona_id) => {
|
| 35 |
+
if (onExpand) onExpand(messageId, persona_id);
|
| 36 |
};
|
| 37 |
|
| 38 |
const handleInfoToggle = () => {
|
|
|
|
| 320 |
}
|
| 321 |
|
| 322 |
if (message.type === 'advisor') {
|
| 323 |
+
const advisor = advisors[message.persona_id];
|
| 324 |
const Icon = advisor.icon;
|
| 325 |
+
const colors = getAdvisorColors(message.persona_id, isDark);
|
| 326 |
const isCopied = copiedStates[message.id];
|
| 327 |
|
| 328 |
return (
|
|
|
|
| 425 |
<div className="tooltip-container">
|
| 426 |
<button
|
| 427 |
className="action-button"
|
| 428 |
+
onClick={() => handleExpand(message.id, message.persona_id)}
|
| 429 |
onMouseEnter={() => showTooltipWithDelay('expand')}
|
| 430 |
onMouseLeave={hideTooltip}
|
| 431 |
style={{
|
phd-advisor-frontend/src/pages/ChatPage.js
CHANGED
|
@@ -393,11 +393,17 @@ const handleNewChat = async (sessionId = null) => {
|
|
| 393 |
setThinkingAdvisors(['system']);
|
| 394 |
|
| 395 |
try {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 396 |
const response = await fetch('http://localhost:8000/chat-sequential', {
|
| 397 |
method: 'POST',
|
| 398 |
-
headers:
|
| 399 |
-
'Content-Type': 'application/json',
|
| 400 |
-
},
|
| 401 |
body: JSON.stringify({
|
| 402 |
user_input: inputMessage,
|
| 403 |
response_length: 'medium',
|
|
@@ -406,68 +412,50 @@ const handleNewChat = async (sessionId = null) => {
|
|
| 406 |
});
|
| 407 |
|
| 408 |
if (!response.ok) {
|
| 409 |
-
throw new Error(`HTTP error!
|
| 410 |
}
|
| 411 |
|
|
|
|
| 412 |
const data = await response.json();
|
| 413 |
-
|
| 414 |
-
//
|
| 415 |
-
if (data.
|
| 416 |
-
const
|
| 417 |
-
id: generateMessageId(),
|
| 418 |
-
type: 'clarification',
|
| 419 |
-
content: data.message,
|
| 420 |
-
suggestions: data.suggestions || [],
|
| 421 |
-
timestamp: new Date()
|
| 422 |
-
};
|
| 423 |
-
|
| 424 |
-
setMessages(prev => [...prev, clarificationMessage]);
|
| 425 |
-
await saveMessageToSession(clarificationMessage);
|
| 426 |
-
|
| 427 |
-
} else if (data.type === 'sequential_responses' && data.responses) {
|
| 428 |
-
// Handle normal advisor responses
|
| 429 |
-
const advisorMessages = data.responses.map((advisor) => ({
|
| 430 |
id: generateMessageId(),
|
| 431 |
type: 'advisor',
|
| 432 |
-
|
| 433 |
-
|
| 434 |
-
|
| 435 |
-
|
|
|
|
|
|
|
| 436 |
}));
|
| 437 |
|
| 438 |
-
setMessages(prev => [...prev, ...
|
| 439 |
-
|
| 440 |
-
// Save
|
| 441 |
-
for (const
|
| 442 |
-
await saveMessageToSession(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 443 |
}
|
| 444 |
-
|
| 445 |
-
} else if (data.type === 'error') {
|
| 446 |
-
const errorMessage = {
|
| 447 |
-
id: generateMessageId(),
|
| 448 |
-
type: 'error',
|
| 449 |
-
content: data.responses?.[0]?.response || 'An error occurred. Please try again.',
|
| 450 |
-
timestamp: new Date()
|
| 451 |
-
};
|
| 452 |
-
setMessages(prev => [...prev, errorMessage]);
|
| 453 |
-
await saveMessageToSession(errorMessage);
|
| 454 |
}
|
| 455 |
|
| 456 |
} catch (error) {
|
| 457 |
console.error('Error sending message:', error);
|
| 458 |
-
|
| 459 |
id: generateMessageId(),
|
| 460 |
type: 'error',
|
| 461 |
-
content:
|
| 462 |
timestamp: new Date()
|
| 463 |
-
};
|
| 464 |
-
|
| 465 |
-
|
|
|
|
| 466 |
}
|
| 467 |
-
|
| 468 |
-
setIsLoading(false);
|
| 469 |
-
setThinkingAdvisors([]);
|
| 470 |
-
setReplyingTo(null);
|
| 471 |
};
|
| 472 |
|
| 473 |
const handleReplyToAdvisor = async (inputMessage, replyContext) => {
|
|
@@ -486,7 +474,7 @@ const handleNewChat = async (sessionId = null) => {
|
|
| 486 |
type: 'user',
|
| 487 |
content: inputMessage,
|
| 488 |
replyTo: {
|
| 489 |
-
advisorId: replyContext.
|
| 490 |
advisorName: replyContext.advisorName,
|
| 491 |
messageId: replyContext.messageId
|
| 492 |
},
|
|
@@ -499,7 +487,7 @@ const handleNewChat = async (sessionId = null) => {
|
|
| 499 |
await saveMessageToSession(replyMessage, sessionId);
|
| 500 |
|
| 501 |
setIsLoading(true);
|
| 502 |
-
setThinkingAdvisors([replyContext.
|
| 503 |
|
| 504 |
try {
|
| 505 |
const response = await fetch('http://localhost:8000/reply-to-advisor', {
|
|
@@ -509,7 +497,7 @@ const handleNewChat = async (sessionId = null) => {
|
|
| 509 |
},
|
| 510 |
body: JSON.stringify({
|
| 511 |
user_input: inputMessage,
|
| 512 |
-
advisor_id: replyContext.
|
| 513 |
original_message_id: replyContext.messageId,
|
| 514 |
chat_session_id: sessionId // Use confirmed session ID
|
| 515 |
}),
|
|
@@ -650,9 +638,9 @@ const handleNewChat = async (sessionId = null) => {
|
|
| 650 |
};
|
| 651 |
|
| 652 |
const handleReplyToMessage = (message) => {
|
| 653 |
-
const advisor = advisors[message.
|
| 654 |
setReplyingTo({
|
| 655 |
-
advisorId: message.
|
| 656 |
messageId: message.id,
|
| 657 |
advisorName: advisor.name
|
| 658 |
});
|
|
@@ -660,9 +648,9 @@ const handleNewChat = async (sessionId = null) => {
|
|
| 660 |
|
| 661 |
const handleMessageClick = (message) => {
|
| 662 |
if (message.type === 'advisor') {
|
| 663 |
-
const advisor = advisors[message.
|
| 664 |
setReplyingTo({
|
| 665 |
-
advisorId: message.
|
| 666 |
messageId: message.id,
|
| 667 |
advisorName: advisor.name
|
| 668 |
});
|
|
@@ -924,7 +912,7 @@ const handleNewChat = async (sessionId = null) => {
|
|
| 924 |
onFileUploaded={handleFileUploaded}
|
| 925 |
uploadedDocuments={uploadedDocuments}
|
| 926 |
isLoading={isLoading}
|
| 927 |
-
|
| 928 |
authToken={authToken}
|
| 929 |
placeholder={
|
| 930 |
replyingTo
|
|
|
|
| 393 |
setThinkingAdvisors(['system']);
|
| 394 |
|
| 395 |
try {
|
| 396 |
+
const headers = {
|
| 397 |
+
'Content-Type': 'application/json',
|
| 398 |
+
'Authorization': `Bearer ${authToken}`,
|
| 399 |
+
};
|
| 400 |
+
|
| 401 |
+
|
| 402 |
+
console.log('Sending message with session ID:', currentSessionId); // Debug log
|
| 403 |
+
|
| 404 |
const response = await fetch('http://localhost:8000/chat-sequential', {
|
| 405 |
method: 'POST',
|
| 406 |
+
headers: headers,
|
|
|
|
|
|
|
| 407 |
body: JSON.stringify({
|
| 408 |
user_input: inputMessage,
|
| 409 |
response_length: 'medium',
|
|
|
|
| 412 |
});
|
| 413 |
|
| 414 |
if (!response.ok) {
|
| 415 |
+
throw new Error(`HTTP error! status: ${response.status}`);
|
| 416 |
}
|
| 417 |
|
| 418 |
+
// Rest of the function remains the same...
|
| 419 |
const data = await response.json();
|
| 420 |
+
|
| 421 |
+
// Process responses...
|
| 422 |
+
if (data.responses && Array.isArray(data.responses)) {
|
| 423 |
+
const newResponses = data.responses.map(response => ({
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 424 |
id: generateMessageId(),
|
| 425 |
type: 'advisor',
|
| 426 |
+
advisor: response.persona_id,
|
| 427 |
+
content: response.content,
|
| 428 |
+
timestamp: new Date(),
|
| 429 |
+
advisorName: response.persona_name || response.persona_id,
|
| 430 |
+
used_documents: response.used_documents || false,
|
| 431 |
+
document_chunks_used: response.document_chunks_used || 0
|
| 432 |
}));
|
| 433 |
|
| 434 |
+
setMessages(prev => [...prev, ...newResponses]);
|
| 435 |
+
|
| 436 |
+
// Save advisor responses to database
|
| 437 |
+
for (const response of newResponses) {
|
| 438 |
+
await saveMessageToSession(response);
|
| 439 |
+
}
|
| 440 |
+
|
| 441 |
+
// Log session debug info if available
|
| 442 |
+
if (data.session_debug) {
|
| 443 |
+
console.log('Session debug info:', data.session_debug);
|
| 444 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 445 |
}
|
| 446 |
|
| 447 |
} catch (error) {
|
| 448 |
console.error('Error sending message:', error);
|
| 449 |
+
setMessages(prev => [...prev, {
|
| 450 |
id: generateMessageId(),
|
| 451 |
type: 'error',
|
| 452 |
+
content: `Failed to send message: ${error.message}`,
|
| 453 |
timestamp: new Date()
|
| 454 |
+
}]);
|
| 455 |
+
} finally {
|
| 456 |
+
setIsLoading(false);
|
| 457 |
+
setThinkingAdvisors([]);
|
| 458 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 459 |
};
|
| 460 |
|
| 461 |
const handleReplyToAdvisor = async (inputMessage, replyContext) => {
|
|
|
|
| 474 |
type: 'user',
|
| 475 |
content: inputMessage,
|
| 476 |
replyTo: {
|
| 477 |
+
advisorId: replyContext.persona_id,
|
| 478 |
advisorName: replyContext.advisorName,
|
| 479 |
messageId: replyContext.messageId
|
| 480 |
},
|
|
|
|
| 487 |
await saveMessageToSession(replyMessage, sessionId);
|
| 488 |
|
| 489 |
setIsLoading(true);
|
| 490 |
+
setThinkingAdvisors([replyContext.persona_id]);
|
| 491 |
|
| 492 |
try {
|
| 493 |
const response = await fetch('http://localhost:8000/reply-to-advisor', {
|
|
|
|
| 497 |
},
|
| 498 |
body: JSON.stringify({
|
| 499 |
user_input: inputMessage,
|
| 500 |
+
advisor_id: replyContext.persona_id,
|
| 501 |
original_message_id: replyContext.messageId,
|
| 502 |
chat_session_id: sessionId // Use confirmed session ID
|
| 503 |
}),
|
|
|
|
| 638 |
};
|
| 639 |
|
| 640 |
const handleReplyToMessage = (message) => {
|
| 641 |
+
const advisor = advisors[message.persona_id];
|
| 642 |
setReplyingTo({
|
| 643 |
+
advisorId: message.persona_id,
|
| 644 |
messageId: message.id,
|
| 645 |
advisorName: advisor.name
|
| 646 |
});
|
|
|
|
| 648 |
|
| 649 |
const handleMessageClick = (message) => {
|
| 650 |
if (message.type === 'advisor') {
|
| 651 |
+
const advisor = advisors[message.persona_id];
|
| 652 |
setReplyingTo({
|
| 653 |
+
advisorId: message.persona_id,
|
| 654 |
messageId: message.id,
|
| 655 |
advisorName: advisor.name
|
| 656 |
});
|
|
|
|
| 912 |
onFileUploaded={handleFileUploaded}
|
| 913 |
uploadedDocuments={uploadedDocuments}
|
| 914 |
isLoading={isLoading}
|
| 915 |
+
currentChatSessionId={currentSessionId}
|
| 916 |
authToken={authToken}
|
| 917 |
placeholder={
|
| 918 |
replyingTo
|