Skip to content

Commit 7bdbfe7

Browse files
committed
check if audio chat is available to show the record button, filter out ContextAgentAudioInteraction in the assistant task type list, change the audio html tag border radius
Signed-off-by: Julien Veyssier <julien-nc@posteo.net>
1 parent 24f3ec6 commit 7bdbfe7

File tree

6 files changed

+31
-5
lines changed

6 files changed

+31
-5
lines changed

lib/Listener/BeforeTemplateRenderedListener.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ public function handle(Event $event): void {
6666
$indexingComplete = $this->appConfig->getValueInt('context_chat', 'last_indexed_time', 0) !== 0;
6767
$this->initialStateService->provideInitialState('contextChatIndexingComplete', $indexingComplete);
6868
$this->initialStateService->provideInitialState('contextAgentToolSources', $this->assistantService->informationSources);
69+
$this->initialStateService->provideInitialState('isAudioChatAvailable', $this->assistantService->isAudioChatAvailable());
6970
$autoplayAudioChat = $this->config->getUserValue($this->userId, Application::APP_ID, 'autoplay_audio_chat', '1') === '1';
7071
$this->initialStateService->provideInitialState('autoplayAudioChat', $autoplayAudioChat);
7172
}

lib/Listener/ChattyLLMTaskListener.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
use OCP\EventDispatcher\IEventListener;
1919
use OCP\TaskProcessing\Events\TaskSuccessfulEvent;
2020
use OCP\TaskProcessing\Task;
21-
use OCP\TaskProcessing\TaskTypes\TextToSpeech;
2221
use Psr\Log\LoggerInterface;
2322

2423
/**
@@ -96,6 +95,7 @@ public function handle(Event $event): void {
9695
$queryMessage = $this->messageMapper->getMessageById($queryMessageId);
9796
$queryMessage->setContent(trim($taskOutput['input_transcript'] ?? ''));
9897
$this->messageMapper->update($queryMessage);
98+
// TODO update session title if it's the first message
9999
}
100100
} else {
101101
$content = trim($taskOutput['output'] ?? '');
@@ -138,7 +138,7 @@ private function runTtsIfNeeded(int $sessionId, Message $message, string $taskTy
138138
$attachments = $lastNonEmptyMessage->jsonSerialize()['attachments'] ?? [];
139139
foreach ($attachments as $attachment) {
140140
if ($attachment['type'] === 'Audio') {
141-
// we found an audio attachment
141+
// we found an audio attachment, response should be audio
142142
$this->runTtsTask($message, $userId);
143143
return;
144144
}
@@ -152,7 +152,7 @@ private function runTtsIfNeeded(int $sessionId, Message $message, string $taskTy
152152
*/
153153
private function runTtsTask(Message $message, ?string $userId): void {
154154
$task = new Task(
155-
TextToSpeech::ID,
155+
\OCP\TaskProcessing\TaskTypes\TextToSpeech::ID,
156156
['input' => $message->getContent()],
157157
Application::APP_ID . ':internal',
158158
$userId,

lib/Service/AssistantService.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,17 @@ public function cancelNotifyWhenReady(int $taskId, string $userId): void {
212212
$this->taskNotificationMapper->deleteByTaskId($taskId);
213213
}
214214

215+
public function isAudioChatAvailable(): bool {
216+
$availableTaskTypes = $this->taskProcessingManager->getAvailableTaskTypes();
217+
// we have at least the simple audio chat task type and the 3 sub task types available
218+
return class_exists('OCP\\TaskProcessing\\TaskTypes\\AudioToAudioChat')
219+
&& array_key_exists(\OCP\TaskProcessing\TaskTypes\AudioToAudioChat::ID, $availableTaskTypes)
220+
&& array_key_exists(AudioToText::ID, $availableTaskTypes)
221+
&& class_exists('OCP\\TaskProcessing\\TaskTypes\\TextToSpeech')
222+
&& array_key_exists(\OCP\TaskProcessing\TaskTypes\TextToSpeech::ID, $availableTaskTypes)
223+
&& array_key_exists(TextToTextChat::ID, $availableTaskTypes);
224+
}
225+
215226
/**
216227
* @return array<AssistantTaskProcessingTaskType>
217228
*/
@@ -281,6 +292,10 @@ public function getAvailableTaskTypes(): array {
281292
&& $typeId === \OCP\TaskProcessing\TaskTypes\ContextAgentInteraction::ID) {
282293
continue;
283294
}
295+
if (class_exists('OCP\\TaskProcessing\\TaskTypes\\ContextAgentAudioInteraction')
296+
&& $typeId === \OCP\TaskProcessing\TaskTypes\ContextAgentAudioInteraction::ID) {
297+
continue;
298+
}
284299
if (class_exists('OCP\\TaskProcessing\\TaskTypes\\AudioToAudioChat')
285300
&& $typeId === \OCP\TaskProcessing\TaskTypes\AudioToAudioChat::ID) {
286301
continue;

src/components/ChattyLLM/ChattyLLMInputForm.vue

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -775,6 +775,14 @@ export default {
775775
getChatURL(`/sessions/${lastHumanMessage.session_id}/messages/${lastHumanMessage.id}`),
776776
)
777777
lastHumanMessage.content = updatedMessage.data.content
778+
// TODO update session title (just i the frontend data, the db session is updated in the backend listener)
779+
/*
780+
const firstHumanMessage = this.messages.length === 1 && this.messages[0].role === Roles.HUMAN
781+
if (firstHumanMessage) {
782+
const session = this.sessions.find((session) => session.id === sessionId)
783+
session.title = content
784+
}
785+
*/
778786
}
779787
},
780788

src/components/ChattyLLM/InputArea.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
@update:model-value="$emit('update:chatContent', $event)"
1919
@submit="$emit('submit', $event)" />
2020
<div class="input-area__button-box">
21-
<NcButton v-if="chatContent"
21+
<NcButton v-if="!isAudioChatAvailable || chatContent"
2222
class="input-area__button-box__button"
2323
:aria-label="submitBtnAriaText"
2424
:disabled="disabled || !chatContent.trim()"
@@ -49,6 +49,7 @@ import isMobile from '../../mixins/isMobile.js'
4949
import { generateOcsUrl } from '@nextcloud/router'
5050
import axios from '@nextcloud/axios'
5151
import { showError } from '@nextcloud/dialogs'
52+
import { loadState } from '@nextcloud/initial-state'
5253
5354
/*
5455
maxlength calculation (just a rough estimate):
@@ -103,6 +104,7 @@ export default {
103104
thinkingText: t('assistant', 'Processing…'),
104105
submitBtnAriaText: t('assistant', 'Submit'),
105106
isRecording: false,
107+
isAudioChatAvailable: loadState('assistant', 'isAudioChatAvailable', false),
106108
}
107109
},
108110

src/components/fields/AudioDisplay.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export default {
7878

7979
<style scoped lang="scss">
8080
audio {
81-
border-radius: 16px;
81+
border-radius: 100px;
8282
&.shadowed {
8383
border: 2px solid var(--color-primary-element);
8484
}

0 commit comments

Comments
 (0)