Skip to content

Commit 97e2274

Browse files
committed
deprecate old vector format for VectorStruct
1 parent f9dab20 commit 97e2274

File tree

3 files changed

+121
-21
lines changed

3 files changed

+121
-21
lines changed

proto/points.proto

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ message InferenceObject {
6666

6767
// Legacy vector format, which determines the vector type by the configuration of its fields.
6868
message Vector {
69-
repeated float data = 1; // Vector data (flatten for multi vectors), deprecated
70-
optional SparseIndices indices = 2; // Sparse indices for sparse vectors, deprecated
71-
optional uint32 vectors_count = 3; // Number of vectors per multi vector, deprecated
69+
repeated float data = 1 [deprecated=true]; // Vector data (flatten for multi vectors), deprecated
70+
optional SparseIndices indices = 2 [deprecated=true]; // Sparse indices for sparse vectors, deprecated
71+
optional uint32 vectors_count = 3 [deprecated=true]; // Number of vectors per multi vector, deprecated
7272
oneof vector {
7373
DenseVector dense = 101; // Dense vector
7474
SparseVector sparse = 102; // Sparse vector

src/qdrant.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3134,12 +3134,15 @@ pub struct InferenceObject {
31343134
#[derive(Clone, PartialEq, ::prost::Message)]
31353135
pub struct Vector {
31363136
/// Vector data (flatten for multi vectors), deprecated
3137-
#[prost(float, repeated, tag = "1")]
3137+
#[deprecated]
3138+
#[prost(float, repeated, packed = "false", tag = "1")]
31383139
pub data: ::prost::alloc::vec::Vec<f32>,
31393140
/// Sparse indices for sparse vectors, deprecated
3141+
#[deprecated]
31403142
#[prost(message, optional, tag = "2")]
31413143
pub indices: ::core::option::Option<SparseIndices>,
31423144
/// Number of vectors per multi vector, deprecated
3145+
#[deprecated]
31433146
#[prost(uint32, optional, tag = "3")]
31443147
pub vectors_count: ::core::option::Option<u32>,
31453148
#[prost(oneof = "vector::Vector", tags = "101, 102, 103, 104, 105, 106")]

src/qdrant_client/builders/vectors.rs

Lines changed: 114 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::qdrant::{
2-
DenseVectorBuilder, MultiDenseVector, NamedVectors, SparseVectorBuilder, Vector,
2+
vector, DenseVectorBuilder, MultiDenseVector, NamedVectors, SparseVectorBuilder, Vector,
33
};
44
use crate::QdrantError;
55

@@ -24,68 +24,164 @@ impl Vector {
2424
MultiDenseVector::from(vectors.into()).into()
2525
}
2626

27+
#[allow(deprecated)]
2728
pub fn try_into_dense(self) -> Result<Vec<f32>, QdrantError> {
28-
if self.indices.is_some() {
29+
let Vector {
30+
data,
31+
indices,
32+
vectors_count,
33+
vector,
34+
} = self;
35+
36+
if let Some(v) = vector {
37+
return match v {
38+
vector::Vector::Dense(dense) => Ok(dense.data),
39+
vector::Vector::Sparse(_) => Err(QdrantError::ConversionError(
40+
"Cannot convert sparse vector to dense".to_string(),
41+
)),
42+
vector::Vector::MultiDense(_) => Err(QdrantError::ConversionError(
43+
"Cannot convert multi-vector to dense".to_string(),
44+
)),
45+
vector::Vector::Document(_) => Err(QdrantError::ConversionError(
46+
"Cannot convert document vector to dense".to_string(),
47+
)),
48+
vector::Vector::Image(_) => Err(QdrantError::ConversionError(
49+
"Cannot convert image vector to dense".to_string(),
50+
)),
51+
vector::Vector::Object(_) => Err(QdrantError::ConversionError(
52+
"Cannot convert object vector to dense".to_string(),
53+
)),
54+
};
55+
}
56+
57+
if indices.is_some() {
2958
return Err(QdrantError::ConversionError(
3059
"Cannot convert sparse vector to dense".to_string(),
3160
));
3261
}
3362

34-
if self.vectors_count.is_some() && self.vectors_count.unwrap() > 1 {
63+
if vectors_count.is_some() && vectors_count.unwrap() > 1 {
3564
return Err(QdrantError::ConversionError(
3665
"Cannot convert multi vector to dense".to_string(),
3766
));
3867
}
3968

40-
Ok(self.data)
69+
Ok(data)
4170
}
4271

72+
#[allow(deprecated)]
4373
pub fn try_into_sparse(self) -> Result<(Vec<u32>, Vec<f32>), QdrantError> {
44-
if self.indices.is_none() {
74+
let Vector {
75+
data,
76+
indices,
77+
vectors_count,
78+
vector,
79+
} = self;
80+
81+
if let Some(v) = vector {
82+
return match v {
83+
vector::Vector::Dense(_) => Err(QdrantError::ConversionError(
84+
"Cannot convert dense vector to sparse".to_string(),
85+
)),
86+
vector::Vector::Sparse(sparse) => Ok((sparse.indices, sparse.values)),
87+
vector::Vector::MultiDense(_) => Err(QdrantError::ConversionError(
88+
"Cannot convert multi-vector to sparse".to_string(),
89+
)),
90+
vector::Vector::Document(_) => Err(QdrantError::ConversionError(
91+
"Cannot convert document vector to sparse".to_string(),
92+
)),
93+
vector::Vector::Image(_) => Err(QdrantError::ConversionError(
94+
"Cannot convert image vector to sparse".to_string(),
95+
)),
96+
vector::Vector::Object(_) => Err(QdrantError::ConversionError(
97+
"Cannot convert object vector to sparse".to_string(),
98+
)),
99+
};
100+
}
101+
102+
if indices.is_none() {
45103
return Err(QdrantError::ConversionError(
46104
"Cannot convert dense vector to sparse".to_string(),
47105
));
48106
}
49107

50-
if self.vectors_count.is_some() && self.vectors_count.unwrap() > 1 {
108+
if vectors_count.is_some() && vectors_count.unwrap() > 1 {
51109
return Err(QdrantError::ConversionError(
52110
"Cannot convert multi vector to sparse".to_string(),
53111
));
54112
}
55113

56-
let indices = self.indices.unwrap().data;
114+
let indices = indices.unwrap().data;
57115

58-
if indices.len() != self.data.len() {
116+
if indices.len() != data.len() {
59117
return Err(QdrantError::ConversionError(format!(
60118
"Malformed sparse vector: indices length {} is not equal to data length {}",
61119
indices.len(),
62-
self.data.len()
120+
data.len()
63121
)));
64122
}
65123

66-
Ok((indices, self.data))
124+
Ok((indices, data))
67125
}
68126

127+
#[allow(deprecated)]
69128
pub fn try_into_multi(self) -> Result<Vec<Vec<f32>>, QdrantError> {
70-
if self.vectors_count.is_none() {
129+
let Vector {
130+
data,
131+
indices,
132+
vectors_count,
133+
vector,
134+
} = self;
135+
136+
if let Some(v) = vector {
137+
return match v {
138+
vector::Vector::Dense(_) => Err(QdrantError::ConversionError(
139+
"Cannot convert dense vector to multi-vector".to_string(),
140+
)),
141+
vector::Vector::Sparse(_) => Err(QdrantError::ConversionError(
142+
"Cannot convert sparse vector to multi-vector".to_string(),
143+
)),
144+
vector::Vector::MultiDense(multivec) => Ok(multivec
145+
.vectors
146+
.into_iter()
147+
.map(|v| v.data)
148+
.collect::<Vec<_>>()),
149+
vector::Vector::Document(_) => Err(QdrantError::ConversionError(
150+
"Cannot convert document vector to multi-vector".to_string(),
151+
)),
152+
vector::Vector::Image(_) => Err(QdrantError::ConversionError(
153+
"Cannot convert image vector to multi-vector".to_string(),
154+
)),
155+
vector::Vector::Object(_) => Err(QdrantError::ConversionError(
156+
"Cannot convert object vector to multi-vector".to_string(),
157+
)),
158+
};
159+
}
160+
161+
if vectors_count.is_none() {
71162
return Err(QdrantError::ConversionError(
72163
"Cannot convert single vector to multi".to_string(),
73164
));
74165
}
75166

76-
let vectors_count = self.vectors_count.unwrap();
167+
if indices.is_some() {
168+
return Err(QdrantError::ConversionError(
169+
"Cannot convert sparse vector to multi-vector".to_string(),
170+
));
171+
}
172+
173+
let vectors_count = vectors_count.unwrap();
77174

78-
if self.data.len() % vectors_count as usize != 0 {
175+
if data.len() % vectors_count as usize != 0 {
79176
return Err(QdrantError::ConversionError(format!(
80177
"Malformed multi vector: data length {} is not divisible by vectors count {}",
81-
self.data.len(),
178+
data.len(),
82179
vectors_count
83180
)));
84181
}
85182

86-
Ok(self
87-
.data
88-
.chunks(self.data.len() / self.vectors_count.unwrap() as usize)
183+
Ok(data
184+
.chunks(data.len() / vectors_count as usize)
89185
.map(|v| v.to_vec())
90186
.collect())
91187
}
@@ -99,6 +195,7 @@ impl NamedVectors {
99195
}
100196

101197
impl From<crate::qdrant::vector::Vector> for Vector {
198+
#[allow(deprecated)]
102199
fn from(vector: crate::qdrant::vector::Vector) -> Self {
103200
Vector {
104201
vector: Some(vector),

0 commit comments

Comments
 (0)