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 | |
from typing import Dict, List, Optional, Any, Union | |
load_dotenv() | |
notion_integration_secret = os.getenv("NOTION_INTEGRATION_SECRET") | |
notion_database_id = os.getenv("NOTION_DATABASE_ID") | |
class CreateTaskTool(BaseTool): | |
""" | |
Tool for creating a new task (page) in a Notion database. | |
This tool creates a new page with specified properties and optionally | |
adds content blocks to the page. | |
""" | |
# Add example_field with a default value to satisfy BaseTool validation | |
example_field: str = Field( | |
default="notion_create_task", | |
description="Identifier for this tool. Can be left at its default value.", | |
) | |
title: str = Field( | |
..., | |
description="The title of the task (required).", | |
) | |
task_description: str = Field( | |
default=None, | |
description="A text description of the task.", | |
) | |
status: str = Field( | |
default=None, | |
description="Status of the task. Options: Backlog, In Progress, Testing, Completed.", | |
) | |
priority: str = Field( | |
default=None, | |
description="Priority of the task. Options: High, Medium, Low.", | |
) | |
due_date: str = Field( | |
default=None, | |
description="Due date of the task in YYYY-MM-DD format.", | |
) | |
# assigned_to: List[str] = Field( | |
# default=None, | |
# description="List of user IDs to assign the task to.", | |
# ) | |
content_blocks: List[Dict[str, Any]] = Field( | |
default=None, | |
description="List of content blocks to add to the page. See Notion API Block documentation for format.", | |
) | |
def run(self): | |
""" | |
Create a new task (page) in a Notion database with the specified properties and content. | |
Returns: | |
dict: The JSON response from the Notion API containing the created page. | |
""" | |
import requests | |
# Use the database ID from the parameter or environment variable | |
database_id = os.getenv("NOTION_DATABASE_ID") | |
# Set up the API endpoint | |
url = "https://api.notion.com/v1/pages" | |
# 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 = { | |
"parent": {"type": "database_id", "database_id": database_id}, | |
"properties": self._build_properties(), | |
} | |
# Add children blocks if provided | |
if self.content_blocks: | |
data["children"] = self.content_blocks | |
# Make the request | |
response = requests.post(url, headers=headers, json=data) | |
# Return the JSON response | |
return response.json() | |
def _build_properties(self) -> Dict[str, Any]: | |
""" | |
Build the properties object based on provided parameters. | |
Returns: | |
dict: A dictionary containing the page properties in Notion API format. | |
""" | |
properties = {} | |
# Title is required | |
properties["Task Name"] = { | |
"title": [{"type": "text", "text": {"content": self.title}}] | |
} | |
# Add task description if provided | |
if self.task_description: | |
properties["Task Description"] = { | |
"rich_text": [ | |
{"type": "text", "text": {"content": self.task_description}} | |
] | |
} | |
# Add status if provided | |
if self.status: | |
properties["Status"] = {"status": {"name": self.status}} | |
# Add priority if provided | |
if self.priority: | |
properties["Priority"] = {"select": {"name": self.priority}} | |
# Add due date if provided | |
if self.due_date: | |
properties["Due Date"] = {"date": {"start": self.due_date}} | |
# Add assigned people if provided | |
# if self.assigned_to: | |
# properties["Assigned to"] = { | |
# "people": [{"id": user_id} for user_id in self.assigned_to] | |
# } | |
return properties | |