use serde::{Deserialize, Serialize};
pub use velesdb_core::api_types::{
default_metric, default_storage_mode, default_top_k, default_vector_weight,
};
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateCollectionRequest {
pub name: String,
pub dimension: usize,
#[serde(default = "default_metric")]
pub metric: String,
#[serde(default = "default_storage_mode")]
pub storage_mode: String,
#[serde(default)]
pub hnsw_m: Option<usize>,
#[serde(default)]
pub hnsw_ef_construction: Option<usize>,
#[serde(default)]
pub hnsw_alpha: Option<f32>,
#[serde(default)]
pub hnsw_max_elements: Option<usize>,
#[serde(default)]
pub pq_rescore_oversampling: Option<u32>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateMetadataCollectionRequest {
pub name: String,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateGraphCollectionRequest {
pub name: String,
#[serde(default)]
pub dimension: Option<usize>,
#[serde(default = "default_metric")]
pub metric: String,
#[serde(default)]
pub graph_schema: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct MetadataPointInput {
pub id: u64,
pub payload: serde_json::Value,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UpsertMetadataRequest {
pub collection: String,
pub points: Vec<MetadataPointInput>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PointInput {
pub id: u64,
pub vector: Vec<f32>,
pub payload: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UpsertRequest {
pub collection: String,
pub points: Vec<PointInput>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetPointsRequest {
pub collection: String,
pub ids: Vec<u64>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DeletePointsRequest {
pub collection: String,
pub ids: Vec<u64>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SearchRequest {
pub collection: String,
pub vector: Vec<f32>,
#[serde(default = "default_top_k")]
pub top_k: usize,
#[serde(default)]
pub filter: Option<serde_json::Value>,
#[serde(default)]
pub quality: Option<String>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct IndividualSearchRequest {
pub vector: Vec<f32>,
#[serde(default = "default_top_k")]
pub top_k: usize,
#[serde(default)]
pub filter: Option<serde_json::Value>,
#[serde(default)]
pub quality: Option<String>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BatchSearchRequest {
pub collection: String,
pub searches: Vec<IndividualSearchRequest>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TextSearchRequest {
pub collection: String,
pub query: String,
#[serde(default = "default_top_k")]
pub top_k: usize,
#[serde(default)]
pub filter: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HybridSearchRequest {
pub collection: String,
pub vector: Vec<f32>,
pub query: String,
#[serde(default = "default_top_k")]
pub top_k: usize,
#[serde(default = "default_vector_weight")]
pub vector_weight: f32,
#[serde(default)]
pub filter: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct QueryRequest {
pub query: String,
#[serde(default)]
pub params: std::collections::HashMap<String, serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct MultiQuerySearchRequest {
pub collection: String,
pub vectors: Vec<Vec<f32>>,
#[serde(default = "default_top_k")]
pub top_k: usize,
#[serde(default = "default_fusion")]
pub fusion: String,
#[serde(default)]
pub fusion_params: Option<serde_json::Value>,
#[serde(default)]
pub filter: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SparseSearchRequest {
pub collection: String,
pub sparse_vector: std::collections::HashMap<String, f32>,
#[serde(default = "default_top_k")]
pub top_k: usize,
#[serde(default)]
pub index_name: Option<String>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HybridSparseSearchRequest {
pub collection: String,
pub vector: Vec<f32>,
pub sparse_vector: std::collections::HashMap<String, f32>,
#[serde(default = "default_top_k")]
pub top_k: usize,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SparsePointInput {
pub id: u64,
pub vector: Vec<f32>,
pub payload: Option<serde_json::Value>,
#[serde(default)]
pub sparse_vector: Option<std::collections::HashMap<String, f32>>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SparseUpsertRequest {
pub collection: String,
pub points: Vec<SparsePointInput>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TrainPqRequest {
pub collection: String,
#[serde(default)]
pub m: Option<usize>,
#[serde(default)]
pub k: Option<usize>,
#[serde(default)]
pub opq: Option<bool>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StreamInsertRequest {
pub collection: String,
pub points: Vec<PointInput>,
}
pub type SearchResult = velesdb_core::api_types::SearchResultResponse;
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CollectionInfo {
pub name: String,
pub dimension: usize,
pub metric: String,
pub count: usize,
pub storage_mode: String,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct HybridResult {
pub node_id: u64,
pub vector_score: Option<f32>,
pub graph_score: Option<f32>,
pub fused_score: f32,
pub bindings: Option<serde_json::Value>,
pub column_data: Option<serde_json::Value>,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct QueryResponse {
pub results: Vec<HybridResult>,
pub timing_ms: f64,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PointOutput {
pub id: u64,
pub vector: Vec<f32>,
pub payload: Option<serde_json::Value>,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SearchResponse {
pub results: Vec<SearchResult>,
pub timing_ms: f64,
}
#[must_use]
pub fn default_fusion() -> String {
"rrf".to_string()
}
#[must_use]
pub const fn default_dimension() -> usize {
384
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SemanticStoreRequest {
pub id: u64,
pub content: String,
pub embedding: Vec<f32>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SemanticQueryRequest {
pub embedding: Vec<f32>,
#[serde(default = "default_top_k")]
pub top_k: usize,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SemanticQueryResult {
pub id: u64,
pub score: f32,
pub content: String,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EpisodicRecordRequest {
pub event_id: u64,
pub content: String,
pub timestamp: i64,
pub embedding: Vec<f32>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EpisodicRecentRequest {
#[serde(default = "default_top_k")]
pub limit: usize,
#[serde(default)]
pub since_timestamp: Option<i64>,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct EpisodicResult {
pub id: u64,
pub content: String,
pub timestamp: i64,
}
#[must_use]
pub const fn default_confidence() -> f32 {
1.0
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ProceduralLearnRequest {
pub procedure_id: u64,
pub name: String,
pub steps: Vec<String>,
pub embedding: Vec<f32>,
#[serde(default = "default_confidence")]
pub confidence: f32,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ProceduralRecallRequest {
pub embedding: Vec<f32>,
#[serde(default = "default_top_k")]
pub top_k: usize,
#[serde(default)]
pub min_confidence: f32,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ProceduralMatchResult {
pub id: u64,
pub name: String,
pub steps: Vec<String>,
pub confidence: f32,
pub score: f32,
}
pub use crate::types_graph::*;
#[must_use]
pub const fn default_batch_size() -> usize {
100
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ScrollRequest {
pub collection: String,
#[serde(default)]
pub cursor: Option<u64>,
#[serde(default = "default_batch_size")]
pub batch_size: usize,
#[serde(default)]
pub filter: Option<serde_json::Value>,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ScrollResponse {
pub points: Vec<PointOutput>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_cursor: Option<u64>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateIndexRequest {
pub collection: String,
pub field_name: String,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DropIndexRequest {
pub collection: String,
pub field_name: String,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ListIndexesRequest {
pub collection: String,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct IndexInfoOutput {
pub label: String,
pub property: String,
pub index_type: String,
pub cardinality: usize,
pub memory_bytes: usize,
}