import { Context, Logger } from 'koishi';
import { Config, CaveObject } from './index';
import { FileManager } from './FileManager';
/**
 * @description 定义了数据库 \`cave_meta\` 表的结构模型。
 */
export interface CaveMetaObject {
    cave: number;
    rating: number;
    type: string;
    keywords: string[];
}
declare module 'koishi' {
    interface Tables {
        cave_meta: CaveMetaObject;
    }
}
/**
 * @class AIManager
 * @description AI 管理器，作为连接 AI 服务与回声洞功能的核心模块。
 */
export declare class AIManager {
    private ctx;
    private config;
    private logger;
    private fileManager;
    private http;
    private endpointIndex;
    private retryTime;
    /**
     * @description 用于分析的 AI 系统提示词。
     */
    private readonly ANALYSIS_SYSTEM_PROMPT;
    /**
     * @description 用于查重的 AI 系统提示词。
     */
    private readonly DUPLICATE_SYSTEM_PROMPT;
    /**
     * @constructor
     * @description AIManager 的构造函数。
     * @param {Context} ctx - Koishi 的上下文对象。
     * @param {Config} config - 插件的配置对象。
     * @param {Logger} logger - 日志记录器实例。
     * @param {FileManager} fileManager - 文件管理器实例。
     */
    constructor(ctx: Context, config: Config, logger: Logger, fileManager: FileManager);
    /**
     * @description 注册与 AI 功能相关的管理命令。
     * @param {any} cave - \`cave\` 命令的实例，用于挂载子命令。
     */
    registerCommands(cave: any): void;
    /**
     * @description 检查新内容是否与数据库中已存在的回声洞重复。
     * @param {CaveMetaObject} newAnalysis - 新内容经过 AI 分析后的元数据。
     * @param {CaveObject} newCave - 待检查的新回声洞的完整对象。
     * @returns {Promise<number[]>} - 一个 Promise，解析为重复的回声洞 ID 数组。如果不重复或检查失败，则为空数组。
     */
    checkForDuplicates(newAnalysis: CaveMetaObject, newCave: CaveObject): Promise<number[]>;
    /**
     * @description 对一个或多个回声洞内容进行 AI 分析。
     * @param {CaveObject[]} caves - 需要分析的回声洞对象数组。
     * @param {{ fileName: string; buffer: Buffer }[]} [mediaBuffers] - 可选的媒体文件缓存。
     * @returns {Promise<CaveMetaObject[]>} - 一个 Promise，解析为分析结果（\`CaveMetaObject\`）的数组。
     */
    analyze(caves: CaveObject[], mediaBuffers?: {
        fileName: string;
        buffer: Buffer;
    }[]): Promise<CaveMetaObject[]>;
    /**
     * @description 准备单个回声洞的内容（文本和图片）以供 AI 模型处理。
     * @param {CaveObject} cave - 要处理的回声洞对象。
     * @param {Map<string, Buffer>} [mediaMap] - 媒体文件的缓存 Map。
     * @returns {Promise<any[] | null>} - 一个 Promise，解析为适合 AI 请求的 content 数组，如果回声洞为空则返回 null。
     */
    private prepareContent;
    /**
     * @description 使用 AI 批量判断一个主要回声洞是否与一组候选回声洞中的任何一个重复。
     * @param {CaveObject} mainCave - 主要的回声洞。
     * @param {CaveObject[]} candidateCaves - 用于比较的候选回声洞数组。
     * @returns {Promise<number[]>} - 一个 Promise，解析为重复的回声洞 ID 数组。如果不重复或检查失败，则为空数组。
     */
    private IsDuplicate;
    /**
     * @description 计算两组关键词之间的相似度（Jaccard 相似系数）。
     * @param {string[]} keywordsA - 第一组关键词。
     * @param {string[]} keywordsB - 第二组关键词。
     * @returns {number} - 返回 0 到 100 之间的相似度百分比。
     */
    private calculateSimilarity;
    /**
     * @description 向配置的 AI 服务端点发送请求的通用方法。
     * @template T - 期望从 AI 响应中解析出的 JSON 对象的类型。
     * @param {any[]} messages - 发送给 AI 的消息数组。
     * @param {string} systemPrompt - 系统提示词。
     * @returns {Promise<T>} - 一个 Promise，解析为从 AI 响应中解析出的 JSON 对象。
     * @throws {Error} - 如果 AI 服务持续失败或响应无法解析，则抛出错误。
     */
    private requestAI;
}
