Skip to content

Commit fb35e92

Browse files
committed
fix: correctly order messages when getting the system prompt one, improve the query by applying a role filter
Signed-off-by: Julien Veyssier <julien-nc@posteo.net>
1 parent ad30559 commit fb35e92

2 files changed

Lines changed: 10 additions & 7 deletions

File tree

‎lib/Db/ChattyLLM/MessageMapper.php‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,22 @@ public function __construct(IDBConnection $db) {
2727
/**
2828
* @param integer $sessionId
2929
* @param integer $n
30+
* @param string|null $role
3031
* @return Message
3132
* @throws \OCP\DB\Exception
3233
* @throws \RuntimeException
3334
* @throws \OCP\AppFramework\Db\DoesNotExistException
3435
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
3536
*/
36-
public function getFirstNMessages(int $sessionId, int $n = 1): Message {
37+
public function getFirstNMessages(int $sessionId, int $n = 1, ?string $role = null): Message {
3738
$qb = $this->db->getQueryBuilder();
3839
$qb->select(Message::$columns)
3940
->from($this->getTableName())
40-
->where($qb->expr()->eq('session_id', $qb->createPositionalParameter($sessionId, IQueryBuilder::PARAM_INT)))
41+
->where($qb->expr()->eq('session_id', $qb->createPositionalParameter($sessionId, IQueryBuilder::PARAM_INT)));
42+
if ($role !== null) {
43+
$qb->andWhere($qb->expr()->eq('role', $qb->createPositionalParameter($role, IQueryBuilder::PARAM_STR)));
44+
}
45+
$qb->orderBy('timestamp', 'ASC')
4146
->setMaxResults($n);
4247

4348
return $this->findEntity($qb);

‎lib/Service/ChatService.php‎

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -415,15 +415,13 @@ public function scheduleMessageGeneration(?string $userId, int $sessionId, int $
415415
// classic chat
416416
$systemPrompt = '';
417417
try {
418-
$firstMessage = $this->messageMapper->getFirstNMessages($sessionId, 1);
418+
$firstMessage = $this->messageMapper->getFirstNMessages($sessionId, 1, Message::ROLE_SYSTEM);
419+
$systemPrompt = $firstMessage->getContent();
419420
} catch (DoesNotExistException $e) {
420-
throw new NotFoundException($this->l10n->t('No message found in this session'), previous: $e);
421+
$this->logger->info('No system message found in the session', ['exception' => $e, 'sessionId' => $sessionId]);
421422
} catch (MultipleObjectsReturnedException|Exception $e) {
422423
throw new InternalException(previous: $e);
423424
}
424-
if ($firstMessage->getRole() === Message::ROLE_SYSTEM) {
425-
$systemPrompt = $firstMessage->getContent();
426-
}
427425
try {
428426
$history = $this->getRawLastMessages($sessionId);
429427
} catch (Exception|AppConfigTypeConflictException $e) {

0 commit comments

Comments
 (0)