muni's picture
Add TinyTroupe
82a7a28
import textwrap
import json
from tinytroupe.tools import logger, TinyTool
import tinytroupe.utils as utils
# TODO under development
class TinyCalendar(TinyTool):
def __init__(self, owner=None):
super().__init__("calendar", "A basic calendar tool that allows agents to keep track meetings and appointments.", owner=owner, real_world_side_effects=False)
# maps date to list of events. Each event itself is a dictionary with keys "title", "description", "owner", "mandatory_attendees", "optional_attendees", "start_time", "end_time"
self.calenar = {}
def add_event(self, date, title, description=None, owner=None, mandatory_attendees=None, optional_attendees=None, start_time=None, end_time=None):
if date not in self.calendar:
self.calendar[date] = []
self.calendar[date].append({"title": title, "description": description, "owner": owner, "mandatory_attendees": mandatory_attendees, "optional_attendees": optional_attendees, "start_time": start_time, "end_time": end_time})
def find_events(self, year, month, day, hour=None, minute=None):
# TODO
pass
def _process_action(self, agent, action) -> bool:
if action['type'] == "CREATE_EVENT" and action['content'] is not None:
# parse content json
event_content = json.loads(action['content'])
# checks whether there are any kwargs that are not valid
valid_keys = ["title", "description", "mandatory_attendees", "optional_attendees", "start_time", "end_time"]
utils.check_valid_fields(event_content, valid_keys)
# uses the kwargs to create a new event
self.add_event(event_content)
return True
else:
return False
def actions_definitions_prompt(self) -> str:
prompt = \
"""
- CREATE_EVENT: You can create a new event in your calendar. The content of the event has many fields, and you should use a JSON format to specify them. Here are the possible fields:
* title: The title of the event. Mandatory.
* description: A brief description of the event. Optional.
* mandatory_attendees: A list of agent names who must attend the event. Optional.
* optional_attendees: A list of agent names who are invited to the event, but are not required to attend. Optional.
* start_time: The start time of the event. Optional.
* end_time: The end time of the event. Optional.
"""
# TODO how the atendee list will be handled? How will they be notified of the invitation? I guess they must also have a calendar themselves. <-------------------------------------
return utils.dedent(prompt)
def actions_constraints_prompt(self) -> str:
prompt = \
"""
"""
# TODO
return textwrap.dedent(prompt)