use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use super::vector_store_file::VectorStoreFileChunkingStrategy;
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct VectorStore {
pub id: String,
pub object: String,
pub created_at: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
pub usage_bytes: u64,
pub file_counts: VectorStoreFileCounts,
pub status: VectorStoreStatus,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_after: Option<VectorStoreExpirationAfter>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_at: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_active_at: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, String>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct VectorStoreFileCounts {
pub in_progress: u32,
pub completed: u32,
pub failed: u32,
pub cancelled: u32,
pub total: u32,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct SearchVectorStoreResults {
pub object: String,
pub search_query: Vec<String>,
pub data: Vec<SearchVectorStoreItem>,
pub has_more: bool,
pub next_page: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct SearchVectorStoreItem {
pub file_id: String,
pub filename: String,
pub score: f32,
pub attributes: Option<HashMap<String, String>>,
pub content: Vec<SearchVectorStoreItemContent>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct SearchVectorStoreItemContent {
r#type: String,
text: String,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum VectorStoreStatus {
InProgress,
Completed,
Expired,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct VectorStoreExpirationAfter {
pub anchor: String,
pub days: u32,
}
#[derive(Serialize, Deserialize, Debug, Default, Builder, Clone, PartialEq)]
#[builder(name = "CreateVectorStoreParametersBuilder")]
#[builder(setter(into, strip_option), default)]
pub struct CreateVectorStoreParameters {
#[serde(skip_serializing_if = "Option::is_none")]
pub file_ids: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_after: Option<VectorStoreExpirationAfter>,
pub chunking_strategy: Option<VectorStoreFileChunkingStrategy>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, String>>,
}
#[derive(Serialize, Deserialize, Debug, Default, Builder, Clone, PartialEq)]
#[builder(name = "SearchVectorStoreParametersBuilder")]
#[builder(setter(into, strip_option), default)]
pub struct SearchVectorStoreParameters {
pub query: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_num_results: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ranking_options: Option<SearchRankingOptions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rewrite_query: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct SearchRankingOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub ranker: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub score_threshold: Option<f32>,
}
#[derive(Serialize, Deserialize, Debug, Default, Builder, Clone, PartialEq)]
#[builder(name = "ModifyVectorStoreParametersBuilder")]
#[builder(setter(into, strip_option), default)]
pub struct ModifyVectorStoreParameters {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_after: Option<VectorStoreExpirationAfter>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, String>>,
}