Run Pipe Agent with Tools

This example demonstrates how to run a pipe agent with tools and use function calling capabilities with a Langbase pipe agent.


Run Pipe Agent with Tools Example

Run Pipe Agent with Tools Example

import 'dotenv/config'; import { Langbase, Message, Tools, getToolsFromRun } from 'langbase'; const langbase = new Langbase({ apiKey: process.env.LANGBASE_API_KEY!, }); async function main() { await createSummaryAgent(); const response = await langbase.pipes.run({ stream: false, name: 'summary-agent', messages: [ { role: 'user', content: "What's the weather in SF?", }, ], tools: [weatherToolSchema], }); const toolCalls = await getToolsFromRun(response); const hasToolCalls = toolCalls.length > 0; const threadId = response.threadId; if (hasToolCalls) { // Process each tool call const toolResultPromises = toolCalls.map(async (toolCall): Promise<Message> => { const toolName = toolCall.function.name; const toolParameters = JSON.parse(toolCall.function.arguments); const toolFunction = tools[toolName as keyof typeof tools]; // Call the tool function with the parameters const toolResponse = await toolFunction(toolParameters); // Return the tool result return { role: 'tool', name: toolName, content: toolResponse, tool_call_id: toolCall.id, }; }); // Wait for all tool calls to complete const toolResults = await Promise.all(toolResultPromises); // Call the agent pipe again with the updated messages const finalResponse = await langbase.pipes.run({ threadId, stream: false, name: 'summary-agent', messages: toolResults, tools: [weatherToolSchema], }); console.log(JSON.stringify(finalResponse, null, 2)); } else { console.log('Direct response (no tools called):'); console.log(JSON.stringify(response, null, 2)); } } // Mock implementation of the weather function async function getCurrentWeather(args: { location: string }) { return 'Sunny, 75°F'; } // Weather tool schema const weatherToolSchema: Tools = { type: 'function', function: { name: 'getCurrentWeather', description: 'Get the current weather of a given location', parameters: { type: 'object', required: ['location'], properties: { unit: { enum: ['celsius', 'fahrenheit'], type: 'string', }, location: { type: 'string', description: 'The city and state, e.g. San Francisco, CA', }, }, }, }, }; // Object to hold all tools const tools = { getCurrentWeather }; /** * Creates a summary agent pipe if it doesn't already exist. * * This function checks if a pipe with the name 'summary-agent' exists in the system. * If the pipe doesn't exist, it creates a new private pipe with a system message * configuring it as a helpful assistant. * * @async * @returns {Promise<void>} A promise that resolves when the operation is complete * @throws {Error} Logs any errors encountered during the creation process */ async function createSummaryAgent() { try { await langbase.pipes.create({ name: 'summary-agent', upsert: true, status: 'private', messages: [ { role: 'system', content: 'You are a helpful assistant that help users summarize text.', }, ], }); } catch (error) { console.error('Error creating summary agent:', error); } } main();