Spaces:
Running
Running
| 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) | |