Wire dashboard context into Hearthkeeper
This commit is contained in:
@@ -34,9 +34,18 @@ class HearthkeeperMode:
|
||||
"""Determine if Hearthkeeper should generate a prompt."""
|
||||
return minutes_since_activity >= self.activity_threshold
|
||||
|
||||
async def generate_prompt(self, theme: str | None = None) -> str:
|
||||
async def generate_prompt(
|
||||
self,
|
||||
theme: str | None = None,
|
||||
dashboard: dict | None = None,
|
||||
recent_discussion: list[str] | None = None,
|
||||
) -> str:
|
||||
"""Generate a gentle prompt for the stream."""
|
||||
prompt = PromptTemplates.gentle_prompt(theme)
|
||||
prompt = PromptTemplates.gentle_prompt(
|
||||
current_theme=theme,
|
||||
dashboard=dashboard,
|
||||
recent_discussion=recent_discussion or [],
|
||||
)
|
||||
response = await self.llm_client.generate(prompt)
|
||||
logger.info("Hearthkeeper generated gentle prompt")
|
||||
return response
|
||||
|
||||
@@ -80,6 +80,7 @@ class AgentOrchestrator:
|
||||
"started_at": datetime.utcnow(),
|
||||
"message_count": 0,
|
||||
"theme": None,
|
||||
"dashboard": None,
|
||||
"last_hearthkeeper_prompt_at": None,
|
||||
}
|
||||
self.chat_activity.record_activity(session_id)
|
||||
@@ -101,6 +102,7 @@ class AgentOrchestrator:
|
||||
limit=1,
|
||||
)
|
||||
message_count = await repo.count_messages(session.id)
|
||||
dashboard = await repo.get_dashboard(session.id)
|
||||
last_activity_at = (
|
||||
recent_messages[0].timestamp if recent_messages else session.started_at
|
||||
)
|
||||
@@ -110,6 +112,7 @@ class AgentOrchestrator:
|
||||
"started_at": session.started_at,
|
||||
"message_count": message_count,
|
||||
"theme": session.theme,
|
||||
"dashboard": Repository.serialize_dashboard(dashboard),
|
||||
"last_hearthkeeper_prompt_at": None,
|
||||
}
|
||||
self.chat_activity.record_activity(session.id, occurred_at=last_activity_at)
|
||||
@@ -363,15 +366,20 @@ class AgentOrchestrator:
|
||||
if not session_info:
|
||||
return None
|
||||
|
||||
recent_messages = []
|
||||
active_chat_messages = []
|
||||
recent_discussion_messages = []
|
||||
async for db_session in get_session():
|
||||
repo = Repository(db_session)
|
||||
recent_messages = await repo.get_human_messages_since(
|
||||
active_chat_messages = await repo.get_human_messages_since(
|
||||
session_id=session_id,
|
||||
since=datetime.utcnow() - timedelta(minutes=1),
|
||||
)
|
||||
recent_discussion_messages = await repo.get_recent_human_messages(
|
||||
session_id=session_id,
|
||||
limit=5,
|
||||
)
|
||||
|
||||
if self.response_suppression.should_suppress_response(len(recent_messages)):
|
||||
if self.response_suppression.should_suppress_response(len(active_chat_messages)):
|
||||
return {
|
||||
"session_id": session_id,
|
||||
"actions_taken": [],
|
||||
@@ -394,8 +402,13 @@ class AgentOrchestrator:
|
||||
return None
|
||||
|
||||
try:
|
||||
recent_discussion = [
|
||||
message.content for message in recent_discussion_messages[:5]
|
||||
]
|
||||
agent_response = await self.hearthkeeper.generate_prompt(
|
||||
theme=session_info.get("theme")
|
||||
theme=session_info.get("theme"),
|
||||
dashboard=session_info.get("dashboard"),
|
||||
recent_discussion=recent_discussion,
|
||||
)
|
||||
session_info["last_hearthkeeper_prompt_at"] = datetime.utcnow()
|
||||
delivery = await self.emit_agent_response(
|
||||
@@ -433,4 +446,5 @@ class AgentOrchestrator:
|
||||
"message_count": session["message_count"],
|
||||
"uptime_seconds": (datetime.utcnow() - session["started_at"]).total_seconds(),
|
||||
"theme": session.get("theme"),
|
||||
"dashboard": session.get("dashboard"),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user