import { Liquid, Template } from "liquidjs";
import { Context, Session } from "koishi";
import { Config } from "./index";
export interface ChatRequest {
    model: string;
    messages: Message[];
    stream?: boolean;
}
type Role = "user" | "system" | "assistant";
export interface Message {
    role: Role;
    content: string;
}
export interface MessageTemplate {
    role: Role;
    content: Template[];
}
export interface PromptsFile<M = Message[]> {
    extend?: string | null;
    name: string;
    prompts?: M | null;
    postprocessing?: string | null;
    keywords?: string[] | null;
    follow?: boolean | null;
    preamble?: string | null;
    config: unknown | null;
    prologue?: string | null;
}
export interface PromptsReal {
    postprocessing: (message: Message) => Message;
    prompts?: Message[] | null;
    follow: boolean;
    config: unknown | undefined;
    preamble: string | null;
    prologue: string | null;
}
export declare class Prompts {
    origin_config: Config;
    directory: string;
    prompts_map: {
        [key: string]: PromptsFile<MessageTemplate[]>;
    };
    init_func?: (this: Liquid, arg0: Context, arg1: typeof Liquid) => void;
    get_liquid(ctx?: Context, session?: Session): Liquid;
    reload(ctx: Context, directory: string): void;
    constructor(ctx: Context, directory: string, config: Config);
    get names(): string[];
    get_keywords(name: string): string[];
    get(name: string, ctx: Context, session: Session): PromptsReal;
}
export declare class ChatServer {
    #private;
    prompts?: Prompts | undefined;
    prompt_str?: Template[] | undefined;
    max_length: number;
    persistence: boolean;
    origin_config: Config;
    get recollect(): {
        [cid: string]: {
            [prompt_name: string]: Message[];
        };
    };
    set recollect(value: {
        [cid: string]: {
            [prompt_name: string]: Message[];
        };
    });
    get_recollect(session: Session, prompt_name: string): Message[];
    update_recollect(ctx: Context, session: Session | {
        cid: string;
    }, prompt_name: string, callback: (messages: Message[]) => Message[]): void;
    load_recollect(ctx: Context): void;
    constructor(config: Config, prompts: Prompts | string);
    get_liquid(ctx?: Context, session?: Session): Liquid;
    evaluate(ctx: Context, session: Session, content: string): Promise<string>;
    get_prompt(prompt_name: string, ctx: Context, session: Session): Promise<PromptsReal>;
    chat(message: Message, prompt_name: string, ctx: Context, session: Session): Promise<Message | undefined>;
}
export {};
