UNPKG

ant-design-x-vue-next

Version:

Ant Design X for Vue — community continuation aligned with @ant-design/x

90 lines (89 loc) 4.88 kB
import { type MaybeRefOrGetter } from 'vue'; import { XAgent } from '../use-x-agent'; import { type SSEOutput, XStreamOptions } from '../x-stream'; import { XRequestParams } from '../x-request'; import type { AnyObject } from '../_util/type'; import { type ConversationKey } from './conversationStore'; import type { AbstractChatProvider } from '../chat-providers/AbstractChatProvider'; export type SimpleType = string | number | boolean | object; export type MessageStatus = 'local' | 'loading' | 'success' | 'error' | 'abort' | 'updating'; type RequestPlaceholderFn<Message extends SimpleType> = (message: Message, info: { messages: Message[]; }) => Message; type RequestFallbackFn<Message extends SimpleType> = (message: Message, info: { error: Error; messages: Message[]; }) => Message | Promise<Message>; type TransformMessageFn<Message, Output> = (info: { originMessage?: Message; chunk: Output; chunks: Output[]; status: MessageStatus; responseHeaders?: Headers; }) => Message; type RequestParams<Message> = Omit<XRequestParams, 'message'> & { message: Message; } & AnyObject; export interface XChatConfig<AgentMessage extends SimpleType = string, BubbleMessage extends SimpleType = AgentMessage, Input = AgentMessage, Output = AgentMessage> { agent?: XAgent<AgentMessage, Input, Output>; /** * Initial messages: sync list, sync factory, or async loader (aligned with @ant-design/x-sdk). */ defaultMessages?: DefaultMessageInfo<AgentMessage>[] | ((info: { conversationKey?: ConversationKey; }) => DefaultMessageInfo<AgentMessage>[] | Promise<DefaultMessageInfo<AgentMessage>[]>); /** * Isolate message list by conversation key (multi-conversation enterprise chat). * Accepts string/symbol or a Ref/getter (e.g. useXConversations.activeConversationKey). */ conversationKey?: MaybeRefOrGetter<ConversationKey>; /** Convert agent message to bubble usage message type */ parser?: (message: AgentMessage) => BubbleMessage | BubbleMessage[]; requestPlaceholder?: AgentMessage | RequestPlaceholderFn<AgentMessage>; requestFallback?: AgentMessage | RequestFallbackFn<AgentMessage>; transformMessage?: TransformMessageFn<AgentMessage, Output>; /** * Chat provider (AbstractChatProvider). When set, injects getMessages and * supplies transformMessage / transformParams unless overridden. */ provider?: AbstractChatProvider<AgentMessage, Input, Output>; transformStream?: XStreamOptions<AgentMessage>['transformStream']; resolveAbortController?: (abortController: AbortController) => void; } export interface MessageInfo<Message extends SimpleType> { id: number | string; message: Message; status: MessageStatus; /** Arbitrary metadata (feedback, citations, etc.) */ extraInfo?: AnyObject; } export type DefaultMessageInfo<Message extends SimpleType> = Pick<MessageInfo<Message>, 'message'> & Partial<Omit<MessageInfo<Message>, 'message'>>; export type RequestResultObject<Message> = { message: Message | Message[]; status: MessageStatus; }; export type StandardRequestResult<Message extends SimpleType> = Omit<RequestResultObject<Message>, 'message' | 'status'> & { message: Message; status?: MessageStatus; }; export default function useXChat<AgentMessage extends SimpleType = string, ParsedMessage extends SimpleType = AgentMessage, Input = RequestParams<AgentMessage>, Output = SSEOutput>(config: XChatConfig<AgentMessage, ParsedMessage, Input, Output>): { readonly onRequest: (requestParams: SimpleType | RequestParams<AgentMessage> | Input, opts?: { extraInfo?: AnyObject; }) => void; readonly onReload: (id: string | number, requestParams?: RequestParams<AgentMessage> | Input | SimpleType, opts?: { extraInfo?: AnyObject; }) => void; readonly abort: () => void; readonly messages: import("vue").Ref<MessageInfo<AgentMessage>[], MessageInfo<AgentMessage>[]>; readonly parsedMessages: import("vue").ComputedRef<MessageInfo<ParsedMessage>[]>; readonly setMessages: (updater: MessageInfo<AgentMessage>[] | ((prev: MessageInfo<AgentMessage>[]) => MessageInfo<AgentMessage>[])) => void; readonly setMessage: (id: string | number, patch: Partial<MessageInfo<AgentMessage>> | ((origin: MessageInfo<AgentMessage>) => Partial<MessageInfo<AgentMessage>>)) => boolean; readonly removeMessage: (id: string | number) => boolean; readonly conversationKey: import("vue").Ref<ConversationKey, ConversationKey>; readonly isRequesting: import("vue").ComputedRef<boolean>; readonly isDefaultMessagesRequesting: import("vue").Ref<boolean, boolean>; readonly queueRequest: (conversationKey: ConversationKey, requestParams: RequestParams<AgentMessage> | Input | SimpleType, opts?: { extraInfo?: AnyObject; }) => void; }; export {};