use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use crate::v1::resources::shared::LastError;
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct VectorStoreFile {
pub id: String,
pub object: String,
pub created_at: u32,
pub usage_bytes: u64,
pub vector_store_id: String,
pub status: VectorStoreFileStatus,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_error: Option<LastError>,
#[serde(skip_serializing_if = "Option::is_none")]
pub chunking_strategy: Option<VectorStoreFileChunkingStrategy>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum VectorStoreFileStatus {
InProgress,
Completed,
Cancelled,
Failed,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(tag = "type")]
#[serde(rename_all = "snake_case")]
pub enum VectorStoreFileChunkingStrategy {
Auto,
Static {
r#static: VectorStoreFileStaticChunkingStrategy,
},
#[serde(rename = "other")]
Unknown,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct VectorStoreFileStaticChunkingStrategy {
pub max_chunk_size_tokens: u16,
pub chunk_overlap_tokens: u16,
}
#[derive(Serialize, Deserialize, Debug, Default, Builder, Clone, PartialEq)]
#[builder(name = "CreateVectorStoreFileParametersBuilder")]
#[builder(setter(into, strip_option), default)]
pub struct CreateVectorStoreFileParameters {
pub file_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub chunking_strategy: Option<VectorStoreFileChunkingStrategy>,
}