/// <reference types="node" />
import * as t from "polyfact-io-ts";
import { UUID } from "crypto";
import { GenerationOptions, Generation, GenerationWithoutWebOptions } from "../generate";
import { InputClientOptions, ClientOptions } from "../clientOpts";
import { Memory } from "../memory";
import { LoaderFunction } from "../dataloader";
declare const Message: t.TypeC<{
    id: t.StringC;
    chat_id: t.StringC;
    is_user_message: t.BooleanC;
    content: t.StringC;
    created_at: t.StringC;
}>;
export declare function createChat(systemPrompt?: string, systemPromptId?: UUID, options?: InputClientOptions): Promise<string>;
type ChatOptions = {
    autoMemory?: boolean;
} & GenerationWithoutWebOptions;
type ProgressCallback = (step: string) => void;
export declare class Chat {
    chatId: Promise<string>;
    clientOptions: Promise<ClientOptions>;
    autoMemory?: Promise<Memory>;
    memoryId?: string;
    options: ChatOptions;
    constructor(options?: ChatOptions, clientOptions?: InputClientOptions);
    dataLoader(data: LoaderFunction | LoaderFunction[], onProgress: ProgressCallback): Promise<void>;
    sendMessage(message: string, options?: GenerationOptions): Generation;
    getMessages(): Promise<t.TypeOf<typeof Message>[]>;
}
export type ChatClient = {
    createChat: (systemPrompt?: string, systemPromptId?: UUID) => Promise<string>;
    Chat: typeof Chat;
};
export default function client(clientOptions?: InputClientOptions): ChatClient;
export {};
