import { APIResource } from "../../core/resource.js";
import * as FilesAPI from "../files.js";
import * as PartsAPI from "./parts.js";
import { PartCreateParams, Parts, UploadPart } from "./parts.js";
import { APIPromise } from "../../core/api-promise.js";
import { RequestOptions } from "../../internal/request-options.js";
/**
 * Use Uploads to upload large files in multiple parts.
 */
export declare class Uploads extends APIResource {
    parts: PartsAPI.Parts;
    /**
     * Creates an intermediate
     * [Upload](https://developers.openai.com/api/reference/resources/uploads) object
     * that you can add
     * [Parts](https://developers.openai.com/api/reference/resources/uploads/subresources/parts)
     * to. Currently, an Upload can accept at most 8 GB in total and expires after an
     * hour after you create it.
     *
     * Once you complete the Upload, we will create a
     * [File](https://developers.openai.com/api/reference/resources/files) object that
     * contains all the parts you uploaded. This File is usable in the rest of our
     * platform as a regular File object.
     *
     * For certain `purpose` values, the correct `mime_type` must be specified. Please
     * refer to documentation for the
     * [supported MIME types for your use case](https://developers.openai.com/api/docs/guides/tools-file-search#supported-files).
     *
     * For guidance on the proper filename extensions for each purpose, please follow
     * the documentation on
     * [creating a File](https://developers.openai.com/api/reference/resources/files/methods/create).
     *
     * Returns the Upload object with status `pending`.
     */
    create(body: UploadCreateParams, options?: RequestOptions): APIPromise<Upload>;
    /**
     * Cancels the Upload. No Parts may be added after an Upload is cancelled.
     *
     * Returns the Upload object with status `cancelled`.
     */
    cancel(uploadID: string, options?: RequestOptions): APIPromise<Upload>;
    /**
     * Completes the
     * [Upload](https://developers.openai.com/api/reference/resources/uploads).
     *
     * Within the returned Upload object, there is a nested
     * [File](https://developers.openai.com/api/reference/resources/files) object that
     * is ready to use in the rest of the platform.
     *
     * You can specify the order of the Parts by passing in an ordered list of the Part
     * IDs.
     *
     * The number of bytes uploaded upon completion must match the number of bytes
     * initially specified when creating the Upload object. No Parts may be added after
     * an Upload is completed. Returns the Upload object with status `completed`,
     * including an additional `file` property containing the created usable File
     * object.
     */
    complete(uploadID: string, body: UploadCompleteParams, options?: RequestOptions): APIPromise<Upload>;
}
/**
 * The Upload object can accept byte chunks in the form of Parts.
 */
export interface Upload {
    /**
     * The Upload unique identifier, which can be referenced in API endpoints.
     */
    id: string;
    /**
     * The intended number of bytes to be uploaded.
     */
    bytes: number;
    /**
     * The Unix timestamp (in seconds) for when the Upload was created.
     */
    created_at: number;
    /**
     * The Unix timestamp (in seconds) for when the Upload will expire.
     */
    expires_at: number;
    /**
     * The name of the file to be uploaded.
     */
    filename: string;
    /**
     * The object type, which is always "upload".
     */
    object: 'upload';
    /**
     * The intended purpose of the file.
     * [Please refer here](https://developers.openai.com/api/reference/resources/files#%28resource%29%20files%20%3E%20%28model%29%20file_object%20%3E%20%28schema%29%20%3E%20%28property%29%20purpose)
     * for acceptable values.
     */
    purpose: string;
    /**
     * The status of the Upload.
     */
    status: 'pending' | 'completed' | 'cancelled' | 'expired';
    /**
     * The `File` object represents a document that has been uploaded to OpenAI.
     */
    file?: FilesAPI.FileObject | null;
}
export interface UploadCreateParams {
    /**
     * The number of bytes in the file you are uploading.
     */
    bytes: number;
    /**
     * The name of the file to upload.
     */
    filename: string;
    /**
     * The MIME type of the file.
     *
     * This must fall within the supported MIME types for your file purpose. See the
     * supported MIME types for assistants and vision.
     */
    mime_type: string;
    /**
     * The intended purpose of the uploaded file.
     *
     * See the
     * [documentation on File purposes](https://developers.openai.com/api/reference/resources/files/methods/create#%28resource%29%20files%20%3E%20%28method%29%20create%20%3E%20%28params%29%200%20%3E%20%28param%29%20purpose%20%3E%20%28schema%29).
     */
    purpose: FilesAPI.FilePurpose;
    /**
     * The expiration policy for a file. By default, files with `purpose=batch` expire
     * after 30 days and all other files are persisted until they are manually deleted.
     */
    expires_after?: UploadCreateParams.ExpiresAfter;
}
export declare namespace UploadCreateParams {
    /**
     * The expiration policy for a file. By default, files with `purpose=batch` expire
     * after 30 days and all other files are persisted until they are manually deleted.
     */
    interface ExpiresAfter {
        /**
         * Anchor timestamp after which the expiration policy applies. Supported anchors:
         * `created_at`.
         */
        anchor: 'created_at';
        /**
         * The number of seconds after the anchor time that the file will expire. Must be
         * between 3600 (1 hour) and 2592000 (30 days).
         */
        seconds: number;
    }
}
export interface UploadCompleteParams {
    /**
     * The ordered list of Part IDs.
     */
    part_ids: Array<string>;
    /**
     * The optional md5 checksum for the file contents to verify if the bytes uploaded
     * matches what you expect.
     */
    md5?: string;
}
export declare namespace Uploads {
    export { type Upload as Upload, type UploadCreateParams as UploadCreateParams, type UploadCompleteParams as UploadCompleteParams, };
    export { Parts as Parts, type UploadPart as UploadPart, type PartCreateParams as PartCreateParams };
}
//# sourceMappingURL=uploads.d.ts.map