Tools
Defining a Tool
import { Tool } from '@obayd/agentic';
const webSearchTool = Tool.make("web_search") // Unique name (letters, numbers, underscore)
.description("Performs a web search for a given query.") // What the tool does
.param("query", "The search query string.", { required: true }) // Define a required parameter
.param("num_results", "Number of results to return.", { type: "number", required: false }) // Optional number param
.param("region", "Search region.", { enum: ["US", "EU", "ANY"], required: false }) // Optional enum param
.action(async (params, conversationInstance, ...args) => {
// Action to perform when the tool is called
console.log(`Searching web for '${params.query}'...`);
// --- Actual search logic here ---
await new Promise(resolve => setTimeout(resolve, 100)); // Simulate API call
return [ // Return results (JSON serializable)
{ title: "Result 1", url: "...", snippet: "..." },
{ title: "Result 2", url: "...", snippet: "..." },
];
});
const codeExecTool = Tool.make("execute_code")
.description("Executes a snippet of Python code.")
.param("timeout", "Execution timeout in seconds.", { type: "number", required: false })
.raw("The Python code snippet to execute.") // Define that this tool takes raw text input
.action(async (params) => {
const code = params.raw; // Access raw input via params.raw
const timeout = params.timeout || 10; // Access regular params
console.log(`Executing code with timeout ${timeout}s:\n${code}`);
// --- Actual code execution logic (sandboxed!) ---
await new Promise(resolve => setTimeout(resolve, 150));
if (code.includes("error")) {
return { error: "Simulated execution error." }; // Return an error object
}
return { output: "Code executed successfully. Output: ...", status: "success" };
});Configuration Methods
Tool Execution Flow
Best Practices
Last updated