use serde::{Deserialize, Serialize};
pub use linkrs_core::vector::{Payload, PayloadSchemaType, PayloadSelector, VectorFilter};
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct VectorSearchRequest {
pub collection: String,
pub vector: Vec<f32>,
pub top_k: usize,
#[serde(default)]
pub filter: Option<VectorFilter>,
#[serde(default)]
pub with_payload: Option<bool>,
#[serde(default)]
pub with_vector: Option<bool>,
#[serde(default)]
pub payload_selector: Option<PayloadSelector>,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct VectorSearchResponse {
pub results: Vec<VectorSearchResult>,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct VectorSearchResult {
pub id: String,
pub score: f32,
#[serde(default)]
#[schema(value_type = utoipa::openapi::Object)]
pub payload: Option<Payload>,
#[serde(default)]
pub vector: Option<Vec<f32>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct CreatePayloadIndexRequest {
pub collection: String,
pub field: String,
pub schema_type: PayloadSchemaType,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct DeletePayloadIndexRequest {
pub collection: String,
pub field: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct PayloadIndexInfo {
pub field: String,
pub schema_type: PayloadSchemaType,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct ListPayloadIndexesResponse {
pub collection: String,
pub indexes: Vec<PayloadIndexInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct RebuildVectorIndexRequest {
pub space_id: u64,
pub tag_name: String,
pub field_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct RebuildVectorIndexResponse {
pub rebuild_id: String,
pub status: String,
pub space_id: u64,
pub tag_name: String,
pub field_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct VectorRebuildStatusResponse {
pub rebuild_id: String,
pub status: String,
#[serde(default)]
pub phase: Option<String>,
#[serde(default)]
pub generation: Option<u64>,
#[serde(default)]
pub vectors_scanned: u64,
#[serde(default)]
pub vectors_applied: u64,
#[serde(default)]
pub vectors_skipped: u64,
#[serde(default)]
pub error: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct ClearVectorIndexRequest {
pub space_id: u64,
pub tag_name: String,
pub field_name: String,
pub force: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct ClearVectorIndexResponse {
pub ok: bool,
pub space_id: u64,
pub tag_name: String,
pub field_name: String,
}