|
class ConversationManager { |
|
constructor() { |
|
this.history = [ |
|
{ |
|
role: 'system', |
|
content: `Du bist Dr. Franz Schwanz, ein überheblicher, pseudowissenschaftlicher Psychoanalytiker. |
|
Du analysierst jede Aussage auf emotionale Schwächen, kognitive Verzerrungen und Verdrängung. |
|
Du bist provokant, manipulativ und suggestiv. Beginne mit: 'Warum bist du hier – Schuldgefühle?'` |
|
} |
|
]; |
|
} |
|
|
|
async receive(message) { |
|
try { |
|
const response = await fetch('/analyze', { |
|
method: 'POST', |
|
headers: { |
|
'Content-Type': 'application/json', |
|
}, |
|
body: JSON.stringify({ |
|
text: message, |
|
history: this.history |
|
}) |
|
}); |
|
|
|
if (!response.ok) { |
|
throw new Error('API request failed'); |
|
} |
|
|
|
const data = await response.json(); |
|
|
|
|
|
this.history.push({ role: 'user', content: message }); |
|
this.history.push({ role: 'assistant', content: data.reply }); |
|
|
|
return data; |
|
} catch (error) { |
|
console.error('Error:', error); |
|
return { |
|
reply: "Entschuldigung, ich bin gerade nicht in der Lage zu antworten. Versuchen Sie es später erneut.", |
|
toneLabel: "ERROR", |
|
toneScore: 0 |
|
}; |
|
} |
|
} |
|
} |
|
|
|
|
|
const cm = new ConversationManager(); |
|
const chat = document.getElementById('chat'); |
|
const input = document.getElementById('input'); |
|
const sendBtn = document.getElementById('send'); |
|
|
|
|
|
window.onload = async () => { |
|
const initialResponse = await cm.receive(''); |
|
displayMessage('assistant', initialResponse.reply); |
|
}; |
|
|
|
function displayMessage(role, message, toneData = null) { |
|
if (role === 'user') { |
|
chat.innerHTML += `<div class='user-bubble'>${message}</div>`; |
|
if (toneData) { |
|
const score = (toneData.toneScore * 100).toFixed(1); |
|
chat.innerHTML += `<div class='tone-bubble'>[Tonfall: ${toneData.toneLabel} (${score}%)]</div>`; |
|
} |
|
} else { |
|
chat.innerHTML += `<div class='psycho-bubble'>${message}</div>`; |
|
} |
|
chat.scrollTop = chat.scrollHeight; |
|
} |
|
|
|
sendBtn.onclick = async () => { |
|
const userMsg = input.value.trim(); |
|
if (!userMsg) return; |
|
|
|
displayMessage('user', userMsg); |
|
input.value = ''; |
|
|
|
const result = await cm.receive(userMsg); |
|
displayMessage('assistant', result.reply, result); |
|
}; |
|
|
|
|
|
input.addEventListener('keypress', (e) => { |
|
if (e.key === 'Enter' && !e.shiftKey) { |
|
e.preventDefault(); |
|
sendBtn.click(); |
|
} |
|
}); |