From 95931e5e3241a33c614b40496106bdb433b037d2 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Tue, 1 Jul 2025 12:40:14 +0200 Subject: [PATCH 1/3] filter SingleTextInputOutput Signed-off-by: alperozturk --- .../v2/GetTaskTypesRemoteOperationV2.kt | 60 +++++++++++++++---- .../resources/assistant/v2/model/TaskTypes.kt | 18 ++---- 2 files changed, 54 insertions(+), 24 deletions(-) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/GetTaskTypesRemoteOperationV2.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/GetTaskTypesRemoteOperationV2.kt index b3f10305e0..6245e3cf0c 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/GetTaskTypesRemoteOperationV2.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/GetTaskTypesRemoteOperationV2.kt @@ -19,6 +19,32 @@ import com.owncloud.android.lib.resources.assistant.v2.model.TaskTypeData import com.owncloud.android.lib.resources.assistant.v2.model.TaskTypes import org.apache.commons.httpclient.HttpStatus +/** + * Returns a list of supported task types. + * + * Example JSON representation of one task type: + * ``` + * { + * "id": "core:text2text", + * "name": "Free text to text prompt", + * "description": "Runs an arbitrary prompt through a language model that returns a reply", + * "inputShape": { + * "input": { + * "name": "Prompt", + * "description": "Describe a task that you want the assistant to do or ask a question", + * "type": "Text" + * } + * }, + * "outputShape": { + * "output": { + * "name": "Generated reply", + * "description": "The generated text from the assistant", + * "type": "Text" + * } + * } + * } + * ``` + */ class GetTaskTypesRemoteOperationV2 : OCSRemoteOperation>() { private val supportedTaskType = "Text" @@ -36,21 +62,18 @@ class GetTaskTypesRemoteOperationV2 : OCSRemoteOperation>() { getServerResponse( getMethod, object : TypeToken>() {} - )?.ocs?.data?.types + ) val taskTypeList = - response?.map { (key, value) -> - value.copy(id = value.id ?: key) - } - - val supportedTaskTypeList = - taskTypeList?.filter { taskType -> - taskType.inputShape?.input?.type == supportedTaskType && - taskType.outputShape?.output?.type == supportedTaskType - } + response + ?.ocs + ?.data + ?.types + ?.map { (key, value) -> value.copy(id = value.id ?: key) } + ?.filter { taskType -> isSingleTextInputOutput(taskType) } result = RemoteOperationResult(true, getMethod) - result.setResultData(supportedTaskTypeList) + result.resultData = taskTypeList } else { result = RemoteOperationResult(false, getMethod) } @@ -67,6 +90,21 @@ class GetTaskTypesRemoteOperationV2 : OCSRemoteOperation>() { return result } + private fun isSingleTextInputOutput(taskType: TaskTypeData): Boolean { + val inputShape = taskType.inputShape + val outputShape = taskType.outputShape + + val hasOneTextInput = + inputShape?.size == 1 && + inputShape.values.first().type == supportedTaskType + + val hasOneTextOutput = + outputShape?.size == 1 && + outputShape.values.first().type == supportedTaskType + + return hasOneTextInput && hasOneTextOutput + } + companion object { private val TAG = GetTaskTypesRemoteOperationV2::class.java.simpleName private const val DIRECT_ENDPOINT = "/ocs/v2.php/taskprocessing/tasktypes" diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt index e0a3861aa6..550c2ff14e 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt @@ -16,20 +16,12 @@ data class TaskTypeData( val id: String?, val name: String?, val description: String?, - val inputShape: TaskInputShape?, - val outputShape: TaskOutputShape? -) - -data class TaskInputShape( - val input: Shape? -) - -data class TaskOutputShape( - val output: Shape? + val inputShape: Map?, + val outputShape: Map? ) data class Shape( - val name: String, - val description: String, - val type: String + val name: String?, + val description: String?, + val type: String? ) From f4f8073a7411b7f038fe13a45125c65c5bfa0152 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Tue, 1 Jul 2025 13:50:40 +0200 Subject: [PATCH 2/3] update tests Signed-off-by: alperozturk --- .../lib/resources/assistant/v2/AssistantV2Tests.kt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/library/src/androidTest/java/com/owncloud/android/lib/resources/assistant/v2/AssistantV2Tests.kt b/library/src/androidTest/java/com/owncloud/android/lib/resources/assistant/v2/AssistantV2Tests.kt index 50222020f0..eb75f9d751 100644 --- a/library/src/androidTest/java/com/owncloud/android/lib/resources/assistant/v2/AssistantV2Tests.kt +++ b/library/src/androidTest/java/com/owncloud/android/lib/resources/assistant/v2/AssistantV2Tests.kt @@ -10,8 +10,6 @@ package com.owncloud.android.lib.resources.assistant.v2 import com.owncloud.android.AbstractIT import com.owncloud.android.lib.resources.assistant.v2.model.Shape -import com.owncloud.android.lib.resources.assistant.v2.model.TaskInputShape -import com.owncloud.android.lib.resources.assistant.v2.model.TaskOutputShape import com.owncloud.android.lib.resources.assistant.v2.model.TaskTypeData import com.owncloud.android.lib.resources.status.NextcloudVersion import junit.framework.TestCase.assertEquals @@ -31,8 +29,8 @@ class AssistantV2Tests : AbstractIT() { "Free text to text prompt", "Runs an arbitrary prompt through a language model that returns a reply", inputShape = - TaskInputShape( - input = + mapOf( + "input" to Shape( "Prompt", "Describe a task that you want the assistant to do or ask a question", @@ -40,8 +38,8 @@ class AssistantV2Tests : AbstractIT() { ) ), outputShape = - TaskOutputShape( - output = + mapOf( + "output" to Shape( "Generated reply", "The generated text from the assistant", From 8fc329be4de0bf3eec3a20614c276ffc3232f46b Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 2 Jul 2025 11:06:10 +0200 Subject: [PATCH 3/3] make field non nullable Signed-off-by: alperozturk --- .../lib/resources/assistant/v1/model/TaskTypes.kt | 6 +++--- .../assistant/v2/GetTaskTypesRemoteOperationV2.kt | 4 ++-- .../lib/resources/assistant/v2/model/TaskTypes.kt | 12 ++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v1/model/TaskTypes.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v1/model/TaskTypes.kt index 2ff084850e..9f2dedf851 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v1/model/TaskTypes.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v1/model/TaskTypes.kt @@ -16,7 +16,7 @@ data class TaskTypes( data class TaskType( val id: String?, - val name: String?, + val name: String, val description: String? ) @@ -26,7 +26,7 @@ fun TaskTypes.toV2(): List = id = taskType.id, name = taskType.name, description = taskType.description, - inputShape = null, - outputShape = null + inputShape = emptyMap(), + outputShape = emptyMap() ) } diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/GetTaskTypesRemoteOperationV2.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/GetTaskTypesRemoteOperationV2.kt index 6245e3cf0c..f7399ff195 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/GetTaskTypesRemoteOperationV2.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/GetTaskTypesRemoteOperationV2.kt @@ -95,11 +95,11 @@ class GetTaskTypesRemoteOperationV2 : OCSRemoteOperation>() { val outputShape = taskType.outputShape val hasOneTextInput = - inputShape?.size == 1 && + inputShape.size == 1 && inputShape.values.first().type == supportedTaskType val hasOneTextOutput = - outputShape?.size == 1 && + outputShape.size == 1 && outputShape.values.first().type == supportedTaskType return hasOneTextInput && hasOneTextOutput diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt index 550c2ff14e..376260fc03 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt @@ -14,14 +14,14 @@ data class TaskTypes( data class TaskTypeData( val id: String?, - val name: String?, + val name: String, val description: String?, - val inputShape: Map?, - val outputShape: Map? + val inputShape: Map, + val outputShape: Map ) data class Shape( - val name: String?, - val description: String?, - val type: String? + val name: String, + val description: String, + val type: String )