@langgraph-js/pure-graph 1.4.7 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Pure Graph is a library that provides a standard LangGraph endpoint for integrating into various frameworks like NextJS and Hono.js. It supports multiple storage backends (SQLite, PostgreSQL, Redis) and message queues. This document will guide you on how to use Pure Graph in your projects.
4
4
 
5
+ 📚 **[Complete Documentation](https://pure-graph.netlify.app/docs/index.md)** - Comprehensive guides, API reference, and examples
6
+
5
7
  ## Features
6
8
 
7
9
  - **Multiple Storage Backends**: Support for SQLite, PostgreSQL, Redis, and in-memory storage
@@ -54,26 +56,39 @@ To integrate Pure Graph into a Next.js project, follow these steps:
54
56
 
55
57
  ```js
56
58
  // app/api/langgraph/[...path]/route.ts
57
- import { ensureInitialized } from '@langgraph-js/pure-graph/dist/adapter/nextjs/index.js';
58
- import { registerGraph } from '@langgraph-js/pure-graph';
59
- import { graph } from '../../../agent/graph-name/graph';
60
- const init = async () => {
61
- registerGraph('test', graph);
59
+ import { NextRequest } from 'next/server';
60
+ import { ensureInitialized } from '@langgraph-js/pure-graph/dist/adapter/nextjs/index';
61
+ export const dynamic = 'force-dynamic';
62
+ export const revalidate = 0;
63
+
64
+ const registerGraph = async () => {
65
+ // You must separate graph registration and the router file to avoid Next.js loading the graph multiple times.
66
+ // 必须分开写注册图和 router 文件,以避免 nextjs 多次加载的问题
67
+ await import('@/agent/index');
62
68
  };
63
- export async function GET(request) {
64
- const { GET } = await ensureInitialized(init);
65
- return GET(request);
66
- }
67
69
 
68
- export async function POST(request) {
69
- const { POST } = await ensureInitialized(init);
70
- return POST(request);
71
- }
70
+ export const GET = async (req: NextRequest, context: any) => {
71
+ const { GET } = await ensureInitialized(registerGraph);
72
+ return GET(req);
73
+ };
72
74
 
73
- export async function DELETE(request) {
74
- const { DELETE } = await ensureInitialized(init);
75
- return DELETE(request);
76
- }
75
+ export const POST = async (req: NextRequest, context: any) => {
76
+ const { POST } = await ensureInitialized(registerGraph);
77
+ return POST(req);
78
+ };
79
+
80
+ export const DELETE = async (req: NextRequest, context: any) => {
81
+ const { DELETE } = await ensureInitialized(registerGraph);
82
+ return DELETE(req);
83
+ };
84
+ ```
85
+
86
+ ```ts
87
+ // @/agent/index.ts
88
+ import { registerGraph } from '@langgraph-js/pure-graph';
89
+ import graph from 'you-langgraph-graph';
90
+ registerGraph('test', graph);
91
+ export {};
77
92
  ```
78
93
 
79
94
  2. **Configure Environment Variables**
@@ -99,17 +114,71 @@ To integrate Pure Graph into a Hono.js project, follow these steps:
99
114
  import { registerGraph } from '@langgraph-js/pure-graph';
100
115
  import { graph } from './agent/graph-name/graph';
101
116
  import { Hono } from 'hono';
102
- import LangGraphApp from '@langgraph-js/pure-graph/dist/adapter/hono/index';
117
+ import LangGraphApp, { type LangGraphServerContext } from '@langgraph-js/pure-graph/dist/adapter/hono/index';
103
118
 
104
119
  registerGraph('test', graph);
105
120
 
106
- const app = new Hono();
121
+ const app = new Hono<{ Variables: LangGraphServerContext }>();
122
+
107
123
  app.route('/', LangGraphApp);
108
124
 
109
125
  export default app;
110
126
  ```
111
127
 
112
- 2. **Configure Environment Variables**
128
+ 2. **Using LangGraph Entrypoint (Recommended)**
129
+
130
+ For more advanced use cases, you can use LangGraph's `entrypoint` function to create reusable workflows:
131
+
132
+ ```ts
133
+ // agent/entrypoint-graph.ts
134
+ import { Annotation, entrypoint, getConfig } from '@langchain/langgraph';
135
+ import { createReactAgent, createReactAgentAnnotation } from '@langchain/langgraph/prebuilt';
136
+ import { createState } from '@langgraph-js/pro';
137
+ import { createEntrypointGraph } from '@langgraph-js/pure-graph';
138
+ import { ChatOpenAI } from '@langchain/openai';
139
+
140
+ const State = createState(createReactAgentAnnotation()).build({});
141
+
142
+ const workflow = entrypoint('my-entrypoint', async (state: typeof State.State) => {
143
+ // Access context set by middleware
144
+ const config = getConfig();
145
+ console.log('User ID from context:', config.configurable?.userId);
146
+
147
+ const agent = createReactAgent({
148
+ llm: new ChatOpenAI({
149
+ model: 'your-model',
150
+ }),
151
+ prompt: 'You are a helpful assistant',
152
+ tools: [], // Add your tools here
153
+ });
154
+
155
+ return agent.invoke(state);
156
+ });
157
+
158
+ export const graph = createEntrypointGraph({
159
+ stateSchema: State,
160
+ graph: workflow,
161
+ });
162
+ ```
163
+
164
+ ```ts
165
+ // app.ts
166
+ import { registerGraph } from '@langgraph-js/pure-graph';
167
+ import { graph as entrypointGraph } from './agent/entrypoint-graph';
168
+ import { Hono } from 'hono';
169
+ import LangGraphApp, { type LangGraphServerContext } from '@langgraph-js/pure-graph/dist/adapter/hono/index';
170
+
171
+ // Register your entrypoint graph
172
+ registerGraph('my-entrypoint', entrypointGraph);
173
+
174
+ const app = new Hono<{ Variables: LangGraphServerContext }>();
175
+
176
+ app.route('/', LangGraphApp);
177
+
178
+ export default app;
179
+ ```
180
+
181
+ 3. **Configure Environment Variables**
113
182
 
114
183
  Add the necessary environment variables to your `.env` file.
115
184
 
@@ -119,6 +188,151 @@ To integrate Pure Graph into a Hono.js project, follow these steps:
119
188
  REDIS_URL="" # Required if using Redis
120
189
  ```
121
190
 
191
+ ## Context Passing
192
+
193
+ Pure Graph supports passing custom context data to your graphs, which can be accessed via `getConfig().configurable` in your graph logic. This allows you to inject user-specific data, session information, or any other custom data into your LangGraph workflows.
194
+
195
+ ### Graph Code Example
196
+
197
+ Here's how to access context in your graph logic:
198
+
199
+ ```ts
200
+ // agent/context-aware-graph.ts
201
+ import { Annotation, entrypoint, getConfig } from '@langchain/langgraph';
202
+ import { createReactAgent, createReactAgentAnnotation } from '@langchain/langgraph/prebuilt';
203
+ import { createState } from '@langgraph-js/pro';
204
+ import { createEntrypointGraph } from '@langgraph-js/pure-graph';
205
+ import { ChatOpenAI } from '@langchain/openai';
206
+
207
+ const State = createState(createReactAgentAnnotation()).build({});
208
+
209
+ const workflow = entrypoint('context-aware-graph', async (state: typeof State.State) => {
210
+ // Access context data passed from middleware
211
+ const config = getConfig();
212
+
213
+ // Context is available in config.configurable
214
+ const userId = config.configurable?.userId;
215
+ const sessionId = config.configurable?.sessionId;
216
+ const preferences = config.configurable?.preferences;
217
+
218
+ console.log('Context received:', {
219
+ userId,
220
+ sessionId,
221
+ preferences,
222
+ });
223
+
224
+ // Use context data in your graph logic
225
+ const systemMessage = `You are a helpful assistant for user ${userId || 'anonymous'}.
226
+ User preferences: ${JSON.stringify(preferences || {})}`;
227
+
228
+ const agent = createReactAgent({
229
+ llm: new ChatOpenAI({
230
+ model: 'your-model',
231
+ }),
232
+ prompt: systemMessage,
233
+ tools: [], // Add your tools here
234
+ });
235
+
236
+ return agent.invoke(state);
237
+ });
238
+
239
+ export const graph = createEntrypointGraph({
240
+ stateSchema: State,
241
+ graph: workflow,
242
+ });
243
+ ```
244
+
245
+ ### Hono.js Implementation
246
+
247
+ In Hono.js, you can inject context using middleware:
248
+
249
+ ```ts
250
+ // app.ts
251
+ import { registerGraph } from '@langgraph-js/pure-graph';
252
+ import { graph as contextAwareGraph } from './agent/context-aware-graph';
253
+ import { Hono } from 'hono';
254
+ import LangGraphApp, { type LangGraphServerContext } from '@langgraph-js/pure-graph/dist/adapter/hono/index';
255
+
256
+ // Register your context-aware graph
257
+ registerGraph('context-aware', contextAwareGraph);
258
+
259
+ const app = new Hono<{ Variables: LangGraphServerContext }>();
260
+
261
+ // Middleware to inject custom context
262
+ app.use('/api/langgraph/*', async (c, next) => {
263
+ // You can get context from authentication, request data, etc.
264
+ const userId = c.req.header('x-user-id') || 'anonymous';
265
+ const sessionId = c.req.header('x-session-id') || 'session-123';
266
+
267
+ c.set('langgraph_context', {
268
+ userId,
269
+ sessionId,
270
+ preferences: { theme: 'dark', language: 'zh' },
271
+ metadata: { source: 'hono-app', timestamp: new Date().toISOString() },
272
+ // Add any custom fields your graph needs
273
+ });
274
+
275
+ await next();
276
+ });
277
+
278
+ app.route('/api', LangGraphApp);
279
+
280
+ export default app;
281
+ ```
282
+
283
+ ### Next.js Implementation
284
+
285
+ In Next.js, you can inject context using middleware:
286
+
287
+ ```ts
288
+ // middleware.ts
289
+ import type { NextRequest } from 'next/server';
290
+ import { NextResponse } from 'next/server';
291
+
292
+ export function middleware(request: NextRequest) {
293
+ const requestHeaders = new Headers(request.headers);
294
+
295
+ // Add custom context to x-langgraph-context header
296
+ if (request.nextUrl.pathname.startsWith('/api/langgraph/')) {
297
+ // You can get context from cookies, headers, or other sources
298
+ const userId = request.cookies.get('user-id')?.value || 'anonymous';
299
+ const sessionId = request.cookies.get('session-id')?.value || 'session-123';
300
+
301
+ const langgraphContext = {
302
+ userId,
303
+ sessionId,
304
+ preferences: { theme: 'dark', language: 'zh' },
305
+ metadata: { source: 'nextjs-app', timestamp: new Date().toISOString() },
306
+ // Add any custom fields your graph needs
307
+ };
308
+
309
+ requestHeaders.set('x-langgraph-context', JSON.stringify(langgraphContext));
310
+ }
311
+
312
+ const response = NextResponse.next({
313
+ request: { headers: requestHeaders },
314
+ });
315
+
316
+ return response;
317
+ }
318
+
319
+ export const config = {
320
+ matcher: '/api/langgraph/:path*',
321
+ };
322
+ ```
323
+
324
+ ```ts
325
+ // app/api/langgraph/[...path]/route.ts
326
+ import { GET, POST, DELETE } from '@langgraph-js/pure-graph/dist/adapter/nextjs/router';
327
+ import { registerGraph } from '@langgraph-js/pure-graph';
328
+ import { graph as contextAwareGraph } from '@/agent/context-aware-graph';
329
+
330
+ // Register your context-aware graph
331
+ registerGraph('context-aware', contextAwareGraph);
332
+
333
+ export { GET, POST, DELETE };
334
+ ```
335
+
122
336
  ## Environment Configuration
123
337
 
124
338
  Here are the environment variables you need to configure:
@@ -1,3 +1,8 @@
1
1
  import { Hono } from 'hono';
2
- declare const app: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
2
+ export interface LangGraphServerContext {
3
+ langgraph_context: any;
4
+ }
5
+ declare const app: Hono<{
6
+ Variables: LangGraphServerContext;
7
+ }, import("hono/types").BlankSchema, "/">;
3
8
  export default app;
@@ -1,6 +1,6 @@
1
1
  import { Hono } from 'hono';
2
2
  import { zValidator } from '@hono/zod-validator';
3
- import { c as createEndpoint, s as serialiseAsDict } from '../../createEndpoint-B0FQz0jr.js';
3
+ import { c as createEndpoint, s as serialiseAsDict } from '../../createEndpoint-D56l-tDn.js';
4
4
  import { A as AssistantsSearchSchema, a as AssistantGraphQuerySchema, T as ThreadIdParamSchema, R as RunStreamPayloadSchema, b as RunListQuerySchema, c as RunIdParamSchema, d as RunCancelQuerySchema, e as ThreadStateUpdate, f as ThreadCreatePayloadSchema, g as ThreadSearchPayloadSchema } from '../../zod-BaCzVUl8.js';
5
5
  import { streamSSE } from 'hono/streaming';
6
6
  import z from 'zod';
@@ -33,6 +33,12 @@ api$1.post(
33
33
  const { thread_id } = c.req.valid("param");
34
34
  const payload = c.req.valid("json");
35
35
  return streamSSE(c, async (stream) => {
36
+ payload.config = payload.config || {};
37
+ payload.config.configurable = payload.config.configurable || {};
38
+ const langgraphContext = c.get("langgraph_context");
39
+ if (langgraphContext) {
40
+ Object.assign(payload.config.configurable, langgraphContext);
41
+ }
36
42
  for await (const { event, data } of client.runs.stream(thread_id, payload.assistant_id, payload)) {
37
43
  await stream.writeSSE({ data: serialiseAsDict(data) ?? "", event });
38
44
  }
@@ -79,12 +85,15 @@ api$1.post(
79
85
  const api = new Hono();
80
86
  api.post("/threads", zValidator("json", ThreadCreatePayloadSchema), async (c) => {
81
87
  const payload = c.req.valid("json");
82
- const thread = await client.threads.create(payload);
88
+ const thread = await client.threads.create({
89
+ ...payload,
90
+ threadId: payload.thread_id
91
+ });
83
92
  return c.json(thread);
84
93
  });
85
94
  api.post("/threads/search", zValidator("json", ThreadSearchPayloadSchema), async (c) => {
86
95
  const payload = c.req.valid("json");
87
- const result = await client.threads.search(payload);
96
+ const result = await client.threads.search({ ...payload, sortBy: payload.sort_by, sortOrder: payload.sort_order });
88
97
  c.res.headers.set("X-Pagination-Total", result.length.toString());
89
98
  return c.json(result);
90
99
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/adapter/hono/endpoint.ts","../../../src/adapter/hono/assistants.ts","../../../src/adapter/hono/runs.ts","../../../src/adapter/hono/threads.ts","../../../src/adapter/hono/index.ts"],"sourcesContent":["import { createEndpoint } from '../../createEndpoint.js';\n\nexport const client = createEndpoint();\n","import { zValidator } from '@hono/zod-validator';\nimport { Hono } from 'hono';\nimport { client } from './endpoint';\nimport { AssistantsSearchSchema, AssistantGraphQuerySchema } from '../zod';\nconst api = new Hono();\n\napi.post('/assistants/search', zValidator('json', AssistantsSearchSchema), async (c) => {\n // Search Assistants\n const payload = c.req.valid('json');\n let total = 0;\n const data = await client.assistants.search(payload);\n c.res.headers.set('X-Pagination-Total', total.toString());\n return c.json(data);\n});\n\napi.get('/assistants/:assistant_id/graph', zValidator('query', AssistantGraphQuerySchema), async (c) => {\n const xray = c.req.valid('query').xray;\n const data = await client.assistants.getGraph(c.req.param('assistant_id'), {\n xray: xray !== undefined ? xray === 'true' : undefined,\n });\n return c.json(data);\n});\n\nexport default api;\n","import { zValidator } from '@hono/zod-validator';\nimport { Hono } from 'hono';\n\nimport { streamSSE } from 'hono/streaming';\nimport { client } from './endpoint';\nimport {\n ThreadIdParamSchema,\n RunIdParamSchema,\n RunStreamPayloadSchema,\n RunListQuerySchema,\n RunCancelQuerySchema,\n ThreadStateUpdate,\n} from '../zod';\nimport { serialiseAsDict } from '../../graph/stream';\nimport { RunnableConfig } from '@langchain/core/runnables';\nimport z from 'zod';\n\nconst api = new Hono();\n\n// 最常用的对话接口\napi.post(\n '/threads/:thread_id/runs/stream',\n zValidator('param', ThreadIdParamSchema),\n zValidator('json', RunStreamPayloadSchema),\n async (c) => {\n // Stream Run\n const { thread_id } = c.req.valid('param');\n const payload = c.req.valid('json');\n\n // c.header('Content-Location', `/threads/${thread_id}/runs/${run.run_id}`);\n return streamSSE(c, async (stream) => {\n /** @ts-ignore zod v3 的问题,与 ts 类型不一致 */\n for await (const { event, data } of client.runs.stream(thread_id, payload.assistant_id, payload)) {\n await stream.writeSSE({ data: serialiseAsDict(data) ?? '', event });\n }\n });\n },\n);\n\napi.get(\n '/threads/:thread_id/runs',\n zValidator('param', ThreadIdParamSchema),\n zValidator('query', RunListQuerySchema),\n async (c) => {\n const { thread_id } = c.req.valid('param');\n const { limit, offset, status } = c.req.valid('query');\n const runs = await client.runs.list(thread_id, { limit, offset, status });\n return c.json(runs);\n },\n);\n\napi.post(\n '/threads/:thread_id/runs/:run_id/cancel',\n zValidator('param', RunIdParamSchema),\n zValidator('query', RunCancelQuerySchema),\n async (c) => {\n // Cancel Run Http\n const { thread_id, run_id } = c.req.valid('param');\n const { wait, action } = c.req.valid('query');\n const cancel = client.runs.cancel(thread_id, run_id, wait, action);\n if (wait) {\n await cancel;\n }\n return c.body(null, wait ? 204 : 202);\n },\n);\n\napi.post(\n '/threads/:thread_id/state',\n zValidator('param', z.object({ thread_id: z.string().uuid() })),\n zValidator('json', ThreadStateUpdate),\n async (c) => {\n // Update Thread State\n const { thread_id } = c.req.valid('param');\n const payload = c.req.valid('json');\n // const config: RunnableConfig = { configurable: { thread_id } };\n\n // if (payload.checkpoint_id) {\n // config.configurable ??= {};\n // config.configurable.checkpoint_id = payload.checkpoint_id;\n // }\n // if (payload.checkpoint) {\n // config.configurable ??= {};\n // Object.assign(config.configurable, payload.checkpoint);\n // }\n\n const inserted = await client.threads.updateState(thread_id, payload);\n\n return c.json(inserted);\n },\n);\nexport default api;\n","import { zValidator } from '@hono/zod-validator';\nimport { Hono } from 'hono';\nimport { client } from './endpoint';\nimport { ThreadIdParamSchema, ThreadCreatePayloadSchema, ThreadSearchPayloadSchema } from '../zod';\n\nconst api = new Hono();\n\n// Threads Routes\napi.post('/threads', zValidator('json', ThreadCreatePayloadSchema), async (c) => {\n const payload = c.req.valid('json');\n const thread = await client.threads.create(payload);\n\n return c.json(thread);\n});\n\napi.post('/threads/search', zValidator('json', ThreadSearchPayloadSchema), async (c) => {\n // Search Threads\n const payload = c.req.valid('json');\n const result = await client.threads.search(payload as any);\n c.res.headers.set('X-Pagination-Total', result.length.toString());\n return c.json(result);\n});\n\napi.get('/threads/:thread_id', zValidator('param', ThreadIdParamSchema), async (c) => {\n // Get Thread\n const { thread_id } = c.req.valid('param');\n return c.json(await client.threads.get(thread_id));\n});\n\napi.delete('/threads/:thread_id', zValidator('param', ThreadIdParamSchema), async (c) => {\n // Delete Thread\n const { thread_id } = c.req.valid('param');\n await client.threads.delete(thread_id);\n return new Response(null, { status: 204 });\n});\n\nexport default api;\n","import { Hono } from 'hono';\nimport Assistants from './assistants';\nimport Runs from './runs';\nimport Threads from './threads';\nimport { cors } from 'hono/cors';\nconst app = new Hono();\n\napp.use(cors());\n\napp.route('/', Assistants);\napp.route('/', Runs);\napp.route('/', Threads);\n\nexport default app;\n"],"names":["api","Assistants","Runs","Threads"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/adapter/hono/endpoint.ts","../../../src/adapter/hono/assistants.ts","../../../src/adapter/hono/runs.ts","../../../src/adapter/hono/threads.ts","../../../src/adapter/hono/index.ts"],"sourcesContent":["import { createEndpoint } from '../../createEndpoint.js';\n\nexport const client = createEndpoint();\n","import { zValidator } from '@hono/zod-validator';\nimport { Hono } from 'hono';\nimport { client } from './endpoint';\nimport { AssistantsSearchSchema, AssistantGraphQuerySchema } from '../zod';\nconst api = new Hono();\n\napi.post('/assistants/search', zValidator('json', AssistantsSearchSchema), async (c) => {\n // Search Assistants\n const payload = c.req.valid('json');\n let total = 0;\n const data = await client.assistants.search(payload);\n c.res.headers.set('X-Pagination-Total', total.toString());\n return c.json(data);\n});\n\napi.get('/assistants/:assistant_id/graph', zValidator('query', AssistantGraphQuerySchema), async (c) => {\n const xray = c.req.valid('query').xray;\n const data = await client.assistants.getGraph(c.req.param('assistant_id'), {\n xray: xray !== undefined ? xray === 'true' : undefined,\n });\n return c.json(data);\n});\n\nexport default api;\n","import { zValidator } from '@hono/zod-validator';\nimport { Hono } from 'hono';\n\nimport { streamSSE } from 'hono/streaming';\nimport { client } from './endpoint';\nimport {\n ThreadIdParamSchema,\n RunIdParamSchema,\n RunStreamPayloadSchema,\n RunListQuerySchema,\n RunCancelQuerySchema,\n ThreadStateUpdate,\n} from '../zod';\nimport { serialiseAsDict } from '../../graph/stream';\nimport z from 'zod';\nimport type { LangGraphServerContext } from './index';\n\nconst api = new Hono<{ Variables: LangGraphServerContext }>();\n\n// 最常用的对话接口\napi.post(\n '/threads/:thread_id/runs/stream',\n zValidator('param', ThreadIdParamSchema),\n zValidator('json', RunStreamPayloadSchema),\n async (c) => {\n // Stream Run\n const { thread_id } = c.req.valid('param');\n const payload = c.req.valid('json');\n\n // c.header('Content-Location', `/threads/${thread_id}/runs/${run.run_id}`);\n return streamSSE(c, async (stream) => {\n payload.config = payload.config || {};\n payload.config.configurable = payload.config.configurable || {};\n const langgraphContext = c.get('langgraph_context');\n if (langgraphContext) {\n Object.assign(payload.config.configurable, langgraphContext);\n }\n /** @ts-ignore zod v3 的问题,与 ts 类型不一致 */\n for await (const { event, data } of client.runs.stream(thread_id, payload.assistant_id, payload)) {\n await stream.writeSSE({ data: serialiseAsDict(data) ?? '', event });\n }\n });\n },\n);\n\napi.get(\n '/threads/:thread_id/runs',\n zValidator('param', ThreadIdParamSchema),\n zValidator('query', RunListQuerySchema),\n async (c) => {\n const { thread_id } = c.req.valid('param');\n const { limit, offset, status } = c.req.valid('query');\n const runs = await client.runs.list(thread_id, { limit, offset, status });\n return c.json(runs);\n },\n);\n\napi.post(\n '/threads/:thread_id/runs/:run_id/cancel',\n zValidator('param', RunIdParamSchema),\n zValidator('query', RunCancelQuerySchema),\n async (c) => {\n // Cancel Run Http\n const { thread_id, run_id } = c.req.valid('param');\n const { wait, action } = c.req.valid('query');\n const cancel = client.runs.cancel(thread_id, run_id, wait, action);\n if (wait) {\n await cancel;\n }\n return c.body(null, wait ? 204 : 202);\n },\n);\n\napi.post(\n '/threads/:thread_id/state',\n zValidator('param', z.object({ thread_id: z.string().uuid() })),\n zValidator('json', ThreadStateUpdate),\n async (c) => {\n // Update Thread State\n const { thread_id } = c.req.valid('param');\n const payload = c.req.valid('json');\n // const config: RunnableConfig = { configurable: { thread_id } };\n\n // if (payload.checkpoint_id) {\n // config.configurable ??= {};\n // config.configurable.checkpoint_id = payload.checkpoint_id;\n // }\n // if (payload.checkpoint) {\n // config.configurable ??= {};\n // Object.assign(config.configurable, payload.checkpoint);\n // }\n\n const inserted = await client.threads.updateState(thread_id, payload);\n\n return c.json(inserted);\n },\n);\nexport default api;\n","import { zValidator } from '@hono/zod-validator';\nimport { Hono } from 'hono';\nimport { client } from './endpoint';\nimport { ThreadIdParamSchema, ThreadCreatePayloadSchema, ThreadSearchPayloadSchema } from '../zod';\n\nconst api = new Hono();\n\n// Threads Routes\napi.post('/threads', zValidator('json', ThreadCreatePayloadSchema), async (c) => {\n const payload = c.req.valid('json');\n const thread = await client.threads.create({\n ...payload,\n threadId: payload.thread_id,\n });\n\n return c.json(thread);\n});\n\napi.post('/threads/search', zValidator('json', ThreadSearchPayloadSchema), async (c) => {\n // Search Threads\n const payload = c.req.valid('json');\n const result = await client.threads.search({ ...payload, sortBy: payload.sort_by, sortOrder: payload.sort_order });\n c.res.headers.set('X-Pagination-Total', result.length.toString());\n return c.json(result);\n});\n\napi.get('/threads/:thread_id', zValidator('param', ThreadIdParamSchema), async (c) => {\n // Get Thread\n const { thread_id } = c.req.valid('param');\n return c.json(await client.threads.get(thread_id));\n});\n\napi.delete('/threads/:thread_id', zValidator('param', ThreadIdParamSchema), async (c) => {\n // Delete Thread\n const { thread_id } = c.req.valid('param');\n await client.threads.delete(thread_id);\n return new Response(null, { status: 204 });\n});\n\nexport default api;\n","import { Hono } from 'hono';\nimport Assistants from './assistants';\nimport Runs from './runs';\nimport Threads from './threads';\nimport { cors } from 'hono/cors';\n\nexport interface LangGraphServerContext {\n langgraph_context: any;\n}\nconst app = new Hono<{ Variables: LangGraphServerContext }>();\n\napp.use(cors());\n\napp.route('/', Assistants);\napp.route('/', Runs);\napp.route('/', Threads);\n\nexport default app;\n"],"names":["api","Assistants","Runs","Threads"],"mappings":"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"}
@@ -1,3 +1,6 @@
1
1
  import { Hono } from 'hono';
2
- declare const api: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
2
+ import type { LangGraphServerContext } from './index';
3
+ declare const api: Hono<{
4
+ Variables: LangGraphServerContext;
5
+ }, import("hono/types").BlankSchema, "/">;
3
6
  export default api;
@@ -2,7 +2,7 @@ async function ensureInitialized(attachGraphPromise) {
2
2
  if (globalThis.LG_INIT_PROMISE === void 0) {
3
3
  globalThis.LG_INIT_PROMISE = (async () => {
4
4
  await attachGraphPromise();
5
- const { GET, POST, DELETE } = await import('../../router-DqflDUWZ.js');
5
+ const { GET, POST, DELETE } = await import('../../router-DKRP5e01.js');
6
6
  return {
7
7
  GET,
8
8
  POST,
@@ -1274,7 +1274,7 @@ const createMessageQueue = async () => {
1274
1274
  let q;
1275
1275
  if (process.env.REDIS_URL) {
1276
1276
  console.debug("LG | Using redis as stream queue");
1277
- const { RedisStreamQueue } = await import('./queue-Cao_-0hm.js');
1277
+ const { RedisStreamQueue } = await import('./queue-BnmSDnCz.js');
1278
1278
  q = RedisStreamQueue;
1279
1279
  } else {
1280
1280
  q = MemoryStreamQueue;
@@ -1519,14 +1519,14 @@ const createEndpoint = () => {
1519
1519
  return LangGraphGlobal.globalMessageQueue.cancelQueue(runId);
1520
1520
  },
1521
1521
  async *stream(threadId, assistantId, payload) {
1522
- if (!payload.config) {
1523
- payload.config = {
1524
- configurable: {
1525
- graph_id: assistantId,
1526
- thread_id: threadId
1527
- }
1528
- };
1529
- }
1522
+ payload.config = {
1523
+ ...payload.config ?? {},
1524
+ configurable: {
1525
+ ...payload.config?.configurable ?? {},
1526
+ graph_id: assistantId,
1527
+ thread_id: threadId
1528
+ }
1529
+ };
1530
1530
  for await (const data of streamState(
1531
1531
  threads,
1532
1532
  threads.createRun(threadId, assistantId, payload),
@@ -1547,4 +1547,4 @@ const createEndpoint = () => {
1547
1547
  };
1548
1548
 
1549
1549
  export { AssistantEndpoint as A, BaseStreamQueue as B, CancelEventMessage as C, LangGraphGlobal as L, createEndpoint as c, registerGraph as r, serialiseAsDict as s };
1550
- //# sourceMappingURL=createEndpoint-B0FQz0jr.js.map
1550
+ //# sourceMappingURL=createEndpoint-D56l-tDn.js.map