Spaces:
Running
Running
Upload index.html
Browse files- index.html +28 -43
index.html
CHANGED
@@ -395,11 +395,11 @@
|
|
395 |
.chat-container {
|
396 |
height: 100vh;
|
397 |
}
|
398 |
-
|
399 |
.bubble {
|
400 |
max-width: 85%;
|
401 |
}
|
402 |
-
|
403 |
.settings-popup {
|
404 |
right: 8px;
|
405 |
min-width: 260px;
|
@@ -535,8 +535,7 @@
|
|
535 |
userName: 'Kamu',
|
536 |
situation: 'Santai',
|
537 |
location: 'Ruang tamu',
|
538 |
-
maxLength: 150
|
539 |
-
sessionId: 'default_session' // Added session ID
|
540 |
};
|
541 |
|
542 |
// Emoji list
|
@@ -593,7 +592,7 @@
|
|
593 |
// Settings inputs
|
594 |
document.getElementById('charNameInput').addEventListener('input', updateCharName);
|
595 |
document.getElementById('maxLengthRange').addEventListener('input', updateMaxLength);
|
596 |
-
|
597 |
// Model select
|
598 |
document.getElementById('modelSelect').addEventListener('change', function() {
|
599 |
currentSettings.model = this.value;
|
@@ -657,11 +656,11 @@
|
|
657 |
const start = input.selectionStart;
|
658 |
const end = input.selectionEnd;
|
659 |
const text = input.value;
|
660 |
-
|
661 |
input.value = text.substring(0, start) + emoji + text.substring(end);
|
662 |
input.selectionStart = input.selectionEnd = start + emoji.length;
|
663 |
input.focus();
|
664 |
-
|
665 |
document.getElementById('emojiPicker').classList.remove('show');
|
666 |
}
|
667 |
|
@@ -677,10 +676,10 @@
|
|
677 |
const chatBody = document.getElementById('chatBody');
|
678 |
const messageDiv = document.createElement('div');
|
679 |
messageDiv.className = `message ${isUser ? 'user' : 'char'}`;
|
680 |
-
|
681 |
const time = showTime ? getCurrentTime() : '';
|
682 |
const checkmarks = isUser ? '<span class="checkmarks">ββ</span>' : '';
|
683 |
-
|
684 |
messageDiv.innerHTML = `
|
685 |
<div class="message-avatar"></div>
|
686 |
<div class="bubble">
|
@@ -691,7 +690,7 @@
|
|
691 |
</div>
|
692 |
</div>
|
693 |
`;
|
694 |
-
|
695 |
chatBody.appendChild(messageDiv);
|
696 |
chatBody.scrollTop = chatBody.scrollHeight;
|
697 |
}
|
@@ -699,10 +698,10 @@
|
|
699 |
function showTyping() {
|
700 |
if (isTyping) return;
|
701 |
isTyping = true;
|
702 |
-
|
703 |
document.getElementById('status').textContent = 'mengetik...';
|
704 |
document.getElementById('typingIndicator').classList.add('show');
|
705 |
-
|
706 |
const chatBody = document.getElementById('chatBody');
|
707 |
chatBody.scrollTop = chatBody.scrollHeight;
|
708 |
}
|
@@ -710,7 +709,7 @@
|
|
710 |
function hideTyping() {
|
711 |
if (!isTyping) return;
|
712 |
isTyping = false;
|
713 |
-
|
714 |
document.getElementById('status').textContent = 'online';
|
715 |
document.getElementById('typingIndicator').classList.remove('show');
|
716 |
}
|
@@ -718,32 +717,32 @@
|
|
718 |
async function sendMessage() {
|
719 |
const input = document.getElementById('messageInput');
|
720 |
const message = input.value.trim();
|
721 |
-
|
722 |
if (!message) return;
|
723 |
-
|
724 |
// Update settings from inputs
|
725 |
currentSettings.charName = document.getElementById('charNameInput').value || 'Sayang';
|
726 |
currentSettings.userName = document.getElementById('userNameInput').value || 'Kamu';
|
727 |
currentSettings.situation = document.getElementById('situationInput').value || 'Santai';
|
728 |
currentSettings.location = document.getElementById('locationInput').value || 'Ruang tamu';
|
729 |
-
|
730 |
// Add user message
|
731 |
addMessage(message, true);
|
732 |
input.value = '';
|
733 |
input.style.height = 'auto';
|
734 |
-
|
735 |
// Show typing
|
736 |
showTyping();
|
737 |
-
|
738 |
// Disable send button
|
739 |
const sendBtn = document.getElementById('sendBtn');
|
740 |
sendBtn.disabled = true;
|
741 |
-
|
742 |
try {
|
743 |
const response = await fetch(`${API_BASE}/chat`, {
|
744 |
method: 'POST',
|
745 |
headers: {
|
746 |
-
'Content-Type': 'application/json'
|
747 |
},
|
748 |
body: JSON.stringify({
|
749 |
message: message,
|
@@ -752,43 +751,29 @@
|
|
752 |
location: currentSettings.location,
|
753 |
char_name: currentSettings.charName,
|
754 |
user_name: currentSettings.userName,
|
755 |
-
max_length: currentSettings.maxLength
|
756 |
-
session_id: currentSettings.sessionId
|
757 |
})
|
758 |
});
|
759 |
-
|
760 |
const data = await response.json();
|
761 |
-
|
762 |
// Simulate typing delay
|
763 |
await new Promise(resolve => setTimeout(resolve, 1000 + Math.random() * 2000));
|
764 |
-
|
765 |
hideTyping();
|
766 |
-
|
767 |
if (data.status === 'success') {
|
768 |
-
addMessage(data.response
|
769 |
-
|
770 |
-
// Update enhanced features if available
|
771 |
-
if (data.enhanced_features) {
|
772 |
-
enhancedFeatures = { ...enhancedFeatures, ...data.enhanced_features };
|
773 |
-
updateEnhancedUI();
|
774 |
-
}
|
775 |
-
|
776 |
-
// Update status with enhanced info
|
777 |
-
const relationshipInfo = data.enhanced_features ?
|
778 |
-
` | Relationship: ${data.enhanced_features.relationship_status} (${data.enhanced_features.relationship_level})` : '';
|
779 |
-
|
780 |
-
document.getElementById('status').textContent =
|
781 |
-
`Model: ${data.model} | Time: ${data.processing_time}${relationshipInfo}`;
|
782 |
} else {
|
783 |
-
addMessage(
|
784 |
}
|
785 |
-
|
786 |
} catch (error) {
|
787 |
hideTyping();
|
788 |
console.error('Error:', error);
|
789 |
addMessage('Ups, koneksi bermasalah. Coba lagi nanti ya! π');
|
790 |
}
|
791 |
-
|
792 |
// Re-enable send button
|
793 |
sendBtn.disabled = false;
|
794 |
}
|
|
|
395 |
.chat-container {
|
396 |
height: 100vh;
|
397 |
}
|
398 |
+
|
399 |
.bubble {
|
400 |
max-width: 85%;
|
401 |
}
|
402 |
+
|
403 |
.settings-popup {
|
404 |
right: 8px;
|
405 |
min-width: 260px;
|
|
|
535 |
userName: 'Kamu',
|
536 |
situation: 'Santai',
|
537 |
location: 'Ruang tamu',
|
538 |
+
maxLength: 150
|
|
|
539 |
};
|
540 |
|
541 |
// Emoji list
|
|
|
592 |
// Settings inputs
|
593 |
document.getElementById('charNameInput').addEventListener('input', updateCharName);
|
594 |
document.getElementById('maxLengthRange').addEventListener('input', updateMaxLength);
|
595 |
+
|
596 |
// Model select
|
597 |
document.getElementById('modelSelect').addEventListener('change', function() {
|
598 |
currentSettings.model = this.value;
|
|
|
656 |
const start = input.selectionStart;
|
657 |
const end = input.selectionEnd;
|
658 |
const text = input.value;
|
659 |
+
|
660 |
input.value = text.substring(0, start) + emoji + text.substring(end);
|
661 |
input.selectionStart = input.selectionEnd = start + emoji.length;
|
662 |
input.focus();
|
663 |
+
|
664 |
document.getElementById('emojiPicker').classList.remove('show');
|
665 |
}
|
666 |
|
|
|
676 |
const chatBody = document.getElementById('chatBody');
|
677 |
const messageDiv = document.createElement('div');
|
678 |
messageDiv.className = `message ${isUser ? 'user' : 'char'}`;
|
679 |
+
|
680 |
const time = showTime ? getCurrentTime() : '';
|
681 |
const checkmarks = isUser ? '<span class="checkmarks">ββ</span>' : '';
|
682 |
+
|
683 |
messageDiv.innerHTML = `
|
684 |
<div class="message-avatar"></div>
|
685 |
<div class="bubble">
|
|
|
690 |
</div>
|
691 |
</div>
|
692 |
`;
|
693 |
+
|
694 |
chatBody.appendChild(messageDiv);
|
695 |
chatBody.scrollTop = chatBody.scrollHeight;
|
696 |
}
|
|
|
698 |
function showTyping() {
|
699 |
if (isTyping) return;
|
700 |
isTyping = true;
|
701 |
+
|
702 |
document.getElementById('status').textContent = 'mengetik...';
|
703 |
document.getElementById('typingIndicator').classList.add('show');
|
704 |
+
|
705 |
const chatBody = document.getElementById('chatBody');
|
706 |
chatBody.scrollTop = chatBody.scrollHeight;
|
707 |
}
|
|
|
709 |
function hideTyping() {
|
710 |
if (!isTyping) return;
|
711 |
isTyping = false;
|
712 |
+
|
713 |
document.getElementById('status').textContent = 'online';
|
714 |
document.getElementById('typingIndicator').classList.remove('show');
|
715 |
}
|
|
|
717 |
async function sendMessage() {
|
718 |
const input = document.getElementById('messageInput');
|
719 |
const message = input.value.trim();
|
720 |
+
|
721 |
if (!message) return;
|
722 |
+
|
723 |
// Update settings from inputs
|
724 |
currentSettings.charName = document.getElementById('charNameInput').value || 'Sayang';
|
725 |
currentSettings.userName = document.getElementById('userNameInput').value || 'Kamu';
|
726 |
currentSettings.situation = document.getElementById('situationInput').value || 'Santai';
|
727 |
currentSettings.location = document.getElementById('locationInput').value || 'Ruang tamu';
|
728 |
+
|
729 |
// Add user message
|
730 |
addMessage(message, true);
|
731 |
input.value = '';
|
732 |
input.style.height = 'auto';
|
733 |
+
|
734 |
// Show typing
|
735 |
showTyping();
|
736 |
+
|
737 |
// Disable send button
|
738 |
const sendBtn = document.getElementById('sendBtn');
|
739 |
sendBtn.disabled = true;
|
740 |
+
|
741 |
try {
|
742 |
const response = await fetch(`${API_BASE}/chat`, {
|
743 |
method: 'POST',
|
744 |
headers: {
|
745 |
+
'Content-Type': 'application/json',
|
746 |
},
|
747 |
body: JSON.stringify({
|
748 |
message: message,
|
|
|
751 |
location: currentSettings.location,
|
752 |
char_name: currentSettings.charName,
|
753 |
user_name: currentSettings.userName,
|
754 |
+
max_length: currentSettings.maxLength
|
|
|
755 |
})
|
756 |
});
|
757 |
+
|
758 |
const data = await response.json();
|
759 |
+
|
760 |
// Simulate typing delay
|
761 |
await new Promise(resolve => setTimeout(resolve, 1000 + Math.random() * 2000));
|
762 |
+
|
763 |
hideTyping();
|
764 |
+
|
765 |
if (data.status === 'success') {
|
766 |
+
addMessage(data.response);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
767 |
} else {
|
768 |
+
addMessage('Maaf, ada masalah dengan sistem. Coba lagi ya! π
');
|
769 |
}
|
770 |
+
|
771 |
} catch (error) {
|
772 |
hideTyping();
|
773 |
console.error('Error:', error);
|
774 |
addMessage('Ups, koneksi bermasalah. Coba lagi nanti ya! π');
|
775 |
}
|
776 |
+
|
777 |
// Re-enable send button
|
778 |
sendBtn.disabled = false;
|
779 |
}
|