75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
"""
|
|
Analyze interactions and update self-state accordingly.
|
|
"""
|
|
|
|
import logging
|
|
from typing import Dict, Any
|
|
from .state import update_self_state
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
async def analyze_and_update_state(
|
|
monologue: Dict[str, Any],
|
|
user_prompt: str,
|
|
response: str,
|
|
context: Dict[str, Any]
|
|
) -> None:
|
|
"""
|
|
Analyze interaction and update self-state.
|
|
|
|
This runs after response generation to update Lyra's internal state
|
|
based on the interaction.
|
|
|
|
Args:
|
|
monologue: Inner monologue output
|
|
user_prompt: User's message
|
|
response: Lyra's response
|
|
context: Full context state
|
|
"""
|
|
|
|
# Simple heuristics for state updates
|
|
# TODO: Replace with LLM-based sentiment analysis in Phase 2
|
|
|
|
mood_delta = 0.0
|
|
energy_delta = 0.0
|
|
confidence_delta = 0.0
|
|
curiosity_delta = 0.0
|
|
new_focus = None
|
|
|
|
# Analyze intent from monologue
|
|
intent = monologue.get("intent", "").lower() if monologue else ""
|
|
|
|
if "technical" in intent or "complex" in intent:
|
|
energy_delta = -0.05 # Deep thinking is tiring
|
|
confidence_delta = 0.05 if len(response) > 200 else -0.05
|
|
new_focus = "technical_problem"
|
|
|
|
elif "creative" in intent or "brainstorm" in intent:
|
|
mood_delta = 0.1 # Creative work is engaging
|
|
curiosity_delta = 0.1
|
|
new_focus = "creative_exploration"
|
|
|
|
elif "clarification" in intent or "confused" in intent:
|
|
confidence_delta = -0.05
|
|
new_focus = "understanding_user"
|
|
|
|
elif "simple" in intent or "casual" in intent:
|
|
energy_delta = 0.05 # Light conversation is refreshing
|
|
new_focus = "conversation"
|
|
|
|
# Check for learning opportunities (questions in user prompt)
|
|
if "?" in user_prompt and any(word in user_prompt.lower() for word in ["how", "why", "what"]):
|
|
curiosity_delta += 0.05
|
|
|
|
# Update state
|
|
update_self_state(
|
|
mood_delta=mood_delta,
|
|
energy_delta=energy_delta,
|
|
new_focus=new_focus,
|
|
confidence_delta=confidence_delta,
|
|
curiosity_delta=curiosity_delta
|
|
)
|
|
|
|
logger.info(f"Self-state updated based on interaction: focus={new_focus}")
|