Files
mai-bot/agentlite/examples/tool_suite_example.py
2026-04-03 22:15:53 +08:00

132 lines
4.1 KiB
Python

"""Example demonstrating the configurable tool suite for AgentLite.
This example shows how to use the tool suite with configuration
to enable/disable specific tools.
"""
import asyncio
from pathlib import Path
from agentlite import Agent, OpenAIProvider
from agentlite.tools import (
ConfigurableToolset,
ToolSuiteConfig,
FileToolsConfig,
ShellToolsConfig,
)
async def main():
"""Demonstrate the configurable tool suite."""
# Example 1: Default configuration (all tools enabled)
print("=== Example 1: Default Configuration ===")
config = ToolSuiteConfig()
toolset = ConfigurableToolset(config)
print(f"Enabled tools: {len(toolset.tools)}")
for tool in toolset.tools:
print(f" - {tool.name}")
# Example 2: Disable specific tools
print("\n=== Example 2: Disable WriteFile ===")
config = ToolSuiteConfig(
file_tools=FileToolsConfig(
tools={"WriteFile": False} # Disable WriteFile
)
)
toolset = ConfigurableToolset(config)
print(f"Enabled tools: {len(toolset.tools)}")
for tool in toolset.tools:
print(f" - {tool.name}")
# Example 3: Disable entire tool groups
print("\n=== Example 3: Disable Shell Tools ===")
config = ToolSuiteConfig(shell_tools=ShellToolsConfig(enabled=False))
toolset = ConfigurableToolset(config)
print(f"Enabled tools: {len(toolset.tools)}")
for tool in toolset.tools:
print(f" - {tool.name}")
# Example 4: Custom file tool settings
print("\n=== Example 4: Custom File Tool Settings ===")
config = ToolSuiteConfig(
file_tools=FileToolsConfig(
max_lines=500,
max_bytes=50 * 1024, # 50KB
allow_write_outside_work_dir=True,
)
)
toolset = ConfigurableToolset(config)
print(f"File tool settings:")
print(f" Max lines: {config.file_tools.max_lines}")
print(f" Max bytes: {config.file_tools.max_bytes}")
print(f" Allow outside work dir: {config.file_tools.allow_write_outside_work_dir}")
# Example 5: Using with an Agent
print("\n=== Example 5: Using with Agent ===")
# Create a safe configuration (no shell, no write outside work dir)
safe_config = ToolSuiteConfig(
file_tools=FileToolsConfig(
allow_write_outside_work_dir=False,
),
shell_tools=ShellToolsConfig(enabled=False),
)
# This would require an API key to actually run
# provider = OpenAIProvider(api_key="your-api-key", model="gpt-4")
# agent = Agent(
# provider=provider,
# system_prompt="You are a helpful assistant with file access.",
# tools=ConfigurableToolset(safe_config).tools,
# )
print("Safe configuration created:")
print(" - Shell tools: DISABLED")
print(" - Write outside work dir: DISABLED")
print(" - Read file: ENABLED")
print(" - Glob/Grep: ENABLED")
# Example 6: Dynamic configuration reload
print("\n=== Example 6: Dynamic Reload ===")
config = ToolSuiteConfig()
toolset = ConfigurableToolset(config)
print(f"Initial tools: {len(toolset.tools)}")
# Disable some tools and reload
config.file_tools.disable_tool("WriteFile")
config.shell_tools.enabled = False
toolset.reload()
print(f"After reload: {len(toolset.tools)}")
for tool in toolset.tools:
print(f" - {tool.name}")
# Example 7: Using individual tools directly
print("\n=== Example 7: Direct Tool Usage ===")
from agentlite.tools.file import ReadFile, Glob
# Create tools directly
read_tool = ReadFile(work_dir=Path("."))
glob_tool = Glob(work_dir=Path("."))
# Use ReadFile
result = await read_tool.read({"path": "README.md"})
if not result.is_error:
print(f"README.md: {len(result.output)} characters")
else:
print(f"Could not read README.md: {result.message}")
# Use Glob
result = await glob_tool.glob({"pattern": "*.py"})
if not result.is_error:
files = result.output.split("\n") if result.output else []
print(f"Python files found: {len(files)}")
else:
print(f"Glob error: {result.message}")
if __name__ == "__main__":
asyncio.run(main())