Skip to content

Commit 9ec5514

Browse files
committed
fix adding images
1 parent 1144657 commit 9ec5514

File tree

4 files changed

+33
-5
lines changed

4 files changed

+33
-5
lines changed

src/Messages.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,10 @@ public function addUserImageMessage(string $url, ?string $text = null): self
5252
$message[] = $textMessage;
5353
}
5454

55-
$this->messages[] = $message;
55+
$this->messages[] = [
56+
'role' => self::ROLE_USER,
57+
'content' => $message,
58+
];
5659

5760
return $this;
5861
}
@@ -82,12 +85,12 @@ public function addMessage(string $role, string|array $content): self
8285
if ($block['type'] == 'text' && !array_key_exists('text', $block)) {
8386
throw new \InvalidArgumentException('Block text property is required for text type. Index: ' . $i);
8487
}
85-
if ($block['type'] == 'image' && (!array_key_exists('media_type', $block) || !array_key_exists(
88+
if ($block['type'] == 'image' && (!array_key_exists('source', $block) || !array_key_exists(
8689
'data',
87-
$block
88-
))) {
90+
$block['source']
91+
) || !array_key_exists('media_type', $block['source']))) {
8992
throw new \InvalidArgumentException(
90-
'Block media type and data property are required for image type. Index: ' . $i
93+
'source.media_type and source.data properties are required for image type. Index: ' . $i
9194
);
9295
}
9396
}

tests/AnthropicAPIClientTest.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,17 @@ public function test_messages()
4545
$this->assertArrayNotHasKey('error', $response);
4646
}
4747

48+
public function test_vision()
49+
{
50+
$messages = new Messages();
51+
$messages->addUserImageMessage('tests/stubs/hello.png');
52+
53+
$response = $this->client->messages(Client::MODEL_3_5_SONNET, $messages);
54+
55+
$this->assertArrayHasKey('content', $response);
56+
$this->assertArrayNotHasKey('error', $response);
57+
}
58+
4859
public function test_tools()
4960
{
5061
$client = new Client($this->apiKey);

tests/MessagesTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,20 @@ public function test_can_add_object_text_message()
2727
$this->assertCount(1, $messages->messages());
2828
}
2929

30+
public function test_can_add_image_message()
31+
{
32+
$messages = new Messages();
33+
$messages->addMessage(Messages::ROLE_USER, [[
34+
'type' => 'image',
35+
'source' => [
36+
'type' => 'base64',
37+
'data' => "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",
38+
'media_type' => 'image/png',
39+
],
40+
]]);
41+
$this->assertCount(1, $messages->messages());
42+
}
43+
3044
public function test_joins_continuous_messages_with_the_same_role()
3145
{
3246
$messages = new Messages();

tests/stubs/hello.png

2.94 KB
Loading

0 commit comments

Comments
 (0)