/**
 * @module teams-ai
 */
/**
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License.
 */
import { Attachment, TurnContext } from 'botbuilder-core';
import { ClientCitation, SensitivityUsageInfo } from './types';
import { Citation } from './prompts/Message';
/**
 * A helper class for streaming responses to the client.
 * @remarks
 * This class is used to send a series of updates to the client in a single response. The expected
 * sequence of calls is:
 *
 * `sendInformativeUpdate()`, `sendTextChunk()`, `sendTextChunk()`, ..., `endStream()`.
 *
 * Once `endStream()` is called, the stream is considered ended and no further updates can be sent.
 */
export declare class StreamingResponse {
    private readonly _context;
    private _nextSequence;
    private _streamId?;
    private _message;
    private _attachments?;
    private _ended;
    private _queue;
    private _queueSync;
    private _chunkQueued;
    private _enableFeedbackLoop;
    private _feedbackLoopType?;
    private _enableGeneratedByAILabel;
    private _citations?;
    private _sensitivityLabel?;
    /**
     * Creates a new StreamingResponse instance.
     * @param {TurnContext} context - Context for the current turn of conversation with the user.
     * @returns {TurnContext} - The context for the current turn of conversation with the user.
     */
    constructor(context: TurnContext);
    /**
     * Gets the stream ID of the current response.
     * @returns {string | undefined} - The stream ID of the current response.
     * @remarks
     * Assigned after the initial update is sent.
     */
    get streamId(): string | undefined;
    /**
     * Gets the citations of the current response.
     */
    get citations(): ClientCitation[] | undefined;
    /**
     * Gets the number of updates sent for the stream.
     * @returns {number} - The number of updates sent for the stream.
     */
    get updatesSent(): number;
    /**
     * Queues an informative update to be sent to the client.
     * @param {string} text Text of the update to send.
     */
    queueInformativeUpdate(text: string): void;
    /**
     * Queues a chunk of partial message text to be sent to the client
     * @remarks
     * The text we be sent as quickly as possible to the client. Chunks may be combined before
     * delivery to the client.
     * @param {string} text Partial text of the message to send.
     * @param {Citation[]} citations Citations to be included in the message.
     */
    queueTextChunk(text: string, citations?: Citation[]): void;
    /**
     * Ends the stream by sending the final message to the client.
     * @returns {Promise<void>} - A promise representing the async operation
     */
    endStream(): Promise<void>;
    /**
     * Sets the attachments to attach to the final chunk.
     * @param attachments List of attachments.
     */
    setAttachments(attachments: Attachment[]): void;
    /**
     * Sets the sensitivity label to attach to the final chunk.
     * @param sensitivityLabel The sensitivty label.
     */
    setSensitivityLabel(sensitivityLabel: SensitivityUsageInfo): void;
    /**
     * Sets the citations for the full message.
     * @param {Citation[]} citations Citations to be included in the message.
     */
    setCitations(citations: Citation[]): void;
    /**
     * Sets the Feedback Loop in Teams that allows a user to
     * give thumbs up or down to a response.
     * Default is `false`.
     * @param enableFeedbackLoop If true, the feedback loop is enabled.
     */
    setFeedbackLoop(enableFeedbackLoop: boolean): void;
    /**
     * Sets the type of UI to use for the feedback loop.
     * @param feedbackLoopType The type of the feedback loop.
     */
    setFeedbackLoopType(feedbackLoopType: 'default' | 'custom'): void;
    /**
     * Sets the the Generated by AI label in Teams
     * Default is `false`.
     * @param enableGeneratedByAILabel If true, the label is added.
     */
    setGeneratedByAILabel(enableGeneratedByAILabel: boolean): void;
    /**
     * Returns the most recently streamed message.
     * @returns The streamed message.
     */
    getMessage(): string;
    /**
     * Waits for the outgoing activity queue to be empty.
     * @returns {Promise<void>} - A promise representing the async operation.
     */
    waitForQueue(): Promise<void>;
    /**
     * Queues the next chunk of text to be sent to the client.
     * @private
     */
    private queueNextChunk;
    /**
     * Queues an activity to be sent to the client.
     * @param {() => Partial<Activity>} factory - A factory that creates the outgoing activity just before its sent.
     */
    private queueActivity;
    /**
     * Sends any queued activities to the client until the queue is empty.
     * @returns {Promise<void>} - A promise that will be resolved once the queue is empty.
     * @private
     */
    private drainQueue;
    /**
     * Sends an activity to the client and saves the stream ID returned.
     * @param {Partial<Activity>} activity - The activity to send.
     * @returns {Promise<void>} - A promise representing the async operation.
     * @private
     */
    private sendActivity;
}
//# sourceMappingURL=StreamingResponse.d.ts.map