1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6pub type VectorMetadata = BTreeMap<String, Value>;
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
9#[serde(rename_all = "camelCase")]
10pub struct VectorRecord {
11 pub id: String,
12 pub values: Vec<f32>,
13 #[serde(default)]
14 pub metadata: VectorMetadata,
15 pub created_at_ms: u64,
16 pub updated_at_ms: u64,
17}
18
19#[derive(Debug, Clone, Deserialize)]
20#[serde(rename_all = "camelCase")]
21pub struct VectorUpsertRecord {
22 pub id: String,
23 pub values: Vec<f32>,
24 #[serde(default)]
25 pub metadata: VectorMetadata,
26}
27
28#[derive(Debug, Clone, Deserialize)]
29#[serde(rename_all = "camelCase")]
30pub struct VectorUpsertInput {
31 pub records: Vec<VectorUpsertRecord>,
32}
33
34#[derive(Debug, Clone, Serialize)]
35#[serde(rename_all = "camelCase")]
36pub struct VectorUpsertResult {
37 pub upserted: usize,
38}
39
40#[derive(Debug, Clone, Deserialize)]
41#[serde(rename_all = "camelCase")]
42pub struct VectorQueryInput {
43 pub vector: Vec<f32>,
44 pub top_k: Option<usize>,
45 #[serde(default)]
46 pub filter: VectorMetadata,
47 pub min_score: Option<f32>,
48 pub mode: Option<VectorQueryMode>,
49 pub ef_search: Option<usize>,
50 pub candidate_limit: Option<usize>,
51}
52
53#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)]
54#[serde(rename_all = "camelCase")]
55pub enum VectorQueryMode {
56 Exact,
57 Ann,
58}
59
60#[derive(Debug, Clone, Serialize)]
61#[serde(rename_all = "camelCase")]
62pub struct VectorMatch {
63 pub id: String,
64 pub score: f32,
65 #[serde(default)]
66 pub metadata: VectorMetadata,
67}
68
69#[derive(Debug, Clone, Serialize)]
70#[serde(rename_all = "camelCase")]
71pub struct VectorQueryResult {
72 pub matches: Vec<VectorMatch>,
73}
74
75#[derive(Debug, Clone, Deserialize)]
76#[serde(rename_all = "camelCase")]
77pub struct VectorDeleteInput {
78 pub ids: Vec<String>,
79}
80
81#[derive(Debug, Clone, Serialize)]
82#[serde(rename_all = "camelCase")]
83pub struct VectorDeleteResult {
84 pub deleted: usize,
85}
86
87#[derive(Debug, thiserror::Error)]
88pub enum VectorError {
89 #[error("store error: {0}")]
90 Store(#[from] crate::storage::StoreError),
91 #[error("ann error: {0}")]
92 Ann(#[from] feox_ann::AnnError),
93 #[error("json error: {0}")]
94 Json(#[from] serde_json::Error),
95 #[error("invalid vector operation: {0}")]
96 Invalid(String),
97}