-
-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathOpenAIPostgreSQLAdapterFactory.php
74 lines (64 loc) · 1.75 KB
/
OpenAIPostgreSQLAdapterFactory.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
declare(strict_types=1);
namespace Schranz\Search\SEAL\Adapter\OpenAIPostgreSQL;
use OpenAI;
use OpenAI\Client;
use Psr\Container\ContainerInterface;
use Schranz\Search\SEAL\Adapter\AdapterFactoryInterface;
use Schranz\Search\SEAL\Adapter\AdapterInterface;
/**
* @experimental
*/
class OpenAIPostgreSQLAdapterFactory implements AdapterFactoryInterface
{
public function __construct(
private readonly ?ContainerInterface $container = null,
) {
}
public function createAdapter(array $dsn): AdapterInterface
{
$openAIClient = $this->createOpenAiClient($dsn);
$pdoClient = $this->createPdoClient($dsn);
return new OpenAIPostgreSQLAdapter($openAIClient, $pdoClient);
}
/**
* @internal
*
* @param array{
* query: array<string, string>,
* } $dsn
*/
public function createOpenAiClient(array $dsn): Client
{
return OpenAI::client($dsn['query']['openai-api-key'] ?? '', $dsn['query']['openai-organisation'] ?? null);
}
/**
* @internal
*
* @param array{
* host: string,
* port?: int,
* user?: string,
* pass?: string,
* path?: string,
* } $dsn
*/
public function createPdoClient(array $dsn): \PDO
{
$host = $dsn['host'];
$port = $dsn['port'] ?? 5432;
$user = $dsn['user'] ?? '';
$pass = $dsn['pass'] ?? '';
$db = $dsn['path'] ?? 'search';
return new \PDO(
'pgsql:host=' . $host . ';port=' . $port . ';dbname=' . $db . ';',
$user,
$pass,
[\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION]
);
}
public static function getName(): string
{
return 'openai-postgresql';
}
}