-
-
Notifications
You must be signed in to change notification settings - Fork 4.7k
[TaskProcessing] Add audio-to-audio chat task type #53759
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,112 @@ | ||
| <?php | ||
|
|
||
| declare(strict_types=1); | ||
|
|
||
| /** | ||
| * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors | ||
| * SPDX-License-Identifier: AGPL-3.0-or-later | ||
| */ | ||
|
|
||
| namespace OCP\TaskProcessing\TaskTypes; | ||
|
|
||
| use OCP\IL10N; | ||
| use OCP\L10N\IFactory; | ||
| use OCP\TaskProcessing\EShapeType; | ||
| use OCP\TaskProcessing\ITaskType; | ||
| use OCP\TaskProcessing\ShapeDescriptor; | ||
|
|
||
| /** | ||
| * This is the task processing task type for text chat | ||
| * @since 32.0.0 | ||
| */ | ||
| class AudioToAudioChat implements ITaskType { | ||
| /** | ||
| * @since 32.0.0 | ||
| */ | ||
| public const ID = 'core:audio2audio:chat'; | ||
|
|
||
| private IL10N $l; | ||
|
|
||
| /** | ||
| * @param IFactory $l10nFactory | ||
| * @since 32.0.0 | ||
| */ | ||
| public function __construct( | ||
| IFactory $l10nFactory, | ||
| ) { | ||
| $this->l = $l10nFactory->get('lib'); | ||
| } | ||
|
|
||
|
|
||
| /** | ||
| * @inheritDoc | ||
| * @since 32.0.0 | ||
| */ | ||
| public function getName(): string { | ||
| return $this->l->t('Audio chat'); | ||
| } | ||
|
|
||
| /** | ||
| * @inheritDoc | ||
| * @since 32.0.0 | ||
| */ | ||
| public function getDescription(): string { | ||
| return $this->l->t('Voice chat with the assistant'); | ||
| } | ||
|
|
||
| /** | ||
| * @return string | ||
| * @since 32.0.0 | ||
| */ | ||
| public function getId(): string { | ||
| return self::ID; | ||
| } | ||
|
|
||
| /** | ||
| * @return ShapeDescriptor[] | ||
| * @since 32.0.0 | ||
| */ | ||
| public function getInputShape(): array { | ||
| return [ | ||
| 'system_prompt' => new ShapeDescriptor( | ||
| $this->l->t('System prompt'), | ||
| $this->l->t('Define rules and assumptions that the assistant should follow during the conversation.'), | ||
| EShapeType::Text | ||
| ), | ||
| 'input' => new ShapeDescriptor( | ||
| $this->l->t('Chat voice message'), | ||
| $this->l->t('Describe a task that you want the assistant to do or ask a question'), | ||
| EShapeType::Audio | ||
| ), | ||
| 'history' => new ShapeDescriptor( | ||
| $this->l->t('Chat history'), | ||
| $this->l->t('The history of chat messages before the current message, starting with a message by the user'), | ||
| EShapeType::ListOfTexts | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Where do we get the texts from?
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. From the chat conversation history in the chat UI.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I see. But if the transcription is an optional output, we may not get it when other providers implement this task type. Do we schedule another transcription task then?
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think so, yes.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, I was thinking that as well, let's make it mandatory
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The input transcription is optional though. Or is it? We need it too for the history. |
||
| ) | ||
| ]; | ||
| } | ||
|
|
||
| /** | ||
| * @return ShapeDescriptor[] | ||
| * @since 32.0.0 | ||
| */ | ||
| public function getOutputShape(): array { | ||
julien-nc marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| return [ | ||
| 'input_transcript' => new ShapeDescriptor( | ||
| $this->l->t('Input transcript'), | ||
| $this->l->t('Transcription of the audio input'), | ||
| EShapeType::Text, | ||
| ), | ||
| 'output' => new ShapeDescriptor( | ||
| $this->l->t('Response voice message'), | ||
| $this->l->t('The generated voice response as part of the conversation'), | ||
| EShapeType::Audio | ||
| ), | ||
| 'output_transcript' => new ShapeDescriptor( | ||
| $this->l->t('Output transcript'), | ||
| $this->l->t('Transcription of the audio output'), | ||
| EShapeType::Text, | ||
| ), | ||
| ]; | ||
| } | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.