diff options
author | jld3103 <jld3103yt@gmail.com> | 2023-07-31 11:58:54 +0200 |
---|---|---|
committer | Julien Veyssier <julien-nc@posteo.net> | 2023-07-31 14:09:12 +0200 |
commit | dca22c1d2c22f9931e5fc4cc22fe3c5c8be50b36 (patch) | |
tree | 6f2cc4d7453836961527e800e5beb8bc41fbe227 /core | |
parent | 8c846ce1035052d9450495da2a056e31e8560899 (diff) | |
download | nextcloud-server-dca22c1d2c22f9931e5fc4cc22fe3c5c8be50b36.tar.gz nextcloud-server-dca22c1d2c22f9931e5fc4cc22fe3c5c8be50b36.zip |
core: Document text processing API
Signed-off-by: jld3103 <jld3103yt@gmail.com>
Diffstat (limited to 'core')
-rw-r--r-- | core/Controller/TextProcessingApiController.php | 23 | ||||
-rw-r--r-- | core/ResponseDefinitions.php | 11 | ||||
-rw-r--r-- | core/openapi.json | 485 |
3 files changed, 519 insertions, 0 deletions
diff --git a/core/Controller/TextProcessingApiController.php b/core/Controller/TextProcessingApiController.php index 9ed332644e1..122595bb151 100644 --- a/core/Controller/TextProcessingApiController.php +++ b/core/Controller/TextProcessingApiController.php @@ -27,6 +27,7 @@ declare(strict_types=1); namespace OC\Core\Controller; use InvalidArgumentException; +use OCA\Core\ResponseDefinitions; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\Common\Exception\NotFoundException; @@ -41,6 +42,9 @@ use Psr\Container\ContainerInterface; use Psr\Container\NotFoundExceptionInterface; use Psr\Log\LoggerInterface; +/** + * @psalm-import-type CoreTextProcessingTask from ResponseDefinitions + */ class TextProcessingApiController extends \OCP\AppFramework\OCSController { public function __construct( string $appName, @@ -58,10 +62,13 @@ class TextProcessingApiController extends \OCP\AppFramework\OCSController { * This endpoint returns all available LanguageModel task types * * @PublicPage + * + * @return DataResponse<Http::STATUS_OK, array{types: array{id: string, name: string, description: string}[]}, array{}> */ public function taskTypes(): DataResponse { $typeClasses = $this->languageModelManager->getAvailableTaskTypes(); $types = []; + /** @var string $typeClass */ foreach ($typeClasses as $typeClass) { try { /** @var ITaskType $object */ @@ -88,6 +95,17 @@ class TextProcessingApiController extends \OCP\AppFramework\OCSController { * @PublicPage * @UserRateThrottle(limit=20, period=120) * @AnonRateThrottle(limit=5, period=120) + * + * @param string $input Input text + * @param string $type Type of the task + * @param string $appId ID of the app that will execute the task + * @param string $identifier An arbitrary identifier for the task + * + * @return DataResponse<Http::STATUS_OK, array{task: CoreTextProcessingTask}, array{}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_PRECONDITION_FAILED, array{message: string}, array{}> + * + * 200: Task scheduled successfully + * 400: Scheduling task is not possible + * 412: Scheduling task is not possible */ public function schedule(string $input, string $type, string $appId, string $identifier = ''): DataResponse { try { @@ -114,6 +132,11 @@ class TextProcessingApiController extends \OCP\AppFramework\OCSController { * * @PublicPage * @param int $id The id of the task + * + * @return DataResponse<Http::STATUS_OK, array{task: CoreTextProcessingTask}, array{}>|DataResponse<Http::STATUS_NOT_FOUND|Http::STATUS_INTERNAL_SERVER_ERROR, array{message: string}, array{}> + * + * 200: Task returned + * 404: Task not found */ public function getTask(int $id): DataResponse { try { diff --git a/core/ResponseDefinitions.php b/core/ResponseDefinitions.php index 9ca194ef8fb..3820e71645d 100644 --- a/core/ResponseDefinitions.php +++ b/core/ResponseDefinitions.php @@ -126,6 +126,17 @@ namespace OCA\Core; * subline: string, * shareWithDisplayNameUnique: string, * } + * + * @psalm-type CoreTextProcessingTask = array{ + * id: ?int, + * type: string, + * status: 0|1|2|3|4, + * userId: ?string, + * appId: string, + * input: string, + * output: ?string, + * identifier: string, + * } */ class ResponseDefinitions { } diff --git a/core/openapi.json b/core/openapi.json index 89edc4114f2..de65f08a4ee 100644 --- a/core/openapi.json +++ b/core/openapi.json @@ -372,6 +372,70 @@ } } }, + "TextProcessingTask": { + "type": "object", + "required": [ + "id", + "type", + "status", + "userId", + "appId", + "input", + "output", + "identifier" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64", + "nullable": true + }, + "type": { + "type": "string" + }, + "status": { + "oneOf": [ + { + "type": "integer", + "format": "int64" + }, + { + "type": "integer", + "format": "int64" + }, + { + "type": "integer", + "format": "int64" + }, + { + "type": "integer", + "format": "int64" + }, + { + "type": "integer", + "format": "int64" + } + ] + }, + "userId": { + "type": "string", + "nullable": true + }, + "appId": { + "type": "string" + }, + "input": { + "type": "string" + }, + "output": { + "type": "string", + "nullable": true + }, + "identifier": { + "type": "string" + } + } + }, "UnifiedSearchProvider": { "type": "object", "required": [ @@ -4181,6 +4245,427 @@ } } }, + "/ocs/v2.php/textprocessing/tasktypes": { + "get": { + "operationId": "text_processing_api-task-types", + "summary": "This endpoint returns all available LanguageModel task types", + "tags": [ + "text_processing_api" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "OCS-APIRequest", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "true" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "types" + ], + "properties": { + "types": { + "type": "object", + "required": [ + "id", + "name", + "description" + ], + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/textprocessing/schedule": { + "post": { + "operationId": "text_processing_api-schedule", + "summary": "This endpoint allows scheduling a language model task", + "tags": [ + "text_processing_api" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "input", + "in": "query", + "description": "Input text", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "type", + "in": "query", + "description": "Type of the task", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "appId", + "in": "query", + "description": "ID of the app that will execute the task", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "identifier", + "in": "query", + "description": "An arbitrary identifier for the task", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "true" + } + } + ], + "responses": { + "200": { + "description": "Task scheduled successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "task" + ], + "properties": { + "task": { + "$ref": "#/components/schemas/TextProcessingTask" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Scheduling task is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "412": { + "description": "Scheduling task is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/textprocessing/task/{id}": { + "get": { + "operationId": "text_processing_api-get-task", + "summary": "This endpoint allows checking the status and results of a task. Tasks are removed 1 week after receiving their last update.", + "tags": [ + "text_processing_api" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The id of the task", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "true" + } + } + ], + "responses": { + "200": { + "description": "Task returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "task" + ], + "properties": { + "task": { + "$ref": "#/components/schemas/TextProcessingTask" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Task not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "500": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, "/status.php": { "get": { "operationId": "get-status", |