mirror of
https://github.com/nextcloud/server.git
synced 2026-06-10 17:23:59 -04:00
LLM OCP API: Type shenanigans for Visitor pattern
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
(cherry picked from commit 906e9b7014)
This commit is contained in:
parent
4405027471
commit
c8bbe8fc75
7 changed files with 30 additions and 34 deletions
|
|
@ -5,7 +5,11 @@ namespace OCP\LanguageModel;
|
|||
use OC\LanguageModel\Db\Task;
|
||||
|
||||
/**
|
||||
* @since 28.0.0
|
||||
* This is an abstract LanguageModel task that implements basic
|
||||
* goodies for downstream tasks
|
||||
* @since 28.0.
|
||||
* @template T of ILanguageModelProvider
|
||||
* @template-implements ILanguageModelTask<T>
|
||||
*/
|
||||
abstract class AbstractLanguageModelTask implements ILanguageModelTask {
|
||||
protected ?int $id;
|
||||
|
|
@ -25,21 +29,6 @@ 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
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ namespace OCP\LanguageModel;
|
|||
|
||||
/**
|
||||
* @since 28.0.0
|
||||
* @template-extends AbstractLanguageModelTask<ILanguageModelProvider>
|
||||
*/
|
||||
final class FreePromptTask extends AbstractLanguageModelTask {
|
||||
/**
|
||||
|
|
@ -15,7 +16,7 @@ final class FreePromptTask extends AbstractLanguageModelTask {
|
|||
* @inheritDoc
|
||||
* @since 28.0.0
|
||||
*/
|
||||
public function visitProvider(ILanguageModelProvider $provider): string {
|
||||
public function visitProvider($provider): string {
|
||||
return $provider->prompt($this->getInput());
|
||||
}
|
||||
|
||||
|
|
@ -23,7 +24,7 @@ final class FreePromptTask extends AbstractLanguageModelTask {
|
|||
* @inheritDoc
|
||||
* @since 28.0.0
|
||||
*/
|
||||
public function canUseProvider(ILanguageModelProvider $provider): bool {
|
||||
public function canUseProvider($provider): bool {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ namespace OCP\LanguageModel;
|
|||
* This LanguageModel Task represents headline generation
|
||||
* which generates a headline for the passed text
|
||||
* @since 28.0.0
|
||||
* @template-extends AbstractLanguageModelTask<IHeadlineProvider>
|
||||
*/
|
||||
final class HeadlineTask extends AbstractLanguageModelTask {
|
||||
/**
|
||||
|
|
@ -17,9 +18,9 @@ final class HeadlineTask extends AbstractLanguageModelTask {
|
|||
* @inheritDoc
|
||||
* @since 28.0.0
|
||||
*/
|
||||
public function visitProvider(ILanguageModelProvider $provider): string {
|
||||
if (!$provider instanceof IHeadlineProvider) {
|
||||
throw new \RuntimeException('SummaryTask#visitProvider expects IHeadlineProvider');
|
||||
public function visitProvider($provider): string {
|
||||
if (!$this->canUseProvider($provider)) {
|
||||
throw new \RuntimeException('HeadlineTask#visitProvider expects IHeadlineProvider');
|
||||
}
|
||||
return $provider->findHeadline($this->getInput());
|
||||
}
|
||||
|
|
@ -28,7 +29,7 @@ final class HeadlineTask extends AbstractLanguageModelTask {
|
|||
* @inheritDoc
|
||||
* @since 28.0.0
|
||||
*/
|
||||
public function canUseProvider(ILanguageModelProvider $provider): bool {
|
||||
public function canUseProvider($provider): bool {
|
||||
return $provider instanceof IHeadlineProvider;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@ namespace OCP\LanguageModel;
|
|||
use RuntimeException;
|
||||
|
||||
/**
|
||||
* This is the minimum interface is implemented by apps that
|
||||
* implement a LanguageModel provider
|
||||
* @since 28.0.0
|
||||
*/
|
||||
interface ILanguageModelProvider {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ namespace OCP\LanguageModel;
|
|||
|
||||
/**
|
||||
* @since 28.0.0
|
||||
* @template T of ILanguageModelProvider
|
||||
*/
|
||||
interface ILanguageModelTask extends \JsonSerializable {
|
||||
/**
|
||||
|
|
@ -38,18 +39,18 @@ interface ILanguageModelTask extends \JsonSerializable {
|
|||
];
|
||||
|
||||
/**
|
||||
* @param ILanguageModelProvider $provider
|
||||
* @param T $provider
|
||||
* @return string
|
||||
* @since 28.0.0
|
||||
*/
|
||||
public function visitProvider(ILanguageModelProvider $provider): string;
|
||||
public function visitProvider($provider): string;
|
||||
|
||||
/**
|
||||
* @param ILanguageModelProvider $provider
|
||||
* @param T $provider
|
||||
* @return bool
|
||||
* @since 28.0.0
|
||||
*/
|
||||
public function canUseProvider(ILanguageModelProvider $provider): bool;
|
||||
public function canUseProvider($provider): bool;
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -3,9 +3,10 @@
|
|||
namespace OCP\LanguageModel;
|
||||
|
||||
/**
|
||||
* This LanguageModel Task represents summarization
|
||||
* This is an absctract LanguageModel Task represents summarization
|
||||
* which sums up the passed text.
|
||||
* @since 28.0.0
|
||||
* @template-extends AbstractLanguageModelTask<ISummaryProvider>
|
||||
*/
|
||||
final class SummaryTask extends AbstractLanguageModelTask {
|
||||
/**
|
||||
|
|
@ -17,8 +18,8 @@ final class SummaryTask extends AbstractLanguageModelTask {
|
|||
* @inheritDoc
|
||||
* @since 28.0.0
|
||||
*/
|
||||
public function visitProvider(ILanguageModelProvider $provider): string {
|
||||
if (!$provider instanceof ISummaryProvider) {
|
||||
public function visitProvider($provider): string {
|
||||
if (!$this->canUseProvider($provider)) {
|
||||
throw new \RuntimeException('SummaryTask#visitProvider expects ISummaryProvider');
|
||||
}
|
||||
return $provider->summarize($this->getInput());
|
||||
|
|
@ -28,7 +29,7 @@ final class SummaryTask extends AbstractLanguageModelTask {
|
|||
* @inheritDoc
|
||||
* @since 28.0.0
|
||||
*/
|
||||
public function canUseProvider(ILanguageModelProvider $provider): bool {
|
||||
public function canUseProvider($provider): bool {
|
||||
return $provider instanceof ISummaryProvider;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ namespace OCP\LanguageModel;
|
|||
* This LanguageModel Task represents topics synthesis
|
||||
* which outputs comma-separated topics for the passed text
|
||||
* @since 28.0.0
|
||||
* @template-extends AbstractLanguageModelTask<ITopicsProvider>
|
||||
*/
|
||||
final class TopicsTask extends AbstractLanguageModelTask {
|
||||
/**
|
||||
|
|
@ -17,9 +18,9 @@ final class TopicsTask extends AbstractLanguageModelTask {
|
|||
* @inheritDoc
|
||||
* @since 28.0.0
|
||||
*/
|
||||
public function visitProvider(ILanguageModelProvider $provider): string {
|
||||
if (!$provider instanceof ITopicsProvider) {
|
||||
throw new \RuntimeException('SummaryTask#visitProvider expects IHeadlineProvider');
|
||||
public function visitProvider($provider): string {
|
||||
if (!$this->canUseProvider($provider)) {
|
||||
throw new \RuntimeException('TopicsTask#visitProvider expects ITopicsProvider');
|
||||
}
|
||||
return $provider->findTopics($this->getInput());
|
||||
}
|
||||
|
|
@ -28,7 +29,7 @@ final class TopicsTask extends AbstractLanguageModelTask {
|
|||
* @inheritDoc
|
||||
* @since 28.0.0
|
||||
*/
|
||||
public function canUseProvider(ILanguageModelProvider $provider): bool {
|
||||
public function canUseProvider($provider): bool {
|
||||
return $provider instanceof ITopicsProvider;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue