export declare function makeCache<T>(fn: () => Promise<T>, clearFn?: (lastValue: T) => void | Promise<void>): {
    load: () => Promise<void>;
    get: () => Promise<T>;
};
export declare let modelsCache: {
    load: () => Promise<void>;
    get: () => Promise<{
        embeddingCache: {
            keys(): string[];
            has(filename: string): boolean;
            get(filename: string): number[] | null;
            set(filename: string, values: number[]): void;
        };
        baseModel: {
            spec: import("tensorflow-helpers").ImageModelSpec;
            model: import("@tensorflow/tfjs-converter").GraphModel<string | import("@tensorflow/tfjs-core/dist/io/types").IOHandler> & {
                classNames?: string[];
            };
            fileEmbeddingCache: Map<string, import("@tensorflow/tfjs-core").Tensor<import("@tensorflow/tfjs-core").Rank>> | null;
            checkCache: (file_or_filename: string) => import("@tensorflow/tfjs-core").Tensor | void;
            loadImageCropped: (file: string, options?: {
                expandAnimations?: boolean;
            }) => Promise<import("@tensorflow/tfjs-core").Tensor3D | import("@tensorflow/tfjs-core").Tensor4D>;
            imageFileToEmbedding: (file: string, options?: {
                expandAnimations?: boolean;
            }) => Promise<import("@tensorflow/tfjs-core").Tensor>;
            imageTensorToEmbedding: (imageTensor: import("@tensorflow/tfjs-core").Tensor3D | import("@tensorflow/tfjs-core").Tensor4D) => import("@tensorflow/tfjs-core").Tensor;
        };
        classifierModel: {
            baseModel: {
                spec: import("tensorflow-helpers").ImageModelSpec;
                model: import("@tensorflow/tfjs-converter").GraphModel<string | import("@tensorflow/tfjs-core/dist/io/types").IOHandler> & {
                    classNames?: string[];
                };
                fileEmbeddingCache: Map<string, import("@tensorflow/tfjs-core").Tensor<import("@tensorflow/tfjs-core").Rank>> | null;
                checkCache: (file_or_filename: string) => import("@tensorflow/tfjs-core").Tensor | void;
                loadImageCropped: (file: string, options?: {
                    expandAnimations?: boolean;
                } | undefined) => Promise<import("@tensorflow/tfjs-core").Tensor3D | import("@tensorflow/tfjs-core").Tensor4D>;
                imageFileToEmbedding: (file: string, options?: {
                    expandAnimations?: boolean;
                } | undefined) => Promise<import("@tensorflow/tfjs-core").Tensor>;
                imageTensorToEmbedding: (imageTensor: import("@tensorflow/tfjs-core").Tensor3D | import("@tensorflow/tfjs-core").Tensor4D) => import("@tensorflow/tfjs-core").Tensor;
            };
            classifierModel: (import("@tensorflow/tfjs-layers").Sequential & {
                classNames?: string[];
            }) | (import("@tensorflow/tfjs-layers").LayersModel & {
                classNames?: string[];
            });
            classNames: string[];
            classifyImageFile: (file: string) => Promise<import("tensorflow-helpers").ClassificationResult[]>;
            classifyImageTensor: (imageTensor: import("@tensorflow/tfjs-core").Tensor3D | import("@tensorflow/tfjs-core").Tensor4D) => Promise<import("tensorflow-helpers").ClassificationResult[]>;
            classifyImageEmbedding: (embedding: import("@tensorflow/tfjs-core").Tensor) => Promise<import("tensorflow-helpers").ClassificationResult[]>;
            loadDatasetFromDirectory: () => Promise<{
                x: import("@tensorflow/tfjs-core").Tensor<import("@tensorflow/tfjs-core").Rank>;
                y: import("@tensorflow/tfjs-core").Tensor<import("@tensorflow/tfjs-core").Rank>;
                classCounts: number[];
            }>;
            compile: () => void;
            train: (options?: import("@tensorflow/tfjs-layers").ModelFitArgs & ({
                x: import("@tensorflow/tfjs-core").Tensor<import("@tensorflow/tfjs-core").Rank>;
                y: import("@tensorflow/tfjs-core").Tensor<import("@tensorflow/tfjs-core").Rank>;
                classCounts?: number[];
            } | {})) => Promise<import("@tensorflow/tfjs-layers").History>;
            save: (dir?: string) => Promise<import("@tensorflow/tfjs-core/dist/io/types").SaveResult>;
        };
        metadata: {
            epochs: number;
        };
    }>;
};
export declare let datasetCache: {
    load: () => Promise<void>;
    get: () => Promise<{
        x: import("@tensorflow/tfjs-core").Tensor<import("@tensorflow/tfjs-core").Rank>;
        y: import("@tensorflow/tfjs-core").Tensor<import("@tensorflow/tfjs-core").Rank>;
        classCounts: number[];
    }>;
};
