Skip to content

Commit 039c6ce

Browse files
committed
handle parent
1 parent 8df3184 commit 039c6ce

File tree

4 files changed

+31
-15
lines changed

4 files changed

+31
-15
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ public function handle(RequestInterface $request, ParametersInterface $configura
4848
assert($body instanceof AgentInput);
4949

5050
$output = $this->sender->send(
51-
$request->get('agent_id'),
51+
(int) $request->get('agent_id'),
52+
(int) $request->get('parent'),
5253
$body,
5354
$context,
5455
);

src/Installation/NewInstallation.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,7 @@ private static function getOperations(): array
350350
httpPath: '/agent/$agent_id<[0-9]+|^~>/message',
351351
httpCode: 201,
352352
outgoing: Model\Backend\AgentOutput::class,
353+
parameters: ['parent' => PropertyTypeFactory::getInteger()],
353354
incoming: Model\Backend\AgentInput::class,
354355
throws: [999 => Model\Common\Message::class],
355356
description: 'Submits a new agent message',

src/Service/Agent/Sender.php

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public function __construct(
7373
$this->objectMapper = new ObjectMapper($schemaManager);
7474
}
7575

76-
public function send(int $agentId, AgentInput $message, ContextInterface $context): AgentOutput
76+
public function send(int $agentId, int $parentId, AgentInput $message, ContextInterface $context): AgentOutput
7777
{
7878
$row = $this->agentTable->findOneByTenantAndId($context->getTenantId(), $context->getUser()->getCategoryId(), $agentId);
7979
if (!$row instanceof Table\Generated\AgentRow) {
@@ -93,11 +93,13 @@ public function send(int $agentId, AgentInput $message, ContextInterface $contex
9393
$messages = new MessageBag();
9494
$messages->add(Message::forSystem($row->getIntroduction()));
9595

96-
$messages = $this->loadPreviousMessages($agentId, $context->getUser()->getId(), $messages);
96+
if ($parentId > 0) {
97+
$messages = $this->loadPreviousMessages($agentId, $context->getUser()->getId(), $parentId, $messages);
98+
}
9799

98100
$userMessages = $this->messageUnserializer->unserialize($input);
99101

100-
$this->persistUserMessages($agentId, $context->getUser()->getId(), $userMessages);
102+
$parentId = $this->persistUserMessages($agentId, $context->getUser()->getId(), $parentId, $userMessages);
101103

102104
$messages = $messages->merge($userMessages);
103105

@@ -126,7 +128,7 @@ public function send(int $agentId, AgentInput $message, ContextInterface $contex
126128
$output = $this->resultSerializer->serialize($result);
127129
}
128130

129-
$messageRow = $this->messageTable->addAssistantMessage($row->getId(), $context->getUser()->getId(), $output);
131+
$messageRow = $this->messageTable->addAssistantMessage($row->getId(), $context->getUser()->getId(), $parentId, $output);
130132

131133
$this->agentTable->commit();
132134

@@ -145,11 +147,16 @@ public function send(int $agentId, AgentInput $message, ContextInterface $contex
145147
}
146148
}
147149

148-
private function loadPreviousMessages(int $agentId, int $userId, MessageBag $messages): MessageBag
150+
private function loadPreviousMessages(int $agentId, int $userId, int $parentId, MessageBag $messages): MessageBag
149151
{
152+
$idCondition = Condition::withOr();
153+
$idCondition->equals(Table\Generated\AgentMessageColumn::ID, $parentId);
154+
$idCondition->equals(Table\Generated\AgentMessageColumn::PARENT_ID, $parentId);
155+
150156
$condition = Condition::withAnd();
151157
$condition->equals(Table\Generated\AgentMessageColumn::AGENT_ID, $agentId);
152158
$condition->equals(Table\Generated\AgentMessageColumn::USER_ID, $userId);
159+
$condition->add($idCondition);
153160

154161
$count = $this->messageTable->getCount($condition);
155162
$startIndex = max(0, $count - self::CONTEXT_MESSAGES_LENGTH);
@@ -178,13 +185,19 @@ private function loadPreviousMessages(int $agentId, int $userId, MessageBag $mes
178185
return $messages;
179186
}
180187

181-
private function persistUserMessages(int $agentId, int $userId, MessageBag $userMessages): void
188+
private function persistUserMessages(int $agentId, int $userId, int $parentId, MessageBag $userMessages): int
182189
{
183190
foreach ($userMessages as $userMessage) {
184191
foreach ($this->messageSerializer->serialize($userMessage) as $content) {
185-
$this->messageTable->addUserMessage($agentId, $userId, $content);
192+
$message = $this->messageTable->addUserMessage($agentId, $userId, $parentId, $content);
193+
194+
if ($parentId === 0) {
195+
$parentId = $message->getId();
196+
}
186197
}
187198
}
199+
200+
return $parentId;
188201
}
189202

190203
private function getResponseSchema(Table\Generated\AgentRow $row): ?array

src/Table/Agent/Message.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,19 @@ class Message extends Generated\AgentMessageTable
3939
public const ORIGIN_ASSISTANT = 0x2;
4040
public const ORIGIN_SYSTEM = 0x3;
4141

42-
public function addUserMessage(int $agentId, int $userId, AgentContent $content): Generated\AgentMessageRow
42+
public function addUserMessage(int $agentId, int $userId, int $parentId, AgentContent $content): Generated\AgentMessageRow
4343
{
44-
return $this->addMessage($agentId, $userId, self::ORIGIN_USER, $content);
44+
return $this->addMessage($agentId, $userId, $parentId, self::ORIGIN_USER, $content);
4545
}
4646

47-
public function addAssistantMessage(int $agentId, int $userId, AgentContent $content): Generated\AgentMessageRow
47+
public function addAssistantMessage(int $agentId, int $userId, int $parentId, AgentContent $content): Generated\AgentMessageRow
4848
{
49-
return $this->addMessage($agentId, $userId, self::ORIGIN_ASSISTANT, $content);
49+
return $this->addMessage($agentId, $userId, $parentId, self::ORIGIN_ASSISTANT, $content);
5050
}
5151

52-
public function addSystemMessage(int $agentId, int $userId, AgentContent $content): Generated\AgentMessageRow
52+
public function addSystemMessage(int $agentId, int $userId, int $parentId, AgentContent $content): Generated\AgentMessageRow
5353
{
54-
return $this->addMessage($agentId, $userId, self::ORIGIN_SYSTEM, $content);
54+
return $this->addMessage($agentId, $userId, $parentId, self::ORIGIN_SYSTEM, $content);
5555
}
5656

5757
public function reset(int $agentId, int $userId): void
@@ -63,11 +63,12 @@ public function reset(int $agentId, int $userId): void
6363
$this->deleteBy($condition);
6464
}
6565

66-
private function addMessage(int $agentId, int $userId, int $role, AgentContent $content): Generated\AgentMessageRow
66+
private function addMessage(int $agentId, int $userId, int $parentId, int $role, AgentContent $content): Generated\AgentMessageRow
6767
{
6868
$row = new Generated\AgentMessageRow();
6969
$row->setAgentId($agentId);
7070
$row->setUserId($userId);
71+
$row->setParentId($parentId === 0 ? null : $parentId);
7172
$row->setOrigin($role);
7273
$row->setContent(Parser::encode($content));
7374
$row->setInsertDate(LocalDateTime::now());

0 commit comments

Comments
 (0)