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
TypeScript
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 {};