import { AzureKeyCredential } from '@azure/core-auth';
import { ClientOptions } from '@azure-rest/core-client';
import { KeyCredential } from '@azure/core-auth';
import { OperationOptions } from '@azure-rest/core-client';
import { Pipeline } from '@azure/core-rest-pipeline';
import { TokenCredential } from '@azure/core-auth';

/** Represents an assistant that can call the model and use tools. */
export declare interface Assistant {
    /** The identifier, which can be referenced in API endpoints. */
    id: string;
    /** The Unix timestamp, in seconds, representing when this object was created. */
    createdAt: Date;
    /** The name of the assistant. */
    name: string | null;
    /** The description of the assistant. */
    description: string | null;
    /** The ID of the model to use. */
    model: string;
    /** The system instructions for the assistant to use. */
    instructions: string | null;
    /** The collection of tools enabled for the assistant. */
    tools: ToolDefinition[];
    /** A list of attached file IDs, ordered by creation date in ascending order. */
    fileIds: string[];
    /** A set of up to 16 key/value pairs that can be attached to an object, used for storing additional information about that object in a structured format. Keys may be up to 64 characters in length and values may be up to 512 characters in length. */
    metadata?: Record<string, string> | null;
}

/**
 * THIS IS AN AUTO-GENERATED FILE - DO NOT EDIT!
 *
 * Any changes you make here may be lost.
 *
 * If you need to make changes, please do so in the original source file, \{project-root\}/sources/custom
 */
/** The request details to use when creating a new assistant. */
export declare interface AssistantCreationOptions {
    /** The ID of the model to use. */
    model: string;
    /** The name of the new assistant. */
    name?: string | null;
    /** The description of the new assistant. */
    description?: string | null;
    /** The system instructions for the new assistant to use. */
    instructions?: string | null;
    /** The collection of tools to enable for the new assistant. */
    tools?: ToolDefinition[];
    /** A list of previously uploaded file IDs to attach to the assistant. */
    fileIds?: string[];
    /** A set of up to 16 key/value pairs that can be attached to an object, used for storing additional information about that object in a structured format. Keys may be up to 64 characters in length and values may be up to 512 characters in length. */
    metadata?: Record<string, string> | null;
}

/** The status of an assistant deletion operation. */
export declare interface AssistantDeletionStatus extends DeletionStatus {
}

/** Information about a file attached to an assistant, as used by tools that can read files. */
export declare interface AssistantFile {
    /** The identifier, which can be referenced in API endpoints. */
    id: string;
    /** The Unix timestamp, in seconds, representing when this object was created. */
    createdAt: Date;
    /** The assistant ID that the file is attached to. */
    assistantId: string;
}

/** The status of an assistant file deletion operation. */
export declare interface AssistantFileDeletionStatus extends DeletionStatus {
}

/**
 * Client handling assistant-related operations.
 * @deprecated The Azure OpenAI Assistants client library for JavaScript beta will be retired on January 14th, 2025. Please migrate to the stable OpenAI SDK for JavaScript using the [migration guide](https://aka.ms/oai/js/asst/migrate) before that date.
 */
export declare class AssistantsClient {
    /** The pipeline used by this client to make requests */
    readonly pipeline: Pipeline;
    private _client;
    private _isAzure;
    /**
     * Initializes an instance of AssistantsClient for use with an OpenAI resource.
     * @param endpoint - The URI for an Azure OpenAI resource, including protocol and hostname.
     *                 For example: https://my-resource.openai.azure.com.
     * @param credential - A key credential used to authenticate to an Azure OpenAI resource.
     * @param options - The options for configuring the client.
     * @remarks
     *   This constructor initializes an AssistantsClient object that can only be used with Azure OpenAI resources.
     *   To use AssistantsClient with a non-Azure OpenAI inference endpoint, use a constructor that accepts a non-Azure OpenAI API key instead.
     */
    constructor(endpoint: string, credential: KeyCredential, options?: AssistantsClientOptions);
    /**
     * Initializes an instance of AssistantsClient for use with an Azure OpenAI resource.
     * @param endpoint - The URI for an Azure OpenAI resource, including protocol and hostname.
     *                 For example: https://my-resource.openai.azure.com.
     * @param credential - A token credential used to authenticate with an Azure OpenAI resource.
     * @param options - The options for configuring the client.
     */
    constructor(endpoint: string, credential: TokenCredential, options?: AssistantsClientOptions);
    /**
     * Initializes an instance of AssistantsClient for use with the non-Azure OpenAI endpoint.
     * @param openAiApiKey - The API key to use when connecting to the non-Azure OpenAI endpoint.
     * @param options - The options for configuring the client.
     * @remarks
     *   AssistantsClient objects initialized with this constructor can only be used with the non-Azure OpenAI inference endpoint.
     *   To use AssistantsClient with an Azure OpenAI resource, use a constructor that accepts a resource URI and Azure authentication credential instead.
     */
    constructor(openAiApiKey: KeyCredential, options?: AssistantsClientOptions);
    /** Creates a new assistant. */
    createAssistant(body: AssistantCreationOptions, options?: CreateAssistantOptions): Promise<Assistant>;
    /** Gets a list of assistants that were previously created. */
    listAssistants(options?: ListAssistantsOptions): Promise<ListResponseOf<Assistant>>;
    /** Retrieves an existing assistant. */
    getAssistant(assistantId: string, options?: GetAssistantOptions): Promise<Assistant>;
    /** Modifies an existing assistant. */
    updateAssistant(assistantId: string, body: UpdateAssistantOptions, options?: UpdateAssistantRequestOptions): Promise<Assistant>;
    /** Deletes an assistant. */
    deleteAssistant(assistantId: string, options?: DeleteAssistantOptions): Promise<AssistantDeletionStatus>;
    /** Attaches a previously uploaded file to an assistant for use by tools that can read files. */
    createAssistantFile(assistantId: string, fileId: string, options?: CreateAssistantFileOptions): Promise<AssistantFile>;
    /** Gets a list of files attached to a specific assistant, as used by tools that can read files. */
    listAssistantFiles(assistantId: string, options?: ListAssistantFilesOptions): Promise<ListResponseOf<AssistantFile>>;
    /** Retrieves a file attached to an assistant. */
    getAssistantFile(assistantId: string, fileId: string, options?: GetAssistantFileOptions): Promise<AssistantFile>;
    /**
     * Unlinks a previously attached file from an assistant, rendering it unavailable for use by tools that can read
     * files.
     */
    deleteAssistantFile(assistantId: string, fileId: string, options?: DeleteAssistantFileOptions): Promise<AssistantFileDeletionStatus>;
    /** Creates a new thread. Threads contain messages and can be run by assistants. */
    createThread(body?: AssistantThreadCreationOptions, options?: CreateThreadOptions): Promise<AssistantThread>;
    /** Gets information about an existing thread. */
    getThread(threadId: string, options?: GetThreadOptions): Promise<AssistantThread>;
    /** Modifies an existing thread. */
    updateThread(threadId: string, options?: UpdateThreadOptions): Promise<AssistantThread>;
    /** Deletes an existing thread. */
    deleteThread(threadId: string, options?: DeleteThreadOptions): Promise<ThreadDeletionStatus>;
    /** Creates a new message on a specified thread. */
    createMessage(threadId: string, role: MessageRole, content: string, options?: CreateMessageOptions): Promise<ThreadMessage>;
    /** Gets a list of messages that exist on a thread. */
    listMessages(threadId: string, options?: ListMessagesOptions): Promise<ListResponseOf<ThreadMessage>>;
    /** Gets an existing message from an existing thread. */
    getMessage(threadId: string, messageId: string, options?: GetMessageOptions): Promise<ThreadMessage>;
    /** Modifies an existing message on an existing thread. */
    updateMessage(threadId: string, messageId: string, options?: UpdateMessageOptions): Promise<ThreadMessage>;
    /** Gets a list of previously uploaded files associated with a message from a thread. */
    listMessageFiles(threadId: string, messageId: string, options?: ListMessageFilesOptions): Promise<ListResponseOf<MessageFile>>;
    /** Gets information about a file attachment to a message within a thread. */
    getMessageFile(threadId: string, messageId: string, fileId: string, options?: GetMessageFileOptions): Promise<MessageFile>;
    /** Creates a new run for an assistant thread. */
    createRun(threadId: string, createRunOptions: CreateRunOptions, options?: CreateRunRequestOptions): Promise<ThreadRun>;
    /** Gets a list of runs for a specified thread. */
    listRuns(threadId: string, options?: ListRunsOptions): Promise<ListResponseOf<ThreadRun>>;
    /** Gets an existing run from an existing thread. */
    getRun(threadId: string, runId: string, options?: GetRunOptions): Promise<ThreadRun>;
    /** Modifies an existing thread run. */
    updateRun(threadId: string, runId: string, options?: UpdateRunOptions): Promise<ThreadRun>;
    /** Submits outputs from tools as requested by tool calls in a run. Runs that need submitted tool outputs will have a status of 'requires_action' with a required_action.type of 'submit_tool_outputs'. */
    submitToolOutputsToRun(threadId: string, runId: string, toolOutputs: ToolOutput[], options?: SubmitToolOutputsToRunOptions): Promise<ThreadRun>;
    /** Cancels a run of an in progress thread. */
    cancelRun(threadId: string, runId: string, options?: CancelRunOptions): Promise<ThreadRun>;
    /** Creates a new assistant thread and immediately starts a run using that new thread. */
    createThreadAndRun(body: CreateAndRunThreadOptions, options?: CreateThreadAndRunOptions): Promise<ThreadRun>;
    /** Gets a single run step from a thread run. */
    getRunStep(threadId: string, runId: string, stepId: string, options?: GetRunStepOptions): Promise<RunStep>;
    /** Gets a list of run steps from a thread run. */
    listRunSteps(threadId: string, runId: string, options?: ListRunStepsOptions): Promise<ListResponseOf<RunStep>>;
    /** Gets a list of previously uploaded files. */
    listFiles(options?: ListFilesOptions): Promise<FileListResponse>;
    /** Uploads a file for use by other operations. */
    uploadFile(file: Uint8Array, purpose: FilePurpose, options?: UploadFileOptions): Promise<InputFile>;
    /** Delete a previously uploaded file. */
    deleteFile(fileId: string, options?: DeleteFileOptions): Promise<FileDeletionStatus>;
    /** Returns information about a specific file. Does not retrieve file content. */
    getFile(fileId: string, options?: GetFileOptions): Promise<InputFile>;
}

/** The details used to create a assistant client **/
export declare interface AssistantsClientOptions extends ClientOptions {
}

/** Information about a single thread associated with an assistant. */
export declare interface AssistantThread {
    /** The identifier, which can be referenced in API endpoints. */
    id: string;
    /** The Unix timestamp, in seconds, representing when this object was created. */
    createdAt: Date;
    /** A set of up to 16 key/value pairs that can be attached to an object, used for storing additional information about that object in a structured format. Keys may be up to 64 characters in length and values may be up to 512 characters in length. */
    metadata: Record<string, string> | null;
}

/** The details used to create a new assistant thread. */
export declare interface AssistantThreadCreationOptions {
    /** The messages to associate with the new thread. */
    messages?: {
        /** The role associated with the assistant thread message. */
        role: string;
        /** The list of content items associated with the assistant thread message. */
        content: string;
    }[];
    /** A set of key/value pairs used to store additional information about the object. */
    metadata?: Record<string, string>;
}

export { AzureKeyCredential }

/** The details used to cancel a run. */
export declare interface CancelRunOptions extends OperationOptions {
}

/** A representation of an image output emitted by a code interpreter tool in response to a tool call by the model. */
export declare interface CodeInterpreterImageOutput {
    /** The object type, which is always 'image'. */
    type: "image";
    /** Referential information for the image associated with this output. */
    image: CodeInterpreterImageReference;
}

/** An image reference emitted by a code interpreter tool in response to a tool call by the model. */
export declare interface CodeInterpreterImageReference {
    /** The ID of the file associated with this image. */
    fileId: string;
}

/** A representation of a log output emitted by a code interpreter tool in response to a tool call by the model. */
export declare interface CodeInterpreterLogOutput {
    /** The object type, which is always 'logs'. */
    type: "logs";
    /** The serialized log output emitted by the code interpreter. */
    logs: string;
}

/**
 * A record of a call to a code interpreter tool, issued by the model in evaluation of a defined tool, that
 * represents inputs and outputs consumed and emitted by the code interpreter.
 */
export declare interface CodeInterpreterToolCall {
    /** The object type, which is always 'code_interpreter'. */
    type: "code_interpreter";
    /** The ID of the tool call. This ID must be referenced when you submit tool outputs. */
    id: string;
    /** The details of the tool call to the code interpreter tool. */
    codeInterpreter: CodeInterpreterToolCallDetails;
}

/** The detailed information about a code interpreter invocation by the model. */
export declare interface CodeInterpreterToolCallDetails {
    /** The input provided by the model to the code interpreter tool. */
    input: string;
    /** The outputs produced by the code interpreter tool back to the model in response to the tool call. */
    outputs: CodeInterpreterToolCallOutput[];
}

/** Alias for CodeInterpreterToolCallOutput */
export declare type CodeInterpreterToolCallOutput = CodeInterpreterLogOutput | CodeInterpreterImageOutput;

/** The input definition information for a code interpreter tool as used to configure an assistant. */
export declare interface CodeInterpreterToolDefinition {
    /** The object type, which is always 'code_interpreter'. */
    type: "code_interpreter";
}

/** The details used when creating and immediately running a new assistant thread. */
export declare interface CreateAndRunThreadOptions {
    /** The ID of the assistant for which the thread should be created. */
    assistantId: string;
    /** The details used to create the new thread. */
    thread?: AssistantThreadCreationOptions;
    /** The overridden model that the assistant should use to run the thread. */
    model?: string;
    /** The overridden system instructions the assistant should use to run the thread. */
    instructions?: string;
    /** The overridden list of enabled tools the assistant should use to run the thread. */
    tools?: ToolDefinition[];
    /** A set of up to 16 key/value pairs that can be attached to an object, used for storing additional information about that object in a structured format. Keys may be up to 64 characters in length and values may be up to 512 characters in length. */
    metadata?: Record<string, string> | null;
}

/** The details used to create an assistant file. */
export declare interface CreateAssistantFileOptions extends OperationOptions {
}

/** The details used to create an assistant. */
export declare interface CreateAssistantOptions extends OperationOptions {
}

/** The details used to create a message. */
export declare interface CreateMessageOptions extends OperationOptions {
    /** A list of up to 10 file IDs to associate with the message, as used by tools like 'code_interpreter' or 'retrieval' that can read files. */
    fileIds?: string[];
    /** A set of up to 16 key/value pairs that can be attached to an object, used for storing additional information about that object in a structured format. Keys may be up to 64 characters in length and values may be up to 512 characters in length. */
    metadata?: Record<string, string>;
}

/** The details used when creating a new run of an assistant thread. */
export declare interface CreateRunOptions {
    /** The ID of the assistant that should run the thread. */
    assistantId: string;
    /** The overridden model name that the assistant should use to run the thread. */
    model?: string | null;
    /** The overridden system instructions that the assistant should use to run the thread. */
    instructions?: string | null;
    /**
     * Additional instructions to append at the end of the instructions for the run. This is useful for modifying the behavior
     * on a per-run basis without overriding other instructions.
     */
    additionalInstructions?: string | null;
    /** The overridden list of enabled tools that the assistant should use to run the thread. */
    tools?: ToolDefinition[] | null;
    /** A set of up to 16 key/value pairs that can be attached to an object, used for storing additional information about that object in a structured format. Keys may be up to 64 characters in length and values may be up to 512 characters in length. */
    metadata?: Record<string, string> | null;
}

/** The details used to create a run request. */
export declare interface CreateRunRequestOptions extends OperationOptions {
}

/** The details used to create and run a thread. */
export declare interface CreateThreadAndRunOptions extends OperationOptions {
}

/** The details used to create a thread. */
export declare interface CreateThreadOptions extends OperationOptions {
}

/** The details used to delete an assistant file. */
export declare interface DeleteAssistantFileOptions extends OperationOptions {
}

/** The details used to delete an assistant. */
export declare interface DeleteAssistantOptions extends OperationOptions {
}

/** The details used to delete files. */
export declare interface DeleteFileOptions extends OperationOptions {
}

/** The details used to delete a thread. */
export declare interface DeleteThreadOptions extends OperationOptions {
}

/** An abstract representation of an OpenAI deletion operation result status. */
export declare interface DeletionStatus {
    /** The ID of the resource specified for deletion. */
    id: string;
    /** A value indicating whether deletion was successful. */
    deleted: boolean;
}

/** A status response from a file deletion operation. */
export declare interface FileDeletionStatus extends DeletionStatus {
    /** The ID of the deleted file. */
    id: string;
}

/** The response data from a file list operation. */
export declare interface FileListResponse {
    /** The files returned for the request. */
    data: InputFile[];
}

/** The possible values denoting the intended usage of a file. */
/** "fine-tune", "fine-tune-results", "assistants", "assistants_output" */
export declare type FilePurpose = string;

/** The input definition information for a function. */
export declare interface FunctionDefinition {
    /** The name of the function to be called. */
    name: string;
    /** A description of what the function does, used by the model to choose when and how to call the function. */
    description: string;
    /** The parameters the functions accepts, described as a JSON Schema object. */
    parameters: unknown;
}

/**
 * A record of a call to a function tool, issued by the model in evaluation of a defined tool, that represents the inputs
 * and output consumed and emitted by the specified function.
 */
export declare interface FunctionToolCall {
    /** The object type, which is always 'function'. */
    type: "function";
    /** The ID of the tool call. This ID must be referenced when you submit tool outputs. */
    id: string;
    /** The detailed information about the function called by the model. */
    function: FunctionToolCallDetails;
}

/** The detailed information about the function called by the model. */
export declare interface FunctionToolCallDetails {
    /** The name of the function. */
    name: string;
    /** The arguments that the model requires are provided to the named function. */
    arguments: string;
    /** The output of the function, only populated for function calls that have already have had their outputs submitted. */
    output: string | null;
}

/** The input definition information for a function tool as used to configure an assistant. */
export declare interface FunctionToolDefinition {
    /** The object type, which is always 'function'. */
    type: "function";
    /** The definition of the concrete function that the function tool should call. */
    function: FunctionDefinition;
}

/** The details used to get an assistant file. */
export declare interface GetAssistantFileOptions extends OperationOptions {
}

/** The details used to get an assistant. */
export declare interface GetAssistantOptions extends OperationOptions {
}

/** The details used to get files. */
export declare interface GetFileOptions extends OperationOptions {
}

/** The details used to get a message file. */
export declare interface GetMessageFileOptions extends OperationOptions {
}

/** The details used to get a message. */
export declare interface GetMessageOptions extends OperationOptions {
}

/** The details used to get a run. */
export declare interface GetRunOptions extends OperationOptions {
}

/** The details used to get a run step. */
export declare interface GetRunStepOptions extends OperationOptions {
}

/** The details used to get a thread. */
export declare interface GetThreadOptions extends OperationOptions {
}

/** Represents an assistant that can call the model and use tools. */
export declare interface InputFile {
    /** The identifier, which can be referenced in API endpoints. */
    id: string;
    /** The size of the file, in bytes. */
    bytes: number;
    /** The name of the file. */
    filename: string;
    /** The Unix timestamp, in seconds, representing when this object was created. */
    createdAt: Date;
    /** The intended purpose of a file. */
    purpose: FilePurpose;
}

/** The details used to list assistant files. */
export declare interface ListAssistantFilesOptions extends OperationOptions {
    /** A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 20. */
    limit?: number;
    /** Sort order by the created_at timestamp of the objects. asc for ascending order and desc for descending order. */
    order?: ListSortOrder;
    /** A cursor for use in pagination. after is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include after=obj_foo in order to fetch the next page of the list. */
    after?: string;
    /** A cursor for use in pagination. before is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include before=obj_foo in order to fetch the previous page of the list. */
    before?: string;
}

/** The details used to list assistants. */
export declare interface ListAssistantsOptions extends OperationOptions {
    /** A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 20. */
    limit?: number;
    /** Sort order by the created_at timestamp of the objects. asc for ascending order and desc for descending order. */
    order?: ListSortOrder;
    /** A cursor for use in pagination. after is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include after=obj_foo in order to fetch the next page of the list. */
    after?: string;
    /** A cursor for use in pagination. before is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include before=obj_foo in order to fetch the previous page of the list. */
    before?: string;
}

/** The details used to list files. */
export declare interface ListFilesOptions extends OperationOptions {
    /** A value that, when provided, limits list results to files matching the corresponding purpose. */
    purpose?: FilePurpose;
}

/** The details used to list message files. */
export declare interface ListMessageFilesOptions extends OperationOptions {
    /** A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 20. */
    limit?: number;
    /** Sort order by the created_at timestamp of the objects. asc for ascending order and desc for descending order. */
    order?: ListSortOrder;
    /** A cursor for use in pagination. after is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include after=obj_foo in order to fetch the next page of the list. */
    after?: string;
    /** A cursor for use in pagination. before is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include before=obj_foo in order to fetch the previous page of the list. */
    before?: string;
}

/** The details used to list messages. */
export declare interface ListMessagesOptions extends OperationOptions {
    /** A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 20. */
    limit?: number;
    /** Sort order by the created_at timestamp of the objects. asc for ascending order and desc for descending order. */
    order?: ListSortOrder;
    /** A cursor for use in pagination. after is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include after=obj_foo in order to fetch the next page of the list. */
    after?: string;
    /** A cursor for use in pagination. before is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include before=obj_foo in order to fetch the previous page of the list. */
    before?: string;
}

/** The response data for a requested list of items. */
export declare interface ListResponseOf<T> {
    /** The requested list of items. */
    data: T[];
    /** The first ID represented in this list. */
    firstId: string;
    /** The last ID represented in this list. */
    lastId: string;
    /** A value indicating whether there are additional values available not captured in this list. */
    hasMore: boolean;
}

/** The details used to list runs. */
export declare interface ListRunsOptions extends OperationOptions {
    /** A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 20. */
    limit?: number;
    /** Sort order by the created_at timestamp of the objects. asc for ascending order and desc for descending order. */
    order?: ListSortOrder;
    /** A cursor for use in pagination. after is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include after=obj_foo in order to fetch the next page of the list. */
    after?: string;
    /** A cursor for use in pagination. before is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include before=obj_foo in order to fetch the previous page of the list. */
    before?: string;
}

/** The details used to list run steps. */
export declare interface ListRunStepsOptions extends OperationOptions {
    /** A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 20. */
    limit?: number;
    /** Sort order by the created_at timestamp of the objects. asc for ascending order and desc for descending order. */
    order?: ListSortOrder;
    /** A cursor for use in pagination. after is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include after=obj_foo in order to fetch the next page of the list. */
    after?: string;
    /** A cursor for use in pagination. before is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include before=obj_foo in order to fetch the previous page of the list. */
    before?: string;
}

/** The available sorting options when requesting a list of response objects. */
/** "asc", "desc" */
export declare type ListSortOrder = string;

/** Alias for MessageContent */
export declare type MessageContent = MessageTextContent | MessageImageFileContent;

/** Information about a file attached to an assistant thread message. */
export declare interface MessageFile {
    /** The identifier, which can be referenced in API endpoints. */
    id: string;
    /** The Unix timestamp, in seconds, representing when this object was created. */
    createdAt: Date;
    /** The ID of the message that this file is attached to. */
    messageId: string;
}

/** A representation of image file content in a thread message. */
export declare interface MessageImageFileContent {
    /** The object type, which is always 'image_file'. */
    type: "image_file";
    /** The image file for this thread message content item. */
    imageFile: MessageImageFileDetails;
}

/** An image reference, as represented in thread message content. */
export declare interface MessageImageFileDetails {
    /** The ID for the file associated with this image. */
    fileId: string;
}

/** The possible values for roles attributed to messages in a thread. */
/** "user", "assistant" */
export declare type MessageRole = string;

/** Alias for MessageTextAnnotation */
export declare type MessageTextAnnotation = MessageTextFileCitationAnnotation | MessageTextFilePathAnnotation;

/** A representation of a textual item of thread message content. */
export declare interface MessageTextContent {
    /** The object type, which is always 'text'. */
    type: "text";
    /** The text and associated annotations for this thread message content item. */
    text: MessageTextDetails;
}

/** The text and associated annotations for a single item of assistant thread message content. */
export declare interface MessageTextDetails {
    /** The text data. */
    value: string;
    /** A list of annotations associated with this text. */
    annotations: MessageTextAnnotation[];
}

/** A citation within the message that points to a specific quote from a specific File associated with the assistant or the message. Generated when the assistant uses the 'retrieval' tool to search files. */
export declare interface MessageTextFileCitationAnnotation {
    /** The object type, which is always 'file_citation'. */
    type: "file_citation";
    /** The textual content associated with this text annotation item. */
    text: string;
    /** The first text index associated with this text annotation. */
    startIndex: number;
    /** The last text index associated with this text annotation. */
    endIndex: number;
    /**
     * A citation within the message that points to a specific quote from a specific file.
     * Generated when the assistant uses the "retrieval" tool to search files.
     */
    fileCitation: MessageTextFileCitationDetails;
}

/** A representation of a file-based text citation, as used in a file-based annotation of text thread message content. */
export declare interface MessageTextFileCitationDetails {
    /** The ID of the file associated with this citation. */
    fileId: string;
    /** The specific quote cited in the associated file. */
    quote: string;
}

/** A citation within the message that points to a file located at a specific path. */
export declare interface MessageTextFilePathAnnotation {
    /** The object type, which is always 'file_path'. */
    type: "file_path";
    /** The textual content associated with this text annotation item. */
    text: string;
    /** The first text index associated with this text annotation. */
    startIndex: number;
    /** The last text index associated with this text annotation. */
    endIndex: number;
    /** A URL for the file that's generated when the assistant used the code_interpreter tool to generate a file. */
    filePath: MessageTextFilePathDetails;
}

/** An encapsulation of an image file ID, as used by message image content. */
export declare interface MessageTextFilePathDetails {
    /** The ID of the specific file that the citation is from. */
    fileId: string;
}

/**
 * The OpenAIKeyCredential class represents an OpenAI API key
 * and is used to authenticate into an Assistants client for
 * an OpenAI endpoint.
 */
export declare class OpenAIKeyCredential implements KeyCredential {
    private _key;
    /**
     * Create an instance of an AzureKeyCredential for use
     * with a service client.
     *
     * @param key - The initial value of the key to use in authentication
     */
    constructor(key: string);
    /**
     * The value of the key to be used in authentication
     */
    get key(): string;
    /**
     * Change the value of the key.
     *
     * Updates will take effect upon the next request after
     * updating the key value.
     *
     * @param newKey - The new key value to be used
     */
    update(newKey: string): void;
}

/** An abstract representation of a required action for an assistant thread run to continue. */
export declare interface RequiredAction {
    /** the discriminator possible values: submit_tool_outputs */
    type: string;
    /** The details describing tools that should be called to submit tool outputs. **/
    submitToolOutputs?: SubmitToolOutputsDetails;
}

/** A representation of a requested call to a function tool, needed by the model to continue evaluation of a run. */
export declare interface RequiredFunctionToolCall {
    /** The object type of the required tool call. Always 'function' for function tools. */
    type: "function";
    /** The ID of the tool call. This ID must be referenced when submitting tool outputs. */
    id: string;
    /** Detailed information about the function to be executed by the tool that includes name and arguments. */
    function: FunctionToolCallDetails;
}

/** Alias for RequiredToolCall */
export declare type RequiredToolCall = RequiredFunctionToolCall;

/**
 * A record of a call to a retrieval tool, issued by the model in evaluation of a defined tool, that represents
 * executed retrieval actions.
 */
export declare interface RetrievalToolCall {
    /** The object type, which is always 'retrieval'. */
    type: "retrieval";
    /** The ID of the tool call. This ID must be referenced when you submit tool outputs. */
    id: string;
    /** The key/value pairs produced by the retrieval tool. */
    retrieval: Record<string, string>;
}

/** The input definition information for a retrieval tool as used to configure an assistant. */
export declare interface RetrievalToolDefinition {
    /** The object type, which is always 'retrieval'. */
    type: "retrieval";
}

/** The details of an error as encountered by an assistant thread run. */
export declare interface RunError {
    /** The status for the error. */
    code: string;
    /** The human-readable text associated with the error. */
    message: string;
}

/** Possible values for the status of an assistant thread run. */
/** "queued", "in_progress", "requires_action", "cancelling", "cancelled", "failed", "completed", "expired" */
export declare type RunStatus = string;

/** Detailed information about a single step of an assistant thread run. */
export declare interface RunStep {
    /** The identifier, which can be referenced in API endpoints. */
    id: string;
    /** The type of run step, which can be either message_creation or tool_calls. */
    type: RunStepType;
    /** The ID of the assistant associated with the run step. */
    assistantId: string;
    /** The ID of the thread that was run. */
    threadId: string;
    /** The ID of the run that this run step is a part of. */
    runId: string;
    /** The status of this run step. */
    status: RunStepStatus;
    /** The details for this run step. */
    stepDetails: RunStepDetails;
    /** If applicable, information about the last error encountered by this run step. */
    lastError: RunStepError | null;
    /** The Unix timestamp, in seconds, representing when this object was created. */
    createdAt: Date;
    /** The Unix timestamp, in seconds, representing when this item expired. */
    expiredAt: Date | null;
    /** The Unix timestamp, in seconds, representing when this completed. */
    completedAt: Date | null;
    /** The Unix timestamp, in seconds, representing when this was cancelled. */
    cancelledAt: Date | null;
    /** The Unix timestamp, in seconds, representing when this failed. */
    failedAt: Date | null;
    /** A set of up to 16 key/value pairs that can be attached to an object, used for storing additional information about that object in a structured format. Keys may be up to 64 characters in length and values may be up to 512 characters in length. */
    metadata?: Record<string, string> | null;
}

/** Alias for RunStepDetails */
export declare type RunStepDetails = RunStepMessageCreationDetails | RunStepToolCallDetails;

/** The error information associated with a failed run step. */
export declare interface RunStepError {
    /** The error code for this error. */
    code: RunStepErrorCode;
    /** The human-readable text associated with this error. */
    message: string;
}

/** The error information associated with a failed run step. */
export declare interface RunStepError {
    /** The error code for this error. */
    code: RunStepErrorCode;
    /** The human-readable text associated with this error. */
    message: string;
}

/** Possible error code values attributable to a failed run step. */
/** "server_error", "rate_limit_exceeded" */
export declare type RunStepErrorCode = string;

/** The detailed information associated with a message creation run step. */
export declare interface RunStepMessageCreationDetails {
    /** The object type, which is always 'message_creation'. */
    type: "message_creation";
    /** Information about the message creation associated with this run step. */
    messageCreation: RunStepMessageCreationReference;
}

/** The details of a message created as a part of a run step. */
export declare interface RunStepMessageCreationReference {
    /** The ID of the message created by this run step. */
    messageId: string;
}

/** Possible values for the status of a run step. */
/** "in_progress", "cancelled", "failed", "completed", "expired" */
export declare type RunStepStatus = string;

/** The detailed information associated with a run step calling tools. */
export declare interface RunStepToolCallDetails {
    /** The object type, which is always 'tool_calls'. */
    type: "tool_calls";
    /** A list of tool call details for this run step. */
    toolCalls: ToolCall[];
}

/** The possible types of run steps. */
/** "message_creation", "tool_calls" */
export declare type RunStepType = string;

/** The details describing tools that should be called to submit tool outputs. */
export declare interface SubmitToolOutputsDetails {
    /** The list of tool calls that must be resolved for the assistant thread run to continue. */
    toolCalls: RequiredToolCall[];
}

/** The details used to submit tool outputs to a run. */
export declare interface SubmitToolOutputsToRunOptions extends OperationOptions {
}

/** The status of a thread deletion operation. */
export declare interface ThreadDeletionStatus extends DeletionStatus {
}

/** A single, existing message within an assistant thread. */
export declare interface ThreadMessage {
    /** The identifier, which can be referenced in API endpoints. */
    id?: string;
    /** The Unix timestamp, in seconds, representing when this object was created. */
    createdAt?: Date;
    /** The ID of the thread that this message belongs to. */
    threadId?: string;
    /** The role associated with the assistant thread message. */
    role: string;
    /** The list of content items associated with the assistant thread message. */
    content: MessageContent[];
    /** If applicable, the ID of the assistant that authored this message. */
    assistantId?: string;
    /** If applicable, the ID of the run associated with the authoring of this message. */
    runId?: string;
    /** The IDs for the files associated with this message. */
    fileIds?: string[];
    /** A set of key/value pairs used to store additional information about the object. */
    metadata: Record<string, string> | null;
}

/** Data representing a single evaluation run of an assistant thread. */
export declare interface ThreadRun {
    /** The identifier, which can be referenced in API endpoints. */
    id: string;
    /** The ID of the thread associated with this run. */
    threadId: string;
    /** The ID of the assistant associated with the thread this run was performed against. */
    assistantId: string;
    /** The status of the assistant thread run. */
    status: RunStatus;
    /** The details of the action required for the assistant thread run to continue. */
    requiredAction?: RequiredAction | null;
    /** The last error, if any, encountered by this assistant thread run. */
    lastError?: RunError | null;
    /** The ID of the model to use. */
    model: string;
    /** The overriden system instructions used for this assistant thread run. */
    instructions: string;
    /** The overriden enabled tools used for this assistant thread run. */
    tools: ToolDefinition[];
    /** A list of attached file IDs, ordered by creation date in ascending order. */
    fileIds: string[];
    /** The Unix timestamp, in seconds, representing when this object was created. */
    createdAt: Date;
    /** The Unix timestamp, in seconds, representing when this item expires. */
    expiresAt: Date | null;
    /** The Unix timestamp, in seconds, representing when this item was started. */
    startedAt: Date | null;
    /** The Unix timestamp, in seconds, representing when this completed. */
    completedAt: Date | null;
    /** The Unix timestamp, in seconds, representing when this was cancelled. */
    cancelledAt: Date | null;
    /** The Unix timestamp, in seconds, representing when this failed. */
    failedAt: Date | null;
    /** A set of key/value pairs used to store additional information about the object. */
    metadata?: Record<string, string> | null;
}

/** Alias for ToolCall */
export declare type ToolCall = CodeInterpreterToolCall | RetrievalToolCall | FunctionToolCall;

/** An abstract representation of an input tool definition that an assistant can use. */
export declare type ToolDefinition = CodeInterpreterToolDefinition | RetrievalToolDefinition | FunctionToolDefinition;

/** The data provided during a tool outputs submission to resolve pending tool calls and allow the model to continue. */
export declare interface ToolOutput {
    /** The ID of the tool call being resolved, as provided in the tool calls of a required action from a run. */
    toolCallId?: string;
    /** The output from the tool to be submitted. */
    output?: string;
}

/** The request details to use when modifying an existing assistant. */
export declare interface UpdateAssistantOptions {
    /** The ID of the model to use. */
    model?: string;
    /** The modified name for the assistant to use. */
    name?: string | null;
    /** The modified description for the assistant to use. */
    description?: string | null;
    /** The modified system instructions for the new assistant to use. */
    instructions?: string | null;
    /** The modified collection of tools to enable for the assistant. */
    tools?: ToolDefinition[];
    /** The modified list of previously uploaded fileIDs to attach to the assistant. */
    fileIds?: string[];
    /** A set of up to 16 key/value pairs that can be attached to an object, used for storing additional information about that object in a structured format. Keys may be up to 64 characters in length and values may be up to 512 characters in length. */
    metadata?: Record<string, string> | null;
}

/** The details used to update an assistant. */
export declare interface UpdateAssistantRequestOptions extends OperationOptions {
}

/** The details used to update a message. */
export declare interface UpdateMessageOptions extends OperationOptions {
    /** A set of up to 16 key/value pairs that can be attached to an object, used for storing additional information about that object in a structured format. Keys may be up to 64 characters in length and values may be up to 512 characters in length. */
    metadata?: Record<string, string>;
}

/** The details used to update a run. */
export declare interface UpdateRunOptions extends OperationOptions {
    /** A set of up to 16 key/value pairs that can be attached to an object, used for storing additional information about that object in a structured format. Keys may be up to 64 characters in length and values may be up to 512 characters in length. */
    metadata?: Record<string, string>;
}

/** The details used to update a thread. */
export declare interface UpdateThreadOptions extends OperationOptions {
    /** A set of up to 16 key/value pairs that can be attached to an object, used for storing additional information about that object in a structured format. Keys may be up to 64 characters in length and values may be up to 512 characters in length. */
    metadata?: Record<string, string>;
}

/** The details used to upload files. */
export declare interface UploadFileOptions extends OperationOptions {
    /** The 'content-type' header value, always 'multipart/format-data' for this operation. */
    contentType?: string;
    /** A filename to associate with the uploaded data. */
    filename?: string;
}

export { }
