Either a ReactAgent type (with ~agentTypes) or a state type (Record<string, unknown>)
Type configuration bag containing:
ConfigurableType: Type for the config.configurable propertyInterruptType: Type for interrupt valuesCustomEventType: Type for custom eventsUpdateType: Type for the submit function updates// In your agent file (e.g., agent.ts)
import { createAgent, tool } from "@langchain/langgraph";
import { z } from "zod";
const getWeather = tool(
async ({ location }) => `Weather in ${location}`,
{ name: "get_weather", schema: z.object({ location: z.string() }) }
);
export const agent = createAgent({
model: "openai:gpt-4o",
tools: [getWeather],
});
// In your React component
import { agent } from "./agent";
function Chat() {
// Tool calls are automatically typed from the agent's tools!
const stream = useStream<typeof agent>({
assistantId: "agent",
apiUrl: "http://localhost:2024",
});
// stream.toolCalls[0].call.name is typed as "get_weather"
// stream.toolCalls[0].call.args is typed as { location: string }
}
When building custom graphs with StateGraph, embed your tool call types directly
in your state's messages property using Message<MyToolCalls>:
import { Message } from "@langchain/langgraph-sdk";
// Define your tool call types as a discriminated union
type MyToolCalls =
| { name: "search"; args: { query: string }; id?: string }
| { name: "calculate"; args: { expression: string }; id?: string };
// Embed tool call types in your state's messages
interface MyGraphState {
messages: Message<MyToolCalls>[];
context?: string;
}
function Chat() {
const stream = useStream<MyGraphState>({
assistantId: "my-graph",
apiUrl: "http://localhost:2024",
});
// stream.values is typed as MyGraphState
// stream.toolCalls[0].call.name is typed as "search" | "calculate"
}
// With additional type configuration (interrupts, configurable)
interface MyGraphState {
messages: Message<MyToolCalls>[];
}
function Chat() {
const stream = useStream<MyGraphState, {
InterruptType: { question: string };
ConfigurableType: { userId: string };
}>({
assistantId: "my-graph",
apiUrl: "http://localhost:2024",
});
// stream.interrupt is typed as { question: string } | undefined
}
A React hook that provides seamless integration with LangGraph streaming capabilities.
The useStream hook handles all the complexities of streaming, state management, and branching logic,
letting you focus on building great chat experiences. It provides automatic state management for
messages, interrupts, loading states, and errors.
Either a ReactAgent type (with ~agentTypes) or a state type (Record<string, unknown>)
Type configuration bag containing:
ConfigurableType: Type for the config.configurable propertyInterruptType: Type for interrupt valuesCustomEventType: Type for custom eventsUpdateType: Type for the submit function updates
A React hook that provides seamless integration with LangGraph streaming capabilities.
The
useStreamhook handles all the complexities of streaming, state management, and branching logic, letting you focus on building great chat experiences. It provides automatic state management for messages, interrupts, loading states, and errors.Usage with ReactAgent (recommended for createAgent users)
When using
createAgentfrom@langchain/langgraph, you can passtypeof agentas the type parameter to automatically infer tool call types: