Skip to content

Commit f064e67

Browse files
authored
feat: Enhancement: Add MessageBagInterface (#166)
1 parent 8c6ac09 commit f064e67

11 files changed

+51
-24
lines changed

src/Bridge/Anthropic/ModelHandler.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace PhpLlm\LlmChain\Bridge\Anthropic;
66

77
use PhpLlm\LlmChain\Exception\RuntimeException;
8-
use PhpLlm\LlmChain\Model\Message\MessageBag;
8+
use PhpLlm\LlmChain\Model\Message\MessageBagInterface;
99
use PhpLlm\LlmChain\Model\Model;
1010
use PhpLlm\LlmChain\Model\Response\ResponseInterface as LlmResponse;
1111
use PhpLlm\LlmChain\Model\Response\StreamResponse;
@@ -33,12 +33,12 @@ public function __construct(
3333

3434
public function supports(Model $model, array|string|object $input): bool
3535
{
36-
return $model instanceof Claude && $input instanceof MessageBag;
36+
return $model instanceof Claude && $input instanceof MessageBagInterface;
3737
}
3838

3939
public function request(Model $model, object|array|string $input, array $options = []): ResponseInterface
4040
{
41-
Assert::isInstanceOf($input, MessageBag::class);
41+
Assert::isInstanceOf($input, MessageBagInterface::class);
4242

4343
$system = $input->getSystemMessage();
4444
$body = array_merge($options, [

src/Bridge/Meta/LlamaPromptConverter.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
use PhpLlm\LlmChain\Model\Message\AssistantMessage;
99
use PhpLlm\LlmChain\Model\Message\Content\Image;
1010
use PhpLlm\LlmChain\Model\Message\Content\Text;
11-
use PhpLlm\LlmChain\Model\Message\MessageBag;
11+
use PhpLlm\LlmChain\Model\Message\MessageBagInterface;
1212
use PhpLlm\LlmChain\Model\Message\SystemMessage;
1313
use PhpLlm\LlmChain\Model\Message\UserMessage;
1414

1515
final class LlamaPromptConverter
1616
{
17-
public function convertToPrompt(MessageBag $messageBag): string
17+
public function convertToPrompt(MessageBagInterface $messageBag): string
1818
{
1919
$messages = [];
2020

src/Bridge/Ollama/LlamaModelHandler.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
use PhpLlm\LlmChain\Bridge\Meta\Llama;
88
use PhpLlm\LlmChain\Exception\RuntimeException;
9-
use PhpLlm\LlmChain\Model\Message\MessageBag;
9+
use PhpLlm\LlmChain\Model\Message\MessageBagInterface;
1010
use PhpLlm\LlmChain\Model\Model;
1111
use PhpLlm\LlmChain\Model\Response\ResponseInterface as LlmResponse;
1212
use PhpLlm\LlmChain\Model\Response\TextResponse;
@@ -25,7 +25,7 @@ public function __construct(
2525

2626
public function supports(Model $model, object|array|string $input): bool
2727
{
28-
return $model instanceof Llama && $input instanceof MessageBag;
28+
return $model instanceof Llama && $input instanceof MessageBagInterface;
2929
}
3030

3131
public function request(Model $model, object|array|string $input, array $options = []): ResponseInterface

src/Bridge/Replicate/LlamaModelClient.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
use PhpLlm\LlmChain\Bridge\Meta\Llama;
88
use PhpLlm\LlmChain\Bridge\Meta\LlamaPromptConverter;
9-
use PhpLlm\LlmChain\Model\Message\MessageBag;
9+
use PhpLlm\LlmChain\Model\Message\MessageBagInterface;
1010
use PhpLlm\LlmChain\Model\Message\SystemMessage;
1111
use PhpLlm\LlmChain\Model\Model;
1212
use PhpLlm\LlmChain\Platform\ModelClient;
@@ -23,13 +23,13 @@ public function __construct(
2323

2424
public function supports(Model $model, object|array|string $input): bool
2525
{
26-
return $model instanceof Llama && $input instanceof MessageBag;
26+
return $model instanceof Llama && $input instanceof MessageBagInterface;
2727
}
2828

2929
public function request(Model $model, object|array|string $input, array $options = []): ResponseInterface
3030
{
3131
Assert::isInstanceOf($model, Llama::class);
32-
Assert::isInstanceOf($input, MessageBag::class);
32+
Assert::isInstanceOf($input, MessageBagInterface::class);
3333

3434
return $this->client->request(sprintf('meta/meta-%s', $model->getVersion()), 'predictions', [
3535
'system' => $this->promptConverter->convertMessage($input->getSystemMessage() ?? new SystemMessage('')),

src/Bridge/Replicate/LlamaResponseConverter.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
use PhpLlm\LlmChain\Bridge\Meta\Llama;
88
use PhpLlm\LlmChain\Exception\RuntimeException;
9-
use PhpLlm\LlmChain\Model\Message\MessageBag;
9+
use PhpLlm\LlmChain\Model\Message\MessageBagInterface;
1010
use PhpLlm\LlmChain\Model\Model;
1111
use PhpLlm\LlmChain\Model\Response\ResponseInterface as LlmResponse;
1212
use PhpLlm\LlmChain\Model\Response\TextResponse;
@@ -17,7 +17,7 @@
1717
{
1818
public function supports(Model $model, object|array|string $input): bool
1919
{
20-
return $model instanceof Llama && $input instanceof MessageBag;
20+
return $model instanceof Llama && $input instanceof MessageBagInterface;
2121
}
2222

2323
public function convert(HttpResponse $response, array $options = []): LlmResponse

src/Chain.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
use PhpLlm\LlmChain\Exception\InvalidArgumentException;
1313
use PhpLlm\LlmChain\Exception\MissingModelSupport;
1414
use PhpLlm\LlmChain\Model\LanguageModel;
15-
use PhpLlm\LlmChain\Model\Message\MessageBag;
15+
use PhpLlm\LlmChain\Model\Message\MessageBagInterface;
1616
use PhpLlm\LlmChain\Model\Response\AsyncResponse;
1717
use PhpLlm\LlmChain\Model\Response\ResponseInterface;
1818

@@ -45,7 +45,7 @@ public function __construct(
4545
/**
4646
* @param array<string, mixed> $options
4747
*/
48-
public function call(MessageBag $messages, array $options = []): ResponseInterface
48+
public function call(MessageBagInterface $messages, array $options = []): ResponseInterface
4949
{
5050
$llm = $this->llm;
5151

src/Chain/Input.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace PhpLlm\LlmChain\Chain;
66

77
use PhpLlm\LlmChain\Model\LanguageModel;
8-
use PhpLlm\LlmChain\Model\Message\MessageBag;
8+
use PhpLlm\LlmChain\Model\Message\MessageBagInterface;
99

1010
final class Input
1111
{
@@ -14,7 +14,7 @@ final class Input
1414
*/
1515
public function __construct(
1616
public readonly LanguageModel $llm,
17-
public readonly MessageBag $messages,
17+
public readonly MessageBagInterface $messages,
1818
private array $options,
1919
) {
2020
}

src/Chain/Output.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace PhpLlm\LlmChain\Chain;
66

77
use PhpLlm\LlmChain\Model\LanguageModel;
8-
use PhpLlm\LlmChain\Model\Message\MessageBag;
8+
use PhpLlm\LlmChain\Model\Message\MessageBagInterface;
99
use PhpLlm\LlmChain\Model\Response\ResponseInterface;
1010

1111
final class Output
@@ -16,7 +16,7 @@ final class Output
1616
public function __construct(
1717
public readonly LanguageModel $llm,
1818
public ResponseInterface $response,
19-
public readonly MessageBag $messages,
19+
public readonly MessageBagInterface $messages,
2020
public readonly array $options,
2121
) {
2222
}

src/ChainInterface.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44

55
namespace PhpLlm\LlmChain;
66

7-
use PhpLlm\LlmChain\Model\Message\MessageBag;
7+
use PhpLlm\LlmChain\Model\Message\MessageBagInterface;
88
use PhpLlm\LlmChain\Model\Response\ResponseInterface;
99

1010
interface ChainInterface
1111
{
1212
/**
1313
* @param array<string, mixed> $options
1414
*/
15-
public function call(MessageBag $messages, array $options = []): ResponseInterface;
15+
public function call(MessageBagInterface $messages, array $options = []): ResponseInterface;
1616
}

src/Model/Message/MessageBag.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
namespace PhpLlm\LlmChain\Model\Message;
66

7-
final class MessageBag implements \Countable, \JsonSerializable
7+
final class MessageBag implements MessageBagInterface
88
{
99
/**
10-
* @var MessageInterface[]
10+
* @var list<MessageInterface>
1111
*/
1212
private array $messages;
1313

@@ -22,7 +22,7 @@ public function add(MessageInterface $message): void
2222
}
2323

2424
/**
25-
* @return MessageInterface[]
25+
* @return list<MessageInterface>
2626
*/
2727
public function getMessages(): array
2828
{
@@ -48,7 +48,7 @@ public function with(MessageInterface $message): self
4848
return $messages;
4949
}
5050

51-
public function merge(MessageBag $messageBag): self
51+
public function merge(MessageBagInterface $messageBag): self
5252
{
5353
$messages = clone $this;
5454
$messages->messages = array_merge($messages->messages, $messageBag->getMessages());
+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpLlm\LlmChain\Model\Message;
6+
7+
interface MessageBagInterface extends \JsonSerializable, \Countable
8+
{
9+
public function add(MessageInterface $message): void;
10+
11+
/**
12+
* @return list<MessageInterface>
13+
*/
14+
public function getMessages(): array;
15+
16+
public function getSystemMessage(): ?SystemMessage;
17+
18+
public function with(MessageInterface $message): self;
19+
20+
public function merge(MessageBagInterface $messageBag): self;
21+
22+
public function withoutSystemMessage(): self;
23+
24+
public function prepend(MessageInterface $message): self;
25+
26+
public function containsImage(): bool;
27+
}

0 commit comments

Comments
 (0)