import { setup } from "@inference/tracing";
import { ChatAnthropic } from "@langchain/anthropic";
import * as CallbackManagerModule from "@langchain/core/callbacks/manager";
import { createAgent, tool } from "langchain";
import { z } from "zod";
const tracing = await setup({
serviceName: "support-agent",
modules: { langchainCallbacksManager: CallbackManagerModule },
});
const lookupOrder = tool(
({ orderId }) => JSON.stringify({ orderId, status: "shipped", total: 42.5 }),
{
name: "lookup_order",
description: "Look up an order by ID.",
schema: z.object({ orderId: z.string() }),
},
);
const cancelOrder = tool(
({ orderId, reason }) => JSON.stringify({ ok: true, orderId, reason }),
{
name: "cancel_order",
description: "Cancel a not-yet-delivered order.",
schema: z.object({ orderId: z.string(), reason: z.string() }),
},
);
const agent = createAgent({
model: new ChatAnthropic({ model: "claude-haiku-4-5", maxTokens: 512 }),
tools: [lookupOrder, cancelOrder],
systemPrompt: "Use tools to resolve order issues.",
});
const result = await agent.invoke({
messages: [{ role: "user", content: "Cancel order ABC-123." }],
});
console.log(result.messages.at(-1)?.content);
await tracing.shutdown();