import { LayersModel, Sequential } from '@tensorflow/tfjs-node';
import { DataSetReaderConfig } from './data-reader';
import { Language } from './language';
import { DataSet, DecodedPrediction, InputSet, ModelTemplatesType, Normalizer, OutputSet, PreprocessorEngines, Stemmer, Tokenizer, Vocabulary, WordEmbeddingDimension, WordEmbeddingType } from './types';
export declare class BotonicNLU {
    language: Language;
    maxSeqLen: number;
    vocabulary: Vocabulary;
    engines: PreprocessorEngines;
    private modelManager;
    private preprocessor;
    private intentsProcessor;
    constructor({ normalizer, tokenizer, stemmer, }?: {
        normalizer?: Normalizer;
        tokenizer?: Tokenizer;
        stemmer?: Stemmer;
    });
    set model(model: Sequential | LayersModel);
    loadModel(modelPath: string, modelDataPath: string): Promise<void>;
    predict(sentence: string): string;
    predictProbabilities(sentence: string): DecodedPrediction[];
    readData(options: {
        path: string;
        language: Language;
        maxSeqLen: number;
    }, readerConfig?: DataSetReaderConfig): DataSet;
    trainTestSplit(options: {
        data: DataSet;
        testPercentage: number;
        stratify?: boolean;
    }): [InputSet, InputSet, OutputSet, OutputSet];
    private inputOutputSplit;
    createModel(options: {
        template: ModelTemplatesType;
        learningRate: number;
        wordEmbeddingsType?: WordEmbeddingType;
        wordEmbeddingsDimension?: WordEmbeddingDimension;
        trainableEmbeddings?: boolean;
    }): Promise<void>;
    train(x: InputSet, y: OutputSet, options?: {
        epochs?: number;
        batchSize?: number;
        validationSplit?: number;
    }): Promise<void>;
    evaluate(x: InputSet, y: OutputSet): number;
    saveModel(path?: string): Promise<void>;
}
