@langchain/langgraph-api 0.0.18 → 0.0.19

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.
@@ -76,9 +76,10 @@ api.get("/assistants/:assistant_id/graph", zValidator("query", z.object({ xray:
76
76
  const assistantId = getAssistantId(c.req.param("assistant_id"));
77
77
  const assistant = await Assistants.get(assistantId);
78
78
  const { xray } = c.req.valid("query");
79
- const graph = getGraph(assistant.graph_id);
79
+ const config = getRunnableConfig(assistant.config);
80
+ const graph = await getGraph(assistant.graph_id, config);
80
81
  const drawable = await graph.getGraphAsync({
81
- ...getRunnableConfig(assistant.config),
82
+ ...config,
82
83
  xray: xray ?? undefined,
83
84
  });
84
85
  return c.json(drawable.toJSON());
@@ -106,7 +107,8 @@ api.get("/assistants/:assistant_id/subgraphs/:namespace?", zValidator("param", z
106
107
  const { recurse } = c.req.valid("query");
107
108
  const assistantId = getAssistantId(assistant_id);
108
109
  const assistant = await Assistants.get(assistantId);
109
- const graph = getGraph(assistant.graph_id);
110
+ const config = getRunnableConfig(assistant.config);
111
+ const graph = await getGraph(assistant.graph_id, config);
110
112
  const graphSchema = await getGraphSchema(assistant.graph_id);
111
113
  const rootGraphId = Object.keys(graphSchema).find((i) => !i.includes("|"));
112
114
  if (!rootGraphId) {
@@ -6,6 +6,9 @@ export declare function spawnServer(args: {
6
6
  config: {
7
7
  graphs: Record<string, string>;
8
8
  ui?: Record<string, string>;
9
+ ui_config?: {
10
+ shared?: string[];
11
+ };
9
12
  };
10
13
  env: NodeJS.ProcessEnv;
11
14
  hostUrl: string;
@@ -31,6 +31,7 @@ For production use, please use LangGraph Cloud.
31
31
  host: args.host,
32
32
  graphs: context.config.graphs,
33
33
  ui: context.config.ui,
34
+ ui_config: context.config.ui_config,
34
35
  cwd: options.projectCwd,
35
36
  }),
36
37
  ], {
@@ -41,11 +41,12 @@ export async function registerFromEnv(specs, options) {
41
41
  return resolved;
42
42
  }));
43
43
  }
44
- export function getGraph(graphId, options) {
44
+ export async function getGraph(graphId, config, options) {
45
45
  if (!GRAPHS[graphId])
46
46
  throw new HTTPException(404, { message: `Graph "${graphId}" not found` });
47
- // TODO: have a check for the type of graph
48
- const compiled = GRAPHS[graphId];
47
+ const compiled = typeof GRAPHS[graphId] === "function"
48
+ ? await GRAPHS[graphId](config ?? { configurable: {} })
49
+ : GRAPHS[graphId];
49
50
  if (typeof options?.checkpointer !== "undefined") {
50
51
  compiled.checkpointer = options?.checkpointer ?? undefined;
51
52
  }
@@ -23,10 +23,17 @@ export async function resolveGraph(spec, options) {
23
23
  const resolved = await (async () => {
24
24
  if (!graph)
25
25
  throw new Error("Failed to load graph: graph is nullush");
26
- const graphLike = typeof graph === "function" ? await graph() : await graph;
27
- if (isGraph(graphLike))
28
- return graphLike.compile();
29
- return graphLike;
26
+ const afterResolve = (graphLike) => {
27
+ const graph = isGraph(graphLike) ? graphLike.compile() : graphLike;
28
+ return graph;
29
+ };
30
+ if (typeof graph === "function") {
31
+ return async (config) => {
32
+ const graphLike = await graph(config);
33
+ return afterResolve(graphLike);
34
+ };
35
+ }
36
+ return afterResolve(await graph);
30
37
  })();
31
38
  return { sourceFile, exportSymbol, resolved };
32
39
  }
package/dist/server.mjs CHANGED
@@ -50,6 +50,7 @@ export const StartServerSchema = z.object({
50
50
  cwd: z.string(),
51
51
  graphs: z.record(z.string()),
52
52
  ui: z.record(z.string()).optional(),
53
+ ui_config: z.object({ shared: z.array(z.string()).optional() }).optional(),
53
54
  });
54
55
  export async function startServer(options) {
55
56
  logger.info(`Initializing storage...`);
@@ -69,7 +70,10 @@ export async function startServer(options) {
69
70
  const { api, registerGraphUi } = await import("./ui/load.mjs");
70
71
  app.route("/", api);
71
72
  logger.info(`Registering UI from ${options.cwd}`);
72
- await registerGraphUi(options.ui, { cwd: options.cwd });
73
+ await registerGraphUi(options.ui, {
74
+ cwd: options.cwd,
75
+ config: options.ui_config,
76
+ });
73
77
  }
74
78
  logger.info(`Starting ${options.nWorkers} workers`);
75
79
  for (let i = 0; i < options.nWorkers; i++)
@@ -447,7 +447,10 @@ export class Threads {
447
447
  tasks: [],
448
448
  };
449
449
  }
450
- const graph = await getGraph(graphId, { checkpointer, store });
450
+ const graph = await getGraph(graphId, thread.config, {
451
+ checkpointer,
452
+ store,
453
+ });
451
454
  const result = await graph.getState(config, { subgraphs });
452
455
  if (result.metadata != null &&
453
456
  "checkpoint_ns" in result.metadata &&
@@ -471,7 +474,10 @@ export class Threads {
471
474
  }
472
475
  config.configurable ??= {};
473
476
  config.configurable.graph_id ??= graphId;
474
- const graph = await getGraph(graphId, { checkpointer, store });
477
+ const graph = await getGraph(graphId, thread.config, {
478
+ checkpointer,
479
+ store,
480
+ });
475
481
  const updateConfig = structuredClone(config);
476
482
  updateConfig.configurable ??= {};
477
483
  updateConfig.configurable.checkpoint_ns ??= "";
@@ -501,7 +507,10 @@ export class Threads {
501
507
  }
502
508
  config.configurable ??= {};
503
509
  config.configurable.graph_id ??= graphId;
504
- const graph = await getGraph(graphId, { checkpointer, store });
510
+ const graph = await getGraph(graphId, thread.config, {
511
+ checkpointer,
512
+ store,
513
+ });
505
514
  const updateConfig = structuredClone(config);
506
515
  updateConfig.configurable ??= {};
507
516
  updateConfig.configurable.checkpoint_ns ??= "";
@@ -531,7 +540,10 @@ export class Threads {
531
540
  const graphId = thread.metadata?.graph_id;
532
541
  if (graphId == null)
533
542
  return [];
534
- const graph = await getGraph(graphId, { checkpointer, store });
543
+ const graph = await getGraph(graphId, thread.config, {
544
+ checkpointer,
545
+ store,
546
+ });
535
547
  const before = typeof options?.before === "string"
536
548
  ? { configurable: { checkpoint_id: options.before } }
537
549
  : options?.before;
package/dist/stream.mjs CHANGED
@@ -57,7 +57,7 @@ export async function* streamState(run, attempt = 1, options) {
57
57
  if (!graphId || typeof graphId !== "string") {
58
58
  throw new Error("Invalid or missing graph_id");
59
59
  }
60
- const graph = getGraph(graphId, {
60
+ const graph = await getGraph(graphId, kwargs.config, {
61
61
  checkpointer: kwargs.temporary ? null : undefined,
62
62
  });
63
63
  const userStreamMode = kwargs.stream_mode ?? [];
@@ -2,6 +2,9 @@ import { type BuildOptions } from "esbuild";
2
2
  export declare function build(agentName: string, args: {
3
3
  cwd: string;
4
4
  userPath: string;
5
+ config?: {
6
+ shared?: string[];
7
+ };
5
8
  }): Promise<{
6
9
  basename: string;
7
10
  contents: Uint8Array;
@@ -9,6 +12,9 @@ export declare function build(agentName: string, args: {
9
12
  export declare function watch(agentName: string, args: {
10
13
  cwd: string;
11
14
  userPath: string;
15
+ config?: {
16
+ shared?: string[];
17
+ };
12
18
  }, onResult: (result: {
13
19
  basename: string;
14
20
  contents: Uint8Array;
@@ -68,6 +68,7 @@ function setup(agentName, args, onResult) {
68
68
  "react-dom",
69
69
  "@langchain/langgraph-sdk",
70
70
  "@langchain/langgraph-sdk/react-ui",
71
+ ...(args.config?.shared ?? []),
71
72
  ],
72
73
  plugins: [tailwind(), entrypointPlugin(args), registerPlugin(onResult)],
73
74
  globalName: `__LGUI_${agentName}`,
package/dist/ui/load.mjs CHANGED
@@ -7,7 +7,7 @@ import { watch } from "./bundler.mjs";
7
7
  const GRAPH_UI = {};
8
8
  export async function registerGraphUi(defs, options) {
9
9
  const result = await Promise.all(Object.entries(defs).map(async ([agentName, userPath]) => {
10
- const ctx = await watch(agentName, { cwd: options.cwd, userPath }, (result) => {
10
+ const ctx = await watch(agentName, { cwd: options.cwd, userPath, config: options.config }, (result) => {
11
11
  GRAPH_UI[agentName] = result;
12
12
  });
13
13
  return [agentName, ctx];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/langgraph-api",
3
- "version": "0.0.18",
3
+ "version": "0.0.19",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": "^18.19.0 || >=20.16.0"