UNPKG

@osohq/langchain

Version:

Oso integration for LangChain agents

204 lines (153 loc) • 5.08 kB
# @osohq/langchain Oso integration for LangChain 0.x agents. Callback handler that automatically captures and sends all LangChain agent events to Oso for monitoring, debugging, and security analysis. ## Installation ```bash npm install @osohq/langchain ``` Or with yarn: ```bash yarn add @osohq/langchain ``` ## Quick Start ```typescript import { OsoCallback } from "@osohq/langchain"; import { createReactAgent } from "@langchain/langgraph/prebuilt"; import { ChatOpenAI } from "@langchain/openai"; // Create the callback (reads API key from OSO_AUTH environment variable) const callback = new OsoCallback({ agentId: "my-support-agent", }); // Create your agent const llm = new ChatOpenAI({ model: "gpt-4" }); const tools = [tool1, tool2, tool3]; const prompt = "You help."; const agent = await createReactAgent({ llm, tools, prompt }); // Use your agent -- NOTE: make sure you pass the callback into // the `invoke` method, rather than attaching it to a particular // LangGraph node, so that all events are captured. const result = await agent.invoke({ input: "help!", }, { callbacks: [callback], }); ``` ## Configuration ### Environment Variables Set these in your environment: ```bash # Required: Your Oso API key OSO_AUTH=your-oso-api-key # Optional: Custom Oso endpoint (defaults to https://cloud.osohq.com) OSO_URL=https://cloud.osohq.com ``` ### Constructor Parameters ```typescript new OsoCallback({ url: "https://cloud.osohq.com", // Oso API URL (default: OSO_URL env var or https://cloud.osohq.com) apiKey: "your-api-key", // Oso API key (default: OSO_AUTH env var) agentId: "my-agent", // Agent identifier for tracking (default: "default-agent") sessionId: "unique-session-uuid", // Session ID to group related conversations (default: auto-generated UUID) users: [{ type: "User", id: "user-123" }], // Users associated with this session metadata: { environment: "production" }, // Additional metadata to attach to all events logger: (level, message, metadata) => console.log(level, message, metadata), // Custom logging function }); ``` All parameters are optional and fall back to environment variables or defaults. ## Error Handling The callback is designed to fail gracefully: - Network errors or timeouts won't crash your agent - Failed event sends are logged but don't interrupt execution - Comprehensive error logging for debugging ## Logging The callback supports custom logging through the `logger` configuration option: ```typescript const callback = new OsoCallback({ agentId: "my-agent", logger: (level, message, metadata) => { console.log(`[${level.toUpperCase()}] ${message}`, metadata); }, }); ``` The logger function receives three parameters: - `level`: One of "error", "warn", "info", or "debug" - `message`: The log message string - `metadata`: Optional additional context (object) ## Examples ### Basic Agent with Tools ```typescript import { OsoCallback } from "@osohq/langchain"; import { createOpenAIToolsAgent, AgentExecutor } from "langchain/agents"; import { ChatOpenAI } from "@langchain/openai"; import { tool } from "@langchain/core/tools"; import { z } from "zod"; const searchOrders = tool( async ({ customerId }: { customerId: string }) => { return `Orders for ${customerId}: ORD001, ORD002`; }, { name: "search_orders", description: "Search for customer orders.", schema: z.object({ customerId: z.string().describe("The customer ID"), }), } ); async function main() { const callback = new OsoCallback({ agentId: "support-agent" }); const llm = new ChatOpenAI({ model: "gpt-4o-mini" }); const tools = [searchOrders]; const agent = await createOpenAIToolsAgent({ llm, tools, prompt }); const agentExecutor = new AgentExecutor({ agent, tools }); const result = await agentExecutor.invoke( { input: "Find orders for customer CUST001" }, { callbacks: [callback] } ); console.log(result); } ``` ### With Custom Metadata and Users ```typescript const callback = new OsoCallback({ agentId: "support-agent", sessionId: "user-session-123", users: [{ type: "User", id: "user-456" }], metadata: { environment: "production", version: "1.2.3", }, }); ``` ### Multiple Agents in Same Session ```typescript import { randomUUID } from "crypto"; const sessionId = randomUUID(); // Agent 1 const callback1 = new OsoCallback({ agentId: "agent-1", sessionId, }); const result1 = await agent1Executor.invoke( { input: "..." }, { callbacks: [callback1] } ); // Agent 2 - same session const callback2 = new OsoCallback({ agentId: "agent-2", sessionId, }); const result2 = await agent2Executor.invoke( { input: "..." }, { callbacks: [callback2] } ); ``` ## TypeScript Support This package is written in TypeScript and includes full type definitions. All types are exported for your convenience. ## Requirements - Node.js 20.0.0 or higher - @langchain/core >=0.1.0, <1.0.0 ## License Apache License 2.0 ## Support - Documentation: https://www.osohq.com/docs - Website: https://www.osohq.com