Skip to content

Commit 0d1f197

Browse files
committed
update agent models
1 parent 0c0c214 commit 0d1f197

File tree

10 files changed

+90
-77
lines changed

10 files changed

+90
-77
lines changed

src/Backend/Action/Agent/Message/Submit.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
use Fusio\Engine\ContextInterface;
2626
use Fusio\Engine\ParametersInterface;
2727
use Fusio\Engine\RequestInterface;
28-
use Fusio\Model\Common\AgentInput;
28+
use Fusio\Model\Agent\Input;
2929
use PSX\Http\Environment\HttpResponse;
3030

3131
/**
@@ -45,7 +45,7 @@ public function handle(RequestInterface $request, ParametersInterface $configura
4545
{
4646
$body = $request->getPayload();
4747

48-
assert($body instanceof AgentInput);
48+
assert($body instanceof Input);
4949

5050
$output = $this->sender->send(
5151
(int) $request->get('agent_id'),

src/Backend/Action/Connection/Agent/Send.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
use Fusio\Impl\Service\Agent\Serializer\ResultSerializer;
2828
use Fusio\Impl\Service\Agent\Unserializer\MessageUnserializer;
2929
use Fusio\Impl\Service\System\FrameworkConfig;
30-
use Fusio\Model\Common\AgentInput;
31-
use Fusio\Model\Common\AgentOutput;
30+
use Fusio\Model\Agent\Input;
31+
use Fusio\Model\Agent\Output;
3232
use PSX\Http\Environment\HttpResponse;
3333

3434
/**
@@ -52,18 +52,18 @@ public function handle(RequestInterface $request, ParametersInterface $configura
5252
$agent = $this->getConnection($request);
5353
$payload = $request->getPayload();
5454

55-
assert($payload instanceof AgentInput);
55+
assert($payload instanceof Input);
5656

57-
$messages = $this->messageUnserializer->unserialize($payload->getInput());
57+
$messages = $this->messageUnserializer->unserialize($payload->getItem());
5858

5959
$options = [
6060
'temperature' => 0.4
6161
];
6262

6363
$result = $agent->call($messages, $options);
6464

65-
$output = new AgentOutput();
66-
$output->setOutput($this->resultSerializer->serialize($result));
65+
$output = new Output();
66+
$output->setItem($this->resultSerializer->serialize($result));
6767

6868
return new HttpResponse(200, [], $output);
6969
}

src/Installation/NewInstallation.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -398,8 +398,8 @@ private static function getOperations(): array
398398
httpMethod: 'POST',
399399
httpPath: '/agent/$agent_id<[0-9]+|^~>/message',
400400
httpCode: 201,
401-
outgoing: Model\Common\AgentOutput::class,
402-
incoming: Model\Common\AgentInput::class,
401+
outgoing: Model\Agent\Output::class,
402+
incoming: Model\Agent\Input::class,
403403
throws: [999 => Model\Common\Message::class],
404404
description: 'Submits a new agent message',
405405
),
@@ -647,8 +647,8 @@ private static function getOperations(): array
647647
httpMethod: 'POST',
648648
httpPath: '/connection/:connection_id/agent',
649649
httpCode: 200,
650-
outgoing: Model\Common\AgentOutput::class,
651-
incoming: Model\Common\AgentInput::class,
650+
outgoing: Model\Agent\Output::class,
651+
incoming: Model\Agent\Input::class,
652652
throws: [999 => Model\Common\Message::class],
653653
description: 'Sends a message to an agent',
654654
),

src/Service/Agent/Sender.php

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@
2424
use Fusio\Engine\ConnectorInterface;
2525
use Fusio\Engine\ContextInterface;
2626
use Fusio\Impl\Table;
27+
use Fusio\Model\Agent\Input;
28+
use Fusio\Model\Agent\Item;
29+
use Fusio\Model\Agent\ItemObject;
30+
use Fusio\Model\Agent\ItemText;
31+
use Fusio\Model\Agent\Output;
2732
use Fusio\Model\Common\AgentContent;
2833
use Fusio\Model\Common\AgentContentObject;
2934
use Fusio\Model\Common\AgentContentText;
@@ -73,7 +78,7 @@ public function __construct(
7378
$this->objectMapper = new ObjectMapper($schemaManager);
7479
}
7580

76-
public function send(int $agentId, AgentInput $input, ContextInterface $context): AgentOutput
81+
public function send(int $agentId, Input $input, ContextInterface $context): Output
7782
{
7883
$row = $this->agentTable->findOneByTenantAndId($context->getTenantId(), $context->getUser()->getCategoryId(), $agentId);
7984
if (!$row instanceof Table\Generated\AgentRow) {
@@ -91,7 +96,7 @@ public function send(int $agentId, AgentInput $input, ContextInterface $context)
9196
}
9297

9398
$chatId = $input->getPreviousId();
94-
$input = $input->getInput() ?? throw new StatusCode\BadRequestException('Provided no input');
99+
$item = $input->getItem() ?? throw new StatusCode\BadRequestException('Provided no input');
95100

96101
$this->agentTable->beginTransaction();
97102

@@ -103,7 +108,7 @@ public function send(int $agentId, AgentInput $input, ContextInterface $context)
103108
$messages = $this->loadPreviousMessages($agentId, $context->getUser()->getId(), $chatId, $messages);
104109
}
105110

106-
$userMessages = $this->messageUnserializer->unserialize($input);
111+
$userMessages = $this->messageUnserializer->unserialize($item);
107112

108113
$chatId = $this->persistUserMessages($agentId, $context->getUser()->getId(), $chatId, $userMessages);
109114

@@ -130,18 +135,18 @@ public function send(int $agentId, AgentInput $input, ContextInterface $context)
130135
$result = $agent->call($messages, $options);
131136

132137
if ($responseSchema !== null) {
133-
$output = $this->jsonResultSerializer->serialize($result);
138+
$item = $this->jsonResultSerializer->serialize($result);
134139
} else {
135-
$output = $this->resultSerializer->serialize($result);
140+
$item = $this->resultSerializer->serialize($result);
136141
}
137142

138-
$this->messageTable->addAssistantMessage($row->getId(), $context->getUser()->getId(), $chatId, $output);
143+
$this->messageTable->addAssistantMessage($row->getId(), $context->getUser()->getId(), $chatId, $item);
139144

140145
$this->agentTable->commit();
141146

142-
$message = new AgentOutput();
143-
$message->setId('' . $chatId);
144-
$message->setOutput($output);
147+
$message = new Output();
148+
$message->setId($chatId);
149+
$message->setItem($item);
145150
return $message;
146151
} catch (Throwable $e) {
147152
$this->agentTable->rollBack();
@@ -166,20 +171,20 @@ private function loadPreviousMessages(int $agentId, int $userId, string $chatId,
166171

167172
$result = $this->messageTable->findBy($condition, $startIndex, $count, Table\Generated\AgentMessageColumn::ID, OrderBy::ASC);
168173
foreach ($result as $row) {
169-
$message = $this->objectMapper->readJson($row->getContent(), SchemaSource::fromClass(AgentContent::class));
174+
$message = $this->objectMapper->readJson($row->getContent(), SchemaSource::fromClass(Item::class));
170175

171176
if ($row->getOrigin() === Table\Agent\Message::ORIGIN_USER) {
172177
$messages = $messages->merge($this->messageUnserializer->unserialize($message));
173178
} elseif ($row->getOrigin() === Table\Agent\Message::ORIGIN_ASSISTANT) {
174-
if ($message instanceof AgentContentText) {
179+
if ($message instanceof ItemText) {
175180
$messages->add(Message::ofAssistant($message->getContent()));
176-
} elseif ($message instanceof AgentContentObject) {
181+
} elseif ($message instanceof ItemObject) {
177182
$messages->add(Message::ofAssistant(Parser::encode($message->getPayload())));
178183
}
179184
} elseif ($row->getOrigin() === Table\Agent\Message::ORIGIN_SYSTEM) {
180-
if ($message instanceof AgentContentText) {
185+
if ($message instanceof ItemText) {
181186
$messages->add(Message::forSystem($message->getContent()));
182-
} elseif ($message instanceof AgentContentObject) {
187+
} elseif ($message instanceof ItemObject) {
183188
$messages->add(Message::forSystem(Parser::encode($message->getPayload())));
184189
}
185190
}

src/Service/Agent/Serializer/JsonResultSerializer.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
namespace Fusio\Impl\Service\Agent\Serializer;
2222

23-
use Fusio\Model\Common\AgentContent;
24-
use Fusio\Model\Common\AgentContentObject;
23+
use Fusio\Model\Agent\Item;
24+
use Fusio\Model\Agent\ItemObject;
2525
use stdClass;
2626
use Symfony\AI\Platform\Result\ResultInterface;
2727
use Symfony\AI\Platform\Result\TextResult;
@@ -35,14 +35,14 @@
3535
*/
3636
readonly class JsonResultSerializer extends ResultSerializer
3737
{
38-
public function serialize(ResultInterface $result): AgentContent
38+
public function serialize(ResultInterface $result): Item
3939
{
4040
if ($result instanceof TextResult) {
4141
$content = $this->removeNoice($result->getContent());
4242

4343
$payload = json_decode($content);
4444
if ($payload instanceof stdClass) {
45-
$object = new AgentContentObject();
45+
$object = new ItemObject();
4646
$object->setType('object');
4747
$object->setPayload($payload);
4848
return $object;
@@ -62,6 +62,13 @@ private function removeNoice(string $content): string
6262
$firstPos = strpos($content, '{');
6363
$lastPos = strrpos($content, '}');
6464

65+
$squareBracketFirstPos = strpos($content, '[');
66+
$squareBracketLastPos = strrpos($content, ']');
67+
if ($squareBracketFirstPos < $firstPos) {
68+
$firstPos = $squareBracketFirstPos;
69+
$lastPos = $squareBracketLastPos;
70+
}
71+
6572
if ($firstPos !== false && $lastPos !== false) {
6673
$content = substr($content, $firstPos, $lastPos - $firstPos + 1);
6774
}

src/Service/Agent/Serializer/MessageSerializer.php

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020

2121
namespace Fusio\Impl\Service\Agent\Serializer;
2222

23-
use Fusio\Model\Common\AgentContent;
24-
use Fusio\Model\Common\AgentContentBinary;
25-
use Fusio\Model\Common\AgentContentText;
26-
use Fusio\Model\Common\AgentContentToolCall;
27-
use Fusio\Model\Common\AgentContentToolCallFunction;
23+
use Fusio\Model\Agent\Item;
24+
use Fusio\Model\Agent\ItemBinary;
25+
use Fusio\Model\Agent\ItemText;
26+
use Fusio\Model\Agent\ItemToolCall;
27+
use Fusio\Model\Agent\ItemToolCallFunction;
2828
use PSX\Json\Parser;
2929
use Symfony\AI\Platform\Message\Content\Collection;
3030
use Symfony\AI\Platform\Message\Content\ContentInterface;
@@ -46,19 +46,19 @@
4646
readonly class MessageSerializer
4747
{
4848
/**
49-
* @return array<AgentContent>
49+
* @return array<Item>
5050
*/
5151
public function serialize(MessageInterface $message): array
5252
{
5353
if ($message instanceof ToolCallMessage) {
5454
$toolCall = $message->getToolCall();
5555

56-
$function = new AgentContentToolCallFunction();
56+
$function = new ItemToolCallFunction();
5757
$function->setName($toolCall->getName());
5858
$function->setArguments(Parser::encode($toolCall->getArguments()));
5959
$function->setId($toolCall->getId());
6060

61-
$result = new AgentContentToolCall();
61+
$result = new ItemToolCall();
6262
$result->setType('tool_call');
6363
$result->setFunctions([$function]);
6464

@@ -73,7 +73,7 @@ public function serialize(MessageInterface $message): array
7373

7474
return $result;
7575
} else {
76-
$result = new AgentContentText();
76+
$result = new ItemText();
7777
$result->setType('text');
7878
$result->setContent($message->getContent());
7979

@@ -82,25 +82,25 @@ public function serialize(MessageInterface $message): array
8282
}
8383

8484
/**
85-
* @return array<AgentContent>
85+
* @return array<Item>
8686
*/
8787
private function serializeContent(ContentInterface $content): array
8888
{
8989
if ($content instanceof File) {
90-
$result = new AgentContentBinary();
90+
$result = new ItemBinary();
9191
$result->setType('binary');
9292
$result->setMime($content->getFormat());
9393
$result->setData($content->asBase64());
9494

9595
return [$result];
9696
} elseif ($content instanceof Text) {
97-
$result = new AgentContentText();
97+
$result = new ItemText();
9898
$result->setType('text');
9999
$result->setContent($content->getText());
100100

101101
return [$result];
102102
} elseif ($content instanceof ImageUrl || $content instanceof DocumentUrl) {
103-
$result = new AgentContentText();
103+
$result = new ItemText();
104104
$result->setType('text');
105105
$result->setContent($content->getUrl());
106106

src/Service/Agent/Serializer/ResultSerializer.php

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020

2121
namespace Fusio\Impl\Service\Agent\Serializer;
2222

23-
use Fusio\Model\Common\AgentContent;
24-
use Fusio\Model\Common\AgentContentBinary;
25-
use Fusio\Model\Common\AgentContentChoice;
26-
use Fusio\Model\Common\AgentContentObject;
27-
use Fusio\Model\Common\AgentContentText;
28-
use Fusio\Model\Common\AgentContentToolCall;
29-
use Fusio\Model\Common\AgentContentToolCallFunction;
23+
use Fusio\Model\Agent\Item;
24+
use Fusio\Model\Agent\ItemBinary;
25+
use Fusio\Model\Agent\ItemChoice;
26+
use Fusio\Model\Agent\ItemObject;
27+
use Fusio\Model\Agent\ItemText;
28+
use Fusio\Model\Agent\ItemToolCall;
29+
use Fusio\Model\Agent\ItemToolCallFunction;
3030
use PSX\Http\Exception\InternalServerErrorException;
3131
use PSX\Json\Parser;
3232
use Symfony\AI\Platform\Result\BinaryResult;
@@ -45,10 +45,10 @@
4545
*/
4646
readonly class ResultSerializer
4747
{
48-
public function serialize(ResultInterface $result): AgentContent
48+
public function serialize(ResultInterface $result): Item
4949
{
5050
if ($result instanceof BinaryResult) {
51-
$message = new AgentContentBinary();
51+
$message = new ItemBinary();
5252
$message->setType('binary');
5353
$message->setMime($result->getMimeType());
5454
$message->setData($result->toBase64());
@@ -58,28 +58,28 @@ public function serialize(ResultInterface $result): AgentContent
5858
$items[] = $this->serialize($item);
5959
}
6060

61-
$message = new AgentContentChoice();
61+
$message = new ItemChoice();
6262
$message->setType('choice');
6363
$message->setItems($items);
6464
} elseif ($result instanceof ObjectResult) {
65-
$message = new AgentContentObject();
65+
$message = new ItemObject();
6666
$message->setType('object');
6767
$message->setPayload($result->getContent());
6868
} elseif ($result instanceof TextResult) {
69-
$message = new AgentContentText();
69+
$message = new ItemText();
7070
$message->setType('text');
7171
$message->setContent($result->getContent());
7272
} elseif ($result instanceof ToolCallResult) {
7373
$functions = [];
7474
foreach ($result->getContent() as $toolCall) {
75-
$function = new AgentContentToolCallFunction();
75+
$function = new ItemToolCallFunction();
7676
$function->setName($toolCall->getName());
7777
$function->setArguments(Parser::encode($toolCall->getArguments()));
7878
$function->setId($toolCall->getId());
7979
$functions[] = $function;
8080
}
8181

82-
$message = new AgentContentToolCall();
82+
$message = new ItemToolCall();
8383
$message->setType('tool_call');
8484
$message->setFunctions($functions);
8585
} else {

src/Service/Agent/Unserializer/MessageUnserializer.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020

2121
namespace Fusio\Impl\Service\Agent\Unserializer;
2222

23-
use Fusio\Model\Common\AgentContent;
24-
use Fusio\Model\Common\AgentContentBinary;
25-
use Fusio\Model\Common\AgentContentObject;
26-
use Fusio\Model\Common\AgentContentText;
27-
use Fusio\Model\Common\AgentContentToolCall;
23+
use Fusio\Model\Agent\Item;
24+
use Fusio\Model\Agent\ItemBinary;
25+
use Fusio\Model\Agent\ItemObject;
26+
use Fusio\Model\Agent\ItemText;
27+
use Fusio\Model\Agent\ItemToolCall;
2828
use PSX\Http\Exception\BadRequestException;
2929
use PSX\Json\Parser;
3030
use Symfony\AI\Platform\Message\Content\File;
@@ -41,16 +41,16 @@
4141
*/
4242
readonly class MessageUnserializer
4343
{
44-
public function unserialize(AgentContent $content): MessageBag
44+
public function unserialize(Item $content): MessageBag
4545
{
4646
$messages = new MessageBag();
47-
if ($content instanceof AgentContentText) {
47+
if ($content instanceof ItemText) {
4848
$messages->add(Message::ofUser($content->getContent()));
49-
} elseif ($content instanceof AgentContentObject) {
49+
} elseif ($content instanceof ItemObject) {
5050
$messages->add(Message::ofUser(Parser::encode($content->getPayload())));
51-
} elseif ($content instanceof AgentContentBinary) {
51+
} elseif ($content instanceof ItemBinary) {
5252
$messages->add(Message::ofUser(new File($content->getData(), $content->getMime())));
53-
} elseif ($content instanceof AgentContentToolCall) {
53+
} elseif ($content instanceof ItemToolCall) {
5454
$functions = $content->getFunctions();
5555
foreach ($functions as $function) {
5656
$toolCall = new ToolCall($function->getId(), $function->getName(), Parser::decode($function->getArguments()));

0 commit comments

Comments
 (0)