@ant-design/x-sdk
Version:
placeholder for @ant-design/x-sdk
65 lines (64 loc) • 3.14 kB
TypeScript
import type { AnyObject } from '../_util/type';
import { ConversationData } from '../x-conversations';
import type { SSEOutput } from '../x-stream';
import { AbstractChatProvider } from './providers';
export type SimpleType = string | number | boolean | object;
declare enum MessageStatusEnum {
local = "local",
loading = "loading",
updating = "updating",
success = "success",
error = "error",
abort = "abort"
}
export type MessageStatus = `${MessageStatusEnum}`;
type RequestPlaceholderFn<Input, Message> = (requestParams: Partial<Input>, info: {
messages: Message[];
}) => Message;
type RequestFallbackFn<Input, MessageInfo, Message> = (requestParams: Partial<Input>, info: {
error: Error;
messages: Message[];
messageInfo: MessageInfo;
}) => Message | Promise<Message>;
export type RequestParams<Message> = {
[Key: PropertyKey]: Message;
} & AnyObject;
export interface XChatConfig<ChatMessage extends SimpleType = string, BubbleMessage extends SimpleType = ChatMessage, Input = ChatMessage, Output = ChatMessage> {
provider?: AbstractChatProvider<ChatMessage, Input, Output>;
conversationKey?: ConversationData['key'];
defaultMessages?: DefaultMessageInfo<ChatMessage>[];
/** Convert agent message to bubble usage message type */
parser?: (message: ChatMessage) => BubbleMessage | BubbleMessage[];
requestPlaceholder?: ChatMessage | RequestPlaceholderFn<Input, ChatMessage>;
requestFallback?: ChatMessage | RequestFallbackFn<Input, MessageInfo<ChatMessage>, ChatMessage>;
}
export interface MessageInfo<Message extends SimpleType> {
id: number | string;
message: Message;
status: MessageStatus;
extra?: 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<ChatMessage extends SimpleType = string, ParsedMessage extends SimpleType = ChatMessage, Input = RequestParams<ChatMessage>, Output = SSEOutput>(config: XChatConfig<ChatMessage, ParsedMessage, Input, Output>): {
readonly onRequest: (requestParams: Partial<Input>, opts?: {
extra: AnyObject;
}) => void;
readonly messages: MessageInfo<ChatMessage>[];
readonly parsedMessages: MessageInfo<ParsedMessage>[];
readonly setMessages: (messages: MessageInfo<ChatMessage>[] | ((ori: MessageInfo<ChatMessage>[]) => MessageInfo<ChatMessage>[])) => boolean;
readonly setMessage: (id: string | number, message: Partial<MessageInfo<ChatMessage>> | ((message: MessageInfo<ChatMessage>) => Partial<MessageInfo<ChatMessage>>)) => boolean;
readonly abort: () => void;
readonly isRequesting: boolean;
readonly onReload: (id: string | number, requestParams: Partial<Input>, opts?: {
extra: AnyObject;
}) => void;
};
export {};