import { AnyObject } from '../_util/type';
interface RequestFnInfo<Message> extends Partial<XAgentConfigPreset>, AnyObject {
    messages?: Message[];
    message?: Message;
}
export type RequestFn<Message> = (info: RequestFnInfo<Message>, callbacks: {
    onUpdate: (message: Message) => void;
    onSuccess: (message: Message) => void;
    onError: (error: Error) => void;
}) => void;
export interface XAgentConfigPreset {
    baseURL: string;
    key: string;
    model: string;
    dangerouslyApiKey: string;
}
export interface XAgentConfigCustom<Message> {
    request?: RequestFn<Message>;
}
export type XAgentConfig<Message> = Partial<XAgentConfigPreset> & XAgentConfigCustom<Message>;
/** This is a wrap class to avoid developer can get too much on origin object */
export declare class XAgent<Message = string> {
    config: XAgentConfig<Message>;
    private requestingMap;
    constructor(config: XAgentConfig<Message>);
    private finishRequest;
    request: RequestFn<Message>;
    isRequesting(): boolean;
}
export default function useXAgent<Message = string>(config: XAgentConfig<Message>): readonly [XAgent<Message>];
export {};
