From b3d4ac3faa94086369a02b0a47a19db9441b274e Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Fri, 19 Jul 2024 21:31:49 -0500 Subject: [PATCH] fix: add end to end test for vision --- .../AnthropicClient.Tests.csproj | 6 +++ .../EndToEnd/AnthropicApiClientTests.cs | 37 ++++++++++++++++++ .../AnthropicClient.Tests/Files/elephant.jpg | Bin 0 -> 32723 bytes 3 files changed, 43 insertions(+) create mode 100644 tests/AnthropicClient.Tests/Files/elephant.jpg diff --git a/tests/AnthropicClient.Tests/AnthropicClient.Tests.csproj b/tests/AnthropicClient.Tests/AnthropicClient.Tests.csproj index 0370ec0..c5ad00c 100644 --- a/tests/AnthropicClient.Tests/AnthropicClient.Tests.csproj +++ b/tests/AnthropicClient.Tests/AnthropicClient.Tests.csproj @@ -54,5 +54,11 @@ PreserveNewest + + + + PreserveNewest + + diff --git a/tests/AnthropicClient.Tests/EndToEnd/AnthropicApiClientTests.cs b/tests/AnthropicClient.Tests/EndToEnd/AnthropicApiClientTests.cs index 03b6775..0a62504 100644 --- a/tests/AnthropicClient.Tests/EndToEnd/AnthropicApiClientTests.cs +++ b/tests/AnthropicClient.Tests/EndToEnd/AnthropicApiClientTests.cs @@ -56,4 +56,41 @@ public class ClientTests(ConfigurationFixture configFixture) : EndToEndTest(conf } } } + + [Fact] + public async Task CreateMessageAsync_WhenImageIsSent_ItShouldReturnResponse() + { + var imagePath = Path.Combine(Directory.GetCurrentDirectory(), "Files", "elephant.jpg"); + var mediaType = "image/jpeg"; + var imageBytes = await File.ReadAllBytesAsync(imagePath); + var base64Image = Convert.ToBase64String(imageBytes); + + var request = new MessageRequest( + model: AnthropicModels.Claude3Haiku, + messages: [ + new(MessageRole.User, [ + new ImageContent(mediaType, base64Image), + new TextContent("What is in this image?") + ]), + ] + ); + + var result = await _client.CreateMessageAsync(request); + + result.IsSuccess.Should().BeTrue(); + result.Value.Should().BeOfType(); + result.Value.Content.Should().NotBeNullOrEmpty(); + + var text = result.Value.Content.Aggregate("", (acc, content) => + { + if (content is TextContent textContent) + { + acc += textContent.Text; + } + + return acc; + }); + + text.Should().Contain("elephant"); + } } \ No newline at end of file diff --git a/tests/AnthropicClient.Tests/Files/elephant.jpg b/tests/AnthropicClient.Tests/Files/elephant.jpg new file mode 100644 index 0000000000000000000000000000000000000000..edda03e8c64c3df342bc4e370e5e6439f7d53107 GIT binary patch literal 32723 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