@langgraph-js/sdk
Version:
The UI SDK for LangGraph - seamlessly integrate your AI agents with frontend interfaces
269 lines (268 loc) • 8.86 kB
TypeScript
import type { Thread, Message, Assistant, Command } from "@langchain/langgraph-sdk";
import { EventEmitter } from "eventemitter3";
import { ToolManager } from "./ToolManager.js";
import { CallToolResult } from "./tool/createTool.js";
import { type ILangGraphClient } from "@langgraph-js/pure-graph/dist/types.js";
export type RenderMessage = Message & {
/** 对于 AIMessage 来说是节点名称,对于工具节点来说是工具名称 */
name?: string;
/** 工具节点的触发节点名称 */
node_name?: string;
/** 工具入参 ,聚合而来*/
tool_input?: string;
additional_kwargs?: {
done?: boolean;
tool_calls?: {
function: {
arguments: string;
};
}[];
};
sub_agent_messages?: RenderMessage[];
usage_metadata?: {
total_tokens: number;
input_tokens: number;
output_tokens: number;
};
tool_call_id?: string;
response_metadata?: {
create_time: string;
};
/** 耗时 */
spend_time?: number;
/** 渲染时的唯一 id,聚合而来*/
unique_id?: string;
/** 工具调用是否完成 */
done?: boolean;
};
export type SendMessageOptions = {
extraParams?: Record<string, any>;
_debug?: {
streamResponse?: any;
};
command?: Command;
joinRunId?: string;
};
export interface LangGraphClientConfig {
apiUrl?: string;
apiKey?: string;
callerOptions?: {
/**
* The maximum number of concurrent calls that can be made.
* Defaults to `Infinity`, which means no limit.
*/
maxConcurrency?: number;
/**
* The maximum number of retries that can be made for a single call,
* with an exponential backoff between each attempt. Defaults to 6.
*/
maxRetries?: number;
onFailedResponseHook?: any;
/**
* Specify a custom fetch implementation.
*
* By default we expect the `fetch` is available in the global scope.
*/
fetch?: typeof fetch | ((...args: any[]) => any);
};
timeoutMs?: number;
defaultHeaders?: Record<string, string | null | undefined>;
/** 自定义客户端实现,如果不提供则使用官方 Client */
client: ILangGraphClient<any>;
}
export interface LangGraphEvents {
/** 流开始事件 */
start: {
event: "start";
};
/** 消息部分更新事件 */
message: {
event: "messages/partial";
data: Message[];
};
/** 值更新事件 */
value: {
event: "messages/partial" | "values";
data: {
messages?: Message[];
};
};
/** 错误事件 */
error: {
event: "error";
data: any;
};
/** Thread 创建事件 */
thread: {
event: "thread/create";
data: {
thread: Thread;
};
};
/** 流完成事件 */
done: {
event: "done";
};
}
/**
* @zh LangGraphClient 类是与 LangGraph 后端交互的主要客户端。
* @en The LangGraphClient class is the main client for interacting with the LangGraph backend.
*/
export declare class LangGraphClient<TStateType = unknown> extends EventEmitter<LangGraphEvents> {
private client;
private currentAssistant;
private currentThread;
tools: ToolManager;
availableAssistants: Assistant[];
graphState: any;
currentRun?: {
run_id: string;
};
stopController: AbortController | null;
/** 用于存储 subAgent 状态数据的键 */
subAgentsKey: string;
/** Message 处理器 */
private messageProcessor;
constructor(config: LangGraphClientConfig);
/** 代理 assistants 属性到内部 client */
get assistants(): {
search(query?: {
graphId?: string;
metadata? /**
* Specify a custom fetch implementation.
*
* By default we expect the `fetch` is available in the global scope.
*/: import("@langchain/langgraph-sdk").Metadata;
limit?: number;
offset?: number;
sortBy?: import("@langgraph-js/pure-graph/dist/types.js").AssistantSortBy;
sortOrder?: import("@langgraph-js/pure-graph/dist/types.js").SortOrder;
}): Promise<Assistant[]>;
getGraph(assistantId: string, options?: {
xray?: boolean | number;
}): Promise<import("@langchain/langgraph-sdk").AssistantGraph>;
};
/** 代理 threads 属性到内部 client */
get threads(): {
create(payload?: {
metadata?: import("@langchain/langgraph-sdk").Metadata;
threadId?: string;
ifExists?: import("@langchain/langgraph-sdk").OnConflictBehavior;
graphId?: string;
}): Promise<Thread<TStateType>>;
search(query?: {
metadata?: import("@langchain/langgraph-sdk").Metadata;
limit?: number;
offset?: number;
status?: import("@langchain/langgraph-sdk").ThreadStatus;
sortBy?: import("@langgraph-js/pure-graph/dist/types.js").ThreadSortBy;
sortOrder?: import("@langgraph-js/pure-graph/dist/types.js").SortOrder;
}): Promise<Thread<TStateType>[]>;
get(threadId: string): Promise<Thread<TStateType>>;
delete(threadId: string): Promise<void>;
updateState(threadId: string, thread: Partial<Thread<TStateType>>): Promise<Pick<import("@langchain/langgraph-sdk").Config, "configurable">>;
};
/** 代理 runs 属性到内部 client */
get runs(): ILangGraphClient["runs"];
private listAssistants;
/**
* @zh 初始化 Assistant。
* @en Initializes the Assistant.
*/
initAssistant(agentName?: string, config?: {
fallbackToAvailableAssistants?: boolean;
}): Promise<Assistant | undefined>;
/**
* @zh 创建一个新的 Thread。
* @en Creates a new Thread.
*/
createThread({ threadId, graphId }?: {
threadId?: string;
graphId?: string;
}): Promise<Thread<TStateType>>;
graphVisualize(): Promise<import("@langchain/langgraph-sdk").AssistantGraph>;
/**
* @zh 列出所有的 Thread。
* @en Lists all Threads.
*/
listThreads(): Promise<Thread<TStateType>[]>;
deleteThread(threadId: string): Promise<void>;
/**
* @zh 从历史中恢复 Thread 数据。
* @en Resets the Thread data from history.
*/
resetThread(agent: string, threadId: string): Promise<Thread<TStateType>>;
resetStream(): Promise<void>;
cloneMessage(message: Message): Message;
/**
* @zh 用于 UI 中的流式渲染中的消息。
* @en Messages used for streaming rendering in the UI.
*/
get renderMessage(): RenderMessage[];
/**
* @zh 获取 Token 计数器信息。
* @en Gets the Token counter information.
*/
get tokenCounter(): {
total_tokens: number;
input_tokens: number;
output_tokens: number;
};
/** 前端工具人机交互时,锁住面板 */
isFELocking(messages: RenderMessage[]): boolean | undefined;
/**
* @zh 取消当前的 Run。
* @en Cancels the current Run.
*/
cancelRun(): void;
/**
* @zh 回滚到指定的消息。但是不会触发数据的重新更新
* @en Reverts to the specified message.
*/
revertChatTo(messageId: string): Promise<{
messages: Message[];
}>;
/**
* @zh 发送消息到 LangGraph 后端。
* @en Sends a message to the LangGraph backend.
*/
sendMessage(input: string | Message[], { joinRunId, extraParams, _debug, command }?: SendMessageOptions): Promise<any[]>;
/** 当前子图位置,但是依赖 stream,不太适合稳定使用*/
private graphPosition;
getGraphPosition(): {
id: string;
name: string;
}[];
getGraphNodeNow(): {
id: string;
name: string;
};
private runFETool;
private callFETool;
extraParams: Record<string, any>;
/**
* @zh 继续被前端工具中断的流程。
* @en Resumes a process interrupted by a frontend tool.
*/
resume(result: CallToolResult): Promise<any[]>;
/**
* @zh 标记前端工具等待已完成。
* @en Marks the frontend tool waiting as completed.
*/
doneFEToolWaiting(id: string, result: CallToolResult): void;
/**
* @zh 获取当前的 Thread。
* @en Gets the current Thread.
*/
getCurrentThread(): Thread<TStateType> | null;
/**
* @zh 获取当前的 Assistant。
* @en Gets the current Assistant.
*/
getCurrentAssistant(): Assistant | null;
/**
* @zh 重置客户端状态。
* @en Resets the client state.
*/
reset(): Promise<void>;
}