use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use crate::error::OpenAIError;
use crate::types::InputSource;
#[derive(Debug, Default, Clone, PartialEq)]
pub struct FileInput {
pub source: InputSource,
}
#[derive(Debug, Default, Clone, PartialEq)]
pub enum FilePurpose {
Assistants,
Batch,
#[default]
FineTune,
Vision,
UserData,
Evals,
}
#[derive(Debug, Default, Clone, PartialEq, Deserialize, Serialize)]
pub enum FileExpirationAfterAnchor {
#[default]
#[serde(rename = "created_at")]
CreatedAt,
}
#[derive(Debug, Default, Deserialize, Serialize, Clone, PartialEq)]
pub struct FileExpirationAfter {
pub anchor: FileExpirationAfterAnchor,
pub seconds: u32,
}
#[derive(Debug, Default, Clone, Builder, PartialEq)]
#[builder(name = "CreateFileRequestArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct CreateFileRequest {
pub file: FileInput,
pub purpose: FilePurpose,
pub expires_after: Option<FileExpirationAfter>,
}
#[derive(Debug, Deserialize, Clone, PartialEq, Serialize)]
pub struct ListFilesResponse {
pub object: String,
pub data: Vec<OpenAIFile>,
pub first_id: Option<String>,
pub last_id: Option<String>,
pub has_more: bool,
}
#[derive(Debug, Deserialize, Clone, PartialEq, Serialize)]
pub struct DeleteFileResponse {
pub id: String,
pub object: String,
pub deleted: bool,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub enum OpenAIFilePurpose {
#[serde(rename = "assistants")]
Assistants,
#[serde(rename = "assistants_output")]
AssistantsOutput,
#[serde(rename = "batch")]
Batch,
#[serde(rename = "batch_output")]
BatchOutput,
#[serde(rename = "fine-tune")]
FineTune,
#[serde(rename = "fine-tune-results")]
FineTuneResults,
#[serde(rename = "vision")]
Vision,
#[serde(rename = "user_data")]
UserData,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub struct OpenAIFile {
pub id: String,
pub object: String,
pub bytes: u32,
pub created_at: u64,
pub expires_at: Option<u64>,
pub filename: String,
pub purpose: OpenAIFilePurpose,
#[deprecated]
pub status: Option<String>,
#[deprecated]
pub status_details: Option<String>, }