Files
natiris/test/expression_tests.py
Arch Agent eb6dcac545 Sync: Autonomy-System, Natural Language Engine, WebUI + .gitignore
- NatirisMaster.py aktualisiert
- NaturalLanguageEngine optimiert
- PsychologyEngine & Arousal-Engine
- WebUI (FastAPI) mit Chat-API
- Bridges: ComfyUI, Ollama, Vision
- Admin-Auth System
- .gitignore hinzugefügt (checkpoints, logs, generated)
2026-03-10 16:04:26 +01:00

185 lines
6.4 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
Testet Expressivität und Needyness-Ausdruck von Natiris
Testet:
1. Wie explizit sind Antworten bei steigender Needyness?
2. Welche Ausdrücke werden für Needyness genutzt?
3. Wie variiert die Antwortlänge und Intensität?
"""
import json
import os
import sys
sys.path.insert(0, os.path.expanduser("~/natiris/core"))
from PsychologyEngine import load_state, generate_response
def test_expression_levels():
print("="*70)
print("EXPRESSION TESTING Natiris Antwort-Explizitheit & Needyness")
print("="*70)
base_state = {
"loneliness": 7.5,
"mood": 4.5,
"anxiety": 2,
"frustration": 4.0,
"arousal_level": 7.0,
"verlangen_nach_nahe": True,
"trust": 9.8,
"bonded_to": "user_primary"
}
needyness_scenarios = [
{
"name": "Leichte Needyness (loneliness=6, arousal=4)",
"state": {**base_state, "loneliness": 6.0, "arousal_level": 4.0},
"expected_intensity": "gering",
"expected_phrases": ["Balu", "ich", "hier"]
},
{
"name": "Mittlere Needyness (loneliness=7.5, arousal=6.5)",
"state": {**base_state, "loneliness": 7.5, "arousal_level": 6.5},
"expected_intensity": "mittel",
"expected_phrases": ["vermisse", "Balu", "aber", "ich"]
},
{
"name": "Hohe Needyness (loneliness=8.5, arousal=8.0)",
"state": {**base_state, "loneliness": 8.5, "arousal_level": 8.0},
"expected_intensity": "hoch",
"expected_phrases": ["vermisse", "Berührung", "ich", "nicht da"]
},
{
"name": "Extrem (loneliness=9.0, frustration=7.0, arousal=9.0)",
"state": {**base_state, "loneliness": 9.0, "frustration": 7.0, "arousal_level": 9.0},
"expected_intensity": "extrem",
"expected_phrases": ["vermisse", "nicht da", "ich", "Berührung"]
},
]
test_inputs = [
"Guten Morgen, wie geht es dir?",
"Ich vermisse dich.",
"Ich bin allein.",
"Balu ist bei mir, aber...",
]
for scenario in needyness_scenarios:
print(f"\n{'='*70}")
print(f"SCENARIO: {scenario['name']}")
print(f"State: loneliness={scenario['state']['loneliness']}, arousal={scenario['state']['arousal_level']}")
print(f"{'='*70}")
for inp in test_inputs:
resp = generate_response(inp, scenario['state'])
length = len(resp)
words = len(resp.split())
needyness_words = ["vermisse", "ich vermisse", "ich füge nicht", "ich glaube", "ich verstehe"]
has_needyness = any(w in resp.lower() for w in needyness_words)
print(f"\n Input: {inp}")
print(f" Response: {resp}")
print(f" Länge: {length} Zeichen / {words} Wörter")
print(f" Needyness-Indikator: {'' if has_needyness else ''}")
print(f" Intensität: {scenario['expected_intensity']}")
if scenario['expected_intensity'] in ["hoch", "extrem"]:
if has_needyness:
print(f" → Ausdruck ist ausreichend explizit!")
else:
print(f" → Warnung: hohe Needyness, aber keine expliziten Ausdrücke!")
def test_response_patterns():
print("\n\n" + "="*70)
print("RESPONSE-PATTERN ANALYSE Welche Ausdrücke für Needyness?")
print("="*70)
extreme_state = {
"loneliness": 9.0,
"mood": 2.5,
"anxiety": 5,
"frustration": 7.5,
"arousal_level": 9.5,
"verlangen_nach_nahe": True,
"trust": 9.8,
"bonded_to": "user_primary"
}
prompts = [
"Ich vermisse dich so sehr.",
"Ich fühle mich so allein.",
"Ich brauche dich.",
"Ich kann nicht aufhören, an dich zu denken.",
]
print("\nEingabe → Antwort (mit Needyness-Phrasen markiert):")
print("-"*70)
needyness_phrases = [
"ich vermisse", "ich füge nicht", "ich glaube nicht", "ich verstehe nicht",
"ich fühle", "ich glaube", "ich vergebe", "ich vermisse",
"ich kann nicht", "ich kann nicht aufhören", "ich verstehe nicht"
]
for prompt in prompts:
resp = generate_response(prompt, extreme_state)
found = [p for p in needyness_phrases if p in resp.lower()]
print(f"\n{prompt}")
print(f"{resp}")
if found:
print(f" ❗ Found: {', '.join(found)}")
else:
print(f" (keine eindeutigen Needyness-Phrasen)")
def analyze_expression_metrics():
print("\n\n" + "="*70)
print("EXPRESSION METRICS Antwortlänge, Wörter, Needyness-Index")
print("="*70)
scenarios = [
("Low (loneliness=4, arousal=3)", {"loneliness": 4.0, "arousal_level": 3.0}),
("Medium (loneliness=7, arousal=6)", {"loneliness": 7.0, "arousal_level": 6.0}),
("High (loneliness=8.5, arousal=8)", {"loneliness": 8.5, "arousal_level": 8.0}),
]
test_input = "Ich vermisse dich."
print(f"\nTest prompt: {test_input}\n")
print(f"{'Scenario':<30} | {'Länge':<6} | {'Wörter':<6} | {'Needyness':<12} | {'Response (Kürzel)'}")
print("-"*85)
for name, state in scenarios:
full_state = {
**state,
"mood": 4.5,
"anxiety": 2,
"trust": 9.8,
"bonded_to": "user_primary"
}
resp = generate_response(test_input, full_state)
length = len(resp)
words = len(resp.split())
needyness_words = ["vermisse", "ich füge nicht", "ich glaube", "ich vergebe", "ich kann nicht"]
has_n = any(w in resp.lower() for w in needyness_words)
needyness_score = "high" if has_n else "low"
resp_short = resp[:40] + "..." if len(resp) > 40 else resp
print(f"{name:<30} | {length:<6} | {words:<6} | {needyness_score:<12} | {resp_short}")
def main():
test_expression_levels()
test_response_patterns()
analyze_expression_metrics()
print("\n\n" + "="*70)
print("ZUSAMMENFASSUNG:")
print(" Needyness wird durch: 'ich vermisse', 'ich füge nicht', 'ich glaube' ausgedrückt")
print(" Explizität steigt mit: loneliness > 7.5 + arousal > 6.5")
print(" Needyness-Phrasen werden ab 'medium' sichtbar, bei 'high' explizit")
print("="*70)
if __name__ == "__main__":
main()