Skip to content

Commit ba9cf28

Browse files
OskarStarkchr-hertel
authored andcommitted
feat: allow \Stringable for Message::ofUser() and Message:forSystem() (#340)
1 parent 2742ebb commit ba9cf28

File tree

2 files changed

+49
-6
lines changed

2 files changed

+49
-6
lines changed

src/platform/src/Message/Message.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ private function __construct()
2626
{
2727
}
2828

29-
public static function forSystem(string $content): SystemMessage
29+
public static function forSystem(\Stringable|string $content): SystemMessage
3030
{
31-
return new SystemMessage($content);
31+
return new SystemMessage($content instanceof \Stringable ? (string) $content : $content);
3232
}
3333

3434
/**
@@ -39,10 +39,10 @@ public static function ofAssistant(?string $content = null, ?array $toolCalls =
3939
return new AssistantMessage($content, $toolCalls);
4040
}
4141

42-
public static function ofUser(string|ContentInterface ...$content): UserMessage
42+
public static function ofUser(\Stringable|string|ContentInterface ...$content): UserMessage
4343
{
4444
$content = array_map(
45-
static fn (string|ContentInterface $entry) => \is_string($entry) ? new Text($entry) : $entry,
45+
static fn (\Stringable|string|ContentInterface $entry) => $entry instanceof ContentInterface ? $entry : (\is_string($entry) ? new Text($entry) : new Text((string) $entry)),
4646
$content,
4747
);
4848

src/platform/tests/Message/MessageTest.php

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use PHPUnit\Framework\Attributes\UsesClass;
1818
use PHPUnit\Framework\TestCase;
1919
use Symfony\AI\Platform\Message\AssistantMessage;
20+
use Symfony\AI\Platform\Message\Content\ContentInterface;
2021
use Symfony\AI\Platform\Message\Content\ImageUrl;
2122
use Symfony\AI\Platform\Message\Content\Text;
2223
use Symfony\AI\Platform\Message\Message;
@@ -39,13 +40,26 @@
3940
final class MessageTest extends TestCase
4041
{
4142
#[Test]
42-
public function createSystemMessage(): void
43+
public function createSystemMessageWithString(): void
4344
{
4445
$message = Message::forSystem('My amazing system prompt.');
4546

4647
self::assertSame('My amazing system prompt.', $message->content);
4748
}
4849

50+
#[Test]
51+
public function createSystemMessageWithStringable(): void
52+
{
53+
$message = Message::forSystem(new class implements \Stringable {
54+
public function __toString(): string
55+
{
56+
return 'My amazing system prompt.';
57+
}
58+
});
59+
60+
self::assertSame('My amazing system prompt.', $message->content);
61+
}
62+
4963
#[Test]
5064
public function createAssistantMessage(): void
5165
{
@@ -68,7 +82,7 @@ public function createAssistantMessageWithToolCalls(): void
6882
}
6983

7084
#[Test]
71-
public function createUserMessage(): void
85+
public function createUserMessageWithString(): void
7286
{
7387
$message = Message::ofUser('Hi, my name is John.');
7488

@@ -77,6 +91,35 @@ public function createUserMessage(): void
7791
self::assertSame('Hi, my name is John.', $message->content[0]->text);
7892
}
7993

94+
#[Test]
95+
public function createUserMessageWithStringable(): void
96+
{
97+
$message = Message::ofUser(new class implements \Stringable {
98+
public function __toString(): string
99+
{
100+
return 'Hi, my name is John.';
101+
}
102+
});
103+
104+
self::assertCount(1, $message->content);
105+
self::assertInstanceOf(Text::class, $message->content[0]);
106+
self::assertSame('Hi, my name is John.', $message->content[0]->text);
107+
}
108+
109+
#[Test]
110+
public function createUserMessageContentInterfaceImplementingStringable(): void
111+
{
112+
$message = Message::ofUser(new class implements ContentInterface, \Stringable {
113+
public function __toString(): string
114+
{
115+
return 'I am a ContentInterface!';
116+
}
117+
});
118+
119+
self::assertCount(1, $message->content);
120+
self::assertInstanceOf(ContentInterface::class, $message->content[0]);
121+
}
122+
80123
#[Test]
81124
public function createUserMessageWithTextContent(): void
82125
{

0 commit comments

Comments
 (0)