mec-functional-empathy-demo / core /esil_inference.py
ThreatLevelD
Fix ERIS primary_emotion_code case sensitivity in Gradio UI; enable robust emotion normalization and blend detection; implement dynamic response strategy mapping; pipeline now correctly identifies and processes anger cues
bea66c7
# core/esil_inference.py
# Master Emotional Core (MEC) - ESIL Inference
from core.codex_informer import CodexInformer
class ESILInference:
def __init__(self, enable_gradient_blending=True, blend_maximum=3, confidence_threshold=0.65):
self.enable_gradient_blending = enable_gradient_blending
self.blend_maximum = blend_maximum
self.confidence_threshold = confidence_threshold
# Initialize Codex Informer for shared emotion lookups
self.codex_informer = CodexInformer()
def infer_esil(self, eil_packet):
phrases = eil_packet.get("phrases", [])
emotion_candidates = eil_packet.get("emotion_candidates", [])
# Trigger HEI if vague phrases detected:
low_conf_phrases = ["meh", "...", "idk", "whatever", "fine"]
# Check if any low-confidence phrases are present
if any(lp in phrases for lp in low_conf_phrases):
confidence_score = 0.3
else:
confidence_score = 0.85
# Retrieve emotion family, arc, and resonance from Codex Informer
primary_emotion_code = eil_packet.get("primary_emotion_code", "UNK")
# Ensure the primary emotion code is resolved correctly by CodexInformer
emotion_data = self.codex_informer.resolve_emotion_family(primary_emotion_code)
emotion_family = emotion_data['emotion_family']
arc = emotion_data['arc']
resonance = emotion_data['resonance']
# If no emotion family is found, flag it as a "hidden emotion"
if emotion_family == "Unknown":
emotion_family = "Hidden Emotion Detected" # Fallback for hidden emotion logic
# Build ESIL packet with updated emotion data from Codex Informer
esil_packet = {
"blend_weights": [
{"emotion": "Pending", "weight": 0.8}
],
"trajectory": "Stable",
"confidence_score": confidence_score,
"emotion_family": emotion_family, # From Codex Informer
"arc": arc, # From Codex Informer
"resonance": resonance, # From Codex Informer
"primary_emotion_code": primary_emotion_code, # <-- PATCH INCLUDED
"source_metadata": eil_packet.get("metadata", {}),
"tokens": phrases
}
# Confidence routing logic: Directly to ERIS if confidence is high
if confidence_score >= self.confidence_threshold:
routing_decision = "proceed_to_eris"
# Trigger HEI if confidence is low and unresolved
elif confidence_score < self.confidence_threshold:
routing_decision = "escalate_to_hei"
esil_packet['routing_decision'] = routing_decision
print(f"[ESILInference] ESIL Packet with Routing Decision: {esil_packet}")
return esil_packet