@langgraph-js/sdk
Version:
The UI SDK for LangGraph - seamlessly integrate your AI agents with frontend interfaces
223 lines (168 loc) • 5.3 kB
Markdown
# @langgraph-js/sdk


> The missing UI SDK for LangGraph - seamlessly integrate your AI agents with frontend interfaces
## Why @langgraph-js/sdk?
Building AI agent applications is complex, especially when you need to bridge the gap between LangGraph agents and interactive user interfaces. This SDK solves the critical challenges of frontend integration:
- **Provides a complete UI integration layer** - no more complex custom code to handle tools, streaming, and state management
- **Simplifies human-in-the-loop interactions** - easily incorporate user feedback within agent workflows
- **Handles edge cases automatically** - interruptions, errors, token management and more
- **Offers a rich set of UI components** - ready-to-use elements to display agent interactions
[DOCS](https://langgraph-js.netlify.app)
## Installation
```bash
# Using npm
npm install @langgraph-js/sdk
# Using yarn
yarn add @langgraph-js/sdk
# Using pnpm
pnpm add @langgraph-js/sdk
```
## Key Features
### Generative UI
- ✅ Custom Tool Messages
- ✅ Token Counter
- ✅ Stop Graph Progress
- ✅ Interrupt Handling
- ✅ Error Handling
- ✅ Spend Time Tracking
- ✅ Time Persistence
### Frontend Actions
- ✅ Definition of Union Tools
- ✅ Frontend Functions As Tools
- ✅ Human-in-the-Loop Interaction
- ✅ Interrupt Mode
### Authorization
- ✅ Cookie-Based Authentication
- ✅ Custom Token Authentication
### Persistence
- ✅ Read History from LangGraph
## Advanced Usage
### Creating a Chat Store
You can easily create a reactive store for your LangGraph client:
```typescript
import { createChatStore } from "@langgraph-js/sdk";
export const globalChatStore = createChatStore(
"agent",
{
// Custom LangGraph backend interaction
apiUrl: "http://localhost:8123",
// Custom headers for authentication
defaultHeaders: JSON.parse(localStorage.getItem("code") || "{}"),
callerOptions: {
// Example for including cookies
// fetch(url: string, options: RequestInit) {
// options.credentials = "include";
// return fetch(url, options);
// },
},
},
{
onInit(client) {
client.tools.bindTools([]);
},
}
);
```
### React Integration
First, install the nanostores React integration:
```bash
pnpm i @nanostores/react
```
Then use the ChatProvider in your components:
```tsx
import { ChatProvider, useChat } from "@langgraph-js/sdk/react";
```
Use it in your components:
```tsx
export const MyChat = () => {
return (
<ChatProvider
defaultAgent="agent"
apiUrl="http://localhost:8123"
defaultHeaders={{}}
withCredentials={false}
showHistory={true}
showGraph={false}
onInitError={(error, currentAgent) => {
console.error(`Failed to initialize ${currentAgent}:`, error);
// Handle initialization error
}}
>
<ChatComp />
</ChatProvider>
);
};
function ChatComp() {
const chat = useChat();
// Use chat store methods and state here
}
```
### Vue Integration
First, install the nanostores Vue integration:
```bash
pnpm i @nanostores/vue
```
Then use the ChatProvider in your components:
```typescript
import { ChatProvider, useChat, useChatProvider } from "@langgraph-js/sdk/vue";
```
#### Option 1: Using ChatProvider Component
Use it in your components:
```vue
<template>
<ChatProvider
:default-agent="'agent'"
:api-url="'http://localhost:8123'"
:default-headers="{}"
:with-credentials="false"
:show-history="true"
:show-graph="false"
:on-init-error="
(error, currentAgent) => {
console.error(`Failed to initialize ${currentAgent}:`, error);
// Handle initialization error
}
"
>
<ChatComp />
</ChatProvider>
</template>
<script setup lang="ts">
import { ChatProvider } from "@langgraph-js/sdk/vue";
function ChatComp() {
const chat = useChat();
// Use chat store methods and state here
}
</script>
```
#### Option 2: Using useChatProvider Hook Directly
For more flexibility, you can use the hook directly in your setup:
```vue
<script setup lang="ts">
import { useChatProvider } from "@langgraph-js/sdk/vue";
const props = {
defaultAgent: "agent",
apiUrl: "http://localhost:8123",
defaultHeaders: {},
withCredentials: false,
showHistory: true,
showGraph: false,
onInitError: (error: any, currentAgent: string) => {
console.error(`Failed to initialize ${currentAgent}:`, error);
// Handle initialization error
},
};
const { unionStore } = useChatProvider(props);
// Use unionStore methods and state here
</script>
<template>
<ChatComp />
</template>
```
## Documentation
For complete documentation, visit our [official docs](https://langgraph-js.netlify.app).
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
This project is licensed under the Apache-2.0 License.