| import re |
| import os |
| import requests |
| from smolagents import Tool |
| from smolagents.utils import truncate_content |
|
|
| |
| DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space" |
|
|
| class DownloadTaskAttachmentTool(Tool): |
| """Tool for downloading files attached to tasks.""" |
|
|
| name = "download_file" |
| description = "Downloads the file attached to the task ID" |
| inputs = {'task_id': {'type': 'string', 'description': 'The task id to download attachment from.'}} |
| output_type = "string" |
|
|
| def __init__(self, *args, **kwargs): |
| self.is_initialized = True |
|
|
| def forward(self, task_id: str) -> str: |
| """Download a file associated with the given task ID.""" |
| file_url = f"{DEFAULT_API_URL}/files/{task_id}" |
| local_file_path = f"downloads/{task_id}.file" |
|
|
| try: |
| |
| os.makedirs("downloads", exist_ok=True) |
|
|
| |
| with requests.get(file_url, stream=True, timeout=15) as response: |
| response.raise_for_status() |
| with open(local_file_path, "wb") as file: |
| for chunk in response.iter_content(chunk_size=8192): |
| file.write(chunk) |
|
|
| return local_file_path |
|
|
| except Exception as e: |
| print(f"Error downloading file for task {task_id}: {e}") |
| raise |
|
|
|
|
| class VisitWebpageTool(Tool): |
| """Tool for visiting webpages and converting content to markdown.""" |
|
|
| name = "visit_webpage" |
| description = "Visits a webpage and returns its content as markdown" |
| inputs = {'url': {'type': 'string', 'description': 'The URL to visit'}} |
| output_type = "string" |
|
|
| def __init__(self, *args, **kwargs): |
| self.is_initialized = True |
|
|
| def forward(self, url: str) -> str: |
| """Visit a webpage and return its content as markdown.""" |
| try: |
| |
| from markdownify import markdownify |
|
|
| |
| response = requests.get(url, timeout=20) |
| response.raise_for_status() |
|
|
| |
| content = markdownify(response.text).strip() |
| content = re.sub(r"\n{3,}", "\n\n", content) |
|
|
| |
| return truncate_content(content, 10000) |
|
|
| except requests.exceptions.Timeout: |
| return "Request timed out. Please check the URL or try again later." |
| except Exception as e: |
| return f"Error: {str(e)}" |
|
|