Spaces:
Runtime error
Runtime error
Add new agents and tools for Devid and BrowsingAgent; remove obsolete ResearchAndReportAgent
670dd87
| import os | |
| from dotenv import load_dotenv | |
| from agency_swarm.tools import BaseTool | |
| from pydantic import Field | |
| load_dotenv() | |
| notion_integration_secret = os.getenv("NOTION_INTEGRATION_SECRET") | |
| notion_database_id = os.getenv("NOTION_DATABASE_ID") | |
| class GetTasksTool(BaseTool): | |
| """ | |
| Tool for retrieving tasks from a Notion database. | |
| This tool allows querying tasks with optional filtering and sorting capabilities | |
| based on properties like Due Date, Status, Priority, and Task Name. | |
| """ | |
| # Add example_field with a default value to satisfy BaseTool validation | |
| example_field: str = Field( | |
| default="notion_tasks", | |
| description="Identifier for this tool. Can be left at its default value.", | |
| ) | |
| status: str = Field( | |
| default=None, | |
| description="Filter tasks by status. Options: Backlog, In Progress, Testing, Completed.", | |
| ) | |
| priority: str = Field( | |
| default=None, | |
| description="Filter tasks by priority. Options: High, Medium, Low.", | |
| ) | |
| due_date_before: str = Field( | |
| default=None, | |
| description="Filter tasks due before this date (format: YYYY-MM-DD).", | |
| ) | |
| due_date_after: str = Field( | |
| default=None, | |
| description="Filter tasks due after this date (format: YYYY-MM-DD).", | |
| ) | |
| sort_by: str = Field( | |
| default="Due Date", | |
| description="Property to sort by. Options: Due Date, Status, Priority, Task Name.", | |
| ) | |
| sort_direction: str = Field( | |
| default="ascending", | |
| description="Sort direction. Options: ascending, descending.", | |
| ) | |
| def run(self): | |
| """ | |
| Query a Notion database for tasks with optional filtering and sorting. | |
| Returns: | |
| dict: The JSON response from the Notion API containing the tasks. | |
| """ | |
| import requests | |
| # Use the database ID from the environment variable | |
| database_id = os.getenv("NOTION_DATABASE_ID") | |
| # Set up the API endpoint | |
| url = f"https://api.notion.com/v1/databases/{database_id}/query" | |
| # Set up the headers | |
| headers = { | |
| "Authorization": f"Bearer {os.getenv('NOTION_INTEGRATION_SECRET')}", | |
| "Notion-Version": "2022-06-28", | |
| "Content-Type": "application/json", | |
| } | |
| # Prepare the request body | |
| data = {} | |
| # Build filter | |
| filters = [] | |
| if self.status: | |
| filters.append({"property": "Status", "status": {"equals": self.status}}) | |
| if self.priority: | |
| filters.append( | |
| {"property": "Priority", "select": {"equals": self.priority}} | |
| ) | |
| if self.due_date_before: | |
| filters.append( | |
| {"property": "Due Date", "date": {"before": self.due_date_before}} | |
| ) | |
| if self.due_date_after: | |
| filters.append( | |
| {"property": "Due Date", "date": {"after": self.due_date_after}} | |
| ) | |
| if filters: | |
| if len(filters) > 1: | |
| data["filter"] = {"and": filters} | |
| else: | |
| data["filter"] = filters[0] | |
| # Add sorting | |
| if self.sort_by: | |
| data["sorts"] = [ | |
| {"property": self.sort_by, "direction": self.sort_direction} | |
| ] | |
| # Make the request | |
| response = requests.post(url, headers=headers, json=data) | |
| # Return the JSON response | |
| return response.json() | |