1use serde::{Deserialize, Serialize};
9
10pub use linkrs_core::vector::{Payload, PayloadSchemaType, PayloadSelector, VectorFilter};
11
12#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
14pub struct VectorSearchRequest {
15 pub collection: String,
16 pub vector: Vec<f32>,
17 pub top_k: usize,
18 #[serde(default)]
19 pub filter: Option<VectorFilter>,
20 #[serde(default)]
21 pub with_payload: Option<bool>,
22 #[serde(default)]
23 pub with_vector: Option<bool>,
24 #[serde(default)]
26 pub payload_selector: Option<PayloadSelector>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
31pub struct VectorSearchResponse {
32 pub results: Vec<VectorSearchResult>,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
37pub struct VectorSearchResult {
38 pub id: String,
39 pub score: f32,
41 #[serde(default)]
42 #[schema(value_type = utoipa::openapi::Object)]
43 pub payload: Option<Payload>,
44 #[serde(default)]
45 pub vector: Option<Vec<f32>>,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
50pub struct CreatePayloadIndexRequest {
51 pub collection: String,
52 pub field: String,
53 pub schema_type: PayloadSchemaType,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
58pub struct DeletePayloadIndexRequest {
59 pub collection: String,
60 pub field: String,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
65pub struct PayloadIndexInfo {
66 pub field: String,
67 pub schema_type: PayloadSchemaType,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
72pub struct ListPayloadIndexesResponse {
73 pub collection: String,
74 pub indexes: Vec<PayloadIndexInfo>,
75}
76
77#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
82pub struct RebuildVectorIndexRequest {
83 pub space_id: u64,
85 pub tag_name: String,
87 pub field_name: String,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
93pub struct RebuildVectorIndexResponse {
94 pub rebuild_id: String,
96 pub status: String,
98 pub space_id: u64,
100 pub tag_name: String,
102 pub field_name: String,
104}
105
106#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
108pub struct VectorRebuildStatusResponse {
109 pub rebuild_id: String,
111 pub status: String,
113 #[serde(default)]
115 pub phase: Option<String>,
116 #[serde(default)]
118 pub generation: Option<u64>,
119 #[serde(default)]
121 pub vectors_scanned: u64,
122 #[serde(default)]
124 pub vectors_applied: u64,
125 #[serde(default)]
127 pub vectors_skipped: u64,
128 #[serde(default)]
130 pub error: Option<String>,
131}
132
133#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
138pub struct ClearVectorIndexRequest {
139 pub space_id: u64,
141 pub tag_name: String,
143 pub field_name: String,
145 pub force: bool,
147}
148
149#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
151pub struct ClearVectorIndexResponse {
152 pub ok: bool,
154 pub space_id: u64,
156 pub tag_name: String,
158 pub field_name: String,
160}