import { CoreInterop } from './detail/coreInterop.js';
import { ModelLoadManager } from './detail/modelLoadManager.js';
import { IModel } from './imodel.js';
/**
 * Represents a catalog of AI models available in the system.
 * Provides methods to discover, list, and retrieve models and their variants.
 */
export declare class Catalog {
    private _name;
    private coreInterop;
    private modelLoadManager;
    private _models;
    private modelAliasToModel;
    private modelIdToModelVariant;
    private lastFetch;
    private updatePromise?;
    constructor(coreInterop: CoreInterop, modelLoadManager: ModelLoadManager, catalogName?: string);
    /**
     * Gets the name of the catalog.
     * @returns The name of the catalog.
     */
    get name(): string;
    /** @internal */
    invalidateCache(): void;
    private updateModels;
    private fetchAndPopulateModels;
    /**
     * Lists all available models in the catalog.
     * This method is asynchronous as it may fetch the model list from a remote service or perform file I/O.
     * @returns A Promise that resolves to an array of IModel objects.
     */
    getModels(): Promise<IModel[]>;
    /**
     * Retrieves a model by its alias.
     * This method is asynchronous as it may ensure the catalog is up-to-date by fetching from a remote service.
     * @param alias - The alias of the model to retrieve.
     * @returns A Promise that resolves to the IModel object if found, otherwise throws an error.
     * @throws Error - If alias is null, undefined, or empty.
     */
    getModel(alias: string): Promise<IModel>;
    /**
     * Retrieves a specific model variant by its ID.
     * NOTE: This will return an IModel with a single variant. Use getModel to get an IModel with all available
     * variants.
     * This method is asynchronous as it may ensure the catalog is up-to-date by fetching from a remote service.
     * @param modelId - The unique identifier of the model variant.
     * @returns A Promise that resolves to the IModel object if found, otherwise throws an error.
     * @throws Error - If modelId is null, undefined, or empty.
     */
    getModelVariant(modelId: string): Promise<IModel>;
    /**
     * Retrieves a list of all locally cached model variants.
     * This method is asynchronous as it may involve file I/O or querying the underlying core.
     * @returns A Promise that resolves to an array of cached IModel objects.
     */
    getCachedModels(): Promise<IModel[]>;
    /**
     * Retrieves a list of all currently loaded model variants.
     * This operation is asynchronous because checking the loaded status may involve querying
     * the underlying core or an external service, which can be an I/O bound operation.
     * @returns A Promise that resolves to an array of loaded IModel objects.
     */
    getLoadedModels(): Promise<IModel[]>;
    /**
     * Get the latest version of a model.
     * This is used to check if a newer version of a model is available in the catalog for download.
     * @param modelOrModelVariant - The model to check for the latest version.
     * @returns The latest version of the model. Will match the input if it is the latest version.
     */
    getLatestVersion(modelOrModelVariant: IModel): Promise<IModel>;
}
