|
|
"""Example 1: Basic Tools Usage |
|
|
|
|
|
This example demonstrates how to use the basic tools: |
|
|
- ReadTool: Read file contents |
|
|
- WriteTool: Create new files |
|
|
- EditTool: Edit existing files |
|
|
- BashTool: Execute bash commands |
|
|
|
|
|
Based on: tests/test_tools.py |
|
|
""" |
|
|
|
|
|
import asyncio |
|
|
import tempfile |
|
|
from pathlib import Path |
|
|
|
|
|
from mini_agent.tools import BashTool, EditTool, ReadTool, WriteTool |
|
|
|
|
|
|
|
|
async def demo_write_tool(): |
|
|
"""Demo: Write a new file.""" |
|
|
print("\n" + "=" * 60) |
|
|
print("Demo 1: WriteTool - Create a new file") |
|
|
print("=" * 60) |
|
|
|
|
|
with tempfile.TemporaryDirectory() as tmpdir: |
|
|
file_path = Path(tmpdir) / "hello.txt" |
|
|
|
|
|
tool = WriteTool() |
|
|
result = await tool.execute( |
|
|
path=str(file_path), content="Hello, Mini Agent!\nThis is a test file." |
|
|
) |
|
|
|
|
|
if result.success: |
|
|
print(f"β
File created: {file_path}") |
|
|
print(f"Content:\n{file_path.read_text()}") |
|
|
else: |
|
|
print(f"β Failed: {result.error}") |
|
|
|
|
|
|
|
|
async def demo_read_tool(): |
|
|
"""Demo: Read a file.""" |
|
|
print("\n" + "=" * 60) |
|
|
print("Demo 2: ReadTool - Read file contents") |
|
|
print("=" * 60) |
|
|
|
|
|
with tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".txt") as f: |
|
|
f.write("Line 1: Hello\nLine 2: World\nLine 3: Mini Agent") |
|
|
temp_path = f.name |
|
|
|
|
|
try: |
|
|
tool = ReadTool() |
|
|
result = await tool.execute(path=temp_path) |
|
|
|
|
|
if result.success: |
|
|
print(f"β
File read successfully") |
|
|
print(f"Content:\n{result.content}") |
|
|
else: |
|
|
print(f"β Failed: {result.error}") |
|
|
finally: |
|
|
Path(temp_path).unlink() |
|
|
|
|
|
|
|
|
async def demo_edit_tool(): |
|
|
"""Demo: Edit an existing file.""" |
|
|
print("\n" + "=" * 60) |
|
|
print("Demo 3: EditTool - Edit file content") |
|
|
print("=" * 60) |
|
|
|
|
|
with tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".txt") as f: |
|
|
f.write("Python is great!\nI love Python programming.") |
|
|
temp_path = f.name |
|
|
|
|
|
try: |
|
|
print(f"Original content:\n{Path(temp_path).read_text()}\n") |
|
|
|
|
|
tool = EditTool() |
|
|
result = await tool.execute( |
|
|
path=temp_path, old_str="Python", new_str="Agent" |
|
|
) |
|
|
|
|
|
if result.success: |
|
|
print(f"β
File edited successfully") |
|
|
print(f"New content:\n{Path(temp_path).read_text()}") |
|
|
else: |
|
|
print(f"β Failed: {result.error}") |
|
|
finally: |
|
|
Path(temp_path).unlink() |
|
|
|
|
|
|
|
|
async def demo_bash_tool(): |
|
|
"""Demo: Execute bash commands.""" |
|
|
print("\n" + "=" * 60) |
|
|
print("Demo 4: BashTool - Execute bash commands") |
|
|
print("=" * 60) |
|
|
|
|
|
tool = BashTool() |
|
|
|
|
|
|
|
|
print("\nCommand: ls -la") |
|
|
result = await tool.execute(command="ls -la") |
|
|
if result.success: |
|
|
print(f"β
Command executed successfully") |
|
|
print(f"Output:\n{result.content[:200]}...") |
|
|
|
|
|
|
|
|
print("\nCommand: pwd") |
|
|
result = await tool.execute(command="pwd") |
|
|
if result.success: |
|
|
print(f"β
Current directory: {result.content.strip()}") |
|
|
|
|
|
|
|
|
print("\nCommand: echo 'Hello from BashTool!'") |
|
|
result = await tool.execute(command="echo 'Hello from BashTool!'") |
|
|
if result.success: |
|
|
print(f"β
Output: {result.content.strip()}") |
|
|
|
|
|
|
|
|
async def main(): |
|
|
"""Run all demos.""" |
|
|
print("=" * 60) |
|
|
print("Basic Tools Usage Examples") |
|
|
print("=" * 60) |
|
|
print("\nThese examples show how to use the core tools directly.") |
|
|
print("In a real agent scenario, the LLM decides which tools to use.\n") |
|
|
|
|
|
await demo_write_tool() |
|
|
await demo_read_tool() |
|
|
await demo_edit_tool() |
|
|
await demo_bash_tool() |
|
|
|
|
|
print("\n" + "=" * 60) |
|
|
print("All demos completed! β
") |
|
|
print("=" * 60) |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
asyncio.run(main()) |
|
|
|