From 9935034480eabc8d6ece586f7af0a11117f516f4 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 20 Jun 2023 17:30:07 +0200 Subject: [PATCH] LLM OCP API: Add @since Signed-off-by: Marcel Klehr --- .../AbstractLanguageModelTask.php | 38 +++++++++++++++++ .../LanguageModel/Events/TaskFailedEvent.php | 1 + lib/public/LanguageModel/FreePromptTask.php | 10 +++-- lib/public/LanguageModel/HeadlineTask.php | 6 +++ .../LanguageModel/ILanguageModelManager.php | 1 + .../LanguageModel/ILanguageModelTask.php | 41 +++++++++++++++++++ 6 files changed, 94 insertions(+), 3 deletions(-) diff --git a/lib/public/LanguageModel/AbstractLanguageModelTask.php b/lib/public/LanguageModel/AbstractLanguageModelTask.php index ff54277c840..05503f4d95c 100644 --- a/lib/public/LanguageModel/AbstractLanguageModelTask.php +++ b/lib/public/LanguageModel/AbstractLanguageModelTask.php @@ -4,11 +4,20 @@ namespace OCP\LanguageModel; use OC\LanguageModel\Db\Task; +/** + * @since 28.0.0 + */ abstract class AbstractLanguageModelTask implements ILanguageModelTask { protected ?int $id; protected ?string $output; protected int $status = ILanguageModelTask::STATUS_UNKNOWN; + /** + * @param string $input + * @param string $appId + * @param string|null $userId + * @since 28.0.0 + */ final public function __construct( protected string $input, protected string $appId, @@ -20,15 +29,26 @@ abstract class AbstractLanguageModelTask implements ILanguageModelTask { * @param ILanguageModelProvider $provider * @return string * @throws \RuntimeException + * @since 28.0.0 */ abstract public function visitProvider(ILanguageModelProvider $provider): string; + /** + * @param ILanguageModelProvider $provider + * @return bool + * @since 28.0.0 + */ abstract public function canUseProvider(ILanguageModelProvider $provider): bool; + /** + * @return string + * @since 28.0.0 + */ abstract public function getType(): string; /** * @return string|null + * @since 28.0.0 */ final public function getOutput(): ?string { return $this->output; @@ -36,6 +56,7 @@ abstract class AbstractLanguageModelTask implements ILanguageModelTask { /** * @param string|null $output + * @since 28.0.0 */ final public function setOutput(?string $output): void { $this->output = $output; @@ -43,6 +64,7 @@ abstract class AbstractLanguageModelTask implements ILanguageModelTask { /** * @return int + * @since 28.0.0 */ final public function getStatus(): int { return $this->status; @@ -50,6 +72,7 @@ abstract class AbstractLanguageModelTask implements ILanguageModelTask { /** * @param int $status + * @since 28.0.0 */ final public function setStatus(int $status): void { $this->status = $status; @@ -57,6 +80,7 @@ abstract class AbstractLanguageModelTask implements ILanguageModelTask { /** * @return int|null + * @since 28.0.0 */ final public function getId(): ?int { return $this->id; @@ -64,6 +88,7 @@ abstract class AbstractLanguageModelTask implements ILanguageModelTask { /** * @param int|null $id + * @since 28.0.0 */ final public function setId(?int $id): void { $this->id = $id; @@ -71,6 +96,7 @@ abstract class AbstractLanguageModelTask implements ILanguageModelTask { /** * @return string + * @since 28.0.0 */ final public function getInput(): string { return $this->input; @@ -78,6 +104,7 @@ abstract class AbstractLanguageModelTask implements ILanguageModelTask { /** * @return string + * @since 28.0.0 */ final public function getAppId(): string { return $this->appId; @@ -85,11 +112,16 @@ abstract class AbstractLanguageModelTask implements ILanguageModelTask { /** * @return string|null + * @since 28.0.0 */ final public function getUserId(): ?string { return $this->userId; } + /** + * @return array + * @since 28.0.0 + */ public function jsonSerialize() { return [ 'id' => $this->getId(), @@ -103,6 +135,11 @@ abstract class AbstractLanguageModelTask implements ILanguageModelTask { } + /** + * @param Task $taskEntity + * @return ILanguageModelTask + * @since 28.0.0 + */ final public static function fromTaskEntity(Task $taskEntity): ILanguageModelTask { $task = self::factory($taskEntity->getType(), $taskEntity->getInput(), $taskEntity->getuserId(), $taskEntity->getAppId()); $task->setId($taskEntity->getId()); @@ -117,6 +154,7 @@ abstract class AbstractLanguageModelTask implements ILanguageModelTask { * @param string $appId * @return ILanguageModelTask * @throws \InvalidArgumentException + * @since 28.0.0 */ final public static function factory(string $type, string $input, ?string $userId, string $appId): ILanguageModelTask { if (!in_array($type, self::TYPES)) { diff --git a/lib/public/LanguageModel/Events/TaskFailedEvent.php b/lib/public/LanguageModel/Events/TaskFailedEvent.php index 11e7fdfa23d..5425368d57d 100644 --- a/lib/public/LanguageModel/Events/TaskFailedEvent.php +++ b/lib/public/LanguageModel/Events/TaskFailedEvent.php @@ -15,6 +15,7 @@ class TaskFailedEvent extends AbstractLanguageModelEvent { /** * @return string + * @since 28.0.0 */ public function getErrorMessage(): string { return $this->errorMessage; diff --git a/lib/public/LanguageModel/FreePromptTask.php b/lib/public/LanguageModel/FreePromptTask.php index a179048631c..c577d9c653b 100644 --- a/lib/public/LanguageModel/FreePromptTask.php +++ b/lib/public/LanguageModel/FreePromptTask.php @@ -4,13 +4,17 @@ namespace OCP\LanguageModel; use RuntimeException; +/** + * @since 28.0.0 + */ final class FreePromptTask extends AbstractLanguageModelTask { + /** + * @since 28.0.0 + */ public const TYPE = 'free_prompt'; /** - * @param ILanguageModelProvider $provider - * @throws RuntimeException - * @return string + * @inheritDoc */ public function visitProvider(ILanguageModelProvider $provider): string { return $provider->prompt($this->getInput()); diff --git a/lib/public/LanguageModel/HeadlineTask.php b/lib/public/LanguageModel/HeadlineTask.php index 003488b6841..283af6657e8 100644 --- a/lib/public/LanguageModel/HeadlineTask.php +++ b/lib/public/LanguageModel/HeadlineTask.php @@ -4,7 +4,13 @@ namespace OCP\LanguageModel; use RuntimeException; +/** + * @since 28.0.0 + */ final class HeadlineTask extends AbstractLanguageModelTask { + /** + * @since 28.0.0 + */ public const TYPE = 'headline'; /** diff --git a/lib/public/LanguageModel/ILanguageModelManager.php b/lib/public/LanguageModel/ILanguageModelManager.php index f7864a68a8e..5e3f350df66 100644 --- a/lib/public/LanguageModel/ILanguageModelManager.php +++ b/lib/public/LanguageModel/ILanguageModelManager.php @@ -68,6 +68,7 @@ interface ILanguageModelManager { * @return ILanguageModelTask * @throws RuntimeException If the query failed * @throws \ValueError If the task could not be found + * @since 28.0.0 */ public function getTask(int $id): ILanguageModelTask; } diff --git a/lib/public/LanguageModel/ILanguageModelTask.php b/lib/public/LanguageModel/ILanguageModelTask.php index 816dcf7dc1c..d0d7f825ffb 100644 --- a/lib/public/LanguageModel/ILanguageModelTask.php +++ b/lib/public/LanguageModel/ILanguageModelTask.php @@ -2,13 +2,34 @@ namespace OCP\LanguageModel; +/** + * @since 28.0.0 + */ interface ILanguageModelTask extends \JsonSerializable { + /** + * @since 28.0.0 + */ public const STATUS_FAILED = 4; + /** + * @since 28.0.0 + */ public const STATUS_SUCCESSFUL = 3; + /** + * @since 28.0.0 + */ public const STATUS_RUNNING = 2; + /** + * @since 28.0.0 + */ public const STATUS_SCHEDULED = 1; + /** + * @since 28.0.0 + */ public const STATUS_UNKNOWN = 0; + /** + * @since 28.0.0 + */ public const TYPES = [ FreePromptTask::TYPE => FreePromptTask::class, SummaryTask::TYPE => SummaryTask::class, @@ -16,58 +37,78 @@ interface ILanguageModelTask extends \JsonSerializable { TopicsTask::TYPE => TopicsTask::class, ]; + /** + * @param ILanguageModelProvider $provider + * @return string + * @since 28.0.0 + */ public function visitProvider(ILanguageModelProvider $provider): string; + /** + * @param ILanguageModelProvider $provider + * @return bool + * @since 28.0.0 + */ public function canUseProvider(ILanguageModelProvider $provider): bool; /** * @return string + * @since 28.0.0 */ public function getType(): string; /** * @return int + * @since 28.0.0 */ public function getStatus(): int; /** * @param int $status + * @since 28.0.0 */ public function setStatus(int $status): void; /** * @param int|null $id + * @since 28.0.0 */ public function setId(?int $id): void; /** * @return int|null + * @since 28.0.0 */ public function getId(): ?int; /** * @return string + * @since 28.0.0 */ public function getInput(): string; /** * @param string|null $output + * @since 28.0.0 */ public function setOutput(?string $output): void; /** * @return null|string + * @since 28.0.0 */ public function getOutput(): ?string; /** * @return string + * @since 28.0.0 */ public function getAppId(): string; /** * @return string|null + * @since 28.0.0 */ public function getUserId(): ?string; }