use serde::{Deserialize, Serialize};
pub use velesdb_core::api_types::{
default_metric, default_storage_mode, default_top_k, default_vector_weight,
};
pub use velesdb_core::api_types::SearchResultResponse;
#[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,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateMetadataCollectionRequest {
pub name: String,
}
#[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>,
}
#[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>,
}
#[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>,
}
#[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 SearchResult {
pub id: u64,
pub score: f32,
pub payload: Option<serde_json::Value>,
}
#[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 content: String,
pub embedding: Vec<f32>,
#[serde(default)]
pub context: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EpisodicRecentRequest {
#[serde(default = "default_top_k")]
pub limit: usize,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct EpisodicResult {
pub id: u64,
pub content: String,
pub timestamp: u64,
pub context: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AddEdgeRequest {
pub collection: String,
pub id: u64,
pub source: u64,
pub target: u64,
pub label: String,
#[serde(default)]
pub properties: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetEdgesRequest {
pub collection: String,
pub label: Option<String>,
pub source: Option<u64>,
pub target: Option<u64>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TraverseGraphRequest {
pub collection: String,
pub source: u64,
#[serde(default = "default_max_depth")]
pub max_depth: u32,
pub rel_types: Option<Vec<String>>,
#[serde(default = "default_traverse_limit")]
pub limit: usize,
#[serde(default = "default_algorithm")]
pub algorithm: String,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetNodeDegreeRequest {
pub collection: String,
pub node_id: u64,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct EdgeOutput {
pub id: u64,
pub source: u64,
pub target: u64,
pub label: String,
pub properties: serde_json::Value,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TraversalOutput {
pub target_id: u64,
pub depth: u32,
pub path: Vec<u64>,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct NodeDegreeOutput {
pub node_id: u64,
pub in_degree: usize,
pub out_degree: usize,
}
fn default_max_depth() -> u32 {
3
}
fn default_traverse_limit() -> usize {
100
}
fn default_algorithm() -> String {
"bfs".to_string()
}