Skip to content

Commit 953b914

Browse files
authored
refactor: ease toolbox instatiation (#248)
Extracted from #249
1 parent 6e37414 commit 953b914

13 files changed

+20
-27
lines changed

README.md

+2-4
Original file line numberDiff line numberDiff line change
@@ -137,14 +137,13 @@ Tools are services that can be called by the LLM to provide additional features
137137
Tool calling can be enabled by registering the processors in the chain:
138138
```php
139139
use PhpLlm\LlmChain\Chain\ToolBox\ChainProcessor;
140-
use PhpLlm\LlmChain\Chain\ToolBox\ToolAnalyzer;
141140
use PhpLlm\LlmChain\Chain\ToolBox\ToolBox;
142141

143142
// Platform & LLM instantiation
144143

145144
$yourTool = new YourTool();
146145

147-
$toolBox = new ToolBox(new ToolAnalyzer(), [$yourTool]);
146+
$toolBox = ToolBox::create($yourTool);
148147
$toolProcessor = new ChainProcessor($toolBox);
149148

150149
$chain = new Chain($platform, $llm, inputProcessor: [$toolProcessor], outputProcessor: [$toolProcessor]);
@@ -338,13 +337,12 @@ use PhpLlm\LlmChain\Model\Message\Message;
338337
use PhpLlm\LlmChain\Model\Message\MessageBag;
339338
use PhpLlm\LlmChain\Chain\ToolBox\ChainProcessor;
340339
use PhpLlm\LlmChain\Chain\ToolBox\Tool\SimilaritySearch;
341-
use PhpLlm\LlmChain\Chain\ToolBox\ToolAnalyzer;
342340
use PhpLlm\LlmChain\Chain\ToolBox\ToolBox;
343341

344342
// Initialize Platform & Models
345343

346344
$similaritySearch = new SimilaritySearch($embeddings, $store);
347-
$toolBox = new ToolBox(new ToolAnalyzer(), [$similaritySearch]);
345+
$toolBox = ToolBox::create($similaritySearch);
348346
$processor = new ChainProcessor($toolBox);
349347
$chain = new Chain($platform, $llm, [$processor], [$processor]);
350348

examples/store-mongodb-similarity-search.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use PhpLlm\LlmChain\Chain;
99
use PhpLlm\LlmChain\Chain\ToolBox\ChainProcessor;
1010
use PhpLlm\LlmChain\Chain\ToolBox\Tool\SimilaritySearch;
11-
use PhpLlm\LlmChain\Chain\ToolBox\ToolAnalyzer;
1211
use PhpLlm\LlmChain\Chain\ToolBox\ToolBox;
1312
use PhpLlm\LlmChain\Document\Metadata;
1413
use PhpLlm\LlmChain\Document\TextDocument;
@@ -62,7 +61,7 @@
6261
$llm = new GPT(GPT::GPT_4O_MINI);
6362

6463
$similaritySearch = new SimilaritySearch($platform, $embeddings, $store);
65-
$toolBox = new ToolBox(new ToolAnalyzer(), [$similaritySearch]);
64+
$toolBox = ToolBox::create($similaritySearch);
6665
$processor = new ChainProcessor($toolBox);
6766
$chain = new Chain($platform, $llm, [$processor], [$processor]);
6867

examples/store-pinecone-similarity-search.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
use PhpLlm\LlmChain\Chain;
88
use PhpLlm\LlmChain\Chain\ToolBox\ChainProcessor;
99
use PhpLlm\LlmChain\Chain\ToolBox\Tool\SimilaritySearch;
10-
use PhpLlm\LlmChain\Chain\ToolBox\ToolAnalyzer;
1110
use PhpLlm\LlmChain\Chain\ToolBox\ToolBox;
1211
use PhpLlm\LlmChain\Document\Metadata;
1312
use PhpLlm\LlmChain\Document\TextDocument;
@@ -53,7 +52,7 @@
5352
$llm = new GPT(GPT::GPT_4O_MINI);
5453

5554
$similaritySearch = new SimilaritySearch($platform, $embeddings, $store);
56-
$toolBox = new ToolBox(new ToolAnalyzer(), [$similaritySearch]);
55+
$toolBox = ToolBox::create($similaritySearch);
5756
$processor = new ChainProcessor($toolBox);
5857
$chain = new Chain($platform, $llm, [$processor], [$processor]);
5958

examples/stream-tools-gpt-openai.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use PhpLlm\LlmChain\Chain;
66
use PhpLlm\LlmChain\Chain\ToolBox\ChainProcessor;
77
use PhpLlm\LlmChain\Chain\ToolBox\Tool\Wikipedia;
8-
use PhpLlm\LlmChain\Chain\ToolBox\ToolAnalyzer;
98
use PhpLlm\LlmChain\Chain\ToolBox\ToolBox;
109
use PhpLlm\LlmChain\Model\Message\Message;
1110
use PhpLlm\LlmChain\Model\Message\MessageBag;
@@ -24,7 +23,7 @@
2423
$llm = new GPT(GPT::GPT_4O_MINI);
2524

2625
$wikipedia = new Wikipedia(HttpClient::create());
27-
$toolBox = new ToolBox(new ToolAnalyzer(), [$wikipedia]);
26+
$toolBox = ToolBox::create($wikipedia);
2827
$processor = new ChainProcessor($toolBox);
2928
$chain = new Chain($platform, $llm, [$processor], [$processor]);
3029
$messages = new MessageBag(Message::ofUser(<<<TXT

examples/structured-output-clock.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
use PhpLlm\LlmChain\Chain\StructuredOutput\ResponseFormatFactory;
88
use PhpLlm\LlmChain\Chain\ToolBox\ChainProcessor as ToolProcessor;
99
use PhpLlm\LlmChain\Chain\ToolBox\Tool\Clock;
10-
use PhpLlm\LlmChain\Chain\ToolBox\ToolAnalyzer;
1110
use PhpLlm\LlmChain\Chain\ToolBox\ToolBox;
1211
use PhpLlm\LlmChain\Model\Message\Message;
1312
use PhpLlm\LlmChain\Model\Message\MessageBag;
@@ -29,7 +28,7 @@
2928
$llm = new GPT(GPT::GPT_4O_MINI);
3029

3130
$clock = new Clock(new SymfonyClock());
32-
$toolBox = new ToolBox(new ToolAnalyzer(), [$clock]);
31+
$toolBox = ToolBox::create($clock);
3332
$toolProcessor = new ToolProcessor($toolBox);
3433
$serializer = new Serializer([new ObjectNormalizer()], [new JsonEncoder()]);
3534
$structuredOutputProcessor = new StructuredOutputProcessor(new ResponseFormatFactory(), $serializer);

examples/toolbox-clock.php

+2-4
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@
55
use PhpLlm\LlmChain\Chain;
66
use PhpLlm\LlmChain\Chain\ToolBox\ChainProcessor;
77
use PhpLlm\LlmChain\Chain\ToolBox\Tool\Clock;
8-
use PhpLlm\LlmChain\Chain\ToolBox\ToolAnalyzer;
98
use PhpLlm\LlmChain\Chain\ToolBox\ToolBox;
109
use PhpLlm\LlmChain\Model\Message\Message;
1110
use PhpLlm\LlmChain\Model\Message\MessageBag;
12-
use Symfony\Component\Clock\Clock as SymfonyClock;
1311
use Symfony\Component\Dotenv\Dotenv;
1412

1513
require_once dirname(__DIR__).'/vendor/autoload.php';
@@ -23,8 +21,8 @@
2321
$platform = PlatformFactory::create($_ENV['OPENAI_API_KEY']);
2422
$llm = new GPT(GPT::GPT_4O_MINI);
2523

26-
$clock = new Clock(new SymfonyClock());
27-
$toolBox = new ToolBox(new ToolAnalyzer(), [$clock]);
24+
$clock = new Clock();
25+
$toolBox = ToolBox::create($clock);
2826
$processor = new ChainProcessor($toolBox);
2927
$chain = new Chain($platform, $llm, [$processor], [$processor]);
3028

examples/toolbox-serpapi.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use PhpLlm\LlmChain\Chain;
66
use PhpLlm\LlmChain\Chain\ToolBox\ChainProcessor;
77
use PhpLlm\LlmChain\Chain\ToolBox\Tool\SerpApi;
8-
use PhpLlm\LlmChain\Chain\ToolBox\ToolAnalyzer;
98
use PhpLlm\LlmChain\Chain\ToolBox\ToolBox;
109
use PhpLlm\LlmChain\Model\Message\Message;
1110
use PhpLlm\LlmChain\Model\Message\MessageBag;
@@ -23,7 +22,7 @@
2322
$llm = new GPT(GPT::GPT_4O_MINI);
2423

2524
$serpApi = new SerpApi(HttpClient::create(), $_ENV['SERP_API_KEY']);
26-
$toolBox = new ToolBox(new ToolAnalyzer(), [$serpApi]);
25+
$toolBox = ToolBox::create($serpApi);
2726
$processor = new ChainProcessor($toolBox);
2827
$chain = new Chain($platform, $llm, [$processor], [$processor]);
2928

examples/toolbox-tavily.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use PhpLlm\LlmChain\Chain;
66
use PhpLlm\LlmChain\Chain\ToolBox\ChainProcessor;
77
use PhpLlm\LlmChain\Chain\ToolBox\Tool\Tavily;
8-
use PhpLlm\LlmChain\Chain\ToolBox\ToolAnalyzer;
98
use PhpLlm\LlmChain\Chain\ToolBox\ToolBox;
109
use PhpLlm\LlmChain\Model\Message\Message;
1110
use PhpLlm\LlmChain\Model\Message\MessageBag;
@@ -23,7 +22,7 @@
2322
$llm = new GPT(GPT::GPT_4O_MINI);
2423

2524
$tavily = new Tavily(HttpClient::create(), $_ENV['TAVILY_API_KEY']);
26-
$toolBox = new ToolBox(new ToolAnalyzer(), [$tavily]);
25+
$toolBox = ToolBox::create($tavily);
2726
$processor = new ChainProcessor($toolBox);
2827
$chain = new Chain($platform, $llm, [$processor], [$processor]);
2928

examples/toolbox-weather-event.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
use PhpLlm\LlmChain\Chain\ToolBox\ChainProcessor;
77
use PhpLlm\LlmChain\Chain\ToolBox\Event\ToolCallsExecuted;
88
use PhpLlm\LlmChain\Chain\ToolBox\Tool\OpenMeteo;
9-
use PhpLlm\LlmChain\Chain\ToolBox\ToolAnalyzer;
109
use PhpLlm\LlmChain\Chain\ToolBox\ToolBox;
1110
use PhpLlm\LlmChain\Model\Message\Message;
1211
use PhpLlm\LlmChain\Model\Message\MessageBag;
@@ -27,7 +26,7 @@
2726
$llm = new GPT(GPT::GPT_4O_MINI);
2827

2928
$openMeteo = new OpenMeteo(HttpClient::create());
30-
$toolBox = new ToolBox(new ToolAnalyzer(), [$openMeteo]);
29+
$toolBox = ToolBox::create($openMeteo);
3130
$eventDispatcher = new EventDispatcher();
3231
$processor = new ChainProcessor($toolBox, eventDispatcher: $eventDispatcher);
3332
$chain = new Chain($platform, $llm, [$processor], [$processor]);

examples/toolbox-wikipedia.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use PhpLlm\LlmChain\Chain;
66
use PhpLlm\LlmChain\Chain\ToolBox\ChainProcessor;
77
use PhpLlm\LlmChain\Chain\ToolBox\Tool\Wikipedia;
8-
use PhpLlm\LlmChain\Chain\ToolBox\ToolAnalyzer;
98
use PhpLlm\LlmChain\Chain\ToolBox\ToolBox;
109
use PhpLlm\LlmChain\Model\Message\Message;
1110
use PhpLlm\LlmChain\Model\Message\MessageBag;
@@ -24,7 +23,7 @@
2423
$llm = new GPT(GPT::GPT_4O_MINI);
2524

2625
$wikipedia = new Wikipedia(HttpClient::create());
27-
$toolBox = new ToolBox(new ToolAnalyzer(), [$wikipedia]);
26+
$toolBox = ToolBox::create($wikipedia);
2827
$processor = new ChainProcessor($toolBox);
2928
$chain = new Chain($platform, $llm, [$processor], [$processor]);
3029

examples/toolbox-youtube.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use PhpLlm\LlmChain\Chain;
66
use PhpLlm\LlmChain\Chain\ToolBox\ChainProcessor;
77
use PhpLlm\LlmChain\Chain\ToolBox\Tool\YouTubeTranscriber;
8-
use PhpLlm\LlmChain\Chain\ToolBox\ToolAnalyzer;
98
use PhpLlm\LlmChain\Chain\ToolBox\ToolBox;
109
use PhpLlm\LlmChain\Model\Message\Message;
1110
use PhpLlm\LlmChain\Model\Message\MessageBag;
@@ -24,7 +23,7 @@
2423
$llm = new GPT(GPT::GPT_4O_MINI);
2524

2625
$transcriber = new YouTubeTranscriber(HttpClient::create());
27-
$toolBox = new ToolBox(new ToolAnalyzer(), [$transcriber]);
26+
$toolBox = ToolBox::create($transcriber);
2827
$processor = new ChainProcessor($toolBox);
2928
$chain = new Chain($platform, $llm, [$processor], [$processor]);
3029

src/Chain/ToolBox/Tool/Clock.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
namespace PhpLlm\LlmChain\Chain\ToolBox\Tool;
66

77
use PhpLlm\LlmChain\Chain\ToolBox\Attribute\AsTool;
8+
use Symfony\Component\Clock\Clock as SymfonyClock;
89
use Symfony\Component\Clock\ClockInterface;
910

1011
#[AsTool('clock', description: 'Provides the current date and time.')]
1112
final readonly class Clock
1213
{
1314
public function __construct(
14-
private ClockInterface $clock,
15+
private ClockInterface $clock = new SymfonyClock(),
1516
) {
1617
}
1718

src/Chain/ToolBox/ToolBox.php

+5
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ public function __construct(
3333
$this->tools = $tools instanceof \Traversable ? iterator_to_array($tools) : $tools;
3434
}
3535

36+
public static function create(object ...$tools): self
37+
{
38+
return new self(new ToolAnalyzer(), $tools);
39+
}
40+
3641
public function getMap(): array
3742
{
3843
if (isset($this->map)) {

0 commit comments

Comments
 (0)