185 lines
6.4 KiB
Python
185 lines
6.4 KiB
Python
#!/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()
|