Skip to content

Commit c3f37f8

Browse files
committed
update collection parameter bug fix
1 parent 191dbba commit c3f37f8

4 files changed

Lines changed: 172 additions & 35 deletions

File tree

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
/**
3+
* CollectionParams
4+
*
5+
* @since Mar 2023
6+
* @author Haydar KULEKCI <haydarkulekci@gmail.com>
7+
*/
8+
9+
namespace Qdrant\Models\Request\CollectionConfig;
10+
11+
use Qdrant\Models\Request\RequestModel;
12+
13+
class CollectionParams implements RequestModel
14+
{
15+
protected ?int $replicationFactor;
16+
protected ?int $writeConsistencyFactor;
17+
protected ?int $readFanOutFactor;
18+
protected ?bool $onDiskPayload;
19+
20+
public function setReplicationFactor(?int $replicationFactor): CollectionParams
21+
{
22+
$this->replicationFactor = $replicationFactor;
23+
24+
return $this;
25+
}
26+
27+
public function setWriteConsistencyFactor(?int $writeConsistencyFactor): CollectionParams
28+
{
29+
$this->writeConsistencyFactor = $writeConsistencyFactor;
30+
31+
return $this;
32+
}
33+
34+
public function setReadFanOutFactor(?int $readFanOutFactor): CollectionParams
35+
{
36+
$this->readFanOutFactor = $readFanOutFactor;
37+
38+
return $this;
39+
}
40+
41+
public function setOnDiskPayload(?bool $onDiskPayload): CollectionParams
42+
{
43+
$this->onDiskPayload = $onDiskPayload;
44+
45+
return $this;
46+
}
47+
48+
public function toArray(): array
49+
{
50+
return array_filter([
51+
'replication_factor' => $this->replicationFactor ?? null,
52+
'write_consistency_factor' => $this->writeConsistencyFactor ?? null,
53+
'read_fan_out_factor' => $this->readFanOutFactor ?? null,
54+
'on_disk_payload' => $this->onDiskPayload ?? null,
55+
]);
56+
}
57+
}

src/Models/Request/CollectionParamsDiff.php

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/Models/Request/UpdateCollection.php

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,19 @@
88

99
namespace Qdrant\Models\Request;
1010

11+
use Qdrant\Models\Request\CollectionConfig\CollectionParams;
1112
use Qdrant\Models\Request\CollectionConfig\DisabledQuantization;
13+
use Qdrant\Models\Request\CollectionConfig\HnswConfig;
1214
use Qdrant\Models\Request\CollectionConfig\OptimizersConfig;
1315
use Qdrant\Models\Request\CollectionConfig\QuantizationConfig;
1416

1517
class UpdateCollection implements RequestModel
1618
{
1719
protected ?OptimizersConfig $optimizersConfig = null;
1820

19-
protected ?CollectionParamsDiff $collectionParamsDiff = null;
21+
protected ?HnswConfig $hnswConfig = null;
22+
23+
protected ?CollectionParams $collectionParams = null;
2024

2125
protected ?QuantizationConfig $quantizationConfig = null;
2226

@@ -27,9 +31,16 @@ public function setOptimizersConfig(OptimizersConfig $optimizersConfig): UpdateC
2731
return $this;
2832
}
2933

30-
public function addCollectionParamsDiff(CollectionParamsDiff $collectionParamsDiff): UpdateCollection
34+
public function setHnswConfig(HnswConfig $hnswConfig): UpdateCollection
3135
{
32-
$this->collectionParamsDiff = $collectionParamsDiff;
36+
$this->hnswConfig = $hnswConfig;
37+
38+
return $this;
39+
}
40+
41+
public function setCollectionParams(CollectionParams $collectionParams): UpdateCollection
42+
{
43+
$this->collectionParams = $collectionParams;
3344

3445
return $this;
3546
}
@@ -47,8 +58,11 @@ public function toArray(): array
4758
if ($this->optimizersConfig) {
4859
$data['optimizers_config'] = $this->optimizersConfig->toArray();
4960
}
50-
if ($this->collectionParamsDiff) {
51-
$data['collection_params_diff'] = $this->collectionParamsDiff->toArray();
61+
if ($this->hnswConfig) {
62+
$data['hnsw_config'] = $this->hnswConfig->toArray();
63+
}
64+
if ($this->collectionParams) {
65+
$data['params'] = $this->collectionParams->toArray();
5266
}
5367

5468
if ($this->quantizationConfig instanceof DisabledQuantization) {
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
<?php
2+
/**
3+
* @since Mar 2023
4+
* @author Haydar KULEKCI <haydarkulekci@gmail.com>
5+
*/
6+
namespace Qdrant\Tests\Unit\Models\Request;
7+
8+
use PHPUnit\Framework\TestCase;
9+
use Qdrant\Models\Request\CollectionConfig\BinaryQuantization;
10+
use Qdrant\Models\Request\CollectionConfig\CollectionParams;
11+
use Qdrant\Models\Request\CollectionConfig\HnswConfig;
12+
use Qdrant\Models\Request\CollectionConfig\OptimizersConfig;
13+
use Qdrant\Models\Request\CollectionConfig\WalConfig;
14+
use Qdrant\Models\Request\CreateCollection;
15+
use Qdrant\Models\Request\UpdateCollection;
16+
use Qdrant\Models\Request\VectorParams;
17+
18+
class UpdateCollectionTest extends TestCase
19+
{
20+
public function testUpdateCollectionWithVector(): void
21+
{
22+
$collection = new UpdateCollection();
23+
$this->assertEquals([], $collection->toArray());
24+
}
25+
26+
public function testUpdateCollectionWithOptimizersConfig(): void
27+
{
28+
$collection = new UpdateCollection();
29+
$collection->setOptimizersConfig(
30+
(new OptimizersConfig())->setVacuumMinVectorNumber(1)
31+
->setDeletedThreshold(1.0)
32+
);
33+
34+
$this->assertEquals(
35+
[
36+
'optimizers_config' => [
37+
'deleted_threshold' => 1.0,
38+
'vacuum_min_vector_number' => 1
39+
]
40+
],
41+
$collection->toArray()
42+
);
43+
}
44+
45+
public function testUpdateCollectionWithHnswConfig(): void
46+
{
47+
$collection = new UpdateCollection();
48+
$collection->setHnswConfig((new HnswConfig())->setM(1)->setEfConstruct(5));
49+
50+
$this->assertEquals(
51+
[
52+
'hnsw_config' => [
53+
'm' => 1,
54+
'ef_construct' => 5
55+
],
56+
],
57+
$collection->toArray()
58+
);
59+
}
60+
61+
public function testUpdateCollectionWithQuantizationConfig(): void
62+
{
63+
$collection = new UpdateCollection();
64+
$collection->setQuantizationConfig(
65+
(new BinaryQuantization(true))
66+
);
67+
68+
$this->assertEquals(
69+
[
70+
'quantization_config' => [
71+
'binary' => [
72+
'always_ram' => true
73+
],
74+
],
75+
],
76+
$collection->toArray()
77+
);
78+
}
79+
80+
public function testUpdateCollectionWithCollectionParams(): void
81+
{
82+
$collection = new UpdateCollection();
83+
$collection->setCollectionParams(
84+
(new CollectionParams())->setReplicationFactor(1)
85+
);
86+
87+
$this->assertEquals(
88+
[
89+
'params' => [
90+
'replication_factor' => 1
91+
],
92+
],
93+
$collection->toArray()
94+
);
95+
}
96+
}

0 commit comments

Comments
 (0)