implemenation on the ai agents and registry
This commit is contained in:
@@ -11,6 +11,7 @@ from core.agent import SpecializedAgent
|
||||
from core.types import AgentTask, MessageType, OrderStatus
|
||||
from core.logger import logger
|
||||
from core.http_client import api_post, api_get
|
||||
from core.registry import registry
|
||||
from config.system_config import GO_API_BASE_URL, INTERNAL_API_KEY
|
||||
|
||||
|
||||
@@ -64,6 +65,32 @@ class CustomerAgent(SpecializedAgent):
|
||||
self._notifications: Dict[str, List[Notification]] = {}
|
||||
self._templates = self._init_templates()
|
||||
self._preferences: Dict[str, Dict] = {}
|
||||
self._received_events: List[Dict[str, Any]] = []
|
||||
|
||||
# Event notifications other agents send without a task_type. They used to
|
||||
# fall through to the base handle_message and be dropped at DEBUG level.
|
||||
# They come from ExceptionAgent's generic exception tasks, which run over
|
||||
# in-memory, simulated records (their order ids are not real bookings), so
|
||||
# they are RECORDED here and logged — deliberately not turned into a real
|
||||
# customer message through the backend's /internal/notify.
|
||||
_RECORDED_EVENTS = {MessageType.ORDER_CANCELLED, MessageType.NOTIFICATION_SENT}
|
||||
|
||||
async def handle_message(self, message) -> None:
|
||||
if message.message_type not in self._RECORDED_EVENTS:
|
||||
await super().handle_message(message)
|
||||
return
|
||||
payload = message.payload if isinstance(message.payload, dict) else {}
|
||||
event = {
|
||||
"type": message.message_type.value,
|
||||
"from": message.sender,
|
||||
"order_id": payload.get("order_id"),
|
||||
"received_at": datetime.now().isoformat(),
|
||||
}
|
||||
self._received_events = (self._received_events + [event])[-200:]
|
||||
logger.info(
|
||||
f"Customer Agent: recorded {event['type']} from {event['from']} for order {event['order_id']} "
|
||||
"(simulated exception flow; no customer message sent)"
|
||||
)
|
||||
|
||||
def _init_templates(self) -> Dict[str, Dict]:
|
||||
return {
|
||||
@@ -186,6 +213,9 @@ class CustomerAgent(SpecializedAgent):
|
||||
return {"status": "sent", "order_id": order_id, "notifications": notifications_sent}
|
||||
|
||||
async def _send_notification(self, task: AgentTask) -> Dict[str, Any]:
|
||||
if not registry.skill_enabled("customer_notifications"):
|
||||
logger.info("Customer Agent: skill customer_notifications is disabled in the agent registry; not sending")
|
||||
return {"status": "skipped", "reason": "customer_notifications disabled in the agent registry"}
|
||||
order_id = task.data.get("order_id")
|
||||
notification_type = task.data.get("notification_type")
|
||||
template_vars = task.data.get("template_vars", {})
|
||||
|
||||
Reference in New Issue
Block a user