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", 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 b3f10305e0..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 @@ -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..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,18 +14,10 @@ data class TaskTypes( data class TaskTypeData( val id: String?, - val name: 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(