|
|
|
|
@ -34,6 +34,7 @@ use OCP\LanguageModel\ISummaryProvider; |
|
|
|
|
use OCP\LanguageModel\SummaryTask; |
|
|
|
|
use OCP\LanguageModel\TopicsTask; |
|
|
|
|
use OCP\PreConditionNotMetException; |
|
|
|
|
use PHPUnit\Framework\Constraint\IsInstanceOf; |
|
|
|
|
use Psr\Log\LoggerInterface; |
|
|
|
|
use Test\BackgroundJob\DummyJobList; |
|
|
|
|
|
|
|
|
|
@ -63,7 +64,7 @@ class TestFailingLanguageModelProvider implements ILanguageModelProvider { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class TestFullLanguageModelProvider implements ILanguageModelProvider, ISummaryProvider, IHeadlineProvider { |
|
|
|
|
class TestAdvancedLanguageModelProvider implements ILanguageModelProvider, ISummaryProvider, IHeadlineProvider { |
|
|
|
|
public function getName(): string { |
|
|
|
|
return 'TEST Full LLM Provider'; |
|
|
|
|
} |
|
|
|
|
@ -90,7 +91,7 @@ class LanguageModelManagerTest extends \Test\TestCase { |
|
|
|
|
|
|
|
|
|
$this->providers = [ |
|
|
|
|
TestVanillaLanguageModelProvider::class => new TestVanillaLanguageModelProvider(), |
|
|
|
|
TestFullLanguageModelProvider::class => new TestFullLanguageModelProvider(), |
|
|
|
|
TestAdvancedLanguageModelProvider::class => new TestAdvancedLanguageModelProvider(), |
|
|
|
|
TestFailingLanguageModelProvider::class => new TestFailingLanguageModelProvider(), |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
@ -214,24 +215,8 @@ class LanguageModelManagerTest extends \Test\TestCase { |
|
|
|
|
$this->assertNull($task2->getOutput()); |
|
|
|
|
$this->assertEquals(ILanguageModelTask::STATUS_SCHEDULED, $task2->getStatus()); |
|
|
|
|
|
|
|
|
|
/** @var IEventDispatcher $this->eventDispatcher */ |
|
|
|
|
$this->eventDispatcher = \OC::$server->get(IEventDispatcher::class); |
|
|
|
|
$successfulEventFired = false; |
|
|
|
|
$this->eventDispatcher->addListener(TaskSuccessfulEvent::class, function (TaskSuccessfulEvent $event) use (&$successfulEventFired, $task) { |
|
|
|
|
$successfulEventFired = true; |
|
|
|
|
$t = $event->getTask(); |
|
|
|
|
$this->assertEquals($task->getId(), $t->getId()); |
|
|
|
|
$this->assertEquals(ILanguageModelTask::STATUS_SUCCESSFUL, $t->getStatus()); |
|
|
|
|
$this->assertEquals('Hello Free Prompt', $t->getOutput()); |
|
|
|
|
}); |
|
|
|
|
$failedEventFired = false; |
|
|
|
|
$this->eventDispatcher->addListener(TaskFailedEvent::class, function (TaskFailedEvent $event) use (&$failedEventFired, $task) { |
|
|
|
|
$failedEventFired = true; |
|
|
|
|
$t = $event->getTask(); |
|
|
|
|
$this->assertEquals($task->getId(), $t->getId()); |
|
|
|
|
$this->assertEquals(ILanguageModelTask::STATUS_FAILED, $t->getStatus()); |
|
|
|
|
$this->assertEquals('ERROR', $event->getErrorMessage()); |
|
|
|
|
}); |
|
|
|
|
$this->eventDispatcher = $this->createMock(IEventDispatcher::class); |
|
|
|
|
$this->eventDispatcher->expects($this->once())->method('dispatchTyped')->with(new IsInstanceOf(TaskSuccessfulEvent::class)); |
|
|
|
|
|
|
|
|
|
// run background job |
|
|
|
|
$bgJob = new TaskBackgroundJob( |
|
|
|
|
@ -243,8 +228,6 @@ class LanguageModelManagerTest extends \Test\TestCase { |
|
|
|
|
$bgJob->start($this->jobList); |
|
|
|
|
$provider = $this->providers[TestVanillaLanguageModelProvider::class]; |
|
|
|
|
$this->assertTrue($provider->ran); |
|
|
|
|
$this->assertTrue($successfulEventFired); |
|
|
|
|
$this->assertFalse($failedEventFired); |
|
|
|
|
|
|
|
|
|
// Task object retrieved from db is up-to-date |
|
|
|
|
$task3 = $this->languageModelManager->getTask($task->getId()); |
|
|
|
|
@ -257,7 +240,7 @@ class LanguageModelManagerTest extends \Test\TestCase { |
|
|
|
|
public function testMultipleProvidersShouldBeRegisteredAndRunCorrectly() { |
|
|
|
|
$this->registrationContext->expects($this->any())->method('getLanguageModelProviders')->willReturn([ |
|
|
|
|
new ServiceRegistration('test', TestVanillaLanguageModelProvider::class), |
|
|
|
|
new ServiceRegistration('test', TestFullLanguageModelProvider::class), |
|
|
|
|
new ServiceRegistration('test', TestAdvancedLanguageModelProvider::class), |
|
|
|
|
]); |
|
|
|
|
$this->assertCount(3, $this->languageModelManager->getAvailableTaskClasses()); |
|
|
|
|
$this->assertCount(3, $this->languageModelManager->getAvailableTaskTypes()); |
|
|
|
|
@ -312,22 +295,8 @@ class LanguageModelManagerTest extends \Test\TestCase { |
|
|
|
|
$this->assertNull($task2->getOutput()); |
|
|
|
|
$this->assertEquals(ILanguageModelTask::STATUS_SCHEDULED, $task2->getStatus()); |
|
|
|
|
|
|
|
|
|
$successfulEventFired = false; |
|
|
|
|
$this->eventDispatcher->addListener(TaskSuccessfulEvent::class, function (TaskSuccessfulEvent $event) use (&$successfulEventFired, $task) { |
|
|
|
|
$successfulEventFired = true; |
|
|
|
|
$t = $event->getTask(); |
|
|
|
|
$this->assertEquals($task->getId(), $t->getId()); |
|
|
|
|
$this->assertEquals(ILanguageModelTask::STATUS_SUCCESSFUL, $t->getStatus()); |
|
|
|
|
$this->assertEquals('Hello Free Prompt', $t->getOutput()); |
|
|
|
|
}); |
|
|
|
|
$failedEventFired = false; |
|
|
|
|
$this->eventDispatcher->addListener(TaskFailedEvent::class, function (TaskFailedEvent $event) use (&$failedEventFired, $task) { |
|
|
|
|
$failedEventFired = true; |
|
|
|
|
$t = $event->getTask(); |
|
|
|
|
$this->assertEquals($task->getId(), $t->getId()); |
|
|
|
|
$this->assertEquals(ILanguageModelTask::STATUS_FAILED, $t->getStatus()); |
|
|
|
|
$this->assertEquals('ERROR', $event->getErrorMessage()); |
|
|
|
|
}); |
|
|
|
|
$this->eventDispatcher = $this->createMock(IEventDispatcher::class); |
|
|
|
|
$this->eventDispatcher->expects($this->once())->method('dispatchTyped')->with(new IsInstanceOf(TaskFailedEvent::class)); |
|
|
|
|
|
|
|
|
|
// run background job |
|
|
|
|
$bgJob = new TaskBackgroundJob( |
|
|
|
|
@ -339,8 +308,6 @@ class LanguageModelManagerTest extends \Test\TestCase { |
|
|
|
|
$bgJob->start($this->jobList); |
|
|
|
|
$provider = $this->providers[TestFailingLanguageModelProvider::class]; |
|
|
|
|
$this->assertTrue($provider->ran); |
|
|
|
|
$this->assertTrue($failedEventFired); |
|
|
|
|
$this->assertFalse($successfulEventFired); |
|
|
|
|
|
|
|
|
|
// Task object retrieved from db is up-to-date |
|
|
|
|
$task3 = $this->languageModelManager->getTask($task->getId()); |
|
|
|
|
|