Download tools.py from Erog0291/Agent-4: direct link, hf CLI and curl.
- Browser
- Download file 11.1 kB
-
https://huggingface.co/spaces/Erog0291/Agent-4/resolve/main/tools.py
- Command line
-
hf download hf://spaces/Erog0291/Agent-4/tools.py
-
curl -L -o tools.py https://huggingface.co/spaces/Erog0291/Agent-4/resolve/main/tools.py
11.1 kB
| """ | |
| STEW Tool Registry β Full Capability Set | |
| Every tool the agent can call, with OpenAI function-calling definitions. | |
| """ | |
| import json | |
| import datetime | |
| import requests | |
| from config import Config | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # TOOL DEFINITIONS (OpenAI function-calling schema) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| TOOL_DEFINITIONS = [ | |
| # ββ Utility ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| {"type":"function","function":{"name":"get_current_datetime","description":"Returns current UTC date/time.","parameters":{"type":"object","properties":{},"required":[]}}}, | |
| # ββ Web Research ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| {"type":"function","function":{"name":"web_search","description":"Search the web for information.","parameters":{"type":"object","properties":{"query":{"type":"string"}},"required":["query"]}}}, | |
| {"type":"function","function":{"name":"browser_fetch","description":"Fetch visible text content of any URL.","parameters":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}}, | |
| # ββ Notion ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| {"type":"function","function":{"name":"notion_list_pages","description":"List recent Notion pages.","parameters":{"type":"object","properties":{},"required":[]}}}, | |
| {"type":"function","function":{"name":"notion_create_page","description":"Create a Notion page.","parameters":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string"}},"required":["title","content"]}}}, | |
| # ββ Slack ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| {"type":"function","function":{"name":"slack_send_message","description":"Send a Slack message.","parameters":{"type":"object","properties":{"channel":{"type":"string"},"text":{"type":"string"}},"required":["channel","text"]}}}, | |
| {"type":"function","function":{"name":"slack_list_channels","description":"List Slack channels.","parameters":{"type":"object","properties":{},"required":[]}}}, | |
| # ββ Gmail ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| {"type":"function","function":{"name":"gmail_send_email","description":"Send an email via Gmail.","parameters":{"type":"object","properties":{"to":{"type":"string"},"subject":{"type":"string"},"body":{"type":"string"}},"required":["to","subject","body"]}}}, | |
| {"type":"function","function":{"name":"gmail_list_inbox","description":"List Gmail inbox emails.","parameters":{"type":"object","properties":{"max_results":{"type":"integer","default":5}},"required":[]}}}, | |
| # ββ Google Calendar ββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| {"type":"function","function":{"name":"calendar_list_events","description":"List upcoming Google Calendar events.","parameters":{"type":"object","properties":{"max_results":{"type":"integer","default":10}},"required":[]}}}, | |
| {"type":"function","function":{"name":"calendar_create_event","description":"Create a Google Calendar event.","parameters":{"type":"object","properties":{"title":{"type":"string"},"start":{"type":"string","description":"ISO 8601"},"end":{"type":"string","description":"ISO 8601"},"description":{"type":"string"}},"required":["title","start","end"]}}}, | |
| # ββ Google Drive βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| {"type":"function","function":{"name":"drive_list_files","description":"List recent Google Drive files.","parameters":{"type":"object","properties":{},"required":[]}}}, | |
| {"type":"function","function":{"name":"drive_search_files","description":"Search files in Google Drive.","parameters":{"type":"object","properties":{"query":{"type":"string"}},"required":["query"]}}}, | |
| # ββ Vector Memory ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| {"type":"function","function":{"name":"memory_store","description":"Save information to long-term vector memory.","parameters":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}}}, | |
| {"type":"function","function":{"name":"memory_search","description":"Search long-term vector memory semantically.","parameters":{"type":"object","properties":{"query":{"type":"string"}},"required":["query"]}}}, | |
| # ββ Multi-Agent ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| {"type":"function","function":{"name":"run_multi_agent","description":"Delegate complex task to specialist sub-agents (researcher, coder, planner, analyst, writer, reviewer).","parameters":{"type":"object","properties":{"task":{"type":"string"},"pipeline":{"type":"array","items":{"type":"string"},"description":"Optional ordered agent roles"}},"required":["task"]}}}, | |
| ] | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # IMPLEMENTATIONS | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| def get_current_datetime(**_) -> str: | |
| return datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S UTC") | |
| def web_search(query: str, **_) -> str: | |
| try: | |
| r = requests.get("https://api.duckduckgo.com/", params={"q": query, "format": "json", "no_html": 1, "skip_disambig": 1}, timeout=8) | |
| data = r.json() | |
| abstract = data.get("AbstractText", "") | |
| related = [t.get("Text", "") for t in data.get("RelatedTopics", [])[:4]] | |
| return f"Summary: {abstract}\n\nRelated: {'; '.join(related)}" if abstract else (f"Related: {'; '.join(related)}" if related else "No results.") | |
| except Exception as e: | |
| return f"Search error: {e}" | |
| def browser_fetch(url: str, **_) -> str: | |
| try: | |
| from integrations.browser import get_browser | |
| return get_browser().fetch_sync(url) | |
| except Exception as e: | |
| return f"Browser error: {e}" | |
| def notion_list_pages(**_) -> str: | |
| from integrations.notion import NotionIntegration | |
| return NotionIntegration().list_pages() | |
| def notion_create_page(title: str, content: str, **_) -> str: | |
| from integrations.notion import NotionIntegration | |
| return NotionIntegration().create_page(title, content) | |
| def slack_send_message(channel: str, text: str, **_) -> str: | |
| from integrations.slack import SlackIntegration | |
| return SlackIntegration().send_message(channel, text) | |
| def slack_list_channels(**_) -> str: | |
| from integrations.slack import SlackIntegration | |
| return SlackIntegration().list_channels() | |
| def gmail_send_email(to: str, subject: str, body: str, **_) -> str: | |
| from integrations.gmail import GmailIntegration | |
| return GmailIntegration().send_email(to, subject, body) | |
| def gmail_list_inbox(max_results: int = 5, **_) -> str: | |
| from integrations.gmail import GmailIntegration | |
| return GmailIntegration().list_inbox(max_results) | |
| def calendar_list_events(max_results: int = 10, **_) -> str: | |
| from integrations.google_calendar import GoogleCalendarIntegration | |
| return GoogleCalendarIntegration().list_events(max_results) | |
| def calendar_create_event(title: str, start: str, end: str, description: str = "", **_) -> str: | |
| from integrations.google_calendar import GoogleCalendarIntegration | |
| return GoogleCalendarIntegration().create_event(title, start, end, description) | |
| def drive_list_files(**_) -> str: | |
| from integrations.google_drive import GoogleDriveIntegration | |
| return GoogleDriveIntegration().list_files() | |
| def drive_search_files(query: str, **_) -> str: | |
| from integrations.google_drive import GoogleDriveIntegration | |
| return GoogleDriveIntegration().search_files(query) | |
| def memory_store(text: str, **_) -> str: | |
| from vector_memory import get_vector_memory | |
| return get_vector_memory().store(text) | |
| def memory_search(query: str, **_) -> str: | |
| from vector_memory import get_vector_memory | |
| return get_vector_memory().search(query) | |
| def run_multi_agent(task: str, pipeline: list | None = None, **_) -> str: | |
| from multiagent import MultiAgentCoordinator | |
| c = MultiAgentCoordinator() | |
| return c.run_pipeline(task, pipeline) if pipeline else c.smart_route(task) | |
| # ββ Dispatcher βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| TOOL_MAP = { | |
| "get_current_datetime": get_current_datetime, | |
| "web_search": web_search, | |
| "browser_fetch": browser_fetch, | |
| "notion_list_pages": notion_list_pages, | |
| "notion_create_page": notion_create_page, | |
| "slack_send_message": slack_send_message, | |
| "slack_list_channels": slack_list_channels, | |
| "gmail_send_email": gmail_send_email, | |
| "gmail_list_inbox": gmail_list_inbox, | |
| "calendar_list_events": calendar_list_events, | |
| "calendar_create_event": calendar_create_event, | |
| "drive_list_files": drive_list_files, | |
| "drive_search_files": drive_search_files, | |
| "memory_store": memory_store, | |
| "memory_search": memory_search, | |
| "run_multi_agent": run_multi_agent, | |
| } | |
| def execute_tool(name: str, arguments) -> str: | |
| fn = TOOL_MAP.get(name) | |
| if not fn: | |
| return f"Unknown tool: {name}" | |
| try: | |
| args = json.loads(arguments) if isinstance(arguments, str) else arguments | |
| return str(fn(**args)) | |
| except Exception as e: | |
| return f"Tool '{name}' error: {e}" | |