message_notifier.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from typing import List, Dict
  2. from pqai_agent.logging_service import logger
  3. from pqai_agent.toolkit.base import BaseToolkit
  4. from pqai_agent.toolkit.function_tool import FunctionTool
  5. from pqai_agent.toolkit.tool_registry import register_toolkit
  6. @register_toolkit
  7. class MessageNotifier(BaseToolkit):
  8. def __init__(self):
  9. super().__init__()
  10. def message_notify_user(self, message: str) -> str:
  11. """Sends a message to the user.
  12. Args:
  13. message (str): The message to send.
  14. Returns:
  15. str: A confirmation message.
  16. """
  17. logger.info(f"Message to user: {message}")
  18. return 'success'
  19. def output_multimodal_message(self, message: Dict[str, str]) -> str:
  20. """Outputs a multimodal message to the user.
  21. Message schema:
  22. {
  23. "type": "text|image|gif|video|mini_program",
  24. "content": "message content",
  25. "title": "only needed if type is video or mini_program",
  26. "cover_image": "only needed if type is mini_program",
  27. }
  28. if message type is image, gif, video or mini_program, the content should be a URL.
  29. Args:
  30. message (Dict[str, str]): The message to output.
  31. Returns:
  32. str: A confirmation message.
  33. """
  34. if message["type"] not in ["text", "image", "gif", "video", "mini_program"]:
  35. return f"Invalid message type: {message['type']}"
  36. if message["type"] in ("video", "mini_program") and "title" not in message:
  37. return "Title is required for video or mini_program messages."
  38. if message["type"] == "mini_program" and "cover_image" not in message:
  39. return "Cover image is required for mini_program messages."
  40. logger.info(f"Multimodal message to user: {message}")
  41. return 'success'
  42. def get_tools(self):
  43. return [FunctionTool(self.message_notify_user),
  44. FunctionTool(self.output_multimodal_message)]