UNPKG

@assistant-ui/react

Version:

TypeScript/React library for AI Chat

141 lines 5.19 kB
import { FC, PropsWithChildren } from "react"; import { ToolUIApi, ToolUIState, ToolUIMeta } from "../../client/types/ToolUI"; import { MessageClientApi, MessageClientState } from "../../client/types/Message"; import { ThreadListItemClientApi, ThreadListItemClientState } from "../../client/types/ThreadListItem"; import { MessagePartClientApi, MessagePartClientState } from "../../client/types/Part"; import { ThreadClientApi, ThreadClientState } from "../../client/types/Thread"; import { ComposerClientApi, ComposerClientState } from "../../client/types/Composer"; import { AttachmentClientApi, AttachmentClientState } from "../../client/types/Attachment"; import { Unsubscribe } from "@assistant-ui/tap"; import { AssistantEvent, AssistantEventCallback, AssistantEventSelector } from "../../types/EventTypes"; import { ThreadListClientApi, ThreadListClientState } from "../../client/types/ThreadList"; import { AssistantClientProps } from "../../client/AssistantClient"; import { ToolsApi, ToolsMeta } from "../../client/types/Tools"; import { ModelContextApi, ModelContextMeta } from "../../client/types/ModelContext"; import { DerivedScopesInput } from "../../utils/tap-store/derived-scopes"; export type AssistantState = { readonly threads: ThreadListClientState; readonly toolUIs: ToolUIState; readonly threadListItem: ThreadListItemClientState; readonly thread: ThreadClientState; readonly composer: ComposerClientState; readonly message: MessageClientState; readonly part: MessagePartClientState; readonly attachment: AttachmentClientState; }; export type AssistantApiField<TApi, TMeta extends { source: string | null; query: any; }> = (() => TApi) & (TMeta | { source: null; query: Record<string, never>; }); type ThreadsMeta = { source: "root"; query: Record<string, never>; }; type ThreadListItemMeta = { source: "threads"; query: { type: "index"; index: number; archived: boolean; } | { type: "main"; } | { type: "id"; id: string; }; }; type ThreadMeta = { source: "threads"; query: { type: "main"; }; }; type ComposerMeta = { source: "message" | "thread"; query: Record<string, never>; }; type MessageMeta = { source: "thread"; query: { type: "index"; index: number; }; } | { source: "root"; query: Record<string, never>; }; type PartMeta = { source: "message" | "root"; query: { type: "index"; index: number; } | Record<string, never>; }; type AttachmentMeta = { source: "message" | "composer"; query: { type: "index"; index: number; }; }; export type AssistantApi = { threads: AssistantApiField<ThreadListClientApi, ThreadsMeta>; toolUIs: AssistantApiField<ToolUIApi, ToolUIMeta>; tools: AssistantApiField<ToolsApi, ToolsMeta>; modelContext: AssistantApiField<ModelContextApi, ModelContextMeta>; threadListItem: AssistantApiField<ThreadListItemClientApi, ThreadListItemMeta>; thread: AssistantApiField<ThreadClientApi, ThreadMeta>; composer: AssistantApiField<ComposerClientApi, ComposerMeta>; message: AssistantApiField<MessageClientApi, MessageMeta>; part: AssistantApiField<MessagePartClientApi, PartMeta>; attachment: AssistantApiField<AttachmentClientApi, AttachmentMeta>; subscribe(listener: () => void): Unsubscribe; flushSync(): void; on<TEvent extends AssistantEvent>(event: AssistantEventSelector<TEvent>, callback: AssistantEventCallback<TEvent>): Unsubscribe; }; export declare const createAssistantApiField: <TApi, TMeta extends { source: any; query: any; }>(config: { get: () => TApi; } & (TMeta | { source: null; query: Record<string, never>; })) => AssistantApiField<TApi, TMeta>; export declare const useAssistantApiImpl: () => AssistantApi; /** * Hook to extend the current AssistantApi with additional derived scope fields and special callbacks. * This merges the derived fields with the existing API from context. * Fields are automatically memoized based on source and query changes. * Special callbacks (on, subscribe, flushSync) use the useEffectEvent pattern to always access latest values. * * @param scopes - Record of field names to DerivedScope resource elements, plus optional special callbacks * @returns The merged AssistantApi * * @example * ```tsx * const api = useExtendedAssistantApi({ * message: DerivedScope({ * source: "root", * query: {}, * get: () => messageApi, * }), * on: (selector, callback) => { * // Custom event filtering logic * }, * }); * ``` */ export declare const useExtendedAssistantApi: (scopes: DerivedScopesInput) => AssistantApi; export declare function useAssistantApi(): AssistantApi; export declare function useAssistantApi(config: AssistantClientProps): AssistantApi; export declare const extendApi: (api: AssistantApi, api2: Partial<AssistantApi>) => AssistantApi; export declare const AssistantProvider: FC<PropsWithChildren<{ api: AssistantApi; devToolsVisible?: boolean; }>>; export {}; //# sourceMappingURL=AssistantApiContext.d.ts.map