use std::path::PathBuf;
use chat_gpt_lib_rs::OpenAIClient;
use chat_gpt_lib_rs::api_resources::files::{
UploadFilePurpose, delete_file, list_files, retrieve_file_content, retrieve_file_metadata,
upload_file,
};
use chat_gpt_lib_rs::error::OpenAIError;
#[tokio::main]
async fn main() -> Result<(), OpenAIError> {
dotenvy::dotenv().ok();
let client = OpenAIClient::new(None)?;
let file_path = PathBuf::from("examples").join("file-abc123.jsonl");
println!("Uploading file '{}'", file_path.display());
let uploaded_file = upload_file(&client, &file_path, UploadFilePurpose::FineTune).await?;
println!("Uploaded File ID: {}", uploaded_file.id);
println!("File purpose: {}", uploaded_file.purpose);
println!("\nListing all files:");
let files_list = list_files(&client).await?;
for f in files_list.data {
println!(" - File: {} (ID: {})", f.filename, f.id);
}
println!("\nRetrieving metadata for the uploaded file...");
let file_meta = retrieve_file_metadata(&client, &uploaded_file.id).await?;
println!(
"File '{}' has status: {:?}",
file_meta.filename, file_meta.status
);
println!("\nDownloading the file content...");
let content_bytes = retrieve_file_content(&client, &uploaded_file.id).await?;
println!("File size (bytes): {}", content_bytes.len());
println!(
"File content (parsed in UTF-8): \n{}",
String::from_utf8(content_bytes).unwrap_or("Non UTF-8 bytes".to_string())
);
println!("\nDeleting the file...");
let delete_response = delete_file(&client, &uploaded_file.id).await?;
println!(
"File '{}' deleted: {}",
delete_response.id, delete_response.deleted
);
Ok(())
}