-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtools-stream.php
More file actions
67 lines (53 loc) · 1.94 KB
/
tools-stream.php
File metadata and controls
67 lines (53 loc) · 1.94 KB
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
<?php
declare(strict_types=1);
/*
* This file is part of the Modelflow AI package.
*
* (c) Johannes Wachter <johannes@sulu.io>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace App;
use ModelflowAi\Chat\AIChatRequestHandlerInterface;
use ModelflowAi\Chat\Request\Message\AIChatMessage;
use ModelflowAi\Chat\Request\Message\AIChatMessageRoleEnum;
use ModelflowAi\Chat\Request\Message\ToolCallsPart;
use ModelflowAi\Chat\Response\AIChatResponseStream;
use ModelflowAi\Chat\ToolInfo\ToolChoiceEnum;
use ModelflowAi\Chat\ToolInfo\ToolExecutor;
use ModelflowAi\DecisionTree\Criteria\CapabilityCriteria;
require_once __DIR__ . '/WeatherTool.php';
/** @var AIChatRequestHandlerInterface $handler */
$handler = require_once __DIR__ . '/bootstrap.php';
$toolExecutor = new ToolExecutor();
$builder = $handler->createRequest()
->addUserMessage('How is the weather in hohenems and vienna?')
->tool('get_current_weather', new WeatherTool(), 'getCurrentWeather')
->toolChoice(ToolChoiceEnum::AUTO)
->addCriteria(CapabilityCriteria::SMART)
->streamed();
$request = $builder->build();
/** @var AIChatResponseStream $response */
$response = $request->execute();
foreach ($response->getMessageStream() as $message) {
$toolCalls = $message->toolCalls;
if (null !== $toolCalls && 0 < \count($toolCalls)) {
$builder->addMessage(
new AIChatMessage(AIChatMessageRoleEnum::ASSISTANT, ToolCallsPart::create($toolCalls)),
);
foreach ($toolCalls as $toolCall) {
$builder->addMessage(
$toolExecutor->execute($request, $toolCall),
);
}
}
}
/** @var AIChatResponseStream $response */
$response = $builder->build()->execute();
foreach ($response->getMessageStream() as $index => $message) {
if (0 === $index) {
echo $message->role->value . ': ';
}
echo $message->content;
}