Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7000814
feat(streaming): update task output while polling, display form if th…
julien-nc May 13, 2026
88fb7f0
feat(streaming): show notify and cancel buttons in the task header wh…
julien-nc May 13, 2026
ff62a8e
feat(streaming): adjust chat UI to display intermediate/streaming mes…
julien-nc May 13, 2026
a3ed7e7
make the dialog initial width 70%
julien-nc May 13, 2026
80e1ce2
add a loading icon in the output form while streaming
julien-nc May 13, 2026
3e004fb
add @nextcloud/notify_push
julien-nc May 13, 2026
0b42d40
feat(streaming): use notify_push to get the polled task's output
julien-nc May 13, 2026
8ceb462
feat(streaming): use notify_push to get the polled chat message gener…
julien-nc May 13, 2026
394966c
bump max nc version to 35
julien-nc May 18, 2026
150b6bf
start listening to notify_push messages when loading a task in the ge…
julien-nc May 18, 2026
e7ecb93
prevent listening notify push msgs twice for the same task after swit…
julien-nc May 18, 2026
848f993
regenerate openapi specs, fix psalm issue
julien-nc May 18, 2026
9855816
add simple pulse animation to output fields when streaming
julien-nc May 18, 2026
df47738
start listening to notify_push messages when loading a task from a no…
julien-nc May 19, 2026
a4e1ea4
add pulse animation to 'getting results...' label
julien-nc May 19, 2026
8a9ae4d
disable all animations when prefers-reduced-motion is enabled
julien-nc May 19, 2026
7bbfef5
remove form header title blink animation, use the copy button in text…
julien-nc May 19, 2026
a98823f
polish chat UI
julien-nc May 20, 2026
b497b3b
make sure we handle the case where there is no push message body
julien-nc May 20, 2026
f3de70d
do not update the output when polling while streaming
julien-nc May 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ More details on how to set this up in the [admin docs](https://docs.nextcloud.co
<screenshot>https://github.com/nextcloud/assistant/raw/main/img/screenshots/screenshot6.png</screenshot>
<screenshot>https://github.com/nextcloud/assistant/raw/main/img/screenshots/screenshot7.png</screenshot>
<dependencies>
<nextcloud min-version="33" max-version="34"/>
<nextcloud min-version="33" max-version="35"/>
</dependencies>
<settings>
<admin>OCA\Assistant\Settings\Admin</admin>
Expand Down
11 changes: 9 additions & 2 deletions lib/Controller/ChattyLLMController.php
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,7 @@ public function regenerateForSession(int $sessionId, int $messageId): JSONRespon
*
* @param int $taskId The message generation task ID
* @param int $sessionId The chat session ID
* @return JSONResponse<Http::STATUS_OK, AssistantChatAgencyMessage, array{}>|JSONResponse<Http::STATUS_EXPECTATION_FAILED, array{task_status: int, slow_pickup: bool}, array{}>|JSONResponse<Http::STATUS_INTERNAL_SERVER_ERROR|Http::STATUS_UNAUTHORIZED|Http::STATUS_BAD_REQUEST|Http::STATUS_NOT_FOUND, array{error: string}, array{}>
* @return JSONResponse<Http::STATUS_OK, AssistantChatAgencyMessage, array{}>|JSONResponse<Http::STATUS_EXPECTATION_FAILED, array{task_status: int, slow_pickup: bool, task_output?: array<string, list<numeric|string>|numeric|string>|null}, array{}>|JSONResponse<Http::STATUS_INTERNAL_SERVER_ERROR|Http::STATUS_UNAUTHORIZED|Http::STATUS_BAD_REQUEST|Http::STATUS_NOT_FOUND, array{error: string}, array{}>
* @throws MultipleObjectsReturnedException
* @throws \OCP\DB\Exception
*
Expand Down Expand Up @@ -599,7 +599,14 @@ public function checkMessageGenerationTask(int $taskId, int $sessionId): JSONRes
} elseif ($task->getstatus() === Task::STATUS_RUNNING || $task->getstatus() === Task::STATUS_SCHEDULED) {
$startTime = $task->getStartedAt() ?? time();
$slowPickup = ($task->getScheduledAt() + (60 * 5)) < $startTime;
return new JSONResponse(['task_status' => $task->getstatus(), 'slow_pickup' => $slowPickup], Http::STATUS_EXPECTATION_FAILED);
$responsePayload = [
'task_status' => $task->getstatus(),
'slow_pickup' => $slowPickup,
];
if ($task->getstatus() === Task::STATUS_RUNNING) {
$responsePayload['task_output'] = $task->getOutput();
}
return new JSONResponse($responsePayload, Http::STATUS_EXPECTATION_FAILED);
} elseif ($task->getstatus() === Task::STATUS_FAILED || $task->getstatus() === Task::STATUS_CANCELLED) {
return new JSONResponse(['error' => 'task_failed_or_canceled', 'task_status' => $task->getstatus()], Http::STATUS_BAD_REQUEST);
}
Expand Down
27 changes: 27 additions & 0 deletions openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -4852,6 +4852,33 @@
},
"slow_pickup": {
"type": "boolean"
},
"task_output": {
"type": "object",
"nullable": true,
"additionalProperties": {
"oneOf": [
{
"type": "array",
"items": {
"oneOf": [
{
"type": "number"
},
{
"type": "string"
}
]
}
},
{
"type": "number"
},
{
"type": "string"
}
]
}
}
}
}
Expand Down
Loading
Loading