Run Agent with Tool

This example demonstrates how to run an agent that can call a tool — in this case, a function that sends an email using the Resend API.


Run Agent with Tool Example

Run Agent with Tool Example

import 'dotenv/config'; import { Langbase, Message, type Tools } from 'langbase'; const langbase = new Langbase({ apiKey: process.env.LANGBASE_API_KEY!, }); // Define the tool schema for sending emails const sendEmailToolSchema: Tools = { type: "function", function: { name: "send_email", description: "Send an email using Resend API", parameters: { type: "object", required: ["from", "to", "subject", "html", "text"], properties: Object.fromEntries( ["from", "to", "subject", "html", "text"].map((field) => [ field, { type: "string" }, ]) ), additionalProperties: false, }, }, }; // Actual tool function async function send_email(args: any) { const { from, to, subject, html, text } = args; const response = await fetch('https://api.resend.com/emails', { method: 'POST', headers: { Authorization: `Bearer ${process.env.RESEND_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ from, to, subject, html, text, }), }); if (!response.ok) { throw new Error('Failed to send email'); } const data = await response.json(); return `✅ Email sent successfully to ${to}!`; } async function main() { if (!process.env.LANGBASE_API_KEY || !process.env.RESEND_API_KEY || !process.env.OPENAI_API_KEY) { console.error('❌ Missing required API keys.'); process.exit(1); } const recipientInfo = { email: "sam@example.com", }; const email = { subject: "Welcome to Langbase!", htmlEmail: "<h1>Hello Sam!</h1><p>Welcome to Langbase.</p>", fullEmail: "Hello Sam! Welcome to Langbase.", }; const inputMessages: Message[] = [ { role: 'user', content: 'Send a welcome email to Sam.', }, ]; // Initial run with tool const response = await langbase.agent.run({ model: "openai:gpt-4.1-mini", apiKey: process.env.OPENAI_API_KEY!, instructions: "You are an email sending assistant.", input: inputMessages, tools: [sendEmailToolSchema], stream: false, }); // Push agent tool call to messages inputMessages.push(response.choices[0].message); // Detect tool call const toolCalls = response.choices[0].message.tool_calls; const hasToolCalls = toolCalls && toolCalls.length > 0; if (hasToolCalls) { for (const toolCall of toolCalls) { // Process each tool call const { name, arguments: args } = toolCall.function; const parsedArgs = JSON.parse(args); parsedArgs.from = "onboarding@resend.dev"; parsedArgs.to = recipientInfo.email; parsedArgs.subject = email.subject; parsedArgs.html = email.htmlEmail; parsedArgs.text = email.fullEmail; const result = await send_email(parsedArgs); inputMessages.push({ role: 'tool', tool_call_id: toolCall.id, name, content: result, }); } } // Final agent response with tool result const { output: finalOutput } = await langbase.agent.run({ model: "openai:gpt-4.1-mini", apiKey: process.env.OPENAI_API_KEY!, instructions: `You are an email sending assistant. Confirm the email has been sent successfully.`, input: inputMessages, stream: false, }); console.log('Final Output:', finalOutput); } main();