Spaces:
Paused
Paused
| from agency_swarm.tools import BaseTool | |
| from pydantic import Field | |
| from typing import Optional, Dict, Any | |
| import os | |
| from datetime import datetime | |
| class MarkdownWriter(BaseTool): | |
| """ | |
| A tool for creating and updating markdown files. Can be used by any agent to document their tasks, | |
| create reports, or store information in markdown format. | |
| """ | |
| content: str = Field( | |
| ..., | |
| description="The content to write to the markdown file" | |
| ) | |
| file_path: str = Field( | |
| ..., | |
| description="The path where the markdown file should be saved (including filename)" | |
| ) | |
| metadata: Optional[Dict[str, Any]] = Field( | |
| default=None, | |
| description="Optional metadata to include at the top of the file in YAML format" | |
| ) | |
| append: bool = Field( | |
| default=False, | |
| description="If True, append to existing file. If False, create new or overwrite" | |
| ) | |
| def run(self) -> str: | |
| try: | |
| # Create directories if they don't exist | |
| os.makedirs(os.path.dirname(self.file_path), exist_ok=True) | |
| # Prepare content with metadata if provided | |
| final_content = "" | |
| if self.metadata: | |
| final_content += "---\n" | |
| for key, value in self.metadata.items(): | |
| final_content += f"{key}: {value}\n" | |
| final_content += "---\n\n" | |
| final_content += self.content | |
| # Add timestamp if appending | |
| if self.append: | |
| final_content = f"\n\n## Update: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n{final_content}" | |
| # Write or append to file | |
| mode = 'a' if self.append else 'w' | |
| with open(self.file_path, mode, encoding='utf-8') as f: | |
| f.write(final_content) | |
| return f"Successfully {'appended to' if self.append else 'created'} markdown file at {self.file_path}" | |
| except Exception as e: | |
| return f"Error writing markdown file: {str(e)}" | |
| if __name__ == "__main__": | |
| # Test the tool | |
| test_content = """ | |
| # Test Report | |
| ## Overview | |
| This is a test report. | |
| ### Key Points | |
| - Point 1 | |
| - Point 2 | |
| """ | |
| test_metadata = { | |
| "author": "TestAgent", | |
| "date": datetime.now().strftime("%Y-%m-%d"), | |
| "type": "test_report" | |
| } | |
| tool = MarkdownWriter( | |
| content=test_content, | |
| file_path="./test_report.md", | |
| metadata=test_metadata | |
| ) | |
| print(tool.run()) |