use crate::{error::OpenAIError, types::files::FileExpirationAfter};
use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use crate::types::{files::OpenAIFile, InputSource};
#[derive(Clone, Serialize, Default, Debug, Deserialize, Builder, PartialEq)]
#[builder(name = "CreateUploadRequestArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct CreateUploadRequest {
pub filename: String,
pub purpose: UploadPurpose,
pub bytes: u64,
pub mime_type: String,
pub expires_after: Option<FileExpirationAfter>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub enum UploadPurpose {
#[serde(rename = "assistants")]
Assistants,
#[serde(rename = "vision")]
Vision,
#[serde(rename = "batch")]
Batch,
#[default]
#[serde(rename = "fine-tune")]
FineTune,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Upload {
pub id: String,
pub created_at: u64,
pub filename: String,
pub bytes: u64,
pub purpose: UploadPurpose,
pub status: UploadStatus,
pub expires_at: u64,
pub object: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub file: Option<OpenAIFile>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum UploadStatus {
Pending,
Completed,
Cancelled,
Expired,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct UploadPart {
pub id: String,
pub created_at: u64,
pub upload_id: String,
pub object: String,
}
#[derive(Debug, Clone)]
pub struct AddUploadPartRequest {
pub data: InputSource,
}
#[derive(Debug, Serialize)]
pub struct CompleteUploadRequest {
pub part_ids: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub md5: Option<String>,
}