4
4
5
5
namespace LLM \Agents \OpenAI \Client \Integration \Spiral ;
6
6
7
+ use GuzzleHttp \Client as HttpClient ;
7
8
use LLM \Agents \LLM \LLMInterface ;
8
9
use LLM \Agents \OpenAI \Client \LLM ;
9
10
use LLM \Agents \OpenAI \Client \Parsers \ChatResponseParser ;
10
11
use LLM \Agents \OpenAI \Client \StreamResponseParser ;
12
+ use OpenAI \Contracts \ClientContract ;
11
13
use OpenAI \Responses \Chat \CreateStreamedResponse ;
12
14
use Spiral \Boot \Bootloader \Bootloader ;
15
+ use Spiral \Boot \EnvironmentInterface ;
13
16
14
17
final class OpenAIClientBootloader extends Bootloader
15
18
{
@@ -18,6 +21,18 @@ public function defineSingletons(): array
18
21
return [
19
22
LLMInterface::class => LLM ::class,
20
23
24
+ ClientContract::class => static fn (
25
+ EnvironmentInterface $ env ,
26
+ ): ClientContract => \OpenAI::factory ()
27
+ ->withApiKey ($ env ->get ('OPENAI_KEY ' ))
28
+ ->withHttpHeader ('OpenAI-Beta ' , 'assistants=v1 ' )
29
+ ->withHttpClient (
30
+ new HttpClient ([
31
+ 'timeout ' => (int ) $ env ->get ('OPENAI_HTTP_CLIENT_TIMEOUT ' , 2 * 60 ),
32
+ ]),
33
+ )
34
+ ->make (),
35
+
21
36
StreamResponseParser::class => static function (
22
37
ChatResponseParser $ chatResponseParser ,
23
38
): StreamResponseParser {
0 commit comments