@langgraph-js/sdk
Version:
The UI SDK for LangGraph - seamlessly integrate your AI agents with frontend interfaces
167 lines (163 loc) • 6.48 kB
text/typescript
import {
Thread,
Assistant,
Run,
StreamMode,
Command,
Metadata,
AssistantGraph,
OnConflictBehavior,
ThreadStatus,
ValuesStreamEvent,
UpdatesStreamEvent,
DebugStreamEvent,
MessagesStreamEvent,
MessagesTupleStreamEvent,
CustomStreamEvent,
EventsStreamEvent,
ErrorStreamEvent,
MetadataStreamEvent,
FeedbackStreamEvent,
Config,
Checkpoint,
} from "@langchain/langgraph-sdk";
import { StreamEvent } from "@langchain/core/tracers/log_stream";
// 基础类型定义
export type AssistantSortBy = "assistant_id" | "graph_id" | "name" | "created_at" | "updated_at";
export type ThreadSortBy = "thread_id" | "status" | "created_at" | "updated_at";
export type SortOrder = "asc" | "desc";
export type RunStatus = "pending" | "running" | "error" | "success" | "timeout" | "interrupted";
export type MultitaskStrategy = "reject" | "interrupt" | "rollback" | "enqueue";
export type DisconnectMode = "cancel" | "continue";
export type OnCompletionBehavior = "complete" | "continue";
export type CancelAction = "interrupt" | "rollback";
// 流式异步生成器类型
export type TypedAsyncGenerator<
TStreamMode extends StreamMode | StreamMode[] = [],
TSubgraphs extends boolean = false,
TStateType = unknown,
TUpdateType = TStateType,
TCustomType = unknown,
> = AsyncGenerator<
| {
values: ValuesStreamEvent<TStateType>;
updates: UpdatesStreamEvent<TUpdateType>;
custom: CustomStreamEvent<TCustomType>;
debug: DebugStreamEvent;
messages: MessagesStreamEvent;
"messages-tuple": MessagesTupleStreamEvent;
events: EventsStreamEvent;
}[TStreamMode extends StreamMode[] ? TStreamMode[number] : TStreamMode]
| ErrorStreamEvent
| MetadataStreamEvent
| FeedbackStreamEvent
>;
/**
* 兼容 LangGraph SDK 的接口定义,方便进行无侵入式的扩展
*/
export interface ILangGraphClient<TStateType = unknown, TUpdateType = TStateType> {
assistants: {
search(query?: { graphId?: string; metadata?: Metadata; limit?: number; offset?: number; sortBy?: AssistantSortBy; sortOrder?: SortOrder }): Promise<Assistant[]>;
getGraph(assistantId: string, options?: { xray?: boolean | number }): Promise<AssistantGraph>;
};
threads: {
create<ValuesType = TStateType>(payload?: {
metadata?: Metadata;
threadId?: string;
ifExists?: OnConflictBehavior;
graphId?: string;
supersteps?: Array<{
updates: Array<{
values: unknown;
command?: Command;
asNode: string;
}>;
}>;
}): Promise<Thread<ValuesType>>;
search<ValuesType = TStateType>(query?: {
metadata?: Metadata;
limit?: number;
offset?: number;
status?: ThreadStatus;
sortBy?: ThreadSortBy;
sortOrder?: SortOrder;
}): Promise<Thread<ValuesType>[]>;
get<ValuesType = TStateType>(threadId: string): Promise<Thread<ValuesType>>;
delete(threadId: string): Promise<void>;
};
runs: {
list(
threadId: string,
options?: {
limit?: number;
offset?: number;
status?: RunStatus;
}
): Promise<Run[]>;
stream<TStreamMode extends StreamMode | StreamMode[] = StreamMode, TSubgraphs extends boolean = false>(
threadId: null,
assistantId: string,
payload?: {
input?: Record<string, unknown> | null;
metadata?: Metadata;
config?: Config;
checkpointId?: string;
checkpoint?: Omit<Checkpoint, "thread_id">;
checkpointDuring?: boolean;
interruptBefore?: "*" | string[];
interruptAfter?: "*" | string[];
signal?: AbortController["signal"];
webhook?: string;
onDisconnect?: DisconnectMode;
afterSeconds?: number;
ifNotExists?: "create" | "reject";
command?: Command;
onRunCreated?: (params: { run_id: string; thread_id?: string }) => void;
streamMode?: TStreamMode;
streamSubgraphs?: TSubgraphs;
streamResumable?: boolean;
feedbackKeys?: string[];
}
): TypedAsyncGenerator<TStreamMode, TSubgraphs, TStateType, TUpdateType>;
stream<TStreamMode extends StreamMode | StreamMode[] = StreamMode, TSubgraphs extends boolean = false>(
threadId: string,
assistantId: string,
payload?: {
input?: Record<string, unknown> | null;
metadata?: Metadata;
config?: Config;
checkpointId?: string;
checkpoint?: Omit<Checkpoint, "thread_id">;
checkpointDuring?: boolean;
interruptBefore?: "*" | string[];
interruptAfter?: "*" | string[];
multitaskStrategy?: MultitaskStrategy;
onCompletion?: OnCompletionBehavior;
signal?: AbortController["signal"];
webhook?: string;
onDisconnect?: DisconnectMode;
afterSeconds?: number;
ifNotExists?: "create" | "reject";
command?: Command;
onRunCreated?: (params: { run_id: string; thread_id?: string }) => void;
streamMode?: TStreamMode;
streamSubgraphs?: TSubgraphs;
streamResumable?: boolean;
feedbackKeys?: string[];
}
): TypedAsyncGenerator<TStreamMode, TSubgraphs, TStateType, TUpdateType>;
joinStream(
threadId: string | undefined | null,
runId: string,
options?:
| {
signal?: AbortSignal;
cancelOnDisconnect?: boolean;
lastEventId?: string;
streamMode?: StreamMode | StreamMode[];
}
| AbortSignal
): AsyncGenerator<{ id?: string; event: StreamEvent; data: any }>;
cancel(threadId: string, runId: string, wait?: boolean, action?: CancelAction): Promise<void>;
};
}