import { MessageContent } from '../../llms/dist/index.cjs';
import { BaseRetriever } from '../../retriever/dist/index.cjs';
import { TextNode, BaseNode } from '../../schema/dist/index.cjs';

/**
 * @todo refactor this module, most of the part is broken
 *  reference
 *    - https://github.com/run-llama/LlamaIndexTS/pull/531
 *    - https://github.com/run-llama/LlamaIndexTS/pull/416
 */

declare abstract class BaseObjectNodeMapping {
    abstract fromObjects<OT>(objs: OT[], ...args: any[]): BaseObjectNodeMapping;
    abstract objNodeMapping(): Record<any, any>;
    abstract toNode(obj: any): TextNode;
    validateObject(obj: any): void;
    addObj(obj: any): void;
    abstract _addObj(obj: any): void;
    toNodes(objs: any[]): TextNode[];
    abstract _fromNode(node: BaseNode): any;
    fromNode(node: BaseNode): any;
    abstract persist(persistDir: string, objNodeMappingFilename: string): void;
}
declare class ObjectRetriever<T = unknown> {
    _retriever: BaseRetriever;
    _objectNodeMapping: BaseObjectNodeMapping;
    constructor(retriever: BaseRetriever, objectNodeMapping: BaseObjectNodeMapping);
    get retriever(): BaseRetriever;
    retrieve(strOrQueryBundle: MessageContent): Promise<T[]>;
}

export { BaseObjectNodeMapping, ObjectRetriever };
