- 
                Notifications
    You must be signed in to change notification settings 
- Fork 105
Add conversational search #774
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 8 commits
7604609
              4897fbf
              51f4400
              cd2b8df
              e52759c
              1395b8d
              f87bde4
              b063d4b
              b09585f
              0cc3972
              2b98215
              bde19cc
              c2ee6ca
              cb6c0bb
              b6ae3bb
              c91b873
              dd6aef9
              340b57f
              eafe1f2
              d78323d
              4dce531
              72e933e
              586c3c6
              fb27035
              56c6996
              84b8ee0
              f67b66b
              4990e74
              2b0b414
              File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,88 @@ | ||
| <?php | ||
|  | ||
| declare(strict_types=1); | ||
|  | ||
| namespace Meilisearch\Contracts; | ||
|  | ||
| class ChatWorkspaceSettings extends Data | ||
| { | ||
| private ?string $source; | ||
| private ?string $orgId; | ||
| private ?string $projectId; | ||
| private ?string $apiVersion; | ||
| private ?string $deploymentId; | ||
| private ?string $baseUrl; | ||
| private ?string $apiKey; | ||
| private array $prompts; | ||
|  | ||
| public function __construct(array $params) | ||
| { | ||
| parent::__construct($params); | ||
|  | ||
| $this->source = $params['source'] ?? null; | ||
| $this->orgId = $params['orgId'] ?? null; | ||
| $this->projectId = $params['projectId'] ?? null; | ||
| $this->apiVersion = $params['apiVersion'] ?? null; | ||
| $this->deploymentId = $params['deploymentId'] ?? null; | ||
| $this->baseUrl = $params['baseUrl'] ?? null; | ||
| $this->apiKey = $params['apiKey'] ?? null; | ||
| $this->prompts = $params['prompts'] ?? []; | ||
| } | ||
|  | ||
| public function getSource(): ?string | ||
| { | ||
| return $this->source; | ||
| } | ||
|  | ||
| public function getOrgId(): ?string | ||
| { | ||
| return $this->orgId; | ||
| } | ||
|  | ||
| public function getProjectId(): ?string | ||
| { | ||
| return $this->projectId; | ||
| } | ||
|  | ||
| public function getApiVersion(): ?string | ||
| { | ||
| return $this->apiVersion; | ||
| } | ||
|  | ||
| public function getDeploymentId(): ?string | ||
| { | ||
| return $this->deploymentId; | ||
| } | ||
|  | ||
| public function getBaseUrl(): ?string | ||
| { | ||
| return $this->baseUrl; | ||
| } | ||
|  | ||
| public function getApiKey(): ?string | ||
| { | ||
| return $this->apiKey; | ||
| } | ||
|  | ||
| /** | ||
| * @return array{system?: string, searchDescription?: string, searchQParam?: string, searchIndexUidParam?: string} | ||
| */ | ||
| public function getPrompts(): array | ||
| { | ||
| return $this->prompts; | ||
| } | ||
|  | ||
| public function toArray(): array | ||
| { | ||
| return [ | ||
| 'source' => $this->source, | ||
| 'orgId' => $this->orgId, | ||
| 'projectId' => $this->projectId, | ||
| 'apiVersion' => $this->apiVersion, | ||
| 'deploymentId' => $this->deploymentId, | ||
| 'baseUrl' => $this->baseUrl, | ||
| 'apiKey' => $this->apiKey, | ||
| 'prompts' => $this->prompts, | ||
| ]; | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,59 @@ | ||
| <?php | ||
|  | ||
| declare(strict_types=1); | ||
|  | ||
| namespace Meilisearch\Contracts; | ||
|  | ||
| class ChatWorkspacesResults extends Data | ||
| { | ||
| private int $offset; | ||
| private int $limit; | ||
| private int $total; | ||
|         
                  Strift marked this conversation as resolved.
              Show resolved
            Hide resolved | ||
|  | ||
| public function __construct(array $params) | ||
| { | ||
| parent::__construct($params['results'] ?? []); | ||
|         
                  Strift marked this conversation as resolved.
              Outdated
          
            Show resolved
            Hide resolved | ||
|  | ||
| $this->offset = $params['offset']; | ||
| $this->limit = $params['limit']; | ||
| $this->total = $params['total'] ?? 0; | ||
|         
                  Strift marked this conversation as resolved.
              Outdated
          
            Show resolved
            Hide resolved | ||
| } | ||
|  | ||
| /** | ||
| * @return array<int, array{uid: string}> | ||
| */ | ||
| public function getResults(): array | ||
| { | ||
| return $this->data; | ||
| } | ||
|  | ||
| public function getOffset(): int | ||
| { | ||
| return $this->offset; | ||
| } | ||
|  | ||
| public function getLimit(): int | ||
| { | ||
| return $this->limit; | ||
| } | ||
|  | ||
| public function getTotal(): int | ||
| { | ||
| return $this->total; | ||
| } | ||
|         
                  Strift marked this conversation as resolved.
              Show resolved
            Hide resolved | ||
|  | ||
| public function toArray(): array | ||
| { | ||
| return [ | ||
| 'results' => $this->data, | ||
| 'offset' => $this->offset, | ||
| 'limit' => $this->limit, | ||
| 'total' => $this->total, | ||
| ]; | ||
| } | ||
|  | ||
| public function count(): int | ||
| { | ||
| return \count($this->data); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| <?php | ||
|  | ||
| declare(strict_types=1); | ||
|  | ||
| namespace Meilisearch\Endpoints; | ||
|  | ||
| use Meilisearch\Contracts\ChatWorkspacesResults; | ||
| use Meilisearch\Contracts\Endpoint; | ||
| use Meilisearch\Contracts\Http; | ||
| use Meilisearch\Endpoints\Delegates\HandlesChatWorkspaceSettings; | ||
|  | ||
| class ChatWorkspaces extends Endpoint | ||
| { | ||
| use HandlesChatWorkspaceSettings; | ||
|  | ||
| protected const PATH = '/chats'; | ||
|  | ||
| private ?string $workspaceName; | ||
|         
                  Strift marked this conversation as resolved.
              Show resolved
            Hide resolved | ||
|  | ||
| public function __construct(Http $http, ?string $workspaceName = null) | ||
| { | ||
| $this->workspaceName = $workspaceName; | ||
| parent::__construct($http); | ||
| } | ||
|  | ||
| public function listWorkspaces(): ChatWorkspacesResults | ||
| { | ||
| $response = $this->http->get(self::PATH); | ||
|  | ||
| return new ChatWorkspacesResults($response); | ||
| } | ||
|  | ||
| public function workspace(string $workspaceName): self | ||
| { | ||
| return new self($this->http, $workspaceName); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,81 @@ | ||
| <?php | ||
|  | ||
| declare(strict_types=1); | ||
|  | ||
| namespace Meilisearch\Endpoints\Delegates; | ||
|  | ||
| use Meilisearch\Contracts\ChatWorkspaceSettings; | ||
|  | ||
| trait HandlesChatWorkspaceSettings | ||
| { | ||
| /** | ||
| * Get the current settings for this chat workspace. | ||
| */ | ||
| public function getSettings(): ChatWorkspaceSettings | ||
| { | ||
| if (null === $this->workspaceName) { | ||
| throw new \InvalidArgumentException('Workspace name is required to get settings'); | ||
| } | ||
|  | ||
| $response = $this->http->get('/chats/'.$this->workspaceName.'/settings'); | ||
|  | ||
| return new ChatWorkspaceSettings($response); | ||
| } | ||
|  | ||
| /** | ||
| * Update the settings for this chat workspace. | ||
| * | ||
| * @param array{ | ||
| * source?: 'openAi'|'azureOpenAi'|'mistral'|'gemini'|'vLlm', | ||
| * orgId?: string, | ||
| * projectId?: string, | ||
| * apiVersion?: string, | ||
| * deploymentId?: string, | ||
| * baseUrl?: string, | ||
| * apiKey?: string, | ||
| * prompts?: array<string, string> | ||
| * } $settings | ||
| */ | ||
| public function updateSettings(array $settings): ChatWorkspaceSettings | ||
| { | ||
| if (null === $this->workspaceName) { | ||
| throw new \InvalidArgumentException('Workspace name is required to update settings'); | ||
| } | ||
|  | ||
| $response = $this->http->patch('/chats/'.$this->workspaceName.'/settings', $settings); | ||
|  | ||
| return new ChatWorkspaceSettings($response); | ||
| } | ||
|  | ||
| /** | ||
| * Reset the settings for this chat workspace to default values. | ||
| */ | ||
| public function resetSettings(): ChatWorkspaceSettings | ||
| { | ||
| if (null === $this->workspaceName) { | ||
| throw new \InvalidArgumentException('Workspace name is required to reset settings'); | ||
| } | ||
|  | ||
| $response = $this->http->delete('/chats/'.$this->workspaceName.'/settings'); | ||
|  | ||
| return new ChatWorkspaceSettings($response); | ||
| } | ||
|  | ||
| /** | ||
| * Create a streaming chat completion using OpenAI-compatible API. | ||
| * | ||
| * @param array{ | ||
| * model: string, | ||
| * messages: array<array{role: string, content: string}>, | ||
| * stream: bool | ||
| * } $options The request body for the chat completion | ||
| */ | ||
| public function streamCompletion(array $options): \Psr\Http\Message\StreamInterface | ||
|          | ||
| { | ||
| if (null === $this->workspaceName) { | ||
| throw new \InvalidArgumentException('Workspace name is required for chat completion'); | ||
| } | ||
|  | ||
| return $this->http->postStream('/chats/'.$this->workspaceName.'/chat/completions', $options); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| <?php | ||
|  | ||
| declare(strict_types=1); | ||
|  | ||
| namespace Meilisearch\Endpoints\Delegates; | ||
|  | ||
| use Meilisearch\Contracts\ChatWorkspacesResults; | ||
| use Meilisearch\Endpoints\ChatWorkspaces; | ||
|  | ||
| trait HandlesChatWorkspaces | ||
| { | ||
| public ChatWorkspaces $chats; | ||
|          | ||
|  | ||
| /** | ||
| * List all chat workspaces. | ||
| */ | ||
| public function getChatWorkspaces(): ChatWorkspacesResults | ||
| { | ||
| return $this->chats->listWorkspaces(); | ||
| } | ||
|  | ||
| /** | ||
| * Get a specific chat workspace instance. | ||
| */ | ||
| public function chatWorkspace(string $workspaceName): ChatWorkspaces | ||
| { | ||
| return $this->chats->workspace($workspaceName); | ||
| } | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.