import type { BaseNode, Metadata } from "../Node.js";
import { TextNode } from "../Node.js";
import type { BaseRetriever } from "../Retriever.js";
import type { MessageContent } from "../llm/index.js";
import type { BaseTool } from "../types.js";
export 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;
}
type QueryType = MessageContent;
export declare class ObjectRetriever<T = unknown> {
    _retriever: BaseRetriever;
    _objectNodeMapping: BaseObjectNodeMapping;
    constructor(retriever: BaseRetriever, objectNodeMapping: BaseObjectNodeMapping);
    get retriever(): BaseRetriever;
    retrieve(strOrQueryBundle: QueryType): Promise<T[]>;
}
export declare class SimpleToolNodeMapping extends BaseObjectNodeMapping {
    private _tools;
    private constructor();
    objNodeMapping(): Record<any, any>;
    toNode(tool: BaseTool): TextNode;
    _addObj(tool: BaseTool): void;
    _fromNode(node: BaseNode): BaseTool;
    persist(persistDir: string, objNodeMappingFilename: string): void;
    toNodes(objs: BaseTool[]): TextNode<Metadata>[];
    addObj(obj: BaseTool): void;
    fromNode(node: BaseNode): BaseTool;
    static fromObjects(objs: any, ...args: any[]): BaseObjectNodeMapping;
    fromObjects<OT>(objs: any, ...args: any[]): BaseObjectNodeMapping;
}
export declare class ObjectIndex {
    private _index;
    private _objectNodeMapping;
    private constructor();
    static fromObjects(objects: any, objectMapping: BaseObjectNodeMapping, indexCls: any, indexKwargs?: Record<string, any>): Promise<ObjectIndex>;
    insertObject(obj: any): Promise<void>;
    get tools(): Record<string, BaseTool>;
    asRetriever(kwargs: any): Promise<ObjectRetriever<any>>;
    asNodeRetriever(kwargs: any): any;
}
export {};
