Skip to content

Commit

Permalink
Enh: Improve smart replies prompt
Browse files Browse the repository at this point in the history
Signed-off-by: Hamza Mahjoubi <[email protected]>
  • Loading branch information
hamza221 committed Feb 29, 2024
1 parent 5993c11 commit 9819a1a
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 7 deletions.
2 changes: 1 addition & 1 deletion lib/Controller/MessagesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -908,7 +908,7 @@ public function smartReply(int $messageId):JSONResponse {
return new JSONResponse([], Http::STATUS_FORBIDDEN);
}
try {
$replies = $this->aiIntegrationService->getSmartReply($account, $mailbox, $message, $this->currentUserId);
$replies = array_values($this->aiIntegrationService->getSmartReply($account, $mailbox, $message, $this->currentUserId));
} catch (ServiceException $e) {
$this->logger->error('Smart reply failed: ' . $e->getMessage(), [
'exception' => $e,
Expand Down
25 changes: 19 additions & 6 deletions lib/Service/AiIntegrations/AiIntegrationsService.php
Original file line number Diff line number Diff line change
Expand Up @@ -176,9 +176,9 @@ public function getSmartReply(Account $account, Mailbox $mailbox, Message $messa
throw new ServiceException('Text processing is not available in your current Nextcloud version', 0, $e);
}
if (in_array(FreePromptTaskType::class, $manager->getAvailableTaskTypes(), true)) {
$cachedReplies = $this->cache->getValue('smartReplies_'.$message->getId());
$cachedReplies = $this->cache->getValue('smartReplies_'.$message->getUid());
if ($cachedReplies) {
return explode("|", $cachedReplies);
return json_decode($cachedReplies, true);
}
$client = $this->clientFactory->getClient($account);
try {
Expand All @@ -196,12 +196,25 @@ public function getSmartReply(Account $account, Mailbox $mailbox, Message $messa
} finally {
$client->logout();
}
$prompt = "Suggest 2 replies to the following email. Each reply should be 25 characters max. Separate the replies with \"| \", like for example \"Yes! | No, I'm not available \". Do not print anything else. The email contents are : ".$messageBody."";
$prompt = "You are tasked with formulating helpful replies or reply templates to e-mails provided that have been sent to me. If you don't know some relevant information for answering the e-mails (like my schedule) leave blanks in the text that can later be filled by me. You must write the replies from my point of view as replies to the original sender of the provided e-mail!
Formulate two extremely succinct reply suggestions to the provided ***E-MAIL***. Please, do not invent any context for the replies but, rather, leave blanks for me to fill in with relevant information where necessary. Provide the output formatted as valid JSON with the keys 'reply1' and 'reply2' for the reply suggestions.
Each suggestion must be of 25 characters or less.
Here is the ***E-MAIL*** for which you must suggest the replies to:
***START_OF_E-MAIL***".$messageBody."
***END_OF_E-MAIL***
Please, output *ONLY* a valid JSON string with the keys 'reply1' and 'reply2' for the reply suggestions. Leave out any other text besides the JSON! Be extremely succinct and write the replies from my point of view.
";
$task = new Task(FreePromptTaskType::class, $prompt, 'mail,', $currentUserId);
$manager->runTask($task);
$replies = array_slice(explode("|", $task->getOutput()), 0, 2);
$this->cache->addValue('smartReplies_'.$message->getUid(), implode("|", $replies));
return $replies;
$replies = $task->getOutput();
$this->cache->addValue('smartReplies_'.$message->getUid(), $replies);
return json_decode($replies, true);

} else {
throw new ServiceException('No language model available for smart replies');
Expand Down

0 comments on commit 9819a1a

Please sign in to comment.