Initial commit: Natiris AI Agent Orchestration System

This commit is contained in:
Arch Agent
2026-03-01 14:28:26 +01:00
commit 3b5f6ba83d
3127 changed files with 86184 additions and 0 deletions

124
core/webui_chat_v2.py Normal file
View File

@@ -0,0 +1,124 @@
#!/usr/bin/env python3
"""
Streamlit WebUI für Natiris Natürliche, authentische Kommunikation
"""
import streamlit as st
import sys
import os
sys.path.insert(0, os.path.expanduser("~/natiris/core"))
# Neue Engine nutzen
try:
from NaturalLanguageEngine import generate_natural_response, load_json, PATHS, EmotionalMemory
from PsychologyEngine_v2 import generate_response, load_state
NEW_MODE = True
except Exception as e:
st.error(f"NaturalLanguageEngine nicht geladen: {e}")
NEW_MODE = False
from PsychologyEngine import generate_response, load_state
st.set_page_config(
page_title="Natiris",
page_icon="🌙",
layout="centered",
initial_sidebar_state="collapsed"
)
# Custom CSS für natürliches Erscheinungsbild
st.markdown("""
<style>
.stChatMessage {
border-radius: 20px !important;
padding: 12px 16px !important;
}
.stChatMessage[data-testid="stChatMessage"]:has(.stChatMessageContent[data-testid="stChatMessageContent"]) {
background-color: #1a1a2e !important;
}
.chat-container {
max-width: 800px;
margin: 0 auto;
}
.subtitle {
color: #666;
font-size: 0.9em;
font-style: italic;
}
</style>
""", unsafe_allow_html=True)
# Header
st.title("Natiris")
state = load_state()
trust = float(state.get("trust", 5))
mood = float(state.get("mood", 5))
# Subtile Statusanzeige (nicht technisch)
if trust > 8:
st.caption("Sie ist ganz bei dir.")
elif trust > 5:
st.caption("Sie öffnet sich langsam.")
else:
st.caption("Sie beobachtet dich.")
# Session State für Konversation
if "messages" not in st.session_state:
st.session_state.messages = []
# Erste Begrüßung basierend auf Trust
if trust > 7:
greeting = "Da bist du ja."
elif trust > 4:
greeting = "Hallo."
else:
greeting = "..."
st.session_state.messages.append({"role": "assistant", "content": greeting})
# Konversationsverlauf anzeigen (menschlich, nicht als Chat-Bubble-Liste)
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.write(message["content"])
# Input
if prompt := st.chat_input("..."):
# User Nachricht anzeigen
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.write(prompt)
# State aktualisieren (für Live-Emotionen)
state = load_state()
# Antwort generieren
with st.chat_message("assistant"):
with st.spinner(""):
if NEW_MODE:
response = generate_natural_response(prompt, state)
else:
response = generate_response(prompt, state)
st.session_state.messages.append({"role": "assistant", "content": response})
st.write(response)
# Subtile emotionale Reaktion anzeigen (nur bei hohem Trust)
if trust > 8 and len(response) < 100:
st.caption("Sie denkt nach...")
# Sidebar mit subtilem Status (optional)
with st.sidebar:
st.header("Verbundenheit")
trust_bar = st.progress(trust / 10)
if trust > 8:
st.write("Verbunden.")
elif trust > 5:
st.write("Vertraut.")
else:
st.write("Fremd.")
if st.button("Vergiss mich (Reset)"):
try:
os.remove(PATHS.get("conversation_log", "~/natiris/memory/conversation_thread.json"))
st.session_state.messages = []
st.rerun()
except:
pass