/**
 * @module botbuilder-m365
 */
/**
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License.
 */
import { TurnContext } from 'botbuilder';
import { DefaultTurnState } from './DefaultTurnStateManager';
import { Moderator } from './Moderator';
import { PredictedDoCommand, Planner } from './Planner';
import { PromptManager, PromptTemplate } from './Prompts';
import { TurnState } from './TurnState';
export declare type PromptSelector<TState extends TurnState> = (Context: TurnContext, state: TState) => Promise<string | PromptTemplate>;
export interface PredictedDoCommandAndHandler<TState> extends PredictedDoCommand {
    handler: (context: TurnContext, state: TState, data?: Record<string, any>, action?: string) => Promise<boolean>;
}
export interface AIOptions<TState extends TurnState> {
    planner: Planner<TState>;
    promptManager: PromptManager<TState>;
    moderator?: Moderator<TState>;
    prompt?: string | PromptTemplate | PromptSelector<TState>;
    history?: Partial<AIHistoryOptions>;
}
export interface AIHistoryOptions {
    trackHistory: boolean;
    maxTurns: number;
    maxTokens: number;
    lineSeparator: string;
    userPrefix: string;
    assistantPrefix: string;
    assistantHistoryType: 'text' | 'planObject';
}
export interface ConfiguredAIOptions<TState extends TurnState> {
    planner: Planner<TState>;
    promptManager: PromptManager<TState>;
    moderator: Moderator<TState>;
    prompt?: string | PromptTemplate | ((Context: TurnContext, state: TState) => Promise<string | PromptTemplate>);
    history: AIHistoryOptions;
}
export declare class AI<TState extends TurnState = DefaultTurnState> {
    private readonly _actions;
    private readonly _options;
    static readonly UnknownActionName = "___UnknownAction___";
    static readonly FlaggedInputActionName = "___FlaggedInput___";
    static readonly FlaggedOutputActionName = "___FlaggedOutput___";
    static readonly RateLimitedActionName = "___RateLimited___";
    static readonly PlanReadyActionName = "___PlanReady___";
    static readonly DoCommandActionName = "___DO___";
    static readonly SayCommandActionName = "___SAY___";
    constructor(options: AIOptions<TState>);
    get moderator(): Moderator<TState>;
    get options(): ConfiguredAIOptions<TState>;
    get planner(): Planner<TState>;
    get prompts(): PromptManager<TState>;
    /**
     * Registers a handler for a named action.
     *
     *
     * Actions can be triggered by a planner returning a DO command.
     *
     * @param {string | string[]} name Unique name of the action.
     * @param {Promise<boolean>} handler Function to call when the action is triggered.
     * @param {boolean} allowOverrides Optional. If true, default and/or existing handlers can be overridden.
     * @returns {this} The application instance for chaining purposes.
     */
    action<TEntities extends Record<string, any> | undefined>(name: string | string[], handler: (context: TurnContext, state: TState, entities: TEntities, action?: string) => Promise<boolean>, allowOverrides?: boolean): this;
    chain(context: TurnContext, state: TState, prompt?: string | PromptTemplate, options?: Partial<AIOptions<TState>>): Promise<boolean>;
    completePrompt(context: TurnContext, state: TState, prompt: string | PromptTemplate, options?: Partial<AIOptions<TState>>): Promise<string | undefined>;
    createSemanticFunction(name: string, template?: PromptTemplate, options?: Partial<AIOptions<TState>>): (context: TurnContext, state: TState) => Promise<any>;
    doAction<TData = Record<string, any>>(context: TurnContext, state: TState, action: string, data?: TData): Promise<boolean>;
    private configureOptions;
}
//# sourceMappingURL=AI.d.ts.map