use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum BatchStatus {
Validating,
Failed,
InProgress,
Finalizing,
Completed,
Expired,
Cancelling,
Cancelled,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchRequestCounts {
pub total: u32,
pub completed: u32,
pub failed: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Batch {
pub id: String,
pub object: String,
pub endpoint: String,
pub status: BatchStatus,
pub created_at: i64,
pub completion_window: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_file_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output_file_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error_file_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_counts: Option<BatchRequestCounts>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub in_progress_at: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub completed_at: Option<i64>,
}
#[derive(Debug, Clone, Serialize)]
pub struct CreateBatchParams {
pub model: String,
pub requests: Vec<BatchRequestItem>,
#[serde(skip_serializing_if = "Option::is_none")]
pub completion_window: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, String>>,
}
impl CreateBatchParams {
pub fn new(model: impl Into<String>, requests: Vec<BatchRequestItem>) -> Self {
Self {
model: model.into(),
requests,
completion_window: None,
metadata: None,
}
}
pub fn completion_window(mut self, window: impl Into<String>) -> Self {
self.completion_window = Some(window.into());
self
}
pub fn metadata(mut self, metadata: HashMap<String, String>) -> Self {
self.metadata = Some(metadata);
self
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchRequestItem {
pub custom_id: String,
pub body: serde_json::Value,
}
#[derive(Debug, Clone, Default)]
pub struct ListBatchesOptions {
pub after: Option<String>,
pub limit: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchResultError {
pub code: String,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchResultItem {
pub custom_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub result: Option<super::completion::ChatCompletion>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<BatchResultError>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchResult {
pub results: Vec<BatchResultItem>,
}