use serde::{Deserialize, Serialize}; use crate::v1::constants; // ----------------------------------------------------------------------------- // Request #[derive(Debug, Serialize, Deserialize)] pub struct FineTuningJobRequest { pub model: constants::Model, pub training_files: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub validation_files: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub hyperparameters: Option, #[serde(skip_serializing_if = "Option::is_none")] pub suffix: Option, #[serde(skip_serializing_if = "Option::is_none")] pub auto_start: Option, #[serde(skip_serializing_if = "Option::is_none")] pub job_type: Option, #[serde(skip_serializing_if = "Option::is_none")] pub integrations: Option>, } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct TrainingFile { pub file_id: String, #[serde(skip_serializing_if = "Option::is_none")] pub weight: Option, } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Hyperparameters { #[serde(skip_serializing_if = "Option::is_none")] pub learning_rate: Option, #[serde(skip_serializing_if = "Option::is_none")] pub training_steps: Option, #[serde(skip_serializing_if = "Option::is_none")] pub warmup_fraction: Option, #[serde(skip_serializing_if = "Option::is_none")] pub epochs: Option, } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Integration { pub r#type: String, pub project: String, #[serde(skip_serializing_if = "Option::is_none")] pub name: Option, #[serde(skip_serializing_if = "Option::is_none")] pub api_key: Option, } // ----------------------------------------------------------------------------- // Response #[derive(Clone, Debug, Deserialize, Serialize)] pub struct FineTuningJobResponse { pub id: String, pub object: String, pub model: constants::Model, pub status: FineTuningJobStatus, pub created_at: u64, #[serde(skip_serializing_if = "Option::is_none")] pub modified_at: Option, pub training_files: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub validation_files: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub hyperparameters: Option, #[serde(skip_serializing_if = "Option::is_none")] pub fine_tuned_model: Option, #[serde(skip_serializing_if = "Option::is_none")] pub suffix: Option, #[serde(skip_serializing_if = "Option::is_none")] pub integrations: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub trained_tokens: Option, } #[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)] #[serde(rename_all = "SCREAMING_SNAKE_CASE")] pub enum FineTuningJobStatus { Queued, Running, Success, Failed, TimeoutExceeded, CancellationRequested, Cancelled, } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct FineTuningJobListResponse { pub data: Vec, pub object: String, #[serde(default)] pub total: u32, }