@ant-design/pro-chat
Version:
a solution for ai chat
112 lines (111 loc) • 3.4 kB
TypeScript
import { ModelConfig } from "../types/config";
import { MetaData } from "../types/meta";
import { ChatMessage } from "../../types/message";
import { AutoCompleteProps } from 'antd';
import { TextAreaProps } from 'antd/es/input';
import { TextAreaRef } from 'antd/es/input/TextArea';
import { ReactNode } from 'react';
import { FlexBasicProps } from 'react-layout-kit/lib/FlexBasic';
import { Locale } from '../../locale';
import { ProChatChatReference } from '../container/StoreUpdater';
import { MixRequestResponse, SSEFinishType } from '../utils/fetch';
export type ChatRequest = (messages: ChatMessage[], config: ModelConfig, signal: AbortSignal | undefined) => MixRequestResponse;
export interface ChatPropsState<T extends Record<string, any> = Record<string, any>> {
/**
* 语言模型角色设定
*/
config: ModelConfig;
/**
* 聊天记录
*/
chats: ChatMessage<T>[];
onChatsChange?: (chats: ChatMessage<T>[]) => void;
chatRef?: ProChatChatReference;
displayMode: 'chat' | 'docs';
userMeta: MetaData;
assistantMeta: MetaData;
/**
* SSE 时候每一条特殊处理转换的方法,处理完后才进行拼接
* @returns string
*/
transformToChatMessage?: (preChatMessage: string, currentContent: string) => Promise<string> | string;
/**
* 帮助消息
*/
helloMessage?: ReactNode;
request?: string | ChatRequest;
/**
* 生成消息 id
* @param message
* @returns message id
*/
genMessageId?: (message: ChatMessage<T>[], parentId: string) => Promise<string>;
/**
* 重置消息
* @returns
*/
onResetMessage?: () => Promise<void>;
/**
* 获取自动完成列表的 request
* @param value
* @returns
*/
autocompleteRequest?: (value: string) => Promise<{
value: string;
label?: string;
}[]>;
/**
* 输入框的 placeholder
*/
placeholder?: string;
/**
* 国际化
*/
locale?: Locale;
/**
* 输入框的 props,优先级最高
*/
inputAreaProps?: TextAreaProps & React.RefAttributes<TextAreaRef> & {
autoCompleteProps?: AutoCompleteProps;
value?: string;
onChange?: (value: string) => void;
};
/**
* 信息框额外渲染
*/
messageItemExtraRender?: (message: ChatMessage<T>, type: 'assistant' | 'user') => React.ReactNode;
/**
* 信息框顶部的操作列表
*/
actions?: {
/**
* 控制 input 顶部的操作区域的 flex 布局
*/
flexConfig?: FlexBasicProps;
/**
* 控制 input 顶部的操作区域的操作按钮
* @param defaultDoms
* @returns
*/
render?: (defaultDoms: JSX.Element[]) => JSX.Element[];
};
/**
* 对话结束时候的回掉
*/
onChatEnd?: (id: string, type: SSEFinishType) => void;
/**
* 对话开始时候的回掉
*/
onChatStart?: (messages: ChatMessage<Record<string, any>>[]) => void;
/**
* 对话生成时候的回掉
*/
onChatGenerate?: (chunkText: string) => void;
}
export interface ChatState extends ChatPropsState {
init?: boolean;
abortController?: AbortController;
chatLoadingId?: string;
}
export declare const initialModelConfig: ModelConfig;
export declare const initialState: ChatState;