Skip to content

Commit 0d6c4fe

Browse files
authored
Merge pull request hkulekci#38 from hkulekci/optimizers-config
optimizersConfig fixes
2 parents e7f47b0 + 58a6deb commit 0d6c4fe

5 files changed

Lines changed: 189 additions & 18 deletions

File tree

src/Models/Request/OptimizersConfigDiff.php renamed to src/Models/Request/CollectionConfig/OptimizersConfigDiff.php

Lines changed: 60 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
* @author Haydar KULEKCI <haydarkulekci@gmail.com>
77
*/
88

9-
namespace Qdrant\Models\Request;
9+
namespace Qdrant\Models\Request\CollectionConfig;
10+
11+
use Qdrant\Models\Request\RequestModel;
1012

1113
class OptimizersConfigDiff implements RequestModel
1214
{
@@ -48,6 +50,63 @@ class OptimizersConfigDiff implements RequestModel
4850
*/
4951
protected ?int $maxOptimizationThreads = null;
5052

53+
54+
public function setDeletedThreshold(?float $deletedThreshold): OptimizersConfigDiff
55+
{
56+
$this->deletedThreshold = $deletedThreshold;
57+
58+
return $this;
59+
}
60+
61+
public function setIndexingThreshold(?int $indexingThreshold): OptimizersConfigDiff
62+
{
63+
$this->indexingThreshold = $indexingThreshold;
64+
65+
return $this;
66+
}
67+
68+
public function setVacuumMinVectorNumber(?int $vacuumMinVectorNumber): OptimizersConfigDiff
69+
{
70+
$this->vacuumMinVectorNumber = $vacuumMinVectorNumber;
71+
72+
return $this;
73+
}
74+
75+
public function setDefaultSegmentNumber(?int $defaultSegmentNumber): OptimizersConfigDiff
76+
{
77+
$this->defaultSegmentNumber = $defaultSegmentNumber;
78+
79+
return $this;
80+
}
81+
82+
public function setMaxSegmentSize(?int $maxSegmentSize): OptimizersConfigDiff
83+
{
84+
$this->maxSegmentSize = $maxSegmentSize;
85+
86+
return $this;
87+
}
88+
89+
public function setMemmapThreshold(?int $memmapThreshold): OptimizersConfigDiff
90+
{
91+
$this->memmapThreshold = $memmapThreshold;
92+
93+
return $this;
94+
}
95+
96+
public function setFlushIntervalSec(?int $flushIntervalSec): OptimizersConfigDiff
97+
{
98+
$this->flushIntervalSec = $flushIntervalSec;
99+
100+
return $this;
101+
}
102+
103+
public function setMaxOptimizationThreads(?int $maxOptimizationThreads): OptimizersConfigDiff
104+
{
105+
$this->maxOptimizationThreads = $maxOptimizationThreads;
106+
107+
return $this;
108+
}
109+
51110
public function toArray(): array
52111
{
53112
$data = [];
@@ -78,18 +137,4 @@ public function toArray(): array
78137

79138
return $data;
80139
}
81-
82-
public function setDeletedThreshold(?float $deletedThreshold): OptimizersConfigDiff
83-
{
84-
$this->deletedThreshold = $deletedThreshold;
85-
86-
return $this;
87-
}
88-
89-
public function setIndexingThreshold(?int $indexingThreshold): OptimizersConfigDiff
90-
{
91-
$this->indexingThreshold = $indexingThreshold;
92-
93-
return $this;
94-
}
95140
}

src/Models/Request/CreateCollection.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
namespace Qdrant\Models\Request;
1010

1111
use Qdrant\Models\Request\CollectionConfig\DisabledQuantization;
12+
use Qdrant\Models\Request\CollectionConfig\OptimizersConfigDiff;
1213
use Qdrant\Models\Request\CollectionConfig\QuantizationConfig;
1314

1415
class CreateCollection implements RequestModel
@@ -26,6 +27,8 @@ class CreateCollection implements RequestModel
2627

2728
protected ?InitFrom $initFrom = null;
2829

30+
protected ?OptimizersConfigDiff $optimizersConfig = null;
31+
2932
protected ?QuantizationConfig $quantizationConfig = null;
3033

3134
public function addVector(VectorParams $vectorParams, string $name = null): CreateCollection
@@ -74,6 +77,13 @@ public function setInitFrom(InitFrom $initFrom): CreateCollection
7477
return $this;
7578
}
7679

80+
public function setOptimizersConfigDiff(OptimizersConfigDiff $optimizersConfig): CreateCollection
81+
{
82+
$this->optimizersConfig = $optimizersConfig;
83+
84+
return $this;
85+
}
86+
7787
public function setQuantizationConfig(QuantizationConfig $quantizationConfig): CreateCollection
7888
{
7989
$this->quantizationConfig = $quantizationConfig;

src/Models/Request/UpdateCollection.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
namespace Qdrant\Models\Request;
1010

1111
use Qdrant\Models\Request\CollectionConfig\DisabledQuantization;
12+
use Qdrant\Models\Request\CollectionConfig\OptimizersConfigDiff;
1213
use Qdrant\Models\Request\CollectionConfig\QuantizationConfig;
1314

1415
class UpdateCollection implements RequestModel
@@ -19,7 +20,7 @@ class UpdateCollection implements RequestModel
1920

2021
protected ?QuantizationConfig $quantizationConfig = null;
2122

22-
public function addOptimizersConfigDiff(OptimizersConfigDiff $optimizersConfig): UpdateCollection
23+
public function setOptimizersConfigDiff(OptimizersConfigDiff $optimizersConfig): UpdateCollection
2324
{
2425
$this->optimizersConfig = $optimizersConfig;
2526

tests/Integration/Endpoints/CollectionsTest.php

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99

1010
use Qdrant\Endpoints\Collections;
1111
use Qdrant\Exception\InvalidArgumentException;
12+
use Qdrant\Models\Request\CollectionConfig\OptimizersConfigDiff;
1213
use Qdrant\Models\Request\CreateCollection;
1314
use Qdrant\Models\Request\InitFrom;
14-
use Qdrant\Models\Request\OptimizersConfigDiff;
1515
use Qdrant\Models\Request\UpdateCollection;
1616
use Qdrant\Models\Request\VectorParams;
1717
use Qdrant\Tests\Integration\AbstractIntegration;
@@ -129,14 +129,36 @@ public function testUpdateCollection(): void
129129
$this->assertEquals('green', $response['result']['status']);
130130

131131
$response = $collections->update(
132-
(new UpdateCollection())->addOptimizersConfigDiff(
132+
(new UpdateCollection())->setOptimizersConfigDiff(
133133
(new OptimizersConfigDiff())
134134
->setIndexingThreshold(10000)
135135
)
136136
);
137137
$this->assertEquals('ok', $response['status']);
138138
}
139139

140+
141+
/**
142+
* @throws InvalidArgumentException
143+
*/
144+
public function testCreateCollectionWithOptimizersConfig(): void
145+
{
146+
$collections = new Collections($this->client);
147+
$collections->setCollectionName('sample-collection');
148+
149+
$request = (new CreateCollection())
150+
->addVector(new VectorParams(300, VectorParams::DISTANCE_COSINE), 'image')
151+
->setOptimizersConfigDiff(
152+
(new OptimizersConfigDiff())->setIndexingThreshold(10000)
153+
);
154+
155+
$response = $collections->create($request);
156+
$this->assertEquals('ok', $response['status']);
157+
158+
$response = $collections->info();
159+
$this->assertEquals('green', $response['result']['status']);
160+
}
161+
140162
/**
141163
* @throws InvalidArgumentException
142164
*/
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<?php
2+
/**
3+
* @since Oct 2023
4+
* @author Haydar KULEKCI <haydarkulekci@gmail.com>
5+
*/
6+
7+
namespace Qdrant\Tests\Unit\Models\Request\CollectionConfig;
8+
9+
use PHPUnit\Framework\TestCase;
10+
use Qdrant\Models\Request\CollectionConfig\BinaryQuantization;
11+
use Qdrant\Models\Request\CollectionConfig\OptimizersConfigDiff;
12+
13+
class OptimizerConfigDiffTest extends TestCase
14+
{
15+
public function testBasic(): void
16+
{
17+
$config = new OptimizersConfigDiff();
18+
19+
$this->assertEquals([], $config->toArray());
20+
}
21+
22+
public function testWithIndexingThreshold(): void
23+
{
24+
$config = (new OptimizersConfigDiff())->setIndexingThreshold(10);
25+
26+
$this->assertEquals([
27+
'indexing_threshold' => 10
28+
], $config->toArray());
29+
}
30+
31+
public function testWithMaxOptimizationThreads(): void
32+
{
33+
$config = (new OptimizersConfigDiff())->setMaxOptimizationThreads(10);
34+
35+
$this->assertEquals([
36+
'max_optimization_threads' => 10
37+
], $config->toArray());
38+
}
39+
40+
public function testWithMaxSegmentSize(): void
41+
{
42+
$config = (new OptimizersConfigDiff())->setMaxSegmentSize(10);
43+
44+
$this->assertEquals([
45+
'max_segment_size' => 10
46+
], $config->toArray());
47+
}
48+
49+
public function testWithDeletedThreshold(): void
50+
{
51+
$config = (new OptimizersConfigDiff())->setDeletedThreshold(9.8);
52+
53+
$this->assertEquals([
54+
'deleted_threshold' => 9.8
55+
], $config->toArray());
56+
}
57+
58+
public function testWithMemmapThreshold(): void
59+
{
60+
$config = (new OptimizersConfigDiff())->setMemmapThreshold(10);
61+
62+
$this->assertEquals([
63+
'memmap_threshold' => 10
64+
], $config->toArray());
65+
}
66+
67+
public function testWithDefaultSegmentNumber(): void
68+
{
69+
$config = (new OptimizersConfigDiff())->setDefaultSegmentNumber(10);
70+
71+
$this->assertEquals([
72+
'default_segment_number' => 10
73+
], $config->toArray());
74+
}
75+
76+
public function testWithFlushIntervalSec(): void
77+
{
78+
$config = (new OptimizersConfigDiff())->setFlushIntervalSec(10);
79+
80+
$this->assertEquals([
81+
'flush_interval_sec' => 10
82+
], $config->toArray());
83+
}
84+
85+
public function testWithVacuumMinVectorNumber(): void
86+
{
87+
$config = (new OptimizersConfigDiff())->setVacuumMinVectorNumber(10);
88+
89+
$this->assertEquals([
90+
'vacuum_min_vector_number' => 10
91+
], $config->toArray());
92+
}
93+
}

0 commit comments

Comments
 (0)