1+ <?php
2+ /**
3+ * Collections
4+ *
5+ * @since Mar 2023
6+ * @author Haydar KULEKCI <haydarkulekci@gmail.com>
7+ */
8+ namespace Qdrant \Tests \Integration \Endpoints ;
9+
10+ use Qdrant \Endpoints \Collections ;
11+ use Qdrant \Models \Request \CollectionConfig \BinaryQuantization ;
12+ use Qdrant \Models \Request \CollectionConfig \DisabledQuantization ;
13+ use Qdrant \Models \Request \CollectionConfig \ProductQuantization ;
14+ use Qdrant \Models \Request \CollectionConfig \ScalarQuantization ;
15+ use Qdrant \Models \Request \CreateCollection ;
16+ use Qdrant \Models \Request \UpdateCollection ;
17+ use Qdrant \Models \Request \VectorParams ;
18+ use Qdrant \Tests \Integration \AbstractIntegration ;
19+
20+ class QuantizationConfigTest extends AbstractIntegration
21+ {
22+ public function testCollectionsProductQuantization (): void
23+ {
24+ $ request = (new CreateCollection ())->setQuantizationConfig (new ProductQuantization ('x4 ' ))
25+ ->addVector (new VectorParams (300 , VectorParams::DISTANCE_COSINE ), 'image ' );
26+
27+ $ collections = new Collections ($ this ->client );
28+ $ collections ->setCollectionName ('sample-collection ' );
29+ $ collections ->create ($ request );
30+ $ collections = new Collections ($ this ->client );
31+ $ response = $ collections ->setCollectionName ('sample-collection ' )->info ();
32+ $ this ->assertEquals ('ok ' , $ response ['status ' ]);
33+
34+ $ this ->assertEquals ([
35+ 'product ' => [
36+ 'compression ' => 'x4 '
37+ ]
38+ ], $ response ['result ' ]['config ' ]['quantization_config ' ]);
39+ }
40+
41+ public function testCollectionsBinaryQuantization (): void
42+ {
43+ $ request = (new CreateCollection ())->setQuantizationConfig (new BinaryQuantization ())
44+ ->addVector (new VectorParams (300 , VectorParams::DISTANCE_COSINE ), 'image ' );
45+
46+ $ collections = new Collections ($ this ->client );
47+ $ collections ->setCollectionName ('sample-collection ' );
48+ $ collections ->create ($ request );
49+ $ collections = new Collections ($ this ->client );
50+ $ response = $ collections ->setCollectionName ('sample-collection ' )->info ();
51+ $ this ->assertEquals ('ok ' , $ response ['status ' ]);
52+ $ this ->assertEquals ([
53+ 'binary ' => []
54+ ], $ response ['result ' ]['config ' ]['quantization_config ' ]);
55+ }
56+
57+ public function testCollectionsScalarQuantization (): void
58+ {
59+ $ request = (new CreateCollection ())->setQuantizationConfig (new ScalarQuantization ('int8 ' ))
60+ ->addVector (new VectorParams (300 , VectorParams::DISTANCE_COSINE ), 'image ' );
61+
62+ $ collections = new Collections ($ this ->client );
63+ $ collections ->setCollectionName ('sample-collection ' );
64+ $ collections ->create ($ request );
65+ $ collections = new Collections ($ this ->client );
66+ $ response = $ collections ->setCollectionName ('sample-collection ' )->info ();
67+ $ this ->assertEquals ('ok ' , $ response ['status ' ]);
68+ $ this ->assertEquals ([
69+ 'scalar ' => [
70+ 'type ' => 'int8 '
71+ ]
72+ ], $ response ['result ' ]['config ' ]['quantization_config ' ]);
73+ }
74+
75+ public function testCollectionsDisabledQuantization (): void
76+ {
77+ $ request = (new CreateCollection ())->setQuantizationConfig (new BinaryQuantization ())
78+ ->addVector (new VectorParams (300 , VectorParams::DISTANCE_COSINE ), 'image ' );
79+
80+ $ collections = new Collections ($ this ->client );
81+ $ collections ->setCollectionName ('sample-collection ' );
82+ $ collections ->create ($ request );
83+
84+ $ response = $ collections ->setCollectionName ('sample-collection ' )->info ();
85+ $ this ->assertEquals ('ok ' , $ response ['status ' ]);
86+ $ this ->assertEquals ([
87+ 'binary ' => []
88+ ], $ response ['result ' ]['config ' ]['quantization_config ' ]);
89+
90+ $ updateRequest = (new UpdateCollection ())->setQuantizationConfig (new DisabledQuantization ());
91+ $ response = $ collections ->update ($ updateRequest );
92+ $ this ->assertEquals ('ok ' , $ response ['status ' ]);
93+
94+ $ response = $ collections ->setCollectionName ('sample-collection ' )->info ();
95+ $ this ->assertEquals ('ok ' , $ response ['status ' ]);
96+ $ this ->assertNull ($ response ['result ' ]['config ' ]['quantization_config ' ]);
97+ }
98+
99+
100+ protected function tearDown (): void
101+ {
102+ parent ::tearDown ();
103+ $ collections = new Collections ($ this ->client );
104+ $ collections ->setCollectionName ('sample-collection ' )->delete ();
105+ }
106+ }
0 commit comments