xref: /plugin/aichat/Model/Ollama/EmbeddingModel.php (revision d2192bbac7011c00f04e23a1c78c073ab960d6a6)
1074b7701SAndreas Gohr<?php
2074b7701SAndreas Gohr
3074b7701SAndreas Gohrnamespace dokuwiki\plugin\aichat\Model\Ollama;
4074b7701SAndreas Gohr
5074b7701SAndreas Gohruse dokuwiki\plugin\aichat\Model\EmbeddingInterface;
6074b7701SAndreas Gohr
7074b7701SAndreas Gohrclass EmbeddingModel extends AbstractOllama implements EmbeddingInterface
8074b7701SAndreas Gohr{
9074b7701SAndreas Gohr    /** @inheritdoc */
10074b7701SAndreas Gohr    public function getEmbedding($text): array
11074b7701SAndreas Gohr    {
12074b7701SAndreas Gohr        $data = [
13*d2192bbaSMax Theisen            'model' => $this->getModelNameWithSuffix(),
14*d2192bbaSMax Theisen            'input' => $text,
154dd0657eSAndreas Gohr            'options' => [
164dd0657eSAndreas Gohr                'num_ctx' => $this->getMaxInputTokenLength()
174dd0657eSAndreas Gohr            ]
18074b7701SAndreas Gohr        ];
19*d2192bbaSMax Theisen        $response = $this->request('api/embed', $data);
20*d2192bbaSMax Theisen        return $response['embeddings'][0] ?? [];
21*d2192bbaSMax Theisen    }
22074b7701SAndreas Gohr
23*d2192bbaSMax Theisen    private function getModelNameWithSuffix(): string
24*d2192bbaSMax Theisen    {
25*d2192bbaSMax Theisen        $modelName = $this->getModelName();
26*d2192bbaSMax Theisen        return str_ends_with($modelName, ':latest') ? $modelName : $modelName . ':latest';
27074b7701SAndreas Gohr    }
28074b7701SAndreas Gohr}
29*d2192bbaSMax Theisen
30