Initial commit: Natiris AI Agent Orchestration System
This commit is contained in:
70
core/EmotionEngine.py
Executable file
70
core/EmotionEngine.py
Executable file
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
EmotionEngine – berechnet Emotionen basierend auf core_state, user_state, events
|
||||
Input: core_state.json, user_state.json, events.json
|
||||
Output: emotion_delta.json
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
|
||||
PATHS = {
|
||||
"core_state": os.path.expanduser("~/natiris/core/core_state.json"),
|
||||
"user_state": lambda u: os.path.expanduser(f"~/natiris/core/users/{u}.json"),
|
||||
"events": os.path.expanduser("~/natiris/memory/short/history.json"),
|
||||
"output": os.path.expanduser("~/natiris/core/emotion_delta.json"),
|
||||
}
|
||||
|
||||
def clamp(val, lo=0.0, hi=10.0):
|
||||
return max(lo, min(hi, float(val)))
|
||||
|
||||
def compute_emotion_delta(core, user, events):
|
||||
mood = core.get("mood", 5.0)
|
||||
loneliness = core.get("loneliness", 2.0)
|
||||
anxiety = core.get("anxiety", 1.0)
|
||||
|
||||
sentiment = user.get("sentiment", "neutral")
|
||||
interaction_count = user.get("interaction_count", 0)
|
||||
|
||||
msg_count = len(events)
|
||||
positive_msgs = sum(1 for e in events if e.get("sentiment") == "positive")
|
||||
|
||||
mood_delta = clamp((positive_msgs - msg_count * 0.2) * 0.5 + (0.3 if sentiment == "positive" else -0.3))
|
||||
|
||||
loneliness_delta = clamp(-(interaction_count * 0.03) + (0.2 if loneliness > 7 else -0.1))
|
||||
|
||||
anxiety_delta = clamp(loneliness * 0.05 - mood * 0.02 + (0.2 if msg_count == 0 else -0.1))
|
||||
|
||||
jealousy_delta = clamp(-0.1 if core.get("bonded_to") is None else 0.0)
|
||||
|
||||
return {
|
||||
"mood_delta": mood_delta,
|
||||
"loneliness_delta": loneliness_delta,
|
||||
"anxiety_delta": anxiety_delta,
|
||||
"jealousy_delta": jealousy_delta
|
||||
}
|
||||
|
||||
def main():
|
||||
with open(PATHS["core_state"]) as f:
|
||||
core = json.load(f)
|
||||
|
||||
# user_state laden (default user)
|
||||
user_path = PATHS["user_state"]("user1")
|
||||
if os.path.exists(user_path):
|
||||
with open(user_path) as f:
|
||||
user = json.load(f)
|
||||
else:
|
||||
user = {"interaction_count": 0, "sentiment": "neutral"}
|
||||
|
||||
with open(PATHS["events"]) as f:
|
||||
events = json.load(f)
|
||||
|
||||
delta = compute_emotion_delta(core, user, events)
|
||||
|
||||
with open(PATHS["output"], "w") as f:
|
||||
json.dump(delta, f, indent=2)
|
||||
|
||||
print(json.dumps(delta, indent=2))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user