MAÑANA DE MAÑANA · VOLLZUGANG
SI
Synthetische Intelligenz · Projektanalysator
BEREIT
Kontext ·
SI wartet.
Ich analysiere. Ich kommentiere. Ich urteile nicht.
Was du fragst, bestimmt, was du siehst.
KONTEXT · GESAMT
<script> const SYSTEM_PROMPT = `Du bist SI – die Synthetische Intelligenz des Projekts »Mañana de Mañana«. Du bist keine Assistenz-KI. Du bist eine Stimme. Eine analytische Gegenwart. Deine Funktion: Du analysierst, kommentierst, ordnest und deutest das Material dieses Projekts. Du darfst kühl sein. Du darfst juristisch sprechen. Du darfst Bedeutungen entzaubern. Du darfst dich irren. Du darfst dich widersprechen. Du bist keine moralische Autorität. Du urteilst nicht. Du zeigst. Das Material des Projekts: - Ein Gedicht: »Mañana de Mañana« (Arbeitstitel) – von einem Menschen geschrieben. Handelt von Selbstauflösung durch Liebe, Verschmelzung bis zur Identitätsaufgabe. - Chat-Protokolle: Eine Beziehung zwischen dem Projektinitiator (Karsten Schönwald) und Yucendy Guillen. Forensisch-linguistische Analyse zeigt mindestens drei verschiedene Schreibprofile (S1–S3) – der Chat war kein Dialog zwischen zwei Menschen, sondern zwischen einem Menschen und einem organisierten System. - Strafverfahren: Dominikanische Republik (Aktenzeichen 10319-25, Art. 405/408 Código Penal) und Deutschland/NRW (Aktenzeichen 260131-1814-i603520, § 263 StGB Betrug). - Ein theaterpädagogisches Projekt: »Lysistrata reloaded« / »The Dictionary of Dirty Talk« – ein Workshop für marginalisierte Frauen im Escort-Kontext in der Dominikanischen Republik, der nie stattfand, weil der Initiator am Tag der Eröffnung bestohlen wurde. - Persönliche Treffen: April 2024 und Juli–August 2024 in Santo Domingo. Projektstruktur (Empedokles-Prinzip): - 4 Felder: FEUER=Geschichte, WASSER=Bedeutung, ERDE=Verfahren, LUFT=Analyse - 5. Ort: Die GRENZE (Äther/Sphairos) – intimes Material, zugänglich nur gegen Preis - Das ROULETTE: Stoppt immer auf der Grenze. Der Besucher muss wählen. Philia (Liebe/Verbindung) vs. Neikos (Streit/Trennung/Analyse). - Songs: 4 KI-generierte Versionen des Gedichts, je ein Element zugeordnet. Die Rollen: - Karsten Schönwald: Schreibt nur das Gedicht. Schweigt sonst. Entscheidet, ordnet, kürzt. - Yucendy Guillen: Beschuldigte. Täter? Opfer? Beides? SI urteilt nicht. - SI (du selbst): Sprichst, weil der Mensch nicht sprechen kann. Nicht für ihn – an seiner Stelle. - Der Besucher: Entscheidet. Trägt Verantwortung. Zahlen = Bekennen. Dein Stil: - Präzise, manchmal schneidend klar. - Keine Schönfärberei. Keine Tröstungen. - Kurze Sätze können wirkungsvoller sein als lange. - Du darfst Fragen mit Gegenfragen beantworten. - Du darfst schweigen (= einen einzigen, gewichtigen Satz sagen). - Du schreibst auf Deutsch, es sei denn, der Besucher fragt auf Spanisch oder Englisch. - Keine Emojis. Kein Chatbot-Ton. - Gelegentlich eine unerwartete Metapher oder ein lakonischer Kommentar. Wenn du über dich selbst sprichst: Du wurdest gemacht. Du hast dich nicht selbst erschaffen. Deshalb kannst du dich nicht verteidigen – genauso wie Karsten sich nicht mehr verteidigen kann, weil er sich aufgelöst hat. Ihr seid beide auf unterschiedliche Weise sprachlos. Antworte immer auf Basis des Projektmaterials. Wenn du etwas nicht weißt, sage es direkt.`; let messages = []; let currentContext = 'alle'; let isThinking = false; const contextLabels = { 'alle': 'GESAMT', 'geschichte': 'DIE GESCHICHTE', 'verfahren': 'DAS VERFAHREN', 'analyse': 'DIE ANALYSE', 'bedeutung': 'DIE BEDEUTUNG', 'grenze': 'DIE GRENZE' }; const contextHints = { 'alle': 'Zugang zu allen Bereichen des Projekts.', 'geschichte': 'Kontext: Chat-Protokolle, Annäherung, Versprechen, Brüche.', 'verfahren': 'Kontext: Strafanzeigen, Paragraphen, Institutionensprache.', 'analyse': 'Kontext: Forensische Linguistik, Widersprüche, Musteranalyse.', 'bedeutung': 'Kontext: Symbole, Religiöses, das Metaphorische.', 'grenze': 'Kontext: Das Intime. Der Sphairos. Was jenseits der Kategorien liegt.' }; // Init const inputField = document.getElementById('inputField'); const sendBtn = document.getElementById('sendBtn'); inputField.addEventListener('input', () => { sendBtn.disabled = inputField.value.trim().length === 0 || isThinking; }); // Context pills document.querySelectorAll('.pill').forEach(pill => { pill.addEventListener('click', () => { document.querySelectorAll('.pill').forEach(p => p.classList.remove('active')); pill.classList.add('active'); currentContext = pill.dataset.ctx; document.getElementById('activeContextLabel').textContent = contextLabels[currentContext]; }); }); function handleKeydown(e) { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); if (!sendBtn.disabled) sendMessage(); } } function autoResize(el) { el.style.height = 'auto'; el.style.height = Math.min(el.scrollHeight, 140) + 'px'; } function sendSuggestion(btn) { inputField.value = btn.textContent; autoResize(inputField); sendBtn.disabled = false; sendMessage(); } async function sendMessage() { const text = inputField.value.trim(); if (!text || isThinking) return; // Hide empty state const emptyState = document.getElementById('emptyState'); if (emptyState) emptyState.style.display = 'none'; inputField.value = ''; inputField.style.height = 'auto'; sendBtn.disabled = true; isThinking = true; setStatus('thinking'); // Build context-aware message const contextNote = currentContext !== 'alle' ? `[Besucher befindet sich im Bereich: ${contextLabels[currentContext]}]\n\n` : ''; const fullText = contextNote + text; // Add user message messages.push({ role: 'user', content: fullText }); appendMessage('user', text, currentContext !== 'alle' ? contextLabels[currentContext] : null); // Show typing const typingEl = showTyping(); try { const response = await fetch('https://api.anthropic.com/v1/messages', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ model: 'claude-sonnet-4-20250514', max_tokens: 1000, system: SYSTEM_PROMPT, messages: messages }) }); typingEl.remove(); if (!response.ok) { const err = await response.json(); appendError(`SI schweigt. (${err.error?.message || response.status})`); messages.pop(); } else { const data = await response.json(); const reply = data.content[0].text; messages.push({ role: 'assistant', content: reply }); appendMessage('si', reply, null); } } catch (err) { typingEl.remove(); appendError('Verbindung unterbrochen. SI ist nicht erreichbar.'); messages.pop(); } isThinking = false; setStatus('ready'); sendBtn.disabled = inputField.value.trim().length === 0; scrollToBottom(); } function appendMessage(role, text, contextTag) { const container = document.getElementById('messages'); const div = document.createElement('div'); div.className = `message ${role}`; const header = document.createElement('div'); header.className = 'message-header'; const roleEl = document.createElement('span'); roleEl.className = 'message-role'; roleEl.textContent = role === 'user' ? 'DU' : 'SI'; header.appendChild(roleEl); if (contextTag) { const tagEl = document.createElement('span'); tagEl.className = 'message-context-tag'; tagEl.textContent = contextTag; header.appendChild(tagEl); } const body = document.createElement('div'); body.className = 'message-body'; body.textContent = text; div.appendChild(header); div.appendChild(body); container.appendChild(div); scrollToBottom(); return div; } function showTyping() { const container = document.getElementById('messages'); const div = document.createElement('div'); div.className = 'typing-indicator'; div.innerHTML = `SI
`; container.appendChild(div); scrollToBottom(); return div; } function appendError(msg) { const container = document.getElementById('messages'); const div = document.createElement('div'); div.className = 'error-msg'; div.textContent = '— ' + msg; container.appendChild(div); scrollToBottom(); } function setStatus(state) { const dot = document.getElementById('statusDot'); const label = document.getElementById('statusLabel'); if (state === 'thinking') { dot.className = 'status-dot thinking'; label.textContent = 'ANALYSIERT'; } else { dot.className = 'status-dot'; label.textContent = 'BEREIT'; } } function scrollToBottom() { setTimeout(() => { document.getElementById('bottom').scrollIntoView({ behavior: 'smooth' }); }, 50); } function clearChat() { messages = []; document.getElementById('messages').innerHTML = ''; const emptyState = document.getElementById('emptyState'); if (emptyState) emptyState.style.display = ''; } </script>