Skip to content

Commit b063d4b

Browse files
committed
Add get/update methods for chat settings
1 parent f87bde4 commit b063d4b

File tree

2 files changed

+160
-1
lines changed

2 files changed

+160
-1
lines changed

src/Endpoints/Delegates/HandlesSettings.php

Lines changed: 96 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,18 +418,27 @@ public function resetSearchCutoffMs(): array
418418
return $this->http->delete(self::PATH.'/'.$this->uid.'/settings/search-cutoff-ms');
419419
}
420420

421-
// Settings - Experimental: Embedders (hybrid search)
421+
// Settings - Embedders
422422

423+
/**
424+
* @since Meilisearch v1.13.0
425+
*/
423426
public function getEmbedders(): ?array
424427
{
425428
return $this->http->get(self::PATH.'/'.$this->uid.'/settings/embedders');
426429
}
427430

431+
/**
432+
* @since Meilisearch v1.13.0
433+
*/
428434
public function updateEmbedders(array $embedders): array
429435
{
430436
return $this->http->patch(self::PATH.'/'.$this->uid.'/settings/embedders', $embedders);
431437
}
432438

439+
/**
440+
* @since Meilisearch v1.13.0
441+
*/
433442
public function resetEmbedders(): array
434443
{
435444
return $this->http->delete(self::PATH.'/'.$this->uid.'/settings/embedders');
@@ -490,4 +499,90 @@ public function resetPrefixSearch(): array
490499
{
491500
return $this->http->delete(self::PATH.'/'.$this->uid.'/settings/prefix-search');
492501
}
502+
503+
// Settings - Chat
504+
505+
/**
506+
* @since Meilisearch v1.15.1
507+
* @return array{
508+
* description: string,
509+
* documentTemplate: string,
510+
* documentTemplateMaxBytes: int,
511+
* searchParameters: array{
512+
* indexUid?: non-empty-string,
513+
* q?: string,
514+
* filter?: list<non-empty-string|list<non-empty-string>>,
515+
* locales?: list<non-empty-string>,
516+
* attributesToRetrieve?: list<non-empty-string>,
517+
* attributesToCrop?: list<non-empty-string>,
518+
* cropLength?: positive-int,
519+
* attributesToHighlight?: list<non-empty-string>,
520+
* cropMarker?: string,
521+
* highlightPreTag?: string,
522+
* highlightPostTag?: string,
523+
* facets?: list<non-empty-string>,
524+
* showMatchesPosition?: bool,
525+
* sort?: list<non-empty-string>,
526+
* matchingStrategy?: 'last'|'all'|'frequency',
527+
* offset?: non-negative-int,
528+
* limit?: non-negative-int,
529+
* hitsPerPage?: non-negative-int,
530+
* page?: non-negative-int,
531+
* vector?: non-empty-list<float|non-empty-list<float>>,
532+
* hybrid?: array<mixed>,
533+
* attributesToSearchOn?: non-empty-list<non-empty-string>,
534+
* showRankingScore?: bool,
535+
* showRankingScoreDetails?: bool,
536+
* rankingScoreThreshold?: float,
537+
* distinct?: non-empty-string,
538+
* federationOptions?: array<mixed>
539+
* }
540+
* }
541+
*/
542+
public function getChat(): array
543+
{
544+
return $this->http->get(self::PATH.'/'.$this->uid.'/settings/chat');
545+
}
546+
547+
/**
548+
* @since Meilisearch v1.15.1
549+
* @param array{
550+
* description: string,
551+
* documentTemplate: string,
552+
* documentTemplateMaxBytes: int,
553+
* searchParameters: array{
554+
* indexUid?: non-empty-string,
555+
* q?: string,
556+
* filter?: list<non-empty-string|list<non-empty-string>>,
557+
* locales?: list<non-empty-string>,
558+
* attributesToRetrieve?: list<non-empty-string>,
559+
* attributesToCrop?: list<non-empty-string>,
560+
* cropLength?: positive-int,
561+
* attributesToHighlight?: list<non-empty-string>,
562+
* cropMarker?: string,
563+
* highlightPreTag?: string,
564+
* highlightPostTag?: string,
565+
* facets?: list<non-empty-string>,
566+
* showMatchesPosition?: bool,
567+
* sort?: list<non-empty-string>,
568+
* matchingStrategy?: 'last'|'all'|'frequency',
569+
* offset?: non-negative-int,
570+
* limit?: non-negative-int,
571+
* hitsPerPage?: non-negative-int,
572+
* page?: non-negative-int,
573+
* vector?: non-empty-list<float|non-empty-list<float>>,
574+
* hybrid?: array<mixed>,
575+
* attributesToSearchOn?: non-empty-list<non-empty-string>,
576+
* showRankingScore?: bool,
577+
* showRankingScoreDetails?: bool,
578+
* rankingScoreThreshold?: float,
579+
* distinct?: non-empty-string,
580+
* federationOptions?: array<mixed>
581+
* }
582+
* } $chatSettings
583+
*/
584+
public function updateChat(array $chatSettings): array
585+
{
586+
return $this->http->patch(self::PATH.'/'.$this->uid.'/settings/chat', $chatSettings);
587+
}
493588
}

tests/Settings/ChatTest.php

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tests\Settings;
6+
7+
use Meilisearch\Endpoints\Indexes;
8+
use Meilisearch\Http\Client;
9+
use Tests\TestCase;
10+
11+
final class ChatTest extends TestCase
12+
{
13+
private Indexes $index;
14+
15+
private const DEFAULT_CHAT_SETTINGS = [
16+
'description' => '',
17+
'documentTemplate' => '{% for field in fields %}{% if field.is_searchable and field.value != nil %}{{ field.name }}: {{ field.value }}
18+
{% endif %}{% endfor %}',
19+
'documentTemplateMaxBytes' => 400,
20+
'searchParameters' => []
21+
];
22+
23+
protected function setUp(): void
24+
{
25+
parent::setUp();
26+
27+
$http = new Client($this->host, getenv('MEILISEARCH_API_KEY'));
28+
$http->patch('/experimental-features', ['chatCompletions' => true]);
29+
30+
$this->index = $this->createEmptyIndex($this->safeIndexName());
31+
}
32+
33+
public function testGetChatDefaultSettings(): void
34+
{
35+
$settings = $this->index->getChat();
36+
self::assertSame(self::DEFAULT_CHAT_SETTINGS['description'], $settings['description']);
37+
self::assertSame(self::DEFAULT_CHAT_SETTINGS['documentTemplate'], $settings['documentTemplate']);
38+
self::assertSame(self::DEFAULT_CHAT_SETTINGS['documentTemplateMaxBytes'], $settings['documentTemplateMaxBytes']);
39+
self::assertSame(self::DEFAULT_CHAT_SETTINGS['searchParameters'], $settings['searchParameters']);
40+
}
41+
42+
public function testUpdateChatSettings(): void
43+
{
44+
$newSettings = [
45+
'description' => 'New description',
46+
'documentTemplate' => 'New document template',
47+
'documentTemplateMaxBytes' => 500,
48+
'searchParameters' => [
49+
'limit' => 10,
50+
],
51+
];
52+
53+
$promise = $this->index->updateChat($newSettings);
54+
55+
$this->assertIsValidPromise($promise);
56+
$this->index->waitForTask($promise['taskUid']);
57+
58+
$settings = $this->index->getChat();
59+
self::assertSame($newSettings['description'], $settings['description']);
60+
self::assertSame($newSettings['documentTemplate'], $settings['documentTemplate']);
61+
self::assertSame($newSettings['documentTemplateMaxBytes'], $settings['documentTemplateMaxBytes']);
62+
self::assertSame($newSettings['searchParameters'], $settings['searchParameters']);
63+
}
64+
}

0 commit comments

Comments
 (0)